OSDN Git Service

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