2 * model exporter for pmd-file(Ext1)
4 * License : The MIT License
5 * Copyright(c) 2010 MikuToga Partners
8 package jp.sourceforge.mikutoga.pmd.model.binio;
10 import java.io.IOException;
11 import java.io.OutputStream;
12 import java.util.List;
14 import jp.sourceforge.mikutoga.binio.IllegalTextExportException;
15 import jp.sourceforge.mikutoga.pmd.MorphType;
16 import jp.sourceforge.mikutoga.pmd.model.BoneGroup;
17 import jp.sourceforge.mikutoga.pmd.model.BoneInfo;
18 import jp.sourceforge.mikutoga.pmd.model.MorphPart;
19 import jp.sourceforge.mikutoga.pmd.model.PmdModel;
20 import jp.sourceforge.mikutoga.pmd.parser.PmdLimits;
23 * PMDファイルのエクスポーター(拡張1:英名対応)。
25 * 任意のトゥーンファイル名対応以降のPMDファイルフォーマットを
26 * 使いたくない場合はこのエクスポーターを用いて出力せよ。
28 public class PmdExporterExt1 extends PmdExporterBase{
32 * @param stream 出力ストリーム
33 * @throws NullPointerException 引数がnull
35 public PmdExporterExt1(OutputStream stream)
36 throws NullPointerException{
43 * @param model {@inheritDoc}
44 * @throws IOException {@inheritDoc}
45 * @throws IllegalPmdException {@inheritDoc}
48 public void dumpPmdModel(PmdModel model)
49 throws IOException, IllegalPmdException{
50 super.dumpPmdModel(model);
52 dumpGlobalInfo(model);
60 * @throws IOException 出力エラー
61 * @throws IllegalPmdTextException 文字列が長すぎる。
63 private void dumpGlobalInfo(PmdModel model)
64 throws IOException, IllegalPmdException{
65 boolean hasGlobal = model.hasGlobalText();
67 if(hasGlobal) globalFlag = 0x01;
68 else globalFlag = 0x00;
73 dumpBasicGlobal(model);
74 dumpBoneGlobal(model);
75 dumpMorphGlobal(model);
76 dumpBoneGroupGlobal(model);
77 }catch(IllegalTextExportException e){
78 throw new IllegalPmdException(e);
90 * @throws IOException 出力エラー
91 * @throws IllegalPmdTextException 文字列が長すぎる。
93 private void dumpBasicGlobal(PmdModel model)
94 throws IOException, IllegalTextExportException{
95 String modelName = model.getModelName().getGlobalText();
96 if(modelName == null) modelName = "";
97 dumpText(modelName, PmdLimits.MAXBYTES_MODELNAME);
99 String description = model.getDescription().getGlobalText();
100 if(description == null) description = "";
101 dumpText(description, PmdLimits.MAXBYTES_MODELDESC);
108 * @param model モデルデータ
109 * @throws IOException 出力エラー
110 * @throws IllegalPmdTextException 文字列が長すぎる。
112 private void dumpBoneGlobal(PmdModel model)
113 throws IOException, IllegalTextExportException{
114 for(BoneInfo bone : model.getBoneList()){
115 String boneName = bone.getBoneName().getGlobalText();
116 if(boneName == null) boneName = "";
117 dumpText(boneName, PmdLimits.MAXBYTES_BONENAME);
125 * @param model モデルデータ
126 * @throws IOException 出力エラー
127 * @throws IllegalPmdTextException 文字列が長すぎる。
129 private void dumpMorphGlobal(PmdModel model)
130 throws IOException, IllegalTextExportException{
131 Map<MorphType, List<MorphPart>> morphMap = model.getMorphMap();
133 for(MorphType type : MorphType.values()){
134 if(type.isBase()) continue;
135 List<MorphPart> partList = morphMap.get(type);
136 if(partList == null) continue;
137 for(MorphPart part : partList){
138 String morphName = part.getMorphName().getGlobalText();
139 if(morphName == null) morphName = "";
140 dumpText(morphName, PmdLimits.MAXBYTES_MORPHNAME);
149 * @param model モデルデータ
150 * @throws IOException 出力エラー
151 * @throws IllegalPmdTextException 文字列が長すぎる
153 private void dumpBoneGroupGlobal(PmdModel model)
154 throws IOException, IllegalTextExportException{
155 for(BoneGroup group : model.getBoneGroupList()){
156 if(group.isDefaultBoneGroup()) continue;
157 String groupName = group.getGroupName().getGlobalText();
158 if(groupName == null) groupName = "";
159 dumpText(groupName, PmdLimits.MAXBYTES_BONEGROUPNAME);