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 if(stage == PmdEngHandler.ENGBONE_LIST){
99 this.boneIt = this.boneList.iterator();
100 if(this.boneIt.hasNext()){
101 this.currentBone = this.boneIt.next();
103 }else if(stage == PmdEngHandler.ENGMORPH_LIST){
104 this.morphPartIt = this.morphPartList.iterator();
107 assert this.morphPartIt.hasNext();
108 MorphPart part = this.morphPartIt.next();
111 if(this.morphPartIt.hasNext()){
112 this.currentMorphPart = this.morphPartIt.next();
114 }else if(stage == PmdEngHandler.ENGBONEGROUP_LIST){
115 this.boneGroupIt = this.boneGroupList.iterator();
117 // デフォルトボーングループを読み飛ばす
118 assert this.boneGroupIt.hasNext();
119 BoneGroup group = this.boneGroupIt.next();
120 assert group != null;
122 if(this.boneGroupIt.hasNext()){
123 this.currentBoneGroup = this.boneGroupIt.next();
127 throw new AssertionError();
134 * @param stage {@inheritDoc}
137 public void loopNext(ParseStage stage){
138 if(stage == PmdEngHandler.ENGBONE_LIST){
139 if(this.boneIt.hasNext()){
140 this.currentBone = this.boneIt.next();
142 }else if(stage == PmdEngHandler.ENGMORPH_LIST){
143 if(this.morphPartIt.hasNext()){
144 this.currentMorphPart = this.morphPartIt.next();
146 }else if(stage == PmdEngHandler.ENGBONEGROUP_LIST){
147 if(this.boneGroupIt.hasNext()){
148 this.currentBoneGroup = this.boneGroupIt.next();
152 throw new AssertionError();
159 * @param stage {@inheritDoc}
162 public void loopEnd(ParseStage stage){
168 * @param header {@inheritDoc}
171 public void pmdHeaderInfo(byte[] header){
177 * @param modelName {@inheritDoc}
178 * @param description {@inheritDoc}
181 public void pmdModelInfo(String modelName, String description){
182 this.modelName .setPrimaryText(modelName);
183 this.description.setPrimaryText(description);
189 * @param hasEnglishInfo {@inheritDoc}
192 public void pmdEngEnabled(boolean hasEnglishInfo){
198 * @param modelName {@inheritDoc}
199 * @param description {@inheritDoc}
202 public void pmdEngModelInfo(String modelName, String description){
203 this.modelName .setGlobalText(modelName);
204 this.description.setGlobalText(description);
210 * @param boneName {@inheritDoc}
213 public void pmdEngBoneInfo(String boneName){
214 this.currentBone.getBoneName().setGlobalText(boneName);
220 * @param morphName {@inheritDoc}
223 public void pmdEngMorphInfo(String morphName){
224 this.currentMorphPart.getMorphName().setGlobalText(morphName);
230 * @param groupName {@inheritDoc}
233 public void pmdEngBoneGroupInfo(String groupName){
234 this.currentBoneGroup.getGroupName().setGlobalText(groupName);
240 * @return 読み残したデータがあればtrue
242 public boolean hasMoreData(){
243 return this.hasMoreData;