4 * License : The MIT License
5 * Copyright(c) 2010 MikuToga Partners
8 package jp.sfjp.mikutoga.pmd.model.binio;
10 import java.util.Iterator;
11 import java.util.List;
12 import jp.sfjp.mikutoga.bin.parser.ParseStage;
13 import jp.sfjp.mikutoga.corelib.I18nText;
14 import jp.sfjp.mikutoga.pmd.model.BoneGroup;
15 import jp.sfjp.mikutoga.pmd.model.BoneInfo;
16 import jp.sfjp.mikutoga.pmd.model.MorphPart;
17 import jp.sfjp.mikutoga.pmd.model.PmdModel;
18 import jp.sfjp.mikutoga.pmd.parser.PmdBasicHandler;
19 import jp.sfjp.mikutoga.pmd.parser.PmdEngHandler;
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 if(this.morphPartList.isEmpty()){
108 this.morphPartIt = this.morphPartList.iterator();
111 MorphPart part = this.morphPartIt.next();
114 if(this.morphPartIt.hasNext()){
115 this.currentMorphPart = this.morphPartIt.next();
117 }else if(stage == PmdEngHandler.ENGBONEGROUP_LIST){
118 this.boneGroupIt = this.boneGroupList.iterator();
120 // デフォルトボーングループを読み飛ばす
121 assert this.boneGroupIt.hasNext();
122 BoneGroup group = this.boneGroupIt.next();
123 assert group != null;
125 if(this.boneGroupIt.hasNext()){
126 this.currentBoneGroup = this.boneGroupIt.next();
130 throw new AssertionError();
137 * @param stage {@inheritDoc}
140 public void loopNext(ParseStage stage){
141 if(stage == PmdEngHandler.ENGBONE_LIST){
142 if(this.boneIt.hasNext()){
143 this.currentBone = this.boneIt.next();
145 }else if(stage == PmdEngHandler.ENGMORPH_LIST){
146 if(this.morphPartIt.hasNext()){
147 this.currentMorphPart = this.morphPartIt.next();
149 }else if(stage == PmdEngHandler.ENGBONEGROUP_LIST){
150 if(this.boneGroupIt.hasNext()){
151 this.currentBoneGroup = this.boneGroupIt.next();
155 throw new AssertionError();
162 * @param stage {@inheritDoc}
165 public void loopEnd(ParseStage stage){
171 * @param header {@inheritDoc}
174 public void pmdHeaderInfo(byte[] header){
180 * @param modelName {@inheritDoc}
181 * @param description {@inheritDoc}
184 public void pmdModelInfo(String modelName, String description){
185 this.modelName .setPrimaryText(modelName);
186 this.description.setPrimaryText(description);
192 * @param hasEnglishInfo {@inheritDoc}
195 public void pmdEngEnabled(boolean hasEnglishInfo){
201 * @param modelName {@inheritDoc}
202 * @param description {@inheritDoc}
205 public void pmdEngModelInfo(String modelName, String description){
206 this.modelName .setGlobalText(modelName);
207 this.description.setGlobalText(description);
213 * @param boneName {@inheritDoc}
216 public void pmdEngBoneInfo(String boneName){
217 this.currentBone.getBoneName().setGlobalText(boneName);
223 * @param morphName {@inheritDoc}
226 public void pmdEngMorphInfo(String morphName){
227 this.currentMorphPart.getMorphName().setGlobalText(morphName);
233 * @param groupName {@inheritDoc}
236 public void pmdEngBoneGroupInfo(String groupName){
237 this.currentBoneGroup.getGroupName().setGlobalText(groupName);
243 * @return 読み残したデータがあればtrue
245 public boolean hasMoreData(){
246 return this.hasMoreData;