2 * pmd parser extension 1
4 * License : The MIT License
5 * Copyright(c) 2010 MikuToga Partners
8 package jp.sfjp.mikutoga.pmd.parser;
10 import java.io.IOException;
11 import java.io.InputStream;
12 import jp.sfjp.mikutoga.bin.parser.MmdFormatException;
13 import jp.sfjp.mikutoga.pmd.PmdConst;
16 * PMDモデルファイルのパーサ拡張その1。
20 public class PmdParserExt1 extends PmdParserBase {
22 private PmdEngHandler engHandler = PmdUnifiedHandler.EMPTY;
23 private boolean hasEnglishInfo = true;
29 public PmdParserExt1(InputStream source){
38 public void setEngHandler(PmdEngHandler handler){
40 this.engHandler = PmdUnifiedHandler.EMPTY;
42 this.engHandler = handler;
49 * @throws IOException {@inheritDoc}
50 * @throws MmdFormatException {@inheritDoc}
53 protected void parseBody()
54 throws IOException, MmdFormatException{
59 if(this.hasEnglishInfo){
62 parseEngBoneGroupName();
70 * PMDモデル英語基本情報のパースと通知。
71 * @throws IOException IOエラー
72 * @throws MmdFormatException フォーマットエラー
74 private void parseEngHeader()
75 throws IOException, MmdFormatException{
76 this.hasEnglishInfo = parseBoolean();
78 this.engHandler.pmdEngEnabled(this.hasEnglishInfo);
79 if( ! this.hasEnglishInfo ) return;
82 parsePmdText(PmdConst.MAXBYTES_MODELNAME);
84 parsePmdText(PmdConst.MAXBYTES_MODELDESC);
85 description = description.replace(CRLF, LF);
87 this.engHandler.pmdEngModelInfo(modelName, description);
93 * PMDモデル英語ボーン名のパースと通知。
94 * @throws IOException IOエラー
95 * @throws MmdFormatException フォーマットエラー
97 private void parseEngBoneList()
98 throws IOException, MmdFormatException{
99 int boneNum = getBoneCount();
101 this.engHandler.loopStart(PmdEngHandler.ENGBONE_LIST, boneNum);
103 for(int ct = 0; ct < boneNum; ct++){
105 parsePmdText(PmdConst.MAXBYTES_BONENAME);
106 this.engHandler.pmdEngBoneInfo(boneName);
108 this.engHandler.loopNext(PmdEngHandler.ENGBONE_LIST);
111 this.engHandler.loopEnd(PmdEngHandler.ENGBONE_LIST);
117 * PMDモデル英語モーフ名のパースと通知。
118 * @throws IOException IOエラー
119 * @throws MmdFormatException フォーマットエラー
121 private void parseEngMorphName()
122 throws IOException, MmdFormatException{
123 int morphNum = getMorphCount() - 1; // base は英名なし
125 this.engHandler.loopStart(PmdEngHandler.ENGMORPH_LIST, morphNum);
127 for(int ct = 0; ct < morphNum; ct++){
129 parsePmdText(PmdConst.MAXBYTES_MORPHNAME);
130 this.engHandler.pmdEngMorphInfo(morphName);
132 this.engHandler.loopNext(PmdEngHandler.ENGMORPH_LIST);
135 this.engHandler.loopEnd(PmdEngHandler.ENGMORPH_LIST);
141 * PMDモデル英語ボーングループ名のパースと通知。
142 * @throws IOException IOエラー
143 * @throws MmdFormatException フォーマットエラー
145 private void parseEngBoneGroupName()
146 throws IOException, MmdFormatException{
147 int groupNum = getBoneGroupCount();
149 this.engHandler.loopStart(PmdEngHandler.ENGBONEGROUP_LIST, groupNum);
151 for(int ct = 0; ct < groupNum; ct++){
152 String boneGroupName =
153 parsePmdText(PmdConst.MAXBYTES_BONEGROUPNAME);
154 this.engHandler.pmdEngBoneGroupInfo(boneGroupName);
156 this.engHandler.loopNext(PmdEngHandler.ENGBONEGROUP_LIST);
159 this.engHandler.loopEnd(PmdEngHandler.ENGBONEGROUP_LIST);