OSDN Git Service

PMD出力機能及びXML入出力機能のソースをマージ
[mikutoga/TogaGem.git] / src / main / java / jp / sourceforge / mikutoga / pmd / pmdexporter / PmdExporterExt1.java
1 /*\r
2  * model exporter for pmd-file(Ext1)\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.pmd.pmdexporter;\r
9 \r
10 import java.io.IOException;\r
11 import java.io.OutputStream;\r
12 import java.util.List;\r
13 import java.util.Map;\r
14 import jp.sourceforge.mikutoga.parser.pmd.PmdLimits;\r
15 import jp.sourceforge.mikutoga.pmd.BoneGroup;\r
16 import jp.sourceforge.mikutoga.pmd.BoneInfo;\r
17 import jp.sourceforge.mikutoga.pmd.MorphPart;\r
18 import jp.sourceforge.mikutoga.pmd.MorphType;\r
19 import jp.sourceforge.mikutoga.pmd.PmdModel;\r
20 \r
21 /**\r
22  * PMDファイルのエクスポーター(拡張1:英名対応)。\r
23  * <p>\r
24  * 任意のトゥーンファイル名対応以降のPMDファイルフォーマットを\r
25  * 使いたくない場合はこのエクスポーターを用いて出力せよ。\r
26  */\r
27 public class PmdExporterExt1 extends PmdExporterBase{\r
28 \r
29     /**\r
30      * コンストラクタ。\r
31      * @param stream 出力ストリーム\r
32      * @throws NullPointerException 引数がnull\r
33      */\r
34     public PmdExporterExt1(OutputStream stream)\r
35             throws NullPointerException{\r
36         super(stream);\r
37         return;\r
38     }\r
39 \r
40     /**\r
41      * {@inheritDoc}\r
42      * @param model {@inheritDoc}\r
43      * @throws IOException {@inheritDoc}\r
44      * @throws IllegalPmdException {@inheritDoc}\r
45      */\r
46     @Override\r
47     public void dumpPmdModel(PmdModel model)\r
48             throws IOException, IllegalPmdException{\r
49         super.dumpPmdModel(model);\r
50 \r
51         dumpGlobalInfo(model);\r
52 \r
53         return;\r
54     }\r
55 \r
56     /**\r
57      * 英語名情報を出力する。\r
58      * @param model モデルデータ\r
59      * @throws IOException 出力エラー\r
60      * @throws IllegalPmdTextException 文字列が長すぎる。\r
61      */\r
62     private void dumpGlobalInfo(PmdModel model)\r
63             throws IOException, IllegalPmdTextException{\r
64         boolean hasGlobal = model.hasGlobalText();\r
65         byte globalFlag;\r
66         if(hasGlobal) globalFlag = 0x01;\r
67         else          globalFlag = 0x00;\r
68         dumpByte(globalFlag);\r
69 \r
70         if(hasGlobal){\r
71             dumpBasicGlobal(model);\r
72             dumpBoneGlobal(model);\r
73             dumpMorphGlobal(model);\r
74             dumpBoneGroupGlobal(model);\r
75         }\r
76 \r
77         flush();\r
78 \r
79         return;\r
80     }\r
81 \r
82     /**\r
83      * モデル基本情報を英語で出力する。\r
84      * @param model モデルデータ\r
85      * @throws IOException 出力エラー\r
86      * @throws IllegalPmdTextException 文字列が長すぎる。\r
87      */\r
88     private void dumpBasicGlobal(PmdModel model)\r
89             throws IOException, IllegalPmdTextException{\r
90         String modelName = model.getModelName().getGlobalText();\r
91         if(modelName == null) modelName = "";\r
92         dumpText(modelName, PmdLimits.MAXBYTES_MODELNAME);\r
93 \r
94         String description = model.getDescription().getGlobalText();\r
95         if(description == null) description = "";\r
96         dumpText(description, PmdLimits.MAXBYTES_MODELDESC);\r
97 \r
98         flush();\r
99     }\r
100 \r
101     /**\r
102      * ボーン英語名情報を出力する。\r
103      * @param model モデルデータ\r
104      * @throws IOException 出力エラー\r
105      * @throws IllegalPmdTextException 文字列が長すぎる。\r
106      */\r
107     private void dumpBoneGlobal(PmdModel model)\r
108             throws IOException, IllegalPmdTextException{\r
109         for(BoneInfo bone : model.getBoneList()){\r
110             String boneName = bone.getBoneName().getGlobalText();\r
111             if(boneName == null) boneName = "";\r
112             dumpText(boneName, PmdLimits.MAXBYTES_BONENAME);\r
113         }\r
114 \r
115         flush();\r
116     }\r
117 \r
118     /**\r
119      * モーフ英語名情報を出力する。\r
120      * @param model モデルデータ\r
121      * @throws IOException 出力エラー\r
122      * @throws IllegalPmdTextException 文字列が長すぎる。\r
123      */\r
124     private void dumpMorphGlobal(PmdModel model)\r
125             throws IOException, IllegalPmdTextException{\r
126         Map<MorphType, List<MorphPart>> morphMap = model.getMorphMap();\r
127 \r
128         for(MorphType type : MorphType.values()){\r
129             if(type.isBase()) continue;\r
130             List<MorphPart> partList = morphMap.get(type);\r
131             if(partList == null) continue;\r
132             for(MorphPart part : partList){\r
133                 String morphName = part.getMorphName().getGlobalText();\r
134                 if(morphName == null) morphName = "";\r
135                 dumpText(morphName, PmdLimits.MAXBYTES_MORPHNAME);\r
136             }\r
137         }\r
138 \r
139         flush();\r
140     }\r
141 \r
142     /**\r
143      * ボーングループ英語名情報を出力する。\r
144      * @param model モデルデータ\r
145      * @throws IOException 出力エラー\r
146      * @throws IllegalPmdTextException 文字列が長すぎる\r
147      */\r
148     private void dumpBoneGroupGlobal(PmdModel model)\r
149             throws IOException, IllegalPmdTextException{\r
150         for(BoneGroup group : model.getBoneGroupList()){\r
151             if(group.isDefaultBoneGroup()) continue;\r
152             String groupName = group.getGroupName().getGlobalText();\r
153             if(groupName == null) groupName = "";\r
154             dumpText(groupName, PmdLimits.MAXBYTES_BONEGROUPNAME);\r
155         }\r
156 \r
157         flush();\r
158     }\r
159 \r
160 }\r