2 * pmd parser extension 1
4 * License : The MIT License
5 * Copyright(c) 2010 MikuToga Partners
8 package jp.sourceforge.mikutoga.parser.pmd;
10 import java.io.IOException;
11 import jp.sourceforge.mikutoga.parser.MmdFormatException;
12 import jp.sourceforge.mikutoga.parser.MmdSource;
15 * PMDモデルファイルのパーサ拡張その1。
18 public class PmdParserExt1 extends PmdParserBase {
20 private PmdEngHandler engHandler = null;
21 private boolean hasEnglishInfo = true;
27 public PmdParserExt1(MmdSource source){
36 public void setEngHandler(PmdEngHandler handler){
37 this.engHandler = handler;
43 * @throws IOException {@inheritDoc}
44 * @throws MmdFormatException {@inheritDoc}
47 protected void parseBody()
48 throws IOException, MmdFormatException{
53 if(this.hasEnglishInfo){
56 parseEngBoneGroupName();
64 * PMDモデル英語基本情報のパースと通知。
65 * @throws IOException IOエラー
66 * @throws MmdFormatException フォーマットエラー
68 private void parseEngHeader()
69 throws IOException, MmdFormatException{
70 this.hasEnglishInfo = parseBoolean();
72 if(this.engHandler != null){
73 this.engHandler.pmdEngEnabled(this.hasEnglishInfo);
75 if( ! this.hasEnglishInfo ) return;
78 parseZeroTermWin31J(PmdLimits.MAXBYTES_MODELNAME);
80 parseZeroTermWin31J(PmdLimits.MAXBYTES_MODELDESC);
81 description = description.replace(CRLF, LF);
83 if(this.engHandler != null){
84 this.engHandler.pmdEngModelInfo(modelName, description);
91 * PMDモデル英語ボーン名のパースと通知。
92 * @throws IOException IOエラー
93 * @throws MmdFormatException フォーマットエラー
95 private void parseEngBoneList()
96 throws IOException, MmdFormatException{
97 int boneNum = getBoneCount();
99 if(this.engHandler == null){
100 skip(PmdLimits.MAXBYTES_BONENAME * boneNum);
104 this.engHandler.loopStart(PmdEngHandler.ENGBONE_LIST, boneNum);
106 for(int ct = 0; ct < boneNum; ct++){
108 parseZeroTermWin31J(PmdLimits.MAXBYTES_BONENAME);
109 this.engHandler.pmdEngBoneInfo(boneName);
111 this.engHandler.loopNext(PmdEngHandler.ENGBONE_LIST);
114 this.engHandler.loopEnd(PmdEngHandler.ENGBONE_LIST);
120 * PMDモデル英語モーフ名のパースと通知。
121 * @throws IOException IOエラー
122 * @throws MmdFormatException フォーマットエラー
124 private void parseEngMorphName()
125 throws IOException, MmdFormatException{
126 int morphNum = getMorphCount() - 1; // base は英名なし
128 if(this.engHandler == null){
129 skip(PmdLimits.MAXBYTES_MORPHNAME * morphNum);
133 this.engHandler.loopStart(PmdEngHandler.ENGMORPH_LIST, morphNum);
135 for(int ct = 0; ct < morphNum; ct++){
137 parseZeroTermWin31J(PmdLimits.MAXBYTES_MORPHNAME);
138 this.engHandler.pmdEngMorphInfo(morphName);
140 this.engHandler.loopNext(PmdEngHandler.ENGMORPH_LIST);
143 this.engHandler.loopEnd(PmdEngHandler.ENGMORPH_LIST);
149 * PMDモデル英語ボーングループ名のパースと通知。
150 * @throws IOException IOエラー
151 * @throws MmdFormatException フォーマットエラー
153 private void parseEngBoneGroupName()
154 throws IOException, MmdFormatException{
155 int groupNum = getBoneGroupCount();
157 if(this.engHandler == null){
158 skip(PmdLimits.MAXBYTES_BONEGROUPNAME * groupNum);
162 this.engHandler.loopStart(PmdEngHandler.ENGBONEGROUP_LIST, groupNum);
164 for(int ct = 0; ct < groupNum; ct++){
165 String boneGroupName =
166 parseZeroTermWin31J(PmdLimits.MAXBYTES_BONEGROUPNAME);
167 this.engHandler.pmdEngBoneGroupInfo(boneGroupName);
169 this.engHandler.loopNext(PmdEngHandler.ENGBONEGROUP_LIST);
172 this.engHandler.loopEnd(PmdEngHandler.ENGBONEGROUP_LIST);