OSDN Git Service

cffe8d9ac21172fa24ce857b1b72e30107904896
[mikutoga/TogaGem.git] / src / main / java / jp / sourceforge / mikutoga / parser / pmd / PmdParserExt1.java
1 /*\r
2  * pmd parser extension 1\r
3  *\r
4  * License : The MIT License\r
5  * Copyright(c) 2010 MikuToga Partners\r
6  */\r
7 \r
8 package jp.sourceforge.mikutoga.parser.pmd;\r
9 \r
10 import java.io.IOException;\r
11 import jp.sourceforge.mikutoga.parser.MmdFormatException;\r
12 import jp.sourceforge.mikutoga.parser.MmdSource;\r
13 \r
14 /**\r
15  * PMDモデルファイルのパーサ拡張その1。\r
16  * ※英名対応\r
17  */\r
18 public class PmdParserExt1 extends PmdParserBase {\r
19 \r
20     private PmdEngHandler engHandler = null;\r
21     private boolean hasEnglishInfo = true;\r
22 \r
23     /**\r
24      * コンストラクタ。\r
25      * @param source 入力ソース\r
26      */\r
27     public PmdParserExt1(MmdSource source){\r
28         super(source);\r
29         return;\r
30     }\r
31 \r
32     /**\r
33      * 英語ハンドラを登録する。\r
34      * @param handler ハンドラ\r
35      */\r
36     public void setEngHandler(PmdEngHandler handler){\r
37         this.engHandler = handler;\r
38         return;\r
39     }\r
40 \r
41     /**\r
42      * {@inheritDoc}\r
43      * @throws IOException {@inheritDoc}\r
44      * @throws MmdFormatException {@inheritDoc}\r
45      */\r
46     @Override\r
47     protected void parseBody()\r
48             throws IOException, MmdFormatException{\r
49         super.parseBody();\r
50 \r
51         if(hasMore()){\r
52             parseEngHeader();\r
53             if(this.hasEnglishInfo){\r
54                 parseEngBoneList();\r
55                 parseEngMorphName();\r
56                 parseEngBoneGroupName();\r
57             }\r
58         }\r
59 \r
60         return;\r
61     }\r
62 \r
63     /**\r
64      * PMDモデル英語基本情報のパースと通知。\r
65      * @throws IOException IOエラー\r
66      * @throws MmdFormatException フォーマットエラー\r
67      */\r
68     private void parseEngHeader()\r
69             throws IOException, MmdFormatException{\r
70         this.hasEnglishInfo = parseBoolean();\r
71 \r
72         if(this.engHandler != null){\r
73             this.engHandler.pmdEngEnabled(this.hasEnglishInfo);\r
74         }\r
75         if( ! this.hasEnglishInfo ) return;\r
76 \r
77         String modelName =\r
78                 parseZeroTermString(PmdLimits.MAXBYTES_MODELNAME);\r
79         String description =\r
80                 parseZeroTermString(PmdLimits.MAXBYTES_MODELDESC);\r
81         description = description.replace(CRLF, LF);\r
82 \r
83         if(this.engHandler != null){\r
84             this.engHandler.pmdEngModelInfo(modelName, description);\r
85         }\r
86 \r
87         return;\r
88     }\r
89 \r
90     /**\r
91      * PMDモデル英語ボーン名のパースと通知。\r
92      * @throws IOException IOエラー\r
93      * @throws MmdFormatException フォーマットエラー\r
94      */\r
95     private void parseEngBoneList()\r
96             throws IOException, MmdFormatException{\r
97         int boneNum = getBoneCount();\r
98 \r
99         if(this.engHandler == null){\r
100             skip(PmdLimits.MAXBYTES_BONENAME * boneNum);\r
101             return;\r
102         }\r
103 \r
104         this.engHandler.loopStart(PmdEngHandler.ENGBONE_LIST, boneNum);\r
105 \r
106         for(int ct = 0; ct < boneNum; ct++){\r
107             String boneName =\r
108                     parseZeroTermString(PmdLimits.MAXBYTES_BONENAME);\r
109             this.engHandler.pmdEngBoneInfo(boneName);\r
110 \r
111             this.engHandler.loopNext(PmdEngHandler.ENGBONE_LIST);\r
112         }\r
113 \r
114         this.engHandler.loopEnd(PmdEngHandler.ENGBONE_LIST);\r
115 \r
116         return;\r
117     }\r
118 \r
119     /**\r
120      * PMDモデル英語モーフ名のパースと通知。\r
121      * @throws IOException IOエラー\r
122      * @throws MmdFormatException フォーマットエラー\r
123      */\r
124     private void parseEngMorphName()\r
125             throws IOException, MmdFormatException{\r
126         int morphNum = getMorphCount() - 1;  // base は英名なし\r
127 \r
128         if(this.engHandler == null){\r
129             skip(PmdLimits.MAXBYTES_MORPHNAME * morphNum);\r
130             return;\r
131         }\r
132 \r
133         this.engHandler.loopStart(PmdEngHandler.ENGMORPH_LIST, morphNum);\r
134 \r
135         for(int ct = 0; ct < morphNum; ct++){\r
136             String morphName =\r
137                     parseZeroTermString(PmdLimits.MAXBYTES_MORPHNAME);\r
138             this.engHandler.pmdEngMorphInfo(morphName);\r
139 \r
140             this.engHandler.loopNext(PmdEngHandler.ENGMORPH_LIST);\r
141         }\r
142 \r
143         this.engHandler.loopEnd(PmdEngHandler.ENGMORPH_LIST);\r
144 \r
145         return;\r
146     }\r
147 \r
148     /**\r
149      * PMDモデル英語ボーングループ名のパースと通知。\r
150      * @throws IOException IOエラー\r
151      * @throws MmdFormatException フォーマットエラー\r
152      */\r
153     private void parseEngBoneGroupName()\r
154             throws IOException, MmdFormatException{\r
155         int groupNum = getBoneGroupCount();\r
156 \r
157         if(this.engHandler == null){\r
158             skip(PmdLimits.MAXBYTES_BONEGROUPNAME * groupNum);\r
159             return;\r
160         }\r
161 \r
162         this.engHandler.loopStart(PmdEngHandler.ENGBONEGROUP_LIST, groupNum);\r
163 \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
168 \r
169             this.engHandler.loopNext(PmdEngHandler.ENGBONEGROUP_LIST);\r
170         }\r
171 \r
172         this.engHandler.loopEnd(PmdEngHandler.ENGBONEGROUP_LIST);\r
173 \r
174         return;\r
175     }\r
176 \r
177 }\r