OSDN Git Service

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