OSDN Git Service

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