OSDN Git Service

e37082fe9d48acfa9b364236322a8ea18e6c2397
[mikutoga/TogaGem.git] / src / main / java / jp / sourceforge / mikutoga / pmd / pmdloader / TextBuilder.java
1 /*
2  * building text info
3  *
4  * License : The MIT License
5  * Copyright(c) 2010 MikuToga Partners
6  */
7
8 package jp.sourceforge.mikutoga.pmd.pmdloader;
9
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;
20
21 /**
22  * テキスト関係の通知をパーサから受け取る。
23  */
24 class TextBuilder implements PmdBasicHandler, PmdEngHandler {
25
26     private final PmdModel model;
27
28     private final I18nText modelName;
29     private final I18nText description;
30
31     private final List<BoneInfo> boneList;
32     private Iterator<BoneInfo> boneIt;
33     private BoneInfo currentBone = null;
34
35     private List<MorphPart> morphPartList;
36     private Iterator<MorphPart> morphPartIt;
37     private MorphPart currentMorphPart = null;
38
39     private final List<BoneGroup> boneGroupList;
40     private Iterator<BoneGroup> boneGroupIt;
41     private BoneGroup currentBoneGroup = null;
42
43     private boolean hasMoreData = false;
44
45     /**
46      * コンストラクタ。
47      * @param model モデル
48      */
49     TextBuilder(PmdModel model){
50         super();
51
52         this.model = model;
53
54         this.modelName   = model.getModelName();
55         this.description = model.getDescription();
56
57         this.boneList      = model.getBoneList();
58         this.boneGroupList = model.getBoneGroupList();
59
60         return;
61     }
62
63     /**
64      * PMDファイル中の出現順で各モーフを格納するためのリストを設定する。
65      * 主な用途はモーフ和英名の突き合わせ作業。
66      * @param list モーフ格納リスト
67      */
68     void setMorphPartList(List<MorphPart> list){
69         this.morphPartList = list;
70         return;
71     }
72
73     /**
74      * {@inheritDoc}
75      */
76     @Override
77     public void pmdParseStart(){
78         return;
79     }
80
81     /**
82      * {@inheritDoc}
83      * @param hasMoreData {@inheritDoc}
84      */
85     @Override
86     public void pmdParseEnd(boolean hasMoreData){
87         this.hasMoreData = hasMoreData;
88         return;
89     }
90
91     /**
92      * {@inheritDoc}
93      * @param stage {@inheritDoc}
94      * @param loops {@inheritDoc}
95      */
96     @Override
97     public void loopStart(ParseStage stage, int loops){
98         assert stage instanceof PmdEngStage;
99
100         if(stage == PmdEngHandler.ENGBONE_LIST){
101             this.boneIt = this.boneList.iterator();
102             if(this.boneIt.hasNext()){
103                 this.currentBone = this.boneIt.next();
104             }
105         }else if(stage == PmdEngHandler.ENGMORPH_LIST){
106             this.morphPartIt = this.morphPartList.iterator();
107
108             // 「base」モーフを読み飛ばす
109             assert this.morphPartIt.hasNext();
110             MorphPart part = this.morphPartIt.next();
111             assert part != null;
112
113             if(this.morphPartIt.hasNext()){
114                 this.currentMorphPart = this.morphPartIt.next();
115             }
116         }else if(stage == PmdEngHandler.ENGBONEGROUP_LIST){
117             this.boneGroupIt = this.boneGroupList.iterator();
118
119             // デフォルトボーングループを読み飛ばす
120             assert this.boneGroupIt.hasNext();
121             BoneGroup group = this.boneGroupIt.next();
122             assert group != null;
123
124             if(this.boneGroupIt.hasNext()){
125                 this.currentBoneGroup = this.boneGroupIt.next();
126             }
127         }else{
128             assert false;
129             throw new AssertionError();
130         }
131         return;
132     }
133
134     /**
135      * {@inheritDoc}
136      * @param stage {@inheritDoc}
137      */
138     @Override
139     public void loopNext(ParseStage stage){
140         assert stage instanceof PmdEngStage;
141
142         if(stage == PmdEngHandler.ENGBONE_LIST){
143             if(this.boneIt.hasNext()){
144                 this.currentBone = this.boneIt.next();
145             }
146         }else if(stage == PmdEngHandler.ENGMORPH_LIST){
147             if(this.morphPartIt.hasNext()){
148                 this.currentMorphPart = this.morphPartIt.next();
149             }
150         }else if(stage == PmdEngHandler.ENGBONEGROUP_LIST){
151             if(this.boneGroupIt.hasNext()){
152                 this.currentBoneGroup = this.boneGroupIt.next();
153             }
154         }else{
155             assert false;
156             throw new AssertionError();
157         }
158         return;
159     }
160
161     /**
162      * {@inheritDoc}
163      * @param stage {@inheritDoc}
164      */
165     @Override
166     public void loopEnd(ParseStage stage){
167         assert stage instanceof PmdEngStage;
168         return;
169     }
170
171     /**
172      * {@inheritDoc}
173      * @param ver {@inheritDoc}
174      */
175     @Override
176     public void pmdHeaderInfo(float ver){
177         this.model.setHeaderVersion(ver);
178         return;
179     }
180
181     /**
182      * {@inheritDoc}
183      * @param modelName {@inheritDoc}
184      * @param description {@inheritDoc}
185      */
186     @Override
187     public void pmdModelInfo(String modelName, String description){
188         this.modelName  .setPrimaryText(modelName);
189         this.description.setPrimaryText(description);
190         return;
191     }
192
193     /**
194      * {@inheritDoc}
195      * @param hasEnglishInfo {@inheritDoc}
196      */
197     @Override
198     public void pmdEngEnabled(boolean hasEnglishInfo){
199         return;
200     }
201
202     /**
203      * {@inheritDoc}
204      * @param modelName {@inheritDoc}
205      * @param description {@inheritDoc}
206      */
207     @Override
208     public void pmdEngModelInfo(String modelName, String description){
209         this.modelName  .setGlobalText(modelName);
210         this.description.setGlobalText(description);
211         return;
212     }
213
214     /**
215      * {@inheritDoc}
216      * @param boneName {@inheritDoc}
217      */
218     @Override
219     public void pmdEngBoneInfo(String boneName){
220         this.currentBone.getBoneName().setGlobalText(boneName);
221         return;
222     }
223
224     /**
225      * {@inheritDoc}
226      * @param morphName {@inheritDoc}
227      */
228     @Override
229     public void pmdEngMorphInfo(String morphName){
230         this.currentMorphPart.getMorphName().setGlobalText(morphName);
231         return;
232     }
233
234     /**
235      * {@inheritDoc}
236      * @param groupName {@inheritDoc}
237      */
238     @Override
239     public void pmdEngBoneGroupInfo(String groupName){
240         this.currentBoneGroup.getGroupName().setGlobalText(groupName);
241         return;
242     }
243
244     /**
245      * 読み残したデータがあるか判定する。
246      * @return 読み残したデータがあればtrue
247      */
248     public boolean hasMoreData(){
249         return this.hasMoreData;
250     }
251
252 }