OSDN Git Service

パッケージ移動
[mikutoga/Pmd2XML.git] / src / main / java / jp / sfjp / mikutoga / pmd / binio / TextBuilder.java
1 /*
2  * building text info
3  *
4  * License : The MIT License
5  * Copyright(c) 2010 MikuToga Partners
6  */
7
8 package jp.sfjp.mikutoga.pmd.binio;
9
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;
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         if(stage == PmdEngHandler.ENGBONE_LIST){
99             this.boneIt = this.boneList.iterator();
100             if(this.boneIt.hasNext()){
101                 this.currentBone = this.boneIt.next();
102             }
103         }else if(stage == PmdEngHandler.ENGMORPH_LIST){
104             if(this.morphPartList.isEmpty()){
105                 return;
106             }
107
108             this.morphPartIt = this.morphPartList.iterator();
109
110             // 「base」モーフを読み飛ばす
111             MorphPart part = this.morphPartIt.next();
112             assert part != null;
113
114             if(this.morphPartIt.hasNext()){
115                 this.currentMorphPart = this.morphPartIt.next();
116             }
117         }else if(stage == PmdEngHandler.ENGBONEGROUP_LIST){
118             this.boneGroupIt = this.boneGroupList.iterator();
119
120             // デフォルトボーングループを読み飛ばす
121             assert this.boneGroupIt.hasNext();
122             BoneGroup group = this.boneGroupIt.next();
123             assert group != null;
124
125             if(this.boneGroupIt.hasNext()){
126                 this.currentBoneGroup = this.boneGroupIt.next();
127             }
128         }else{
129             assert false;
130             throw new AssertionError();
131         }
132         return;
133     }
134
135     /**
136      * {@inheritDoc}
137      * @param stage {@inheritDoc}
138      */
139     @Override
140     public void loopNext(ParseStage stage){
141         if(stage == PmdEngHandler.ENGBONE_LIST){
142             if(this.boneIt.hasNext()){
143                 this.currentBone = this.boneIt.next();
144             }
145         }else if(stage == PmdEngHandler.ENGMORPH_LIST){
146             if(this.morphPartIt.hasNext()){
147                 this.currentMorphPart = this.morphPartIt.next();
148             }
149         }else if(stage == PmdEngHandler.ENGBONEGROUP_LIST){
150             if(this.boneGroupIt.hasNext()){
151                 this.currentBoneGroup = this.boneGroupIt.next();
152             }
153         }else{
154             assert false;
155             throw new AssertionError();
156         }
157         return;
158     }
159
160     /**
161      * {@inheritDoc}
162      * @param stage {@inheritDoc}
163      */
164     @Override
165     public void loopEnd(ParseStage stage){
166         return;
167     }
168
169     /**
170      * {@inheritDoc}
171      * @param header {@inheritDoc}
172      */
173     @Override
174     public void pmdHeaderInfo(byte[] header){
175         return;
176     }
177
178     /**
179      * {@inheritDoc}
180      * @param modelName {@inheritDoc}
181      * @param description {@inheritDoc}
182      */
183     @Override
184     public void pmdModelInfo(String modelName, String description){
185         this.modelName  .setPrimaryText(modelName);
186         this.description.setPrimaryText(description);
187         return;
188     }
189
190     /**
191      * {@inheritDoc}
192      * @param hasEnglishInfo {@inheritDoc}
193      */
194     @Override
195     public void pmdEngEnabled(boolean hasEnglishInfo){
196         return;
197     }
198
199     /**
200      * {@inheritDoc}
201      * @param modelName {@inheritDoc}
202      * @param description {@inheritDoc}
203      */
204     @Override
205     public void pmdEngModelInfo(String modelName, String description){
206         this.modelName  .setGlobalText(modelName);
207         this.description.setGlobalText(description);
208         return;
209     }
210
211     /**
212      * {@inheritDoc}
213      * @param boneName {@inheritDoc}
214      */
215     @Override
216     public void pmdEngBoneInfo(String boneName){
217         this.currentBone.getBoneName().setGlobalText(boneName);
218         return;
219     }
220
221     /**
222      * {@inheritDoc}
223      * @param morphName {@inheritDoc}
224      */
225     @Override
226     public void pmdEngMorphInfo(String morphName){
227         this.currentMorphPart.getMorphName().setGlobalText(morphName);
228         return;
229     }
230
231     /**
232      * {@inheritDoc}
233      * @param groupName {@inheritDoc}
234      */
235     @Override
236     public void pmdEngBoneGroupInfo(String groupName){
237         this.currentBoneGroup.getGroupName().setGlobalText(groupName);
238         return;
239     }
240
241     /**
242      * 読み残したデータがあるか判定する。
243      * @return 読み残したデータがあればtrue
244      */
245     public boolean hasMoreData(){
246         return this.hasMoreData;
247     }
248
249 }