OSDN Git Service

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