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