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.PmdLimits;
16 * PMDモデルファイルのパーサ拡張その1。
19 public class PmdParserExt1 extends PmdParserBase {
21 private PmdEngHandler engHandler = PmdUnifiedHandler.EMPTY;
22 private boolean hasEnglishInfo = true;
28 public PmdParserExt1(InputStream source){
37 public void setEngHandler(PmdEngHandler handler){
39 this.engHandler = PmdUnifiedHandler.EMPTY;
41 this.engHandler = handler;
48 * @throws IOException {@inheritDoc}
49 * @throws MmdFormatException {@inheritDoc}
52 protected void parseBody()
53 throws IOException, MmdFormatException{
58 if(this.hasEnglishInfo){
61 parseEngBoneGroupName();
69 * PMDモデル英語基本情報のパースと通知。
70 * @throws IOException IOエラー
71 * @throws MmdFormatException フォーマットエラー
73 private void parseEngHeader()
74 throws IOException, MmdFormatException{
75 this.hasEnglishInfo = parseBoolean();
77 this.engHandler.pmdEngEnabled(this.hasEnglishInfo);
78 if( ! this.hasEnglishInfo ) return;
81 parsePmdText(PmdLimits.MAXBYTES_MODELNAME);
83 parsePmdText(PmdLimits.MAXBYTES_MODELDESC);
84 description = description.replace(CRLF, LF);
86 this.engHandler.pmdEngModelInfo(modelName, description);
92 * PMDモデル英語ボーン名のパースと通知。
93 * @throws IOException IOエラー
94 * @throws MmdFormatException フォーマットエラー
96 private void parseEngBoneList()
97 throws IOException, MmdFormatException{
98 int boneNum = getBoneCount();
100 this.engHandler.loopStart(PmdEngHandler.ENGBONE_LIST, boneNum);
102 for(int ct = 0; ct < boneNum; ct++){
104 parsePmdText(PmdLimits.MAXBYTES_BONENAME);
105 this.engHandler.pmdEngBoneInfo(boneName);
107 this.engHandler.loopNext(PmdEngHandler.ENGBONE_LIST);
110 this.engHandler.loopEnd(PmdEngHandler.ENGBONE_LIST);
116 * PMDモデル英語モーフ名のパースと通知。
117 * @throws IOException IOエラー
118 * @throws MmdFormatException フォーマットエラー
120 private void parseEngMorphName()
121 throws IOException, MmdFormatException{
122 int morphNum = getMorphCount() - 1; // base は英名なし
124 this.engHandler.loopStart(PmdEngHandler.ENGMORPH_LIST, morphNum);
126 for(int ct = 0; ct < morphNum; ct++){
128 parsePmdText(PmdLimits.MAXBYTES_MORPHNAME);
129 this.engHandler.pmdEngMorphInfo(morphName);
131 this.engHandler.loopNext(PmdEngHandler.ENGMORPH_LIST);
134 this.engHandler.loopEnd(PmdEngHandler.ENGMORPH_LIST);
140 * PMDモデル英語ボーングループ名のパースと通知。
141 * @throws IOException IOエラー
142 * @throws MmdFormatException フォーマットエラー
144 private void parseEngBoneGroupName()
145 throws IOException, MmdFormatException{
146 int groupNum = getBoneGroupCount();
148 this.engHandler.loopStart(PmdEngHandler.ENGBONEGROUP_LIST, groupNum);
150 for(int ct = 0; ct < groupNum; ct++){
151 String boneGroupName =
152 parsePmdText(PmdLimits.MAXBYTES_BONEGROUPNAME);
153 this.engHandler.pmdEngBoneGroupInfo(boneGroupName);
155 this.engHandler.loopNext(PmdEngHandler.ENGBONEGROUP_LIST);
158 this.engHandler.loopEnd(PmdEngHandler.ENGBONEGROUP_LIST);