2 * model exporter for pmd-file(Ext1)
\r
4 * License : The MIT License
\r
5 * Copyright(c) 2010 MikuToga Partners
\r
8 package jp.sourceforge.mikutoga.pmd.pmdexporter;
\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
22 * PMDファイルのエクスポーター(拡張1:英名対応)。
\r
24 * 任意のトゥーンファイル名対応以降のPMDファイルフォーマットを
\r
25 * 使いたくない場合はこのエクスポーターを用いて出力せよ。
\r
27 public class PmdExporterExt1 extends PmdExporterBase{
\r
31 * @param stream 出力ストリーム
\r
32 * @throws NullPointerException 引数がnull
\r
34 public PmdExporterExt1(OutputStream stream)
\r
35 throws NullPointerException{
\r
42 * @param model {@inheritDoc}
\r
43 * @throws IOException {@inheritDoc}
\r
44 * @throws IllegalPmdException {@inheritDoc}
\r
47 public void dumpPmdModel(PmdModel model)
\r
48 throws IOException, IllegalPmdException{
\r
49 super.dumpPmdModel(model);
\r
51 dumpGlobalInfo(model);
\r
58 * @param model モデルデータ
\r
59 * @throws IOException 出力エラー
\r
60 * @throws IllegalPmdTextException 文字列が長すぎる。
\r
62 private void dumpGlobalInfo(PmdModel model)
\r
63 throws IOException, IllegalPmdTextException{
\r
64 boolean hasGlobal = model.hasGlobalText();
\r
66 if(hasGlobal) globalFlag = 0x01;
\r
67 else globalFlag = 0x00;
\r
68 dumpByte(globalFlag);
\r
71 dumpBasicGlobal(model);
\r
72 dumpBoneGlobal(model);
\r
73 dumpMorphGlobal(model);
\r
74 dumpBoneGroupGlobal(model);
\r
84 * @param model モデルデータ
\r
85 * @throws IOException 出力エラー
\r
86 * @throws IllegalPmdTextException 文字列が長すぎる。
\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
94 String description = model.getDescription().getGlobalText();
\r
95 if(description == null) description = "";
\r
96 dumpText(description, PmdLimits.MAXBYTES_MODELDESC);
\r
103 * @param model モデルデータ
\r
104 * @throws IOException 出力エラー
\r
105 * @throws IllegalPmdTextException 文字列が長すぎる。
\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
120 * @param model モデルデータ
\r
121 * @throws IOException 出力エラー
\r
122 * @throws IllegalPmdTextException 文字列が長すぎる。
\r
124 private void dumpMorphGlobal(PmdModel model)
\r
125 throws IOException, IllegalPmdTextException{
\r
126 Map<MorphType, List<MorphPart>> morphMap = model.getMorphMap();
\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
143 * ボーングループ英語名情報を出力する。
\r
144 * @param model モデルデータ
\r
145 * @throws IOException 出力エラー
\r
146 * @throws IllegalPmdTextException 文字列が長すぎる
\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