OSDN Git Service

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