OSDN Git Service

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