OSDN Git Service

PMD出力機能及びXML入出力機能のソースをマージ
[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     public void pmdParseStart(){\r
77         return;\r
78     }\r
79 \r
80     /**\r
81      * {@inheritDoc}\r
82      * @param hasMoreData {@inheritDoc}\r
83      */\r
84     public void pmdParseEnd(boolean hasMoreData){\r
85         this.hasMoreData = hasMoreData;\r
86         return;\r
87     }\r
88 \r
89     /**\r
90      * {@inheritDoc}\r
91      * @param stage {@inheritDoc}\r
92      * @param loops {@inheritDoc}\r
93      */\r
94     public void loopStart(ParseStage stage, int loops){\r
95         assert stage instanceof PmdEngStage;\r
96 \r
97         if(stage == PmdEngHandler.ENGBONE_LIST){\r
98             this.boneIt = this.boneList.iterator();\r
99             if(this.boneIt.hasNext()){\r
100                 this.currentBone = this.boneIt.next();\r
101             }\r
102         }else if(stage == PmdEngHandler.ENGMORPH_LIST){\r
103             this.morphPartIt = this.morphPartList.iterator();\r
104 \r
105             // 「base」モーフを読み飛ばす\r
106             assert this.morphPartIt.hasNext();\r
107             MorphPart part = this.morphPartIt.next();\r
108             assert part != null;\r
109 \r
110             if(this.morphPartIt.hasNext()){\r
111                 this.currentMorphPart = this.morphPartIt.next();\r
112             }\r
113         }else if(stage == PmdEngHandler.ENGBONEGROUP_LIST){\r
114             this.boneGroupIt = this.boneGroupList.iterator();\r
115 \r
116             // デフォルトボーングループを読み飛ばす\r
117             assert this.boneGroupIt.hasNext();\r
118             BoneGroup group = this.boneGroupIt.next();\r
119             assert group != null;\r
120 \r
121             if(this.boneGroupIt.hasNext()){\r
122                 this.currentBoneGroup = this.boneGroupIt.next();\r
123             }\r
124         }else{\r
125             assert false;\r
126             throw new AssertionError();\r
127         }\r
128         return;\r
129     }\r
130 \r
131     /**\r
132      * {@inheritDoc}\r
133      * @param stage {@inheritDoc}\r
134      */\r
135     public void loopNext(ParseStage stage){\r
136         assert stage instanceof PmdEngStage;\r
137 \r
138         if(stage == PmdEngHandler.ENGBONE_LIST){\r
139             if(this.boneIt.hasNext()){\r
140                 this.currentBone = this.boneIt.next();\r
141             }\r
142         }else if(stage == PmdEngHandler.ENGMORPH_LIST){\r
143             if(this.morphPartIt.hasNext()){\r
144                 this.currentMorphPart = this.morphPartIt.next();\r
145             }\r
146         }else if(stage == PmdEngHandler.ENGBONEGROUP_LIST){\r
147             if(this.boneGroupIt.hasNext()){\r
148                 this.currentBoneGroup = this.boneGroupIt.next();\r
149             }\r
150         }else{\r
151             assert false;\r
152             throw new AssertionError();\r
153         }\r
154         return;\r
155     }\r
156 \r
157     /**\r
158      * {@inheritDoc}\r
159      * @param stage {@inheritDoc}\r
160      */\r
161     public void loopEnd(ParseStage stage){\r
162         assert stage instanceof PmdEngStage;\r
163         return;\r
164     }\r
165 \r
166     /**\r
167      * {@inheritDoc}\r
168      * @param ver {@inheritDoc}\r
169      */\r
170     public void pmdHeaderInfo(float ver){\r
171         this.model.setHeaderVersion(ver);\r
172         return;\r
173     }\r
174 \r
175     /**\r
176      * {@inheritDoc}\r
177      * @param modelName {@inheritDoc}\r
178      * @param description {@inheritDoc}\r
179      */\r
180     public void pmdModelInfo(String modelName, String description){\r
181         this.modelName  .setPrimaryText(modelName);\r
182         this.description.setPrimaryText(description);\r
183         return;\r
184     }\r
185 \r
186     /**\r
187      * {@inheritDoc}\r
188      * @param hasEnglishInfo {@inheritDoc}\r
189      */\r
190     public void pmdEngEnabled(boolean hasEnglishInfo){\r
191         return;\r
192     }\r
193 \r
194     /**\r
195      * {@inheritDoc}\r
196      * @param modelName {@inheritDoc}\r
197      * @param description {@inheritDoc}\r
198      */\r
199     public void pmdEngModelInfo(String modelName, String description){\r
200         this.modelName  .setGlobalText(modelName);\r
201         this.description.setGlobalText(description);\r
202         return;\r
203     }\r
204 \r
205     /**\r
206      * {@inheritDoc}\r
207      * @param boneName {@inheritDoc}\r
208      */\r
209     public void pmdEngBoneInfo(String boneName){\r
210         this.currentBone.getBoneName().setGlobalText(boneName);\r
211         return;\r
212     }\r
213 \r
214     /**\r
215      * {@inheritDoc}\r
216      * @param morphName {@inheritDoc}\r
217      */\r
218     public void pmdEngMorphInfo(String morphName){\r
219         this.currentMorphPart.getMorphName().setGlobalText(morphName);\r
220         return;\r
221     }\r
222 \r
223     /**\r
224      * {@inheritDoc}\r
225      * @param groupName {@inheritDoc}\r
226      */\r
227     public void pmdEngBoneGroupInfo(String groupName){\r
228         this.currentBoneGroup.getGroupName().setGlobalText(groupName);\r
229         return;\r
230     }\r
231 \r
232     /**\r
233      * 読み残したデータがあるか判定する。\r
234      * @return 読み残したデータがあればtrue\r
235      */\r
236     public boolean hasMoreData(){\r
237         return this.hasMoreData;\r
238     }\r
239 \r
240 }\r