From 67a5b6b497baeebc2645ce884cea622b757ac6cb Mon Sep 17 00:00:00 2001 From: Olyutorskii Date: Mon, 10 Jun 2013 01:06:06 +0900 Subject: [PATCH] =?utf8?q?=E6=9C=AC=E7=95=AA=E3=82=B9=E3=82=AD=E3=83=BC?= =?utf8?q?=E3=83=9E=E7=A7=BB=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../sfjp/mikutoga/vmd/model/NumberedVmdFlag.java | 4 +- .../java/jp/sfjp/mikutoga/vmd/model/VmdMotion.java | 11 ++ .../mikutoga/vmd/model/binio/BasicExporter.java | 39 +++- .../sfjp/mikutoga/vmd/model/binio/BoolLoader.java | 6 +- .../sfjp/mikutoga/vmd/model/binio/VmdExporter.java | 2 +- .../mikutoga/vmd/model/xml/CameraXmlExporter.java | 2 +- .../mikutoga/vmd/model/xml/ExtraXmlExporter.java | 4 +- .../mikutoga/vmd/model/xml/FlagXmlExporter.java | 131 +++++++++++++ .../mikutoga/vmd/model/xml/LightingXmlExpoter.java | 4 +- .../jp/sfjp/mikutoga/vmd/model/xml/SaxAttr.java | 130 ------------- .../mikutoga/vmd/model/xml/SaxCameraListener.java | 1 + .../mikutoga/vmd/model/xml/SaxFlagListener.java | 116 ++++++++++++ .../vmd/model/xml/SaxLightingListener.java | 1 + .../mikutoga/vmd/model/xml/SaxMotionListener.java | 1 + .../mikutoga/vmd/model/xml/SaxVmdListener.java | 1 + .../sfjp/mikutoga/vmd/model/xml/Schema110820.java | 2 +- .../sfjp/mikutoga/vmd/model/xml/Schema130609.java | 81 ++++++++ .../jp/sfjp/mikutoga/vmd/model/xml/VmdTag.java | 4 + .../mikutoga/vmd/model/xml/VmdXmlExporter.java | 111 ++++++++--- .../jp/sfjp/mikutoga/vmd/model/xml/XmlAttr.java | 3 + .../jp/sfjp/mikutoga/vmd/model/xml/XmlHandler.java | 10 +- .../mikutoga/vmd/model/xml/XmlMotionFileType.java | 39 ++++ .../sfjp/mikutoga/vmd/model/xml/XmlVmdLoader.java | 2 +- .../jp/sfjp/mikutoga/vmd2xml/MotionFileType.java | 54 +++++- .../java/jp/sfjp/mikutoga/vmd2xml/OptInfo.java | 7 +- .../java/jp/sfjp/mikutoga/vmd2xml/OptSwitch.java | 2 +- .../java/jp/sfjp/mikutoga/vmd2xml/Vmd2Xml.java | 20 +- .../java/jp/sfjp/mikutoga/vmd2xml/Vmd2XmlConv.java | 121 +----------- .../jp/sfjp/mikutoga/vmd2xml/XmlInputUtil.java | 208 +++++++++++++++++++++ .../{vmdxml-130609A.xsd => vmdxml-130609.xsd} | 4 +- .../sfjp/mikutoga/vmd2xml/MotionFileTypeTest.java | 23 ++- .../java/jp/sfjp/mikutoga/vmd2xml/OptInfoTest.java | 7 +- src/test/java/testdata/CnvAssert.java | 66 ++++--- .../java/testdata/vmd110820/camera/CameraTest.java | 2 +- .../java/testdata/vmd110820/euler/EulerTest.java | 2 +- .../testdata/vmd110820/luminous/LuminousTest.java | 2 +- .../testdata/vmd110820/minimum/MinimumTest.java | 4 +- .../java/testdata/vmd110820/morph/MorphTest.java | 2 +- .../java/testdata/vmd110820/motion/MotionTest.java | 2 +- .../java/testdata/vmd110820/newvmd/NewVmdTest.java | 2 +- .../java/testdata/vmd110820/shadow/ShadowTest.java | 2 +- .../java/testdata/vmd110820/small/SmallTest.java | 10 +- .../java/testdata/vmd130609/flag/FlagTest.java | 56 ++++++ .../testdata/vmd130609/minimum/MinimumTest.java | 56 ++++++ .../java/testdata/vmd130609/small/SmallTest.java | 56 ++++++ .../resources/testdata/vmd130609/flag/flag.vmd | Bin 0 -> 386 bytes .../resources/testdata/vmd130609/flag/flag.xml | 82 ++++++++ .../testdata/vmd130609/minimum/minimum.vmd | Bin 0 -> 70 bytes .../minimum/{minmotion.xml => minimum.xml} | 8 +- .../testdata/vmd130609/small/onlyFlag.vmd | Bin 0 -> 113 bytes .../testdata/vmd130609/small/onlyFlag.xml | 23 ++- 52 files changed, 1158 insertions(+), 370 deletions(-) create mode 100644 src/main/java/jp/sfjp/mikutoga/vmd/model/xml/FlagXmlExporter.java delete mode 100644 src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxAttr.java create mode 100644 src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxFlagListener.java create mode 100644 src/main/java/jp/sfjp/mikutoga/vmd/model/xml/Schema130609.java create mode 100644 src/main/java/jp/sfjp/mikutoga/vmd/model/xml/XmlMotionFileType.java create mode 100644 src/main/java/jp/sfjp/mikutoga/vmd2xml/XmlInputUtil.java rename src/main/resources/jp/sfjp/mikutoga/vmd/model/xml/resources/{vmdxml-130609A.xsd => vmdxml-130609.xsd} (99%) create mode 100644 src/test/java/testdata/vmd130609/flag/FlagTest.java create mode 100644 src/test/java/testdata/vmd130609/minimum/MinimumTest.java create mode 100644 src/test/java/testdata/vmd130609/small/SmallTest.java create mode 100644 src/test/resources/testdata/vmd130609/flag/flag.vmd create mode 100644 src/test/resources/testdata/vmd130609/flag/flag.xml create mode 100644 src/test/resources/testdata/vmd130609/minimum/minimum.vmd rename src/test/resources/testdata/vmd130609/minimum/{minmotion.xml => minimum.xml} (72%) create mode 100644 src/test/resources/testdata/vmd130609/small/onlyFlag.vmd diff --git a/pom.xml b/pom.xml index 5d30fcb..c386d12 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ jp.sourceforge.mikutoga vmd2xml - 1.101.5-SNAPSHOT + 1.101.7-SNAPSHOT jar Vmd2XML diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/NumberedVmdFlag.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/NumberedVmdFlag.java index 3e1a33b..b9564eb 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd/model/NumberedVmdFlag.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/NumberedVmdFlag.java @@ -25,7 +25,7 @@ public class NumberedVmdFlag private boolean shown = true; - private List ikSwList = new LinkedList(); + private final List ikSwList = new LinkedList(); /** @@ -83,7 +83,7 @@ public class NumberedVmdFlag StringBuilder submsg = new StringBuilder(msg); for(IkSwitch sw : this.ikSwList){ - submsg.append('\n').append("\u0020").append(sw.toString()); + submsg.append("\n\u0020").append(sw.toString()); } return submsg.toString(); diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/VmdMotion.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/VmdMotion.java index c06561c..eb63806 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd/model/VmdMotion.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/VmdMotion.java @@ -92,6 +92,17 @@ public class VmdMotion { } /** + * フラグモーションが存在するか否か判定する。 + *

フラグモーションは、 + * MMD Ver7.40以降のVMDフォーマットでなければ記録できない。 + * @return 存在するならtrue + */ + public boolean hasFlagMotion(){ + if(this.flagList.isEmpty()) return false; + return true; + } + + /** * 順序保証されたボーンモーションマップを返す。 * @return ボーンモーションマップ * @see java.util.LinkedHashMap diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/binio/BasicExporter.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/binio/BasicExporter.java index 284eb66..bb67bb0 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd/model/binio/BasicExporter.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/binio/BasicExporter.java @@ -38,22 +38,36 @@ class BasicExporter extends BinaryExporter { private static final Charset CS_ASCII = Charset.forName("US-ASCII"); - // '\0' * 5byte の版もあり - private static final String HEADFILLER = "\u0000" + "JKLM"; + private static final String HEADFILLER_OLD = + "\u0000" + "JKLM"; + private static final String HEADFILLER = + "\u0000\u0000\u0000\u0000\u0000"; private static final byte[] FDFILLER = { (byte)0x00, (byte)0xfd }; - private static final byte[] INTPLT_FILLER = { - (byte) 0x01, // 0x00の版もあり。 + private static final byte[] FILLER_00 = { // MMD Ver7.39x64仕様 + (byte) 0x00, + (byte) 0x00, + (byte) 0x00, + }; + private static final byte[] FILLER_01 = { + (byte) 0x01, (byte) 0x00, (byte) 0x00, }; + static{ + assert HEADFILLER.length() == HEADFILLER_OLD.length(); + assert FILLER_00.length == FILLER_01.length; + } + private final byte[] motionIntplt = new byte[BZTOTAL_SIZE]; private final ByteBuffer intpltBuf; private final ByteBuffer rdBuf; + private byte[] intpltFiller = FILLER_01; + /** * コンストラクタ。 @@ -72,10 +86,15 @@ class BasicExporter extends BinaryExporter { /** * ヘッダ情報を出力する。 + * @param motion モーションデータ * @throws IOException 出力エラー */ - void dumpHeader() throws IOException{ - byte[] header = (VmdConst.MAGIC_TXT + HEADFILLER).getBytes(CS_ASCII); + void dumpHeader(VmdMotion motion) throws IOException{ + String headerTxt = VmdConst.MAGIC_TXT; + if(motion.hasFlagMotion()) headerTxt += HEADFILLER; + else headerTxt += HEADFILLER_OLD; + + byte[] header = headerTxt.getBytes(CS_ASCII); assert header.length == VmdConst.HEADER_LENGTH; dumpByteArray(header); @@ -111,6 +130,12 @@ class BasicExporter extends BinaryExporter { */ void dumpBoneMotion(VmdMotion motion) throws IOException, IllegalTextExportException{ + if(motion.hasFlagMotion()){ // MMD Ver7.40仕様 + this.intpltFiller = FILLER_00; + }else{ + this.intpltFiller = FILLER_01; + } + Map> map = motion.getBonePartMap(); List bmotionList = new LinkedList(); @@ -230,7 +255,7 @@ class BasicExporter extends BinaryExporter { for(int lack = 1; lack < BZ_REDUNDANT; lack++){ this.rdBuf.position(lack); this.intpltBuf.put(this.rdBuf); - this.intpltBuf.put(INTPLT_FILLER, 0, lack); + this.intpltBuf.put(this.intpltFiller, 0, lack); } assert this.intpltBuf.position() == BZTOTAL_SIZE; diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/binio/BoolLoader.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/binio/BoolLoader.java index 208dd8f..b27fe65 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd/model/binio/BoolLoader.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/binio/BoolLoader.java @@ -19,12 +19,12 @@ import jp.sfjp.mikutoga.vmd.parser.VmdBoolHandler; * フラグ情報のビルダ。 *

MikuMikuDance Ver7.40以降でサポート */ -public class BoolLoader implements VmdBoolHandler{ +class BoolLoader implements VmdBoolHandler{ private final List flagList; - private NumberedVmdFlag currentFlag; - private IkSwitch currentSwitch; + private NumberedVmdFlag currentFlag = null; + private IkSwitch currentSwitch = null; /** * コンストラクタ。 diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/binio/VmdExporter.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/binio/VmdExporter.java index 1d372e0..7ec9ba7 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd/model/binio/VmdExporter.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/binio/VmdExporter.java @@ -64,7 +64,7 @@ public class VmdExporter { */ private void dumpVmdMotionImpl(VmdMotion motion) throws IOException, IllegalVmdDataException{ - this.basicExporter.dumpHeader(); + this.basicExporter.dumpHeader(motion); try{ this.basicExporter.dumpModelName(motion); diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/CameraXmlExporter.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/CameraXmlExporter.java index bc5434c..9d7005b 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/CameraXmlExporter.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/CameraXmlExporter.java @@ -15,7 +15,7 @@ import jp.sfjp.mikutoga.vmd.model.CameraMotion; import jp.sfjp.mikutoga.vmd.model.CameraRotation; import jp.sfjp.mikutoga.vmd.model.PosCurve; import jp.sfjp.mikutoga.vmd.model.VmdMotion; -import jp.sourceforge.mikutoga.xml.ProxyXmlExporter; +import jp.sfjp.mikutoga.xml.ProxyXmlExporter; /** *カメラ情報のXMLエクスポーター。 diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/ExtraXmlExporter.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/ExtraXmlExporter.java index 9779232..075c3bd 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/ExtraXmlExporter.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/ExtraXmlExporter.java @@ -10,8 +10,8 @@ package jp.sfjp.mikutoga.vmd.model.xml; import java.io.IOException; import jp.sfjp.mikutoga.vmd.model.BezierParam; import jp.sfjp.mikutoga.vmd.model.PosCurve; -import jp.sourceforge.mikutoga.xml.ProxyXmlExporter; -import jp.sourceforge.mikutoga.xml.XmlExporter; +import jp.sfjp.mikutoga.xml.ProxyXmlExporter; +import jp.sfjp.mikutoga.xml.XmlExporter; /** * XML出力機構の共通部。 diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/FlagXmlExporter.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/FlagXmlExporter.java new file mode 100644 index 0000000..af1e4ba --- /dev/null +++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/FlagXmlExporter.java @@ -0,0 +1,131 @@ +/* + * flag xml exporter + * + * License : The MIT License + * Copyright(c) 2013 MikuToga Partners + */ + +package jp.sfjp.mikutoga.vmd.model.xml; + +import java.io.IOException; +import java.text.MessageFormat; +import java.util.List; +import jp.sfjp.mikutoga.typical.TypicalBone; +import jp.sfjp.mikutoga.vmd.model.IkSwitch; +import jp.sfjp.mikutoga.vmd.model.NumberedVmdFlag; +import jp.sfjp.mikutoga.vmd.model.VmdMotion; +import jp.sfjp.mikutoga.xml.ProxyXmlExporter; + +/** + * フラグ情報のXMLエクスポーター。 + */ +class FlagXmlExporter extends ProxyXmlExporter { + + private static final String MSG_MAYBE = "Perhaps : [{0}]"; + + + /** + * コンストラクタ。 + * @param delegate 委譲先 + */ + FlagXmlExporter(VmdXmlExporter delegate) { + super(delegate); + return; + } + + + /** + * boolean値をXSD:booleanに準拠した文字列に変換する。 + * @param bool boolean値 + * @return XSD:boolean文字列 + */ + private static String toXsdBoolean(boolean bool){ + String result; + if(bool) result = "true"; + else result = "false"; + return result; + } + + + /** + * 各種モーションフラグを出力する。 + * @param vmdMotion モーションデータ + * @throws IOException 出力エラー + */ + void putFlagSequence(VmdMotion vmdMotion) + throws IOException{ + ind().putSimpleSTag(VmdTag.FLAG_SEQUENCE.tag()).ln(); + + pushNest(); + List list = vmdMotion.getNumberedFlagList(); + if( ! list.isEmpty() ) ln(); + for(NumberedVmdFlag flag : list){ + putFlagMotion(flag); + } + popNest(); + + ind().putETag(VmdTag.FLAG_SEQUENCE.tag()).ln(2); + + return; + } + + /** + * フラグリストを出力する。 + * @param flag フラグモーション + * @throws IOException 出力エラー + */ + private void putFlagMotion(NumberedVmdFlag flag) + throws IOException{ + int frameNo = flag.getFrameNumber(); + String showTxt = toXsdBoolean(flag.isModelShown()); + + ind().putOpenSTag(VmdTag.FLAG_MOTION.tag()).sp(); + putIntAttr(XmlAttr.ATTR_FRAME, frameNo).sp(); + putAttr(XmlAttr.ATTR_SHOWMODEL, showTxt).sp(); + + List ikList = flag.getIkSwitchList(); + if(ikList.isEmpty()){ + putCloseEmpty().ln(2); + }else{ + putCloseSTag().ln(2); + pushNest(); + for(IkSwitch ikSw : ikList){ + putIkSwitch(ikSw); + } + popNest(); + ind().putETag(VmdTag.FLAG_MOTION.tag()).ln(2); + } + + return; + } + + /** + * IK ON/OFFリストを出力する。 + * @param ikSw IK ON/OFF スイッチ + * @throws IOException 出力エラー + */ + private void putIkSwitch(IkSwitch ikSw) + throws IOException{ + String boneName = ikSw.getBoneName(); + String validTxt = toXsdBoolean(ikSw.isValid()); + + ind().putLineComment(boneName); + String globalName = TypicalBone.primary2global(boneName); + if(globalName != null){ + String gname = + MessageFormat.format(MSG_MAYBE, globalName); + sp(2).putLineComment(gname); + } + ln(); + + ind().putOpenSTag(VmdTag.IK_SWITCH.tag()).sp(); + + putAttr(XmlAttr.ATTR_NAME, boneName).sp(); + putAttr(XmlAttr.ATTR_VALID, validTxt).sp(); + + putCloseEmpty().ln(2); + + return; + } + +} diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/LightingXmlExpoter.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/LightingXmlExpoter.java index 68acccb..152dc45 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/LightingXmlExpoter.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/LightingXmlExpoter.java @@ -15,8 +15,8 @@ import jp.sfjp.mikutoga.vmd.model.LuminousMotion; import jp.sfjp.mikutoga.vmd.model.ShadowMode; import jp.sfjp.mikutoga.vmd.model.ShadowMotion; import jp.sfjp.mikutoga.vmd.model.VmdMotion; -import jp.sourceforge.mikutoga.xml.ProxyXmlExporter; -import jp.sourceforge.mikutoga.xml.XmlExporter; +import jp.sfjp.mikutoga.xml.ProxyXmlExporter; +import jp.sfjp.mikutoga.xml.XmlExporter; /** * ライティング情報のXMLエクスポーター。 diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxAttr.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxAttr.java deleted file mode 100644 index 283d4f8..0000000 --- a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxAttr.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Sax 2 Xsd-types converter - * - * License : The MIT License - * Copyright(c) 2013 MikuToga Partners - */ - -package jp.sfjp.mikutoga.vmd.model.xml; - -import javax.xml.bind.DatatypeConverter; -import org.xml.sax.Attributes; - -/** - * XSD各種型のSAX属性値をJavaプリミティブ型へ変換する。 - */ -public final class SaxAttr { - - /** - * 隠しコンストラクタ。 - */ - private SaxAttr(){ - assert false; - throw new AssertionError(); - } - - - /** - * 属性名に対応する属性値があるか否か判定する。 - * @param attr 属性群 - * @param name 属性名 - * @return 属性名に対応する属性値がある場合はtrue - */ - public static boolean hasAttr(Attributes attr, String name){ - if(attr.getValue(name) == null) return false; - return true; - } - - /** - * xsd:string型属性値の読み込み。 - * @param attr 属性群 - * @param name 属性名 - * @return 属性値。該当する属性が無ければnull。 - */ - public static String getStringAttr(Attributes attr, String name){ - String attrVal = attr.getValue(name); - return attrVal; - } - - /** - * xsd:boolean型属性値の読み込み。 - * @param attr 属性群 - * @param name 属性名 - * @return 属性値。 - * @throws IllegalArgumentException boolean型表記ではない - */ - public static boolean getBooleanAttr(Attributes attr, String name) - throws IllegalArgumentException{ - String attrVal = attr.getValue(name); - boolean bVal; - bVal = DatatypeConverter.parseBoolean(attrVal); - return bVal; - } - - /** - * xsd:boolean型属性値の読み込み。 - * @param attr 属性群 - * @param name 属性名 - * @param def 属性が無い場合のデフォルト値 - * @return 属性値。 - * @throws IllegalArgumentException boolean型表記ではない - */ - public static boolean getBooleanAttr(Attributes attr, - String name, - boolean def ) - throws IllegalArgumentException{ - String attrVal = attr.getValue(name); - if(attrVal == null) return def; - - boolean bVal; - bVal = DatatypeConverter.parseBoolean(attrVal); - - return bVal; - } - - /** - * xsd:byte型属性の読み込み。 - * @param attr 属性群 - * @param name 属性名 - * @return 属性値。 - * @throws NumberFormatException byte型表記ではない - */ - public static byte getByteAttr(Attributes attr, String name) - throws NumberFormatException{ - String attrVal = attr.getValue(name); - byte bVal; - bVal = DatatypeConverter.parseByte(attrVal); - return bVal; - } - - /** - * xsd:float型属性値の読み込み。 - * @param attr 属性群 - * @param name 属性名 - * @return 属性値。 - * @throws NumberFormatException float型表記ではない - */ - public static float getFloatAttr(Attributes attr, String name) - throws NumberFormatException { - String attrVal = attr.getValue(name); - float fVal; - fVal = DatatypeConverter.parseFloat(attrVal); - return fVal; - } - - /** - * xsd:int型属性値の読み込み。 - * @param attr 属性群 - * @param name 属性名 - * @return 属性値。 - * @throws NumberFormatException int型表記ではない - */ - public static int getIntAttr(Attributes attr, String name) - throws NumberFormatException { - String attrVal = attr.getValue(name); - int iVal; - iVal = DatatypeConverter.parseInt(attrVal); - return iVal; - } - -} diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxCameraListener.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxCameraListener.java index e29a620..c27920e 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxCameraListener.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxCameraListener.java @@ -14,6 +14,7 @@ import jp.sfjp.mikutoga.vmd.model.CameraMotion; import jp.sfjp.mikutoga.vmd.model.CameraRotation; import jp.sfjp.mikutoga.vmd.model.PosCurve; import jp.sfjp.mikutoga.vmd.model.VmdMotion; +import jp.sfjp.mikutoga.xml.SaxAttr; import org.xml.sax.Attributes; /** diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxFlagListener.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxFlagListener.java new file mode 100644 index 0000000..e9b99af --- /dev/null +++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxFlagListener.java @@ -0,0 +1,116 @@ +/* + * motion flag listener from XML + * + * License : The MIT License + * Copyright(c) 2013 MikuToga Partners + */ + +package jp.sfjp.mikutoga.vmd.model.xml; + +import java.util.List; +import jp.sfjp.mikutoga.vmd.model.IkSwitch; +import jp.sfjp.mikutoga.vmd.model.NumberedVmdFlag; +import jp.sfjp.mikutoga.vmd.model.VmdMotion; +import jp.sfjp.mikutoga.xml.SaxAttr; +import org.xml.sax.Attributes; + +/** + * モーションフラグ関連のXML要素出現イベントを受信する。 + */ +class SaxFlagListener extends SaxVmdListener { + + private NumberedVmdFlag currentFlagMotion = null; + + + /** + * コンストラクタ。 + */ + SaxFlagListener(){ + super(); + return; + } + + + /** + * {@inheritDoc} + * @param tag {@inheritDoc} + * @param attr {@inheritDoc} + */ + @Override + void openTag(VmdTag tag, Attributes attr){ + switch(tag){ + case FLAG_MOTION: + openFlagMotion(attr); + break; + case IK_SWITCH: + openIkSwitch(attr); + break; + default: + break; + } + + return; + } + + /** + * {@inheritDoc} + * @param tag {@inheritDoc} + */ + @Override + void closeTag(VmdTag tag){ + if(tag == VmdTag.FLAG_MOTION){ + closeFlagMotion(); + } + return; + } + + /** + * flagMotion要素開始の通知。 + * @param attr 属性群 + */ + private void openFlagMotion(Attributes attr){ + this.currentFlagMotion = new NumberedVmdFlag(); + + int frameNo = SaxAttr.getIntAttr(attr, XmlAttr.ATTR_FRAME); + boolean showModel = + SaxAttr.getBooleanAttr(attr, XmlAttr.ATTR_SHOWMODEL); + + this.currentFlagMotion.setFrameNumber(frameNo); + this.currentFlagMotion.setModelShown(showModel); + + return; + } + + /** + * flagMotion要素終了の通知。 + */ + private void closeFlagMotion(){ + VmdMotion motion = getVmdMotion(); + List flagList = motion.getNumberedFlagList(); + flagList.add(this.currentFlagMotion); + + this.currentFlagMotion = null; + + return; + } + + /** + * ikSwitch要素開始の通知。 + * @param attr 属性群 + */ + private void openIkSwitch(Attributes attr){ + String boneName = SaxAttr.getStringAttr(attr, XmlAttr.ATTR_NAME); + boolean valid = + SaxAttr.getBooleanAttr(attr, XmlAttr.ATTR_VALID); + + IkSwitch ikSw = new IkSwitch(); + ikSw.setBoneName(boneName); + ikSw.setValid(valid); + + List ikList = this.currentFlagMotion.getIkSwitchList(); + ikList.add(ikSw); + + return; + } + +} diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxLightingListener.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxLightingListener.java index 9cfe45a..8c7830c 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxLightingListener.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxLightingListener.java @@ -14,6 +14,7 @@ import jp.sfjp.mikutoga.vmd.model.LuminousMotion; import jp.sfjp.mikutoga.vmd.model.ShadowMode; import jp.sfjp.mikutoga.vmd.model.ShadowMotion; import jp.sfjp.mikutoga.vmd.model.VmdMotion; +import jp.sfjp.mikutoga.xml.SaxAttr; import org.xml.sax.Attributes; /** diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxMotionListener.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxMotionListener.java index 3cd616b..3e96143 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxMotionListener.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxMotionListener.java @@ -14,6 +14,7 @@ import jp.sfjp.mikutoga.vmd.model.BoneMotion; import jp.sfjp.mikutoga.vmd.model.MorphMotion; import jp.sfjp.mikutoga.vmd.model.PosCurve; import jp.sfjp.mikutoga.vmd.model.VmdMotion; +import jp.sfjp.mikutoga.xml.SaxAttr; import org.xml.sax.Attributes; /** diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxVmdListener.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxVmdListener.java index dfc1aa5..6740f19 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxVmdListener.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/SaxVmdListener.java @@ -10,6 +10,7 @@ package jp.sfjp.mikutoga.vmd.model.xml; import jp.sfjp.mikutoga.vmd.model.BezierParam; import jp.sfjp.mikutoga.vmd.model.PosCurve; import jp.sfjp.mikutoga.vmd.model.VmdMotion; +import jp.sfjp.mikutoga.xml.SaxAttr; import org.xml.sax.Attributes; /** diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/Schema110820.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/Schema110820.java index 8805d7e..b5f450f 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/Schema110820.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/Schema110820.java @@ -9,7 +9,7 @@ package jp.sfjp.mikutoga.vmd.model.xml; import java.net.URI; import java.net.URISyntaxException; -import jp.sourceforge.mikutoga.xml.LocalXmlResource; +import jp.sfjp.mikutoga.xml.LocalXmlResource; /** * 110820形式XML各種リソースの定義。 diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/Schema130609.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/Schema130609.java new file mode 100644 index 0000000..987437e --- /dev/null +++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/Schema130609.java @@ -0,0 +1,81 @@ +/* + * xml resources for VMD-XML + * + * License : The MIT License + * Copyright(c) 2013 MikuToga Partners + */ + +package jp.sfjp.mikutoga.vmd.model.xml; + +import java.net.URI; +import java.net.URISyntaxException; +import jp.sfjp.mikutoga.xml.LocalXmlResource; + +/** + * 130609形式XML各種リソースの定義。 + *

MikuMikuDance Ver7.40 の新VMDファイルフォーマット対応。 + */ +public final class Schema130609 implements LocalXmlResource{ + + /** 唯一のシングルトン。 */ + public static final Schema130609 SINGLETON; + + /** XML名前空間識別子。 */ + public static final String NS_VMDXML = + "http://mikutoga.sourceforge.jp/xml/ns/vmdxml/130609"; + /** XMLスキーマURI名。 */ + public static final String SCHEMA_VMDXML = + "http://mikutoga.sourceforge.jp/xml/xsd/vmdxml-130609.xsd"; + /** 定義の版数。 */ + public static final String VER_VMDXML = + "130609"; + /** ローカルなスキーマファイル名。 */ + public static final String LOCAL_SCHEMA_VMDXML = + "resources/vmdxml-130609.xsd"; + + private static final URI URI_SCHEMA_VMDXML = URI.create(SCHEMA_VMDXML); + private static final URI RES_SCHEMA_VMDXML; + + private static final Class THISCLASS = Schema130609.class; + + static{ + try{ + RES_SCHEMA_VMDXML = + THISCLASS.getResource(LOCAL_SCHEMA_VMDXML).toURI(); + }catch(URISyntaxException e){ + throw new ExceptionInInitializerError(e); + } + + SINGLETON = new Schema130609(); + } + + + /** + * コンストラクタ。 + */ + private Schema130609(){ + super(); + assert this.getClass() == THISCLASS; + return; + } + + + /** + * {@inheritDoc} + * @return {@inheritDoc} + */ + @Override + public URI getOriginalResource(){ + return URI_SCHEMA_VMDXML; + } + + /** + * {@inheritDoc} + * @return {@inheritDoc} + */ + @Override + public URI getLocalResource(){ + return RES_SCHEMA_VMDXML; + } + +} diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/VmdTag.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/VmdTag.java index e0cbc4d..b67e8b8 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/VmdTag.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/VmdTag.java @@ -30,6 +30,10 @@ enum VmdTag { MORPH_PART ("morphPart"), MORPH_MOTION ("morphMotion"), + FLAG_SEQUENCE ("flagSequence"), + FLAG_MOTION ("flagMotion"), + IK_SWITCH ("ikSwitch"), + CAMERA_SEQUENCE("cameraSequence"), CAMERA_MOTION ("cameraMotion"), CAMERA_TARGET ("cameraTarget"), diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/VmdXmlExporter.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/VmdXmlExporter.java index 175a827..165e209 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/VmdXmlExporter.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/VmdXmlExporter.java @@ -23,8 +23,8 @@ import jp.sfjp.mikutoga.vmd.model.BoneMotion; import jp.sfjp.mikutoga.vmd.model.MorphMotion; import jp.sfjp.mikutoga.vmd.model.PosCurve; import jp.sfjp.mikutoga.vmd.model.VmdMotion; -import jp.sourceforge.mikutoga.xml.BasicXmlExporter; -import jp.sourceforge.mikutoga.xml.XmlResourceResolver; +import jp.sfjp.mikutoga.xml.BasicXmlExporter; +import jp.sfjp.mikutoga.xml.XmlResourceResolver; /** * VMDモーションデータをXMLへエクスポートする。 @@ -43,12 +43,15 @@ public class VmdXmlExporter extends BasicXmlExporter { private static final String MSG_MAYBE = "Perhaps : [{0}]"; + private XmlMotionFileType xmlType = XmlMotionFileType.XML_110820; + private boolean isQuaternionMode = true; private String generator = ""; private final CameraXmlExporter cameraXmlExporter; private final LightingXmlExpoter lightingExporter; private final ExtraXmlExporter extraExporter; + private final FlagXmlExporter flagXmlExporter; /** @@ -60,10 +63,43 @@ public class VmdXmlExporter extends BasicXmlExporter { this.cameraXmlExporter = new CameraXmlExporter(this); this.lightingExporter = new LightingXmlExpoter(this); this.extraExporter = new ExtraXmlExporter(this); + this.flagXmlExporter = new FlagXmlExporter(this); + + return; + } + + + /** + * 出力XMLファイル種別を設定する。 + * @param type ファイル種別 + */ + public void setXmlFileType(XmlMotionFileType type){ + switch(type){ + case XML_110820: + case XML_130609: + this.xmlType = type; + break; + case XML_AUTO: + this.xmlType = XmlMotionFileType.XML_130609; + break; + default: + assert false; + throw new AssertionError(); + } + + assert this.xmlType == XmlMotionFileType.XML_110820 + || this.xmlType == XmlMotionFileType.XML_130609; return; } + /** + * 出力XMLファイル種別を返す。 + * @return ファイル種別 + */ + public XmlMotionFileType getXmlFileType(){ + return this.xmlType; + } /** * ボーン回転量をクォータニオンで出力するか否か設定する。 @@ -126,25 +162,7 @@ public class VmdXmlExporter extends BasicXmlExporter { */ private void putVmdXmlImpl(VmdMotion vmdMotion) throws IOException, IllegalVmdDataException{ - ind().putRawText(XML_DECL).ln(2); - - ind().putBlockComment(XmlComment.TOP_COMMENT).ln(2); - - ind().putOpenSTag(VmdTag.VMD_MOTION.tag()).ln(); - pushNest(); - ind().putAttr("xmlns", Schema110820.NS_VMDXML).ln(); - ind().putAttr("xmlns:" + XSINS, XmlResourceResolver.NS_XSD).ln(); - - ind().putRawText(XSINS).putRawText(":schemaLocation=") - .putRawCh('"'); - putRawText(Schema110820.NS_VMDXML).ln(); - ind().sp(2).putRawText(Schema110820.SCHEMA_VMDXML) - .putRawCh('"') - .ln(); - - ind().putAttr(XmlAttr.ATTR_VERSION, Schema110820.VER_VMDXML).ln(); - popNest(); - putCloseSTag().ln(2); + putVmdRootOpen(); putGenerator(); @@ -152,6 +170,9 @@ public class VmdXmlExporter extends BasicXmlExporter { putModelName(vmdMotion); putBoneMotionSequence(vmdMotion); putMorphSequence(vmdMotion); + if(this.xmlType == XmlMotionFileType.XML_130609){ + this.flagXmlExporter.putFlagSequence(vmdMotion); + } }else{ this.cameraXmlExporter.putCameraSequence(vmdMotion); this.lightingExporter.putLuminousSequence(vmdMotion); @@ -165,6 +186,54 @@ public class VmdXmlExporter extends BasicXmlExporter { } /** + * ルート要素がオープンするまでの各種宣言を出力する。 + * @throws IOException 出力エラー + */ + private void putVmdRootOpen() throws IOException{ + ind().putRawText(XML_DECL).ln(2); + + ind().putBlockComment(XmlComment.TOP_COMMENT).ln(2); + + String namespace; + String schemaUrl; + String schemaVer; + + switch(this.xmlType){ + case XML_110820: + namespace = Schema110820.NS_VMDXML; + schemaUrl = Schema110820.SCHEMA_VMDXML; + schemaVer = Schema110820.VER_VMDXML; + break; + case XML_130609: + namespace = Schema130609.NS_VMDXML; + schemaUrl = Schema130609.SCHEMA_VMDXML; + schemaVer = Schema130609.VER_VMDXML; + break; + default: + assert false; + throw new AssertionError(); + } + + ind().putOpenSTag(VmdTag.VMD_MOTION.tag()).ln(); + pushNest(); + ind().putAttr("xmlns", namespace).ln(); + ind().putAttr("xmlns:" + XSINS, XmlResourceResolver.NS_XSD).ln(); + + ind().putRawText(XSINS).putRawText(":schemaLocation=") + .putRawCh('"'); + putRawText(namespace).ln(); + ind().sp(2).putRawText(schemaUrl) + .putRawCh('"') + .ln(); + + ind().putAttr(XmlAttr.ATTR_VERSION, schemaVer).ln(); + popNest(); + putCloseSTag().ln(2); + + return; + } + + /** * ジェネレータ名を出力する。 * @throws IOException 出力エラー */ diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/XmlAttr.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/XmlAttr.java index 8e6848d..ab09caf 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/XmlAttr.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/XmlAttr.java @@ -58,6 +58,9 @@ final class XmlAttr { static final String ATTR_MODE = "mode"; static final String ATTR_RAW_PARAM = "rawParam"; + static final String ATTR_SHOWMODEL = "showModel"; + static final String ATTR_VALID = "valid"; + /** * 隠しコンストラクタ。 diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/XmlHandler.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/XmlHandler.java index 88a7317..420c1ab 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/XmlHandler.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/XmlHandler.java @@ -8,6 +8,7 @@ package jp.sfjp.mikutoga.vmd.model.xml; import jp.sfjp.mikutoga.vmd.model.VmdMotion; +import jp.sfjp.mikutoga.xml.SaxAttr; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.Locator; @@ -27,6 +28,7 @@ class XmlHandler implements ContentHandler{ private final SaxVmdListener motionListener; private final SaxVmdListener cameraListener; private final SaxVmdListener lightListener; + private final SaxVmdListener flagListener; private SaxVmdListener currentListener = null; @@ -40,6 +42,7 @@ class XmlHandler implements ContentHandler{ this.motionListener = new SaxMotionListener(); this.cameraListener = new SaxCameraListener(); this.lightListener = new SaxLightingListener(); + this.flagListener = new SaxFlagListener(); return; } @@ -64,6 +67,7 @@ class XmlHandler implements ContentHandler{ this.motionListener.setVmdMotion(this.vmdMotion); this.cameraListener.setVmdMotion(this.vmdMotion); this.lightListener .setVmdMotion(this.vmdMotion); + this.flagListener .setVmdMotion(this.vmdMotion); return; } @@ -87,7 +91,8 @@ class XmlHandler implements ContentHandler{ @Override public void startPrefixMapping(String prefix, String uri) throws SAXException { - if(Schema110820.NS_VMDXML.equals(uri)){ + if( Schema110820.NS_VMDXML.equals(uri) + || Schema130609.NS_VMDXML.equals(uri) ){ this.nspfx = prefix; this.nsuri = uri; } @@ -159,6 +164,9 @@ class XmlHandler implements ContentHandler{ case SHADOW_SEQUENCE: this.currentListener = this.lightListener; break; + case FLAG_SEQUENCE: + this.currentListener = this.flagListener; + break; default: break; } diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/XmlMotionFileType.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/XmlMotionFileType.java new file mode 100644 index 0000000..1b30b9f --- /dev/null +++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/XmlMotionFileType.java @@ -0,0 +1,39 @@ +/* + * MMD motion xml file types. + * + * License : The MIT License + * Copyright(c) 2013 MikuToga Partners + */ + +package jp.sfjp.mikutoga.vmd.model.xml; + +/** + * XMLファイルスキーマ種別。 + */ +public enum XmlMotionFileType { + + /** + * XMLファイル(自動判別)。 + *

読み込み時のスキーマ判別は自動。 + *

書き込み時のスキーマは最新。 + */ + XML_AUTO, + + /** + * スキーマ + * http://mikutoga.sourceforge.jp/xml/xsd/vmdxml-110820.xsd + * で定義されたXMLファイル。 + */ + XML_110820, + + /** + * スキーマ + * http://mikutoga.sourceforge.jp/xml/xsd/vmdxml-130609.xsd + * で定義されたXMLファイル。 + * MikuMikuDance Ver7.40対応。 + */ + XML_130609, + + ; + +} diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/XmlVmdLoader.java b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/XmlVmdLoader.java index c068ce5..80c2051 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/XmlVmdLoader.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd/model/xml/XmlVmdLoader.java @@ -9,7 +9,7 @@ package jp.sfjp.mikutoga.vmd.model.xml; import java.io.IOException; import jp.sfjp.mikutoga.vmd.model.VmdMotion; -import jp.sourceforge.mikutoga.xml.TogaXmlException; +import jp.sfjp.mikutoga.xml.TogaXmlException; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; diff --git a/src/main/java/jp/sfjp/mikutoga/vmd2xml/MotionFileType.java b/src/main/java/jp/sfjp/mikutoga/vmd2xml/MotionFileType.java index 672ff74..d065436 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd2xml/MotionFileType.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd2xml/MotionFileType.java @@ -7,6 +7,8 @@ package jp.sfjp.mikutoga.vmd2xml; +import jp.sfjp.mikutoga.vmd.model.xml.XmlMotionFileType; + /** * モーションファイル種別。 */ @@ -23,12 +25,27 @@ public enum MotionFileType { VMD, /** + * XMLファイル(自動判別)。 + *

読み込み時のスキーマ判別は自動。 + *

書き込み時のスキーマは最新。 + */ + XML_AUTO, + + /** * スキーマ * http://mikutoga.sourceforge.jp/xml/xsd/vmdxml-110820.xsd * で定義されたXMLファイル。 */ XML_110820, + /** + * スキーマ + * http://mikutoga.sourceforge.jp/xml/xsd/vmdxml-130609.xsd + * で定義されたXMLファイル。 + * MikuMikuDance Ver7.40対応。 + */ + XML_130609, + ; @@ -39,12 +56,47 @@ public enum MotionFileType { return; } + + /** + * ファイル種別をXMLファイル種別に変換する。 + *

未定義の場合はXML_AUTOを返す。 + * @return XMLファイル種別 + */ + public XmlMotionFileType toXmlType(){ + XmlMotionFileType result; + + switch(this){ + case XML_110820: + result = XmlMotionFileType.XML_110820; + break; + case XML_130609: + result = XmlMotionFileType.XML_130609; + break; + case XML_AUTO: + result = XmlMotionFileType.XML_AUTO; + break; + default: + result = XmlMotionFileType.XML_AUTO; + break; + } + + return result; + } + /** * ファイル種別がXMLか判定する。 * @return XMLならtrue */ public boolean isXml(){ - if(this == XML_110820) return true; + switch(this){ + case XML_AUTO: + case XML_110820: + case XML_130609: + return true; + default: + break; + } + return false; } diff --git a/src/main/java/jp/sfjp/mikutoga/vmd2xml/OptInfo.java b/src/main/java/jp/sfjp/mikutoga/vmd2xml/OptInfo.java index 91eba48..1f13770 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd2xml/OptInfo.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd2xml/OptInfo.java @@ -23,6 +23,7 @@ final class OptInfo { private static final String FORMAT_VMD = "vmd"; private static final String FORMAT_XML = "xml"; private static final String FORMAT_XML110820 = "xml110820"; + private static final String FORMAT_XML130609 = "xml130609"; private static final String SFX_VMD = ".vmd"; private static final String SFX_XML = ".xml"; @@ -84,9 +85,11 @@ final class OptInfo { if (FORMAT_VMD.equals(arg)){ result = MotionFileType.VMD; }else if(FORMAT_XML.equals(arg)){ - result = MotionFileType.XML_110820; + result = MotionFileType.XML_AUTO; }else if(FORMAT_XML110820.equals(arg)){ result = MotionFileType.XML_110820; + }else if(FORMAT_XML130609.equals(arg)){ + result = MotionFileType.XML_130609; }else{ String errMsg = MessageFormat.format(ERRMSG_INVFORM, arg); throw new CmdLineException(errMsg); @@ -155,7 +158,7 @@ final class OptInfo { String lower = fileName.toLowerCase(Locale.ROOT); if (lower.endsWith(SFX_VMD)) result = MotionFileType.VMD; - else if(lower.endsWith(SFX_XML)) result = MotionFileType.XML_110820; + else if(lower.endsWith(SFX_XML)) result = MotionFileType.XML_AUTO; return result; } diff --git a/src/main/java/jp/sfjp/mikutoga/vmd2xml/OptSwitch.java b/src/main/java/jp/sfjp/mikutoga/vmd2xml/OptSwitch.java index de39e1d..ea4c087 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd2xml/OptSwitch.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd2xml/OptSwitch.java @@ -47,7 +47,7 @@ enum OptSwitch { + " or \"true\" or \"false\"" + " or \"yes\" or \"no\"\n" + " format : \"vmd\" or \"xml\" or" - + " \"xml110820\"\n" + + " \"xml110820\" or \"xml130609\"\n" + " newline : \"lf\" or \"crlf\"\n" ; diff --git a/src/main/java/jp/sfjp/mikutoga/vmd2xml/Vmd2Xml.java b/src/main/java/jp/sfjp/mikutoga/vmd2xml/Vmd2Xml.java index ffde5ef..f534020 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd2xml/Vmd2Xml.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd2xml/Vmd2Xml.java @@ -15,15 +15,12 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintStream; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URL; import java.nio.channels.FileChannel; import java.text.MessageFormat; import java.util.Properties; import jp.sfjp.mikutoga.bin.parser.MmdFormatException; import jp.sfjp.mikutoga.vmd.IllegalVmdDataException; -import jp.sourceforge.mikutoga.xml.TogaXmlException; +import jp.sfjp.mikutoga.xml.TogaXmlException; import org.xml.sax.InputSource; import org.xml.sax.SAXException; @@ -68,7 +65,7 @@ public final class Vmd2Xml { "{0} {1}\n" + "\u0020\u0020License\u0020:\u0020{2}\n" + "\u0020\u0020{3}\n"; - private static final String MSG_NOINFILE = "Can't find input file:{0}"; + private static final String MSG_NOINFILE = "Can''t find input file: {0}"; private static final String MSG_ABNFILE = "{0} is not file."; private static final String MSG_OWOUTFILE = "{0} already exists.\n" @@ -269,18 +266,7 @@ public final class Vmd2Xml { exit(EXIT_IOERR); } - URI uri = inFile.toURI(); - URL url; - try{ - url = uri.toURL(); - }catch(MalformedURLException e){ - // File由来のURLでは起こりえない - assert false; - throw new AssertionError(e); - } - String systemId = url.toString(); - - InputSource source = new InputSource(systemId); + InputSource source = XmlInputUtil.fileToSource(inFile); return source; } diff --git a/src/main/java/jp/sfjp/mikutoga/vmd2xml/Vmd2XmlConv.java b/src/main/java/jp/sfjp/mikutoga/vmd2xml/Vmd2XmlConv.java index 1b0135e..2c0684c 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd2xml/Vmd2XmlConv.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd2xml/Vmd2XmlConv.java @@ -7,31 +7,22 @@ package jp.sfjp.mikutoga.vmd2xml; -import java.io.BufferedInputStream; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Writer; -import java.net.URL; import java.nio.charset.Charset; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.parsers.SAXParser; -import javax.xml.parsers.SAXParserFactory; -import javax.xml.validation.Schema; import jp.sfjp.mikutoga.bin.parser.MmdFormatException; import jp.sfjp.mikutoga.vmd.IllegalVmdDataException; import jp.sfjp.mikutoga.vmd.model.VmdMotion; import jp.sfjp.mikutoga.vmd.model.binio.VmdExporter; import jp.sfjp.mikutoga.vmd.model.binio.VmdLoader; -import jp.sfjp.mikutoga.vmd.model.xml.Schema110820; import jp.sfjp.mikutoga.vmd.model.xml.VmdXmlExporter; +import jp.sfjp.mikutoga.vmd.model.xml.XmlMotionFileType; import jp.sfjp.mikutoga.vmd.model.xml.XmlVmdLoader; -import jp.sourceforge.mikutoga.xml.BotherHandler; -import jp.sourceforge.mikutoga.xml.SchemaUtil; -import jp.sourceforge.mikutoga.xml.TogaXmlException; -import jp.sourceforge.mikutoga.xml.XmlResourceResolver; +import jp.sfjp.mikutoga.xml.TogaXmlException; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; @@ -62,107 +53,6 @@ public class Vmd2XmlConv { /** - * InputSourceからInputStreamを得る。 - *

入力ソースには、少なくともバイトストリームか - * URL文字列(SystemId)のいずれかが設定されていなければならない。 - * @param source 入力ソース - * @return 入力バイトストリーム - * @throws IllegalArgumentException 入力ソースの設定が足りない。 - * @throws IOException 入力ソースにアクセス不能。 - */ - private static InputStream openInputSource(InputSource source) - throws IllegalArgumentException, IOException{ - InputStream is; - - is = source.getByteStream(); - - if(is == null){ - String systemId = source.getSystemId(); - if(systemId == null) throw new IllegalArgumentException(); - - URL url = new URL(systemId); - is = url.openStream(); - } - - is = new BufferedInputStream(is); - - return is; - } - - /** - * SAXパーサファクトリを生成する。 - *

    - *
  • XML名前空間機能は有効になる。 - *
  • DTDによる形式検証は無効となる。 - *
  • XIncludeによる差し込み機能は無効となる。 - *
- * @param schema スキーマ - * @return ファクトリ - */ - private static SAXParserFactory buildFactory(Schema schema){ - SAXParserFactory factory = SAXParserFactory.newInstance(); - - factory.setNamespaceAware(true); - factory.setValidating(false); - factory.setXIncludeAware(false); -// factory.setFeature(name, value); - - factory.setSchema(schema); - - return factory; - } - - /** - * SAXパーサを生成する。 - * @param schema スキーマ - * @return SAXパーサ - */ - private static SAXParser buildParser(Schema schema){ - SAXParserFactory factory = buildFactory(schema); - - SAXParser parser; - try{ - parser = factory.newSAXParser(); - }catch(ParserConfigurationException e){ - assert false; - throw new AssertionError(e); - }catch(SAXException e){ - assert false; - throw new AssertionError(e); - } - -// parser.setProperty(name, value); - - return parser; - } - - /** - * XMLリーダを生成する。 - *

エラーハンドラには{@link BotherHandler}が指定される。 - * @param resolver リゾルバ - * @return XMLリーダ - */ - private static XMLReader buildReader(XmlResourceResolver resolver){ - Schema schema; - schema = SchemaUtil.newSchema(resolver, Schema110820.SINGLETON); - - SAXParser parser = buildParser(schema); - - XMLReader reader; - try{ - reader = parser.getXMLReader(); - }catch(SAXException e){ - assert false; - throw new AssertionError(e); - } - - reader.setEntityResolver(resolver); - reader.setErrorHandler(BotherHandler.HANDLER); - - return reader; - } - - /** * 入力ファイル種別を設定する。 * @param type ファイル種別 * @throws IllegalArgumentException 具体的な種別を渡さなかった @@ -353,7 +243,7 @@ public class Vmd2XmlConv { VmdMotion motion = null; if(this.inTypes.isVmd()){ - InputStream is = openInputSource(source); + InputStream is = XmlInputUtil.openInputSource(source); try{ motion = vmdRead(is); }finally{ @@ -420,8 +310,7 @@ public class Vmd2XmlConv { throws IOException, SAXException, TogaXmlException { - XmlResourceResolver resolver = new XmlResourceResolver(); - XMLReader reader = buildReader(resolver); + XMLReader reader = XmlInputUtil.buildReader(this.inTypes); XmlVmdLoader loader = new XmlVmdLoader(reader); VmdMotion motion = loader.parse(source); @@ -455,6 +344,8 @@ public class Vmd2XmlConv { throws IOException, IllegalVmdDataException{ VmdXmlExporter exporter = new VmdXmlExporter(); + XmlMotionFileType xmlType = this.outTypes.toXmlType(); + exporter.setXmlFileType(xmlType); exporter.setNewLine(this.newLine); exporter.setGenerator(this.generator); exporter.setQuaternionMode(this.isQuaternionMode); diff --git a/src/main/java/jp/sfjp/mikutoga/vmd2xml/XmlInputUtil.java b/src/main/java/jp/sfjp/mikutoga/vmd2xml/XmlInputUtil.java new file mode 100644 index 0000000..1d4303e --- /dev/null +++ b/src/main/java/jp/sfjp/mikutoga/vmd2xml/XmlInputUtil.java @@ -0,0 +1,208 @@ +/* + * xml input utility + * + * License : The MIT License + * Copyright(c) 2013 MikuToga Partners + */ + +package jp.sfjp.mikutoga.vmd2xml; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URL; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.parsers.SAXParser; +import javax.xml.parsers.SAXParserFactory; +import javax.xml.validation.Schema; +import jp.sfjp.mikutoga.vmd.model.xml.Schema110820; +import jp.sfjp.mikutoga.vmd.model.xml.Schema130609; +import jp.sfjp.mikutoga.xml.BotherHandler; +import jp.sfjp.mikutoga.xml.LocalXmlResource; +import jp.sfjp.mikutoga.xml.SchemaUtil; +import jp.sfjp.mikutoga.xml.XmlResourceResolver; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.XMLReader; + +/** + * XML入力に関する各種ユーティリティ。 + */ +final class XmlInputUtil { + + /** + * 隠しコンストラクタ。 + */ + private XmlInputUtil(){ + assert false; + throw new AssertionError(); + } + + + /** + * 実在ファイルからXML入力ソースを得る。 + * @param file 実在ファイル + * @return XML入力ソース + */ + static InputSource fileToSource(File file){ + assert file.exists(); + + URI uri = file.toURI(); + + URL url; + try{ + url = uri.toURL(); + }catch(MalformedURLException e){ + // 実在File由来のURLでは起こりえない + assert false; + throw new AssertionError(e); + } + + String systemId = url.toString(); + + InputSource source = new InputSource(systemId); + + return source; + } + + /** + * InputSourceからInputStreamを得る。 + *

入力ソースには、少なくともバイトストリームか + * URL文字列(SystemId)のいずれかが設定されていなければならない。 + * @param source 入力ソース + * @return 入力バイトストリーム + * @throws IllegalArgumentException 入力ソースの設定が足りない。 + * @throws IOException 入力ソースにアクセス不能。 + */ + static InputStream openInputSource(InputSource source) + throws IllegalArgumentException, IOException{ + InputStream is; + + is = source.getByteStream(); + + if(is == null){ + String systemId = source.getSystemId(); + if(systemId == null) throw new IllegalArgumentException(); + + URL url = new URL(systemId); + is = url.openStream(); + } + + is = new BufferedInputStream(is); + + return is; + } + + /** + * SAXパーサファクトリを生成する。 + *

    + *
  • XML名前空間機能は有効になる。 + *
  • DTDによる形式検証は無効となる。 + *
  • XIncludeによる差し込み機能は無効となる。 + *
+ * @param schema スキーマ + * @return ファクトリ + */ + private static SAXParserFactory buildFactory(Schema schema){ + SAXParserFactory factory = SAXParserFactory.newInstance(); + + factory.setNamespaceAware(true); + factory.setValidating(false); + factory.setXIncludeAware(false); +// factory.setFeature(name, value); + + factory.setSchema(schema); + + return factory; + } + + /** + * SAXパーサを生成する。 + * @param schema スキーマ + * @return SAXパーサ + */ + private static SAXParser buildParser(Schema schema){ + SAXParserFactory factory = buildFactory(schema); + + SAXParser parser; + try{ + parser = factory.newSAXParser(); + }catch(ParserConfigurationException e){ + assert false; + throw new AssertionError(e); + }catch(SAXException e){ + assert false; + throw new AssertionError(e); + } + +// parser.setProperty(name, value); + + return parser; + } + + /** + * スキーマを生成する。 + * @param resolver リゾルバ + * @param xmlInType 入力XML種別 + * @return スキーマ + */ + private static Schema builsSchema(XmlResourceResolver resolver, + MotionFileType xmlInType ){ + LocalXmlResource[] schemaArray; + switch(xmlInType){ + case XML_110820: + schemaArray = new LocalXmlResource[]{ + Schema110820.SINGLETON, + }; + break; + case XML_130609: + schemaArray = new LocalXmlResource[]{ + Schema130609.SINGLETON, + }; + break; + case XML_AUTO: + schemaArray = new LocalXmlResource[]{ + Schema110820.SINGLETON, + Schema130609.SINGLETON, + }; + break; + default: + throw new IllegalStateException(); + } + + Schema schema = SchemaUtil.newSchema(resolver, schemaArray); + + return schema; + } + + /** + * XMLリーダを生成する。 + *

エラーハンドラには{@link BotherHandler}が指定される。 + * @param xmlInType 入力XML種別 + * @return XMLリーダ + */ + static XMLReader buildReader(MotionFileType xmlInType){ + XmlResourceResolver resolver = new XmlResourceResolver(); + + Schema schema = builsSchema(resolver, xmlInType); + + SAXParser parser = buildParser(schema); + + XMLReader reader; + try{ + reader = parser.getXMLReader(); + }catch(SAXException e){ + assert false; + throw new AssertionError(e); + } + + reader.setEntityResolver(resolver); + reader.setErrorHandler(BotherHandler.HANDLER); + + return reader; + } + +} diff --git a/src/main/resources/jp/sfjp/mikutoga/vmd/model/xml/resources/vmdxml-130609A.xsd b/src/main/resources/jp/sfjp/mikutoga/vmd/model/xml/resources/vmdxml-130609.xsd similarity index 99% rename from src/main/resources/jp/sfjp/mikutoga/vmd/model/xml/resources/vmdxml-130609A.xsd rename to src/main/resources/jp/sfjp/mikutoga/vmd/model/xml/resources/vmdxml-130609.xsd index d1109fd..5713a50 100644 --- a/src/main/resources/jp/sfjp/mikutoga/vmd/model/xml/resources/vmdxml-130609A.xsd +++ b/src/main/resources/jp/sfjp/mikutoga/vmd/model/xml/resources/vmdxml-130609.xsd @@ -11,8 +11,8 @@ - + + ]> diff --git a/src/test/java/jp/sfjp/mikutoga/vmd2xml/MotionFileTypeTest.java b/src/test/java/jp/sfjp/mikutoga/vmd2xml/MotionFileTypeTest.java index d95193f..d8d850f 100644 --- a/src/test/java/jp/sfjp/mikutoga/vmd2xml/MotionFileTypeTest.java +++ b/src/test/java/jp/sfjp/mikutoga/vmd2xml/MotionFileTypeTest.java @@ -3,6 +3,7 @@ package jp.sfjp.mikutoga.vmd2xml; +import jp.sfjp.mikutoga.vmd.model.xml.XmlMotionFileType; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; @@ -40,7 +41,7 @@ public class MotionFileTypeTest { @Test public void testValues() { System.out.println("values"); - assertEquals(3, MotionFileType.values().length); + assertEquals(5, MotionFileType.values().length); return; } @@ -63,7 +64,9 @@ public class MotionFileTypeTest { assertFalse(MotionFileType.NONE.isXml()); assertFalse(MotionFileType.VMD.isXml()); + assertTrue(MotionFileType.XML_AUTO.isXml()); assertTrue(MotionFileType.XML_110820.isXml()); + assertTrue(MotionFileType.XML_130609.isXml()); return; } @@ -77,7 +80,25 @@ public class MotionFileTypeTest { assertFalse(MotionFileType.NONE.isVmd()); assertTrue(MotionFileType.VMD.isVmd()); + assertFalse(MotionFileType.XML_AUTO.isVmd()); assertFalse(MotionFileType.XML_110820.isVmd()); + assertFalse(MotionFileType.XML_130609.isVmd()); + + return; + } + + /** + * Test of toXmlType method, of class MotionFileType. + */ + @Test + public void testToXmlType() { + System.out.println("toXmlType"); + + assertSame(XmlMotionFileType.XML_AUTO, MotionFileType.NONE.toXmlType()); + assertSame(XmlMotionFileType.XML_AUTO, MotionFileType.VMD.toXmlType()); + assertSame(XmlMotionFileType.XML_AUTO, MotionFileType.XML_AUTO.toXmlType()); + assertSame(XmlMotionFileType.XML_110820, MotionFileType.XML_110820.toXmlType()); + assertSame(XmlMotionFileType.XML_130609, MotionFileType.XML_130609.toXmlType()); return; } diff --git a/src/test/java/jp/sfjp/mikutoga/vmd2xml/OptInfoTest.java b/src/test/java/jp/sfjp/mikutoga/vmd2xml/OptInfoTest.java index b51f71b..9082a73 100644 --- a/src/test/java/jp/sfjp/mikutoga/vmd2xml/OptInfoTest.java +++ b/src/test/java/jp/sfjp/mikutoga/vmd2xml/OptInfoTest.java @@ -86,7 +86,7 @@ public class OptInfoTest { assertFalse(result.needHelp()); assertSame(MotionFileType.VMD, result.getInFileType()); assertEquals("test.vmd", result.getInFilename()); - assertSame(MotionFileType.XML_110820, result.getOutFileType()); + assertSame(MotionFileType.XML_AUTO, result.getOutFileType()); assertEquals("test.xml", result.getOutFilename()); assertEquals(Vmd2Xml.GENERATOR, result.getGenerator()); assertEquals("\n", result.getNewline()); @@ -116,11 +116,14 @@ public class OptInfoTest { assertEquals("input", result.getInFilename()); result = OptInfo.parseOption("-i", "input", "-o", "test.xml", "-iform", "xml"); - assertSame(MotionFileType.XML_110820, result.getInFileType()); + assertSame(MotionFileType.XML_AUTO, result.getInFileType()); result = OptInfo.parseOption("-i", "input", "-o", "test.xml", "-iform", "xml110820"); assertSame(MotionFileType.XML_110820, result.getInFileType()); + result = OptInfo.parseOption("-i", "input", "-o", "test.xml", "-iform", "xml130609"); + assertSame(MotionFileType.XML_130609, result.getInFileType()); + try{ OptInfo.parseOption("-i", "test.vmd", "-o", "output"); fail(); diff --git a/src/test/java/testdata/CnvAssert.java b/src/test/java/testdata/CnvAssert.java index cfc9a5f..853dfc9 100644 --- a/src/test/java/testdata/CnvAssert.java +++ b/src/test/java/testdata/CnvAssert.java @@ -48,41 +48,26 @@ public class CnvAssert { String xmlResource, String expVmdResource ) throws Exception{ - InputStream xmlis = - klass.getResourceAsStream(xmlResource); - assertNotNull(xmlis); - xmlis = new BufferedInputStream(xmlis); - - File destFile = openTempFile(); - OutputStream destOut; - destOut = new FileOutputStream(destFile); - destOut = new BufferedOutputStream(destOut); - Vmd2XmlConv converter = new Vmd2XmlConv(); - converter.setInType(MotionFileType.XML_110820); + converter.setInType(MotionFileType.XML_AUTO); converter.setOutType(MotionFileType.VMD); converter.setNewline("\n"); - converter.convert(xmlis, destOut); - - xmlis.close(); - destOut.close(); - - assertSameFile(klass, expVmdResource, destFile); + assertConvert(klass, xmlResource, expVmdResource, converter); return; } /** - * PMDリソースをXMLに変換した結果がXMLリソースに等しいと表明する。 + * VMDリソースを110820版XMLに変換した結果がXMLリソースに等しいと表明する。 * @param klass リソース元クラス - * @param pmdResource PMDリソース名 + * @param vmdResource VMDリソース名 * @param expXmlResource XMLリソース名 * @throws Exception エラー */ - public static void assertVmd2Xml( + public static void assertVmd2OldXml( Class klass, - String pmdResource, + String vmdResource, String expXmlResource ) throws Exception{ Vmd2XmlConv converter = new Vmd2XmlConv(); @@ -91,27 +76,50 @@ public class CnvAssert { converter.setNewline("\n"); converter.setGenerator(null); - assertVmd2Xml(klass, pmdResource, expXmlResource, converter); + assertConvert(klass, vmdResource, expXmlResource, converter); return; } /** - * VMDリソースをXMLに変換した結果がXMLリソースに等しいと表明する。 + * VMDリソースを130609版XMLに変換した結果がXMLリソースに等しいと表明する。 * @param klass リソース元クラス - * @param vmdResource PMDリソース名 + * @param vmdResource VMDリソース名 * @param expXmlResource XMLリソース名 - * @param converter コンバータ * @throws Exception エラー */ - public static void assertVmd2Xml( + public static void assertVmd2Xml13( Class klass, String vmdResource, - String expXmlResource, + String expXmlResource ) + throws Exception{ + Vmd2XmlConv converter = new Vmd2XmlConv(); + converter.setInType(MotionFileType.VMD); + converter.setOutType(MotionFileType.XML_130609); + converter.setNewline("\n"); + converter.setGenerator(null); + + assertConvert(klass, vmdResource, expXmlResource, converter); + + return; + } + + /** + * コンバータの変換結果がリソースファイルに等しいと表明する。 + * @param klass リソース元クラス + * @param fromResource リソース名 + * @param toResource 結果リソース名 + * @param converter コンバータ + * @throws Exception エラー + */ + public static void assertConvert( + Class klass, + String fromResource, + String toResource, Vmd2XmlConv converter ) throws Exception{ InputStream vmdis = - klass.getResourceAsStream(vmdResource); + klass.getResourceAsStream(fromResource); assertNotNull(vmdis); vmdis = new BufferedInputStream(vmdis); @@ -125,7 +133,7 @@ public class CnvAssert { vmdis.close(); destOut.close(); - assertSameFile(klass, expXmlResource, destFile); + assertSameFile(klass, toResource, destFile); return; } diff --git a/src/test/java/testdata/vmd110820/camera/CameraTest.java b/src/test/java/testdata/vmd110820/camera/CameraTest.java index 32be144..e61d1ec 100644 --- a/src/test/java/testdata/vmd110820/camera/CameraTest.java +++ b/src/test/java/testdata/vmd110820/camera/CameraTest.java @@ -42,7 +42,7 @@ public class CameraTest { @Test public void vmd2xml() throws Exception{ System.out.println("vmd2xml"); - assertVmd2Xml(THISCLASS, "camera.vmd", "camera.xml"); + assertVmd2OldXml(THISCLASS, "camera.vmd", "camera.xml"); return; } diff --git a/src/test/java/testdata/vmd110820/euler/EulerTest.java b/src/test/java/testdata/vmd110820/euler/EulerTest.java index e66f261..8e053a8 100644 --- a/src/test/java/testdata/vmd110820/euler/EulerTest.java +++ b/src/test/java/testdata/vmd110820/euler/EulerTest.java @@ -59,7 +59,7 @@ public class EulerTest { assertNull(converter.getGenerator()); assertFalse(converter.isQuaterniomMode()); - assertVmd2Xml(THISCLASS, "euler.vmd", "euler.xml", converter); + assertConvert(THISCLASS, "euler.vmd", "euler.xml", converter); return; } diff --git a/src/test/java/testdata/vmd110820/luminous/LuminousTest.java b/src/test/java/testdata/vmd110820/luminous/LuminousTest.java index 2a1e664..13bc6e9 100644 --- a/src/test/java/testdata/vmd110820/luminous/LuminousTest.java +++ b/src/test/java/testdata/vmd110820/luminous/LuminousTest.java @@ -42,7 +42,7 @@ public class LuminousTest { @Test public void vmd2xml() throws Exception{ System.out.println("vmd2xml"); - assertVmd2Xml(THISCLASS, "luminous.vmd", "luminous.xml"); + assertVmd2OldXml(THISCLASS, "luminous.vmd", "luminous.xml"); return; } diff --git a/src/test/java/testdata/vmd110820/minimum/MinimumTest.java b/src/test/java/testdata/vmd110820/minimum/MinimumTest.java index 7cd2dd5..81089e6 100644 --- a/src/test/java/testdata/vmd110820/minimum/MinimumTest.java +++ b/src/test/java/testdata/vmd110820/minimum/MinimumTest.java @@ -42,8 +42,8 @@ public class MinimumTest { @Test public void vmd2xml() throws Exception{ System.out.println("vmd2xml"); - assertVmd2Xml(THISCLASS, "minmotion.vmd", "minmotion.xml"); - assertVmd2Xml(THISCLASS, "mincam.vmd", "mincam.xml"); + assertVmd2OldXml(THISCLASS, "minmotion.vmd", "minmotion.xml"); + assertVmd2OldXml(THISCLASS, "mincam.vmd", "mincam.xml"); return; } diff --git a/src/test/java/testdata/vmd110820/morph/MorphTest.java b/src/test/java/testdata/vmd110820/morph/MorphTest.java index 3ced6b7..34bf739 100644 --- a/src/test/java/testdata/vmd110820/morph/MorphTest.java +++ b/src/test/java/testdata/vmd110820/morph/MorphTest.java @@ -42,7 +42,7 @@ public class MorphTest { @Test public void vmd2xml() throws Exception{ System.out.println("vmd2xml"); - assertVmd2Xml(THISCLASS, "morph.vmd", "morph.xml"); + assertVmd2OldXml(THISCLASS, "morph.vmd", "morph.xml"); return; } diff --git a/src/test/java/testdata/vmd110820/motion/MotionTest.java b/src/test/java/testdata/vmd110820/motion/MotionTest.java index 5c5ed9b..7fe9138 100644 --- a/src/test/java/testdata/vmd110820/motion/MotionTest.java +++ b/src/test/java/testdata/vmd110820/motion/MotionTest.java @@ -42,7 +42,7 @@ public class MotionTest { @Test public void vmd2xml() throws Exception{ System.out.println("vmd2xml"); - assertVmd2Xml(THISCLASS, "motion.vmd", "motion.xml"); + assertVmd2OldXml(THISCLASS, "motion.vmd", "motion.xml"); return; } diff --git a/src/test/java/testdata/vmd110820/newvmd/NewVmdTest.java b/src/test/java/testdata/vmd110820/newvmd/NewVmdTest.java index 8c12cb7..684961e 100644 --- a/src/test/java/testdata/vmd110820/newvmd/NewVmdTest.java +++ b/src/test/java/testdata/vmd110820/newvmd/NewVmdTest.java @@ -42,7 +42,7 @@ public class NewVmdTest { @Test public void vmd2xml() throws Exception{ System.out.println("vmd2xml"); - assertVmd2Xml(THISCLASS, "newvmd.vmd", "newvmd.xml"); + assertVmd2OldXml(THISCLASS, "newvmd.vmd", "newvmd.xml"); return; } diff --git a/src/test/java/testdata/vmd110820/shadow/ShadowTest.java b/src/test/java/testdata/vmd110820/shadow/ShadowTest.java index e5b4ae0..e635d25 100644 --- a/src/test/java/testdata/vmd110820/shadow/ShadowTest.java +++ b/src/test/java/testdata/vmd110820/shadow/ShadowTest.java @@ -42,7 +42,7 @@ public class ShadowTest { @Test public void vmd2xml() throws Exception{ System.out.println("vmd2xml"); - assertVmd2Xml(THISCLASS, "allShadow.vmd", "allShadow.xml"); + assertVmd2OldXml(THISCLASS, "allShadow.vmd", "allShadow.xml"); return; } diff --git a/src/test/java/testdata/vmd110820/small/SmallTest.java b/src/test/java/testdata/vmd110820/small/SmallTest.java index 2ff8da7..8127621 100644 --- a/src/test/java/testdata/vmd110820/small/SmallTest.java +++ b/src/test/java/testdata/vmd110820/small/SmallTest.java @@ -42,11 +42,11 @@ public class SmallTest { @Test public void vmd2xml() throws Exception{ System.out.println("vmd2xml"); - assertVmd2Xml(THISCLASS, "onlyBone.vmd", "onlyBone.xml"); - assertVmd2Xml(THISCLASS, "onlyMorph.vmd", "onlyMorph.xml"); - assertVmd2Xml(THISCLASS, "onlyCamera.vmd", "onlyCamera.xml"); - assertVmd2Xml(THISCLASS, "onlyLuminous.vmd", "onlyLuminous.xml"); - assertVmd2Xml(THISCLASS, "onlyShadow.vmd", "onlyShadow.xml"); + assertVmd2OldXml(THISCLASS, "onlyBone.vmd", "onlyBone.xml"); + assertVmd2OldXml(THISCLASS, "onlyMorph.vmd", "onlyMorph.xml"); + assertVmd2OldXml(THISCLASS, "onlyCamera.vmd", "onlyCamera.xml"); + assertVmd2OldXml(THISCLASS, "onlyLuminous.vmd", "onlyLuminous.xml"); + assertVmd2OldXml(THISCLASS, "onlyShadow.vmd", "onlyShadow.xml"); return; } diff --git a/src/test/java/testdata/vmd130609/flag/FlagTest.java b/src/test/java/testdata/vmd130609/flag/FlagTest.java new file mode 100644 index 0000000..58e9042 --- /dev/null +++ b/src/test/java/testdata/vmd130609/flag/FlagTest.java @@ -0,0 +1,56 @@ +/* + */ + +package testdata.vmd130609.flag; + +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import static testdata.CnvAssert.*; + +/** + * + */ +public class FlagTest { + + static Class THISCLASS = FlagTest.class; + + public FlagTest() { + assert this.getClass() == THISCLASS; + return; + } + + @BeforeClass + public static void setUpClass() { + } + + @AfterClass + public static void tearDownClass() { + } + + @Before + public void setUp() { + } + + @After + public void tearDown() { + } + + @Test + public void vmd2xml() throws Exception{ + System.out.println("vmd2xml"); + assertVmd2Xml13(THISCLASS, "flag.vmd", "flag.xml"); + return; + } + + @Test + public void xml2vmd() throws Exception{ + System.out.println("xml2vmd"); + assertXml2Vmd(THISCLASS, "flag.xml", "flag.vmd"); + return; + } + +} diff --git a/src/test/java/testdata/vmd130609/minimum/MinimumTest.java b/src/test/java/testdata/vmd130609/minimum/MinimumTest.java new file mode 100644 index 0000000..ec40c55 --- /dev/null +++ b/src/test/java/testdata/vmd130609/minimum/MinimumTest.java @@ -0,0 +1,56 @@ +/* + */ + +package testdata.vmd130609.minimum; + +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import static testdata.CnvAssert.*; + +/** + * + */ +public class MinimumTest { + + static Class THISCLASS = MinimumTest.class; + + public MinimumTest() { + assert this.getClass() == THISCLASS; + return; + } + + @BeforeClass + public static void setUpClass() { + } + + @AfterClass + public static void tearDownClass() { + } + + @Before + public void setUp() { + } + + @After + public void tearDown() { + } + + @Test + public void vmd2xml() throws Exception{ + System.out.println("vmd2xml"); + assertVmd2Xml13(THISCLASS, "minimum.vmd", "minimum.xml"); + return; + } + + @Test + public void xml2vmd() throws Exception{ + System.out.println("xml2vmd"); + assertXml2Vmd(THISCLASS, "minimum.xml", "minimum.vmd"); + return; + } + +} diff --git a/src/test/java/testdata/vmd130609/small/SmallTest.java b/src/test/java/testdata/vmd130609/small/SmallTest.java new file mode 100644 index 0000000..a669e01 --- /dev/null +++ b/src/test/java/testdata/vmd130609/small/SmallTest.java @@ -0,0 +1,56 @@ +/* + */ + +package testdata.vmd130609.small; + +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import static testdata.CnvAssert.*; + +/** + * + */ +public class SmallTest { + + static Class THISCLASS = SmallTest.class; + + public SmallTest() { + assert this.getClass() == THISCLASS; + return; + } + + @BeforeClass + public static void setUpClass() { + } + + @AfterClass + public static void tearDownClass() { + } + + @Before + public void setUp() { + } + + @After + public void tearDown() { + } + + @Test + public void vmd2xml() throws Exception{ + System.out.println("vmd2xml"); + assertVmd2Xml13(THISCLASS, "onlyFlag.vmd", "onlyFlag.xml"); + return; + } + + @Test + public void xml2vmd() throws Exception{ + System.out.println("xml2vmd"); + assertXml2Vmd(THISCLASS, "onlyFlag.xml", "onlyFlag.vmd"); + return; + } + +} diff --git a/src/test/resources/testdata/vmd130609/flag/flag.vmd b/src/test/resources/testdata/vmd130609/flag/flag.vmd new file mode 100644 index 0000000000000000000000000000000000000000..be8fee7505418b59c28c25fed8fcdf47b4065940 GIT binary patch literal 386 zcmWH`PfpCq&rDJ9%`eH!&r@(oEJ;)_FfcG;0D=C_&YjJ5&3+7j5dbWKMleD7jO;+h zi5&+vHDxqqA!}mn-8N-ChG3^F7QxabLK4o literal 0 HcmV?d00001 diff --git a/src/test/resources/testdata/vmd130609/flag/flag.xml b/src/test/resources/testdata/vmd130609/flag/flag.xml new file mode 100644 index 0000000..70a923b --- /dev/null +++ b/src/test/resources/testdata/vmd130609/flag/flag.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/test/resources/testdata/vmd130609/minimum/minimum.vmd b/src/test/resources/testdata/vmd130609/minimum/minimum.vmd new file mode 100644 index 0000000000000000000000000000000000000000..18dea4c9c5b8ee7ed18e17413dc7b86300613869 GIT binary patch literal 70 rcmWH`PfpCq&rDJ9%`eH!&r@(oEJ;)_FfcG;@bdQYW%!E;7_a~UPstoP literal 0 HcmV?d00001 diff --git a/src/test/resources/testdata/vmd130609/minimum/minmotion.xml b/src/test/resources/testdata/vmd130609/minimum/minimum.xml similarity index 72% rename from src/test/resources/testdata/vmd130609/minimum/minmotion.xml rename to src/test/resources/testdata/vmd130609/minimum/minimum.xml index 1deeea6..620d609 100644 --- a/src/test/resources/testdata/vmd130609/minimum/minmotion.xml +++ b/src/test/resources/testdata/vmd130609/minimum/minimum.xml @@ -7,11 +7,11 @@ diff --git a/src/test/resources/testdata/vmd130609/small/onlyFlag.vmd b/src/test/resources/testdata/vmd130609/small/onlyFlag.vmd new file mode 100644 index 0000000000000000000000000000000000000000..06ecf1388098a343a511018247562c45f03f3e7e GIT binary patch literal 113 zcmWH`PfpCq&rDJ9%`eH!&r@(oEJ;)_FfcG;0E54n03v}(G6A`qK+FgdP6iPmmZ!Iq Mzn`li1F{(m05SF{KmY&$ literal 0 HcmV?d00001 diff --git a/src/test/resources/testdata/vmd130609/small/onlyFlag.xml b/src/test/resources/testdata/vmd130609/small/onlyFlag.xml index f880cee..7ec030f 100644 --- a/src/test/resources/testdata/vmd130609/small/onlyFlag.xml +++ b/src/test/resources/testdata/vmd130609/small/onlyFlag.xml @@ -7,11 +7,11 @@ @@ -24,11 +24,16 @@ - - - - - + + + + + + + + + + -- 2.11.0