2 * pmd parser extension 1
4 * License : The MIT License
5 * Copyright(c) 2010 MikuToga Partners
8 package jp.sourceforge.mikutoga.pmd.parser;
10 import java.io.IOException;
11 import java.io.InputStream;
12 import jp.sfjp.mikutoga.bin.parser.MmdFormatException;
15 * PMDモデルファイルのパーサ拡張その1。
18 public class PmdParserExt1 extends PmdParserBase {
20 private PmdEngHandler engHandler = NullHandler.HANDLER;
21 private boolean hasEnglishInfo = true;
27 public PmdParserExt1(InputStream source){
36 public void setEngHandler(PmdEngHandler handler){
38 this.engHandler = NullHandler.HANDLER;
40 this.engHandler = handler;
47 * @throws IOException {@inheritDoc}
48 * @throws MmdFormatException {@inheritDoc}
51 protected void parseBody()
52 throws IOException, MmdFormatException{
57 if(this.hasEnglishInfo){
60 parseEngBoneGroupName();
68 * PMDモデル英語基本情報のパースと通知。
69 * @throws IOException IOエラー
70 * @throws MmdFormatException フォーマットエラー
72 private void parseEngHeader()
73 throws IOException, MmdFormatException{
74 this.hasEnglishInfo = parseBoolean();
76 this.engHandler.pmdEngEnabled(this.hasEnglishInfo);
77 if( ! this.hasEnglishInfo ) return;
80 parsePmdText(PmdLimits.MAXBYTES_MODELNAME);
82 parsePmdText(PmdLimits.MAXBYTES_MODELDESC);
83 description = description.replace(CRLF, LF);
85 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 this.engHandler.loopStart(PmdEngHandler.ENGBONE_LIST, boneNum);
101 for(int ct = 0; ct < boneNum; ct++){
103 parsePmdText(PmdLimits.MAXBYTES_BONENAME);
104 this.engHandler.pmdEngBoneInfo(boneName);
106 this.engHandler.loopNext(PmdEngHandler.ENGBONE_LIST);
109 this.engHandler.loopEnd(PmdEngHandler.ENGBONE_LIST);
115 * PMDモデル英語モーフ名のパースと通知。
116 * @throws IOException IOエラー
117 * @throws MmdFormatException フォーマットエラー
119 private void parseEngMorphName()
120 throws IOException, MmdFormatException{
121 int morphNum = getMorphCount() - 1; // base は英名なし
123 this.engHandler.loopStart(PmdEngHandler.ENGMORPH_LIST, morphNum);
125 for(int ct = 0; ct < morphNum; ct++){
127 parsePmdText(PmdLimits.MAXBYTES_MORPHNAME);
128 this.engHandler.pmdEngMorphInfo(morphName);
130 this.engHandler.loopNext(PmdEngHandler.ENGMORPH_LIST);
133 this.engHandler.loopEnd(PmdEngHandler.ENGMORPH_LIST);
139 * PMDモデル英語ボーングループ名のパースと通知。
140 * @throws IOException IOエラー
141 * @throws MmdFormatException フォーマットエラー
143 private void parseEngBoneGroupName()
144 throws IOException, MmdFormatException{
145 int groupNum = getBoneGroupCount();
147 this.engHandler.loopStart(PmdEngHandler.ENGBONEGROUP_LIST, groupNum);
149 for(int ct = 0; ct < groupNum; ct++){
150 String boneGroupName =
151 parsePmdText(PmdLimits.MAXBYTES_BONEGROUPNAME);
152 this.engHandler.pmdEngBoneGroupInfo(boneGroupName);
154 this.engHandler.loopNext(PmdEngHandler.ENGBONEGROUP_LIST);
157 this.engHandler.loopEnd(PmdEngHandler.ENGBONEGROUP_LIST);