4 * License : The MIT License
5 * Copyright(c) 2010 MikuToga Partners
8 package jp.sourceforge.mikutoga.pmd.pmdloader;
10 import java.util.Iterator;
11 import java.util.List;
12 import jp.sourceforge.mikutoga.corelib.I18nText;
13 import jp.sourceforge.mikutoga.parser.ParseStage;
14 import jp.sourceforge.mikutoga.parser.pmd.PmdBasicHandler;
15 import jp.sourceforge.mikutoga.parser.pmd.PmdEngHandler;
16 import jp.sourceforge.mikutoga.pmd.BoneGroup;
17 import jp.sourceforge.mikutoga.pmd.BoneInfo;
18 import jp.sourceforge.mikutoga.pmd.MorphPart;
19 import jp.sourceforge.mikutoga.pmd.PmdModel;
22 * テキスト関係の通知をパーサから受け取る。
24 class TextBuilder implements PmdBasicHandler, PmdEngHandler {
26 private final PmdModel model;
28 private final I18nText modelName;
29 private final I18nText description;
31 private final List<BoneInfo> boneList;
32 private Iterator<BoneInfo> boneIt;
33 private BoneInfo currentBone = null;
35 private List<MorphPart> morphPartList;
36 private Iterator<MorphPart> morphPartIt;
37 private MorphPart currentMorphPart = null;
39 private final List<BoneGroup> boneGroupList;
40 private Iterator<BoneGroup> boneGroupIt;
41 private BoneGroup currentBoneGroup = null;
43 private boolean hasMoreData = false;
49 TextBuilder(PmdModel model){
54 this.modelName = model.getModelName();
55 this.description = model.getDescription();
57 this.boneList = model.getBoneList();
58 this.boneGroupList = model.getBoneGroupList();
64 * PMDファイル中の出現順で各モーフを格納するためのリストを設定する。
65 * 主な用途はモーフ和英名の突き合わせ作業。
66 * @param list モーフ格納リスト
68 void setMorphPartList(List<MorphPart> list){
69 this.morphPartList = list;
77 public void pmdParseStart(){
83 * @param hasMoreData {@inheritDoc}
86 public void pmdParseEnd(boolean hasMoreData){
87 this.hasMoreData = hasMoreData;
93 * @param stage {@inheritDoc}
94 * @param loops {@inheritDoc}
97 public void loopStart(ParseStage stage, int loops){
98 assert stage instanceof PmdEngStage;
100 if(stage == PmdEngHandler.ENGBONE_LIST){
101 this.boneIt = this.boneList.iterator();
102 if(this.boneIt.hasNext()){
103 this.currentBone = this.boneIt.next();
105 }else if(stage == PmdEngHandler.ENGMORPH_LIST){
106 this.morphPartIt = this.morphPartList.iterator();
109 assert this.morphPartIt.hasNext();
110 MorphPart part = this.morphPartIt.next();
113 if(this.morphPartIt.hasNext()){
114 this.currentMorphPart = this.morphPartIt.next();
116 }else if(stage == PmdEngHandler.ENGBONEGROUP_LIST){
117 this.boneGroupIt = this.boneGroupList.iterator();
119 // デフォルトボーングループを読み飛ばす
120 assert this.boneGroupIt.hasNext();
121 BoneGroup group = this.boneGroupIt.next();
122 assert group != null;
124 if(this.boneGroupIt.hasNext()){
125 this.currentBoneGroup = this.boneGroupIt.next();
129 throw new AssertionError();
136 * @param stage {@inheritDoc}
139 public void loopNext(ParseStage stage){
140 assert stage instanceof PmdEngStage;
142 if(stage == PmdEngHandler.ENGBONE_LIST){
143 if(this.boneIt.hasNext()){
144 this.currentBone = this.boneIt.next();
146 }else if(stage == PmdEngHandler.ENGMORPH_LIST){
147 if(this.morphPartIt.hasNext()){
148 this.currentMorphPart = this.morphPartIt.next();
150 }else if(stage == PmdEngHandler.ENGBONEGROUP_LIST){
151 if(this.boneGroupIt.hasNext()){
152 this.currentBoneGroup = this.boneGroupIt.next();
156 throw new AssertionError();
163 * @param stage {@inheritDoc}
166 public void loopEnd(ParseStage stage){
167 assert stage instanceof PmdEngStage;
173 * @param header {@inheritDoc}
176 public void pmdHeaderInfo(byte[] header){
182 * @param modelName {@inheritDoc}
183 * @param description {@inheritDoc}
186 public void pmdModelInfo(String modelName, String description){
187 this.modelName .setPrimaryText(modelName);
188 this.description.setPrimaryText(description);
194 * @param hasEnglishInfo {@inheritDoc}
197 public void pmdEngEnabled(boolean hasEnglishInfo){
203 * @param modelName {@inheritDoc}
204 * @param description {@inheritDoc}
207 public void pmdEngModelInfo(String modelName, String description){
208 this.modelName .setGlobalText(modelName);
209 this.description.setGlobalText(description);
215 * @param boneName {@inheritDoc}
218 public void pmdEngBoneInfo(String boneName){
219 this.currentBone.getBoneName().setGlobalText(boneName);
225 * @param morphName {@inheritDoc}
228 public void pmdEngMorphInfo(String morphName){
229 this.currentMorphPart.getMorphName().setGlobalText(morphName);
235 * @param groupName {@inheritDoc}
238 public void pmdEngBoneGroupInfo(String groupName){
239 this.currentBoneGroup.getGroupName().setGlobalText(groupName);
245 * @return 読み残したデータがあればtrue
247 public boolean hasMoreData(){
248 return this.hasMoreData;