From 6be43e4ae3b969be124a98a934a3b2574c86cc90 Mon Sep 17 00:00:00 2001 From: Olyutorskii Date: Sat, 8 Jun 2013 13:30:16 +0900 Subject: [PATCH] =?utf8?q?MMD=20Ver7.40=20=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- CHANGELOG.txt | 1 + pom.xml | 2 +- src/main/java/jp/sfjp/mikutoga/vmd/VmdConst.java | 7 ++ .../sfjp/mikutoga/vmd/parser/VmdBoolHandler.java | 52 +++++++++ .../jp/sfjp/mikutoga/vmd/parser/VmdBoolParser.java | 121 +++++++++++++++++++ .../jp/sfjp/mikutoga/vmd/parser/VmdParser.java | 26 ++--- .../mikutoga/vmd/parser/VmdUnifiedHandler.java | 3 +- .../mikutoga/xml/AbstractXmlExporter.java | 2 +- .../mikutoga/xml/BasicXmlExporter.java | 2 +- .../mikutoga/xml/BotherHandler.java | 2 +- .../mikutoga/xml/DomNsUtils.java | 2 +- .../mikutoga/xml/DomUtils.java | 2 +- .../mikutoga/xml/LocalXmlResource.java | 2 +- .../mikutoga/xml/ProxyXmlExporter.java | 2 +- src/main/java/jp/sfjp/mikutoga/xml/SaxAttr.java | 130 +++++++++++++++++++++ .../mikutoga/xml/SchemaUtil.java | 2 +- .../mikutoga/xml/SiblingElemIterator.java | 2 +- .../mikutoga/xml/TogaXmlException.java | 2 +- .../mikutoga/xml/XmlExporter.java | 2 +- .../mikutoga/xml/XmlResourceResolver.java | 2 +- .../mikutoga/xml/package-info.java | 2 +- .../mikutoga/xml/resources/xmlspace.xsd | 0 src/test/java/sample/vmd/DummyHandler.java | 14 +++ src/test/java/sample/vmd/DummyMain.java | 6 +- 24 files changed, 356 insertions(+), 32 deletions(-) create mode 100644 src/main/java/jp/sfjp/mikutoga/vmd/parser/VmdBoolHandler.java create mode 100644 src/main/java/jp/sfjp/mikutoga/vmd/parser/VmdBoolParser.java rename src/main/java/jp/{sourceforge => sfjp}/mikutoga/xml/AbstractXmlExporter.java (99%) rename src/main/java/jp/{sourceforge => sfjp}/mikutoga/xml/BasicXmlExporter.java (98%) rename src/main/java/jp/{sourceforge => sfjp}/mikutoga/xml/BotherHandler.java (97%) rename src/main/java/jp/{sourceforge => sfjp}/mikutoga/xml/DomNsUtils.java (99%) rename src/main/java/jp/{sourceforge => sfjp}/mikutoga/xml/DomUtils.java (99%) rename src/main/java/jp/{sourceforge => sfjp}/mikutoga/xml/LocalXmlResource.java (94%) rename src/main/java/jp/{sourceforge => sfjp}/mikutoga/xml/ProxyXmlExporter.java (99%) create mode 100644 src/main/java/jp/sfjp/mikutoga/xml/SaxAttr.java rename src/main/java/jp/{sourceforge => sfjp}/mikutoga/xml/SchemaUtil.java (99%) rename src/main/java/jp/{sourceforge => sfjp}/mikutoga/xml/SiblingElemIterator.java (98%) rename src/main/java/jp/{sourceforge => sfjp}/mikutoga/xml/TogaXmlException.java (96%) rename src/main/java/jp/{sourceforge => sfjp}/mikutoga/xml/XmlExporter.java (99%) rename src/main/java/jp/{sourceforge => sfjp}/mikutoga/xml/XmlResourceResolver.java (99%) rename src/main/java/jp/{sourceforge => sfjp}/mikutoga/xml/package-info.java (82%) rename src/main/resources/jp/{sourceforge => sfjp}/mikutoga/xml/resources/xmlspace.xsd (100%) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 74653fe..6124f23 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -9,6 +9,7 @@ X.XXX.X (20XX-XX-XX) ・ジンバルロック判定を甘くした。 ・多言語対応に際してデフォルトロケールへのフォールバックを禁止。 ・コールバックpmdIKInfo()がpmdIKChainInfo()より先に呼ばれるよう変更。 + ・MikuMikuDance Ver7.40以降の新VMDファイルフォーマットに対応 2.102.2 (2013-03-17) ・Maven3対応。 diff --git a/pom.xml b/pom.xml index 3727005..55e962e 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ jp.sourceforge.mikutoga togagem - 2.102.5-SNAPSHOT + 2.102.7-SNAPSHOT jar TogaGem diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/VmdConst.java b/src/main/java/jp/sfjp/mikutoga/vmd/VmdConst.java index f60a7a4..076d309 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd/VmdConst.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd/VmdConst.java @@ -37,6 +37,13 @@ public final class VmdConst { */ public static final int MORPHNAME_MAX = 15; + /** + * IK ON/OFFスイッチ用ボーン名最大長。バイト単位。 + *

※MikuMikuDance Ver7.40からの機能。 + *

モーション指定用ボーン名と長さが違うので注意。 + */ + public static final int IKSWBONENAME_MAX = 20; + /** * 隠しコンストラクタ。 diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/parser/VmdBoolHandler.java b/src/main/java/jp/sfjp/mikutoga/vmd/parser/VmdBoolHandler.java new file mode 100644 index 0000000..c5af766 --- /dev/null +++ b/src/main/java/jp/sfjp/mikutoga/vmd/parser/VmdBoolHandler.java @@ -0,0 +1,52 @@ +/* + * VMD boolean info handler + * + * License : The MIT License + * Copyright(c) 2013 MikuToga Partners + */ + +package jp.sfjp.mikutoga.vmd.parser; + +import jp.sfjp.mikutoga.bin.parser.LoopHandler; +import jp.sfjp.mikutoga.bin.parser.MmdFormatException; +import jp.sfjp.mikutoga.bin.parser.ParseStage; + +/** + * VMDモーションファイルの各種ON/OFF情報(モデル表示・IK有効無効) + * の通知用ハンドラ。 + *

MikuMikuDance Ver7.40よりVMDファイルに導入された新仕様。 + */ +public interface VmdBoolHandler extends LoopHandler { + + /** モデル表示スイッチ抽出ループ識別子。 */ + ParseStage MODELSIGHT_LIST = new ParseStage(); + + /** IK有効スイッチ抽出ループ識別子。 */ + ParseStage IKSW_LIST = new ParseStage(); + + + /** + * モデルの表示フラグを通知する。 + *

{@link #MODELSIGHT_LIST}ループの構成要素。 + * @param show モデルの表示が行われる場合true + * @param keyFrameNo キーフレーム番号 + * @throws MmdFormatException 不正フォーマットによる + * パース処理の中断をパーサに指示 + */ + void vmdModelSight(boolean show, int keyFrameNo) + throws MmdFormatException; + + /** + * IKボーン別のIK処理のON/OFFを通知する。 + *

{@link #MODELSIGHT_LIST}ループの下位 + * {@link #IKSW_LIST}ループの構成要素。 + * @param boneName IKボーン名 + * @param validIk IK処理が無効になる場合false + * @param keyFrameNo キーフレーム番号 + * @throws MmdFormatException 不正フォーマットによる + * パース処理の中断をパーサに指示 + */ + void vmdIkSwitch(String boneName, boolean validIk, int keyFrameNo) + throws MmdFormatException; + +} diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/parser/VmdBoolParser.java b/src/main/java/jp/sfjp/mikutoga/vmd/parser/VmdBoolParser.java new file mode 100644 index 0000000..daffc6d --- /dev/null +++ b/src/main/java/jp/sfjp/mikutoga/vmd/parser/VmdBoolParser.java @@ -0,0 +1,121 @@ +/* + * VMD boolean data parser + * + * License : The MIT License + * Copyright(c) 2013 MikuToga Partners + */ + +package jp.sfjp.mikutoga.vmd.parser; + +import java.io.IOException; +import jp.sfjp.mikutoga.bin.parser.BinParser; +import jp.sfjp.mikutoga.bin.parser.MmdFormatException; +import jp.sfjp.mikutoga.bin.parser.ProxyParser; +import jp.sfjp.mikutoga.bin.parser.TextDecoder; +import jp.sfjp.mikutoga.vmd.VmdConst; + +/** + * VMDモーションファイルの各種ON/OFF情報(モデル表示・IK有効無効) + * パーサ。 + *

MikuMikuDance Ver7.40以降でサポート + */ +class VmdBoolParser extends ProxyParser { + + private final TextDecoder decoderWin31j = + new TextDecoder(VmdBasicParser.CS_WIN31J); + + private VmdBoolHandler handler = VmdUnifiedHandler.EMPTY; + + + /** + * コンストラクタ。 + * @param parser 委譲先パーサ + */ + VmdBoolParser(BinParser parser){ + super(parser); + this.decoderWin31j.setZeroChopMode(true); + return; + } + + + /** + * ON/OFF情報通知用ハンドラを登録する。 + * @param boolHandler ハンドラ + */ + void setBoolHandler(VmdBoolHandler boolHandler){ + if(boolHandler == null){ + this.handler = VmdUnifiedHandler.EMPTY; + }else{ + this.handler = boolHandler; + } + + return; + } + + /** + * データのパースと通知。 + * @throws IOException IOエラー + * @throws MmdFormatException フォーマットエラー + */ + void parse() throws IOException, MmdFormatException { + if( ! hasMore() ) return; + + parseVmdModelSight(); + + return; + } + + /** + * モデル表示フラグデータのパースと通知。 + * @throws IOException IOエラー + * @throws MmdFormatException フォーマットエラー + */ + private void parseVmdModelSight() + throws IOException, MmdFormatException{ + int modelSightNo = parseLeInt(); + + this.handler.loopStart(VmdBoolHandler.MODELSIGHT_LIST, + modelSightNo ); + + for(int ct = 0; ct < modelSightNo; ct++){ + int keyFrameNo = parseLeInt(); + boolean show = parseBoolean(); + this.handler.vmdModelSight(show, keyFrameNo); + + parseVmdIkSwitch(keyFrameNo); + + this.handler.loopNext(VmdBoolHandler.MODELSIGHT_LIST); + } + + this.handler.loopEnd(VmdBoolHandler.MODELSIGHT_LIST); + + return; + } + + /** + * IK有効スイッチデータのパースと通知。 + * @param keyFrameNo キーフレーム番号 + * @throws IOException IOエラー + * @throws MmdFormatException フォーマットエラー + */ + private void parseVmdIkSwitch(int keyFrameNo) + throws IOException, MmdFormatException{ + int ikSwitchNo = parseLeInt(); + + this.handler.loopStart(VmdBoolHandler.IKSW_LIST, ikSwitchNo); + + for(int ct = 0; ct < ikSwitchNo; ct++){ + String boneName = parseString(this.decoderWin31j, + VmdConst.IKSWBONENAME_MAX ); + boolean valid = parseBoolean(); + this.handler.vmdIkSwitch(boneName, valid, keyFrameNo); + + this.handler.loopNext(VmdBoolHandler.IKSW_LIST); + } + + this.handler.loopEnd(VmdBoolHandler.IKSW_LIST); + + return; + } + +} diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/parser/VmdParser.java b/src/main/java/jp/sfjp/mikutoga/vmd/parser/VmdParser.java index 44e730e..14bdc5d 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd/parser/VmdParser.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd/parser/VmdParser.java @@ -23,10 +23,10 @@ public class VmdParser { private final VmdBasicParser basicParser; private final VmdCameraParser cameraParser; private final VmdLightingParser lightingParser; + private final VmdBoolParser boolParser; private VmdBasicHandler basicHandler = VmdUnifiedHandler.EMPTY; - private boolean ignoreName = true; private boolean redundantCheck = false; @@ -46,6 +46,7 @@ public class VmdParser { this.basicParser = new VmdBasicParser(parser); this.cameraParser = new VmdCameraParser(parser); this.lightingParser = new VmdLightingParser(parser); + this.boolParser = new VmdBoolParser(parser); return; } @@ -94,15 +95,11 @@ public class VmdParser { } /** - * カメラ・ライティングデータのパースを試みるか否かの判断で、 - * 特殊モデル名判定を無視するか否か設定する。 - * デフォルトではモデル名を無視。 - *

※MMDVer7.30前後のVMD出力不具合を回避したい場合は、 - * オフにするとパースに成功する場合がある。 - * @param mode モデル名を無視するならtrue + * ON/OFF情報通知用ハンドラを登録する。 + * @param boolHandler ハンドラ */ - public void setIgnoreName(boolean mode){ - this.ignoreName = mode; + public void setBoolHandler(VmdBoolHandler boolHandler){ + this.boolParser.setBoolHandler(boolHandler); return; } @@ -111,6 +108,7 @@ public class VmdParser { * デフォルトではチェックを行わない。 *

※MMDVer7.30前後のVMD出力不具合を回避したい場合は、 * オフにするとパースに成功する場合がある。 + *

※MMD Ver7.39x64以降はチェック回避必須。 * @param mode チェックさせたければtrue */ public void setRedundantCheck(boolean mode){ @@ -125,7 +123,6 @@ public class VmdParser { * @throws MmdFormatException フォーマットエラー */ public void parseVmd() throws IOException, MmdFormatException { - setIgnoreName(this.ignoreName); setRedundantCheck(this.redundantCheck); this.basicHandler.vmdParseStart(); @@ -140,20 +137,21 @@ public class VmdParser { /** * VMDファイル本体のパースを開始する。 - *

モデル名がボーンモーション用と推測され、 - * かつパーサがStrict-modeでない場合、 - * カメラ、ライティングデータのパースは行われない。 * @throws IOException IOエラー * @throws MmdFormatException フォーマットエラー */ private void parseBody() throws IOException, MmdFormatException{ this.basicParser.parse(); - if(this.basicParser.hasStageActName() || this.ignoreName){ + if(this.cameraParser.hasMore()){ this.cameraParser.parse(); this.lightingParser.parse(); } + if(this.boolParser.hasMore()){ + this.boolParser.parse(); + } + return; } diff --git a/src/main/java/jp/sfjp/mikutoga/vmd/parser/VmdUnifiedHandler.java b/src/main/java/jp/sfjp/mikutoga/vmd/parser/VmdUnifiedHandler.java index cca1a51..fb80155 100644 --- a/src/main/java/jp/sfjp/mikutoga/vmd/parser/VmdUnifiedHandler.java +++ b/src/main/java/jp/sfjp/mikutoga/vmd/parser/VmdUnifiedHandler.java @@ -15,7 +15,8 @@ import jp.sfjp.mikutoga.corelib.EmptyProxyFactory; public interface VmdUnifiedHandler extends VmdBasicHandler, VmdCameraHandler, - VmdLightingHandler { + VmdLightingHandler, + VmdBoolHandler { /** 何もしない統合ハンドラ。 */ VmdUnifiedHandler EMPTY = diff --git a/src/main/java/jp/sourceforge/mikutoga/xml/AbstractXmlExporter.java b/src/main/java/jp/sfjp/mikutoga/xml/AbstractXmlExporter.java similarity index 99% rename from src/main/java/jp/sourceforge/mikutoga/xml/AbstractXmlExporter.java rename to src/main/java/jp/sfjp/mikutoga/xml/AbstractXmlExporter.java index b8e3c5c..9f8c342 100644 --- a/src/main/java/jp/sourceforge/mikutoga/xml/AbstractXmlExporter.java +++ b/src/main/java/jp/sfjp/mikutoga/xml/AbstractXmlExporter.java @@ -5,7 +5,7 @@ * Copyright(c) 2013 MikuToga Partners */ -package jp.sourceforge.mikutoga.xml; +package jp.sfjp.mikutoga.xml; import java.io.IOException; import java.util.regex.Matcher; diff --git a/src/main/java/jp/sourceforge/mikutoga/xml/BasicXmlExporter.java b/src/main/java/jp/sfjp/mikutoga/xml/BasicXmlExporter.java similarity index 98% rename from src/main/java/jp/sourceforge/mikutoga/xml/BasicXmlExporter.java rename to src/main/java/jp/sfjp/mikutoga/xml/BasicXmlExporter.java index 53592d4..777cf1d 100644 --- a/src/main/java/jp/sourceforge/mikutoga/xml/BasicXmlExporter.java +++ b/src/main/java/jp/sfjp/mikutoga/xml/BasicXmlExporter.java @@ -5,7 +5,7 @@ * Copyright(c) 2010 MikuToga Partners */ -package jp.sourceforge.mikutoga.xml; +package jp.sfjp.mikutoga.xml; import java.io.Closeable; import java.io.Flushable; diff --git a/src/main/java/jp/sourceforge/mikutoga/xml/BotherHandler.java b/src/main/java/jp/sfjp/mikutoga/xml/BotherHandler.java similarity index 97% rename from src/main/java/jp/sourceforge/mikutoga/xml/BotherHandler.java rename to src/main/java/jp/sfjp/mikutoga/xml/BotherHandler.java index 5464c18..d1de0a6 100644 --- a/src/main/java/jp/sourceforge/mikutoga/xml/BotherHandler.java +++ b/src/main/java/jp/sfjp/mikutoga/xml/BotherHandler.java @@ -5,7 +5,7 @@ * Copyright(c) 2010 MikuToga Partners */ -package jp.sourceforge.mikutoga.xml; +package jp.sfjp.mikutoga.xml; import org.xml.sax.ErrorHandler; import org.xml.sax.SAXException; diff --git a/src/main/java/jp/sourceforge/mikutoga/xml/DomNsUtils.java b/src/main/java/jp/sfjp/mikutoga/xml/DomNsUtils.java similarity index 99% rename from src/main/java/jp/sourceforge/mikutoga/xml/DomNsUtils.java rename to src/main/java/jp/sfjp/mikutoga/xml/DomNsUtils.java index 91be302..649b542 100644 --- a/src/main/java/jp/sourceforge/mikutoga/xml/DomNsUtils.java +++ b/src/main/java/jp/sfjp/mikutoga/xml/DomNsUtils.java @@ -5,7 +5,7 @@ * Copyright(c) 2011 MikuToga Partners */ -package jp.sourceforge.mikutoga.xml; +package jp.sfjp.mikutoga.xml; import java.text.MessageFormat; import java.util.Iterator; diff --git a/src/main/java/jp/sourceforge/mikutoga/xml/DomUtils.java b/src/main/java/jp/sfjp/mikutoga/xml/DomUtils.java similarity index 99% rename from src/main/java/jp/sourceforge/mikutoga/xml/DomUtils.java rename to src/main/java/jp/sfjp/mikutoga/xml/DomUtils.java index 81a0e94..1463e8d 100644 --- a/src/main/java/jp/sourceforge/mikutoga/xml/DomUtils.java +++ b/src/main/java/jp/sfjp/mikutoga/xml/DomUtils.java @@ -5,7 +5,7 @@ * Copyright(c) 2010 MikuToga Partners */ -package jp.sourceforge.mikutoga.xml; +package jp.sfjp.mikutoga.xml; import java.util.Iterator; import java.util.LinkedList; diff --git a/src/main/java/jp/sourceforge/mikutoga/xml/LocalXmlResource.java b/src/main/java/jp/sfjp/mikutoga/xml/LocalXmlResource.java similarity index 94% rename from src/main/java/jp/sourceforge/mikutoga/xml/LocalXmlResource.java rename to src/main/java/jp/sfjp/mikutoga/xml/LocalXmlResource.java index 5d009f2..bacab5f 100644 --- a/src/main/java/jp/sourceforge/mikutoga/xml/LocalXmlResource.java +++ b/src/main/java/jp/sfjp/mikutoga/xml/LocalXmlResource.java @@ -5,7 +5,7 @@ * Copyright(c) 2013 olyutorskii */ -package jp.sourceforge.mikutoga.xml; +package jp.sfjp.mikutoga.xml; import java.net.URI; diff --git a/src/main/java/jp/sourceforge/mikutoga/xml/ProxyXmlExporter.java b/src/main/java/jp/sfjp/mikutoga/xml/ProxyXmlExporter.java similarity index 99% rename from src/main/java/jp/sourceforge/mikutoga/xml/ProxyXmlExporter.java rename to src/main/java/jp/sfjp/mikutoga/xml/ProxyXmlExporter.java index 20af5f1..74fb697 100644 --- a/src/main/java/jp/sourceforge/mikutoga/xml/ProxyXmlExporter.java +++ b/src/main/java/jp/sfjp/mikutoga/xml/ProxyXmlExporter.java @@ -5,7 +5,7 @@ * Copyright(c) 2013 MikuToga Partners */ -package jp.sourceforge.mikutoga.xml; +package jp.sfjp.mikutoga.xml; import java.io.IOException; diff --git a/src/main/java/jp/sfjp/mikutoga/xml/SaxAttr.java b/src/main/java/jp/sfjp/mikutoga/xml/SaxAttr.java new file mode 100644 index 0000000..6f55e5e --- /dev/null +++ b/src/main/java/jp/sfjp/mikutoga/xml/SaxAttr.java @@ -0,0 +1,130 @@ +/* + * Sax 2 Xsd-types converter + * + * License : The MIT License + * Copyright(c) 2013 MikuToga Partners + */ + +package jp.sfjp.mikutoga.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/sourceforge/mikutoga/xml/SchemaUtil.java b/src/main/java/jp/sfjp/mikutoga/xml/SchemaUtil.java similarity index 99% rename from src/main/java/jp/sourceforge/mikutoga/xml/SchemaUtil.java rename to src/main/java/jp/sfjp/mikutoga/xml/SchemaUtil.java index d8965aa..d40e628 100644 --- a/src/main/java/jp/sourceforge/mikutoga/xml/SchemaUtil.java +++ b/src/main/java/jp/sfjp/mikutoga/xml/SchemaUtil.java @@ -5,7 +5,7 @@ * Copyright(c) 2013 MikuToga Partners */ -package jp.sourceforge.mikutoga.xml; +package jp.sfjp.mikutoga.xml; import java.io.BufferedInputStream; import java.io.IOException; diff --git a/src/main/java/jp/sourceforge/mikutoga/xml/SiblingElemIterator.java b/src/main/java/jp/sfjp/mikutoga/xml/SiblingElemIterator.java similarity index 98% rename from src/main/java/jp/sourceforge/mikutoga/xml/SiblingElemIterator.java rename to src/main/java/jp/sfjp/mikutoga/xml/SiblingElemIterator.java index 8337298..51bd806 100644 --- a/src/main/java/jp/sourceforge/mikutoga/xml/SiblingElemIterator.java +++ b/src/main/java/jp/sfjp/mikutoga/xml/SiblingElemIterator.java @@ -5,7 +5,7 @@ * Copyright(c) 2011 MikuToga Partners */ -package jp.sourceforge.mikutoga.xml; +package jp.sfjp.mikutoga.xml; import java.util.Iterator; import java.util.NoSuchElementException; diff --git a/src/main/java/jp/sourceforge/mikutoga/xml/TogaXmlException.java b/src/main/java/jp/sfjp/mikutoga/xml/TogaXmlException.java similarity index 96% rename from src/main/java/jp/sourceforge/mikutoga/xml/TogaXmlException.java rename to src/main/java/jp/sfjp/mikutoga/xml/TogaXmlException.java index d25a25f..56424f3 100644 --- a/src/main/java/jp/sourceforge/mikutoga/xml/TogaXmlException.java +++ b/src/main/java/jp/sfjp/mikutoga/xml/TogaXmlException.java @@ -5,7 +5,7 @@ * Copyright(c) 2010 MikuToga Partners */ -package jp.sourceforge.mikutoga.xml; +package jp.sfjp.mikutoga.xml; /** * 意図しないXML文書を検出した際の例外。 diff --git a/src/main/java/jp/sourceforge/mikutoga/xml/XmlExporter.java b/src/main/java/jp/sfjp/mikutoga/xml/XmlExporter.java similarity index 99% rename from src/main/java/jp/sourceforge/mikutoga/xml/XmlExporter.java rename to src/main/java/jp/sfjp/mikutoga/xml/XmlExporter.java index fc3436a..f1158d9 100644 --- a/src/main/java/jp/sourceforge/mikutoga/xml/XmlExporter.java +++ b/src/main/java/jp/sfjp/mikutoga/xml/XmlExporter.java @@ -5,7 +5,7 @@ * Copyright(c) 2013 MikuToga Partners */ -package jp.sourceforge.mikutoga.xml; +package jp.sfjp.mikutoga.xml; import java.io.Closeable; import java.io.Flushable; diff --git a/src/main/java/jp/sourceforge/mikutoga/xml/XmlResourceResolver.java b/src/main/java/jp/sfjp/mikutoga/xml/XmlResourceResolver.java similarity index 99% rename from src/main/java/jp/sourceforge/mikutoga/xml/XmlResourceResolver.java rename to src/main/java/jp/sfjp/mikutoga/xml/XmlResourceResolver.java index 660496a..e103268 100644 --- a/src/main/java/jp/sourceforge/mikutoga/xml/XmlResourceResolver.java +++ b/src/main/java/jp/sfjp/mikutoga/xml/XmlResourceResolver.java @@ -5,7 +5,7 @@ * Copyright(c) 2009 olyutorskii */ -package jp.sourceforge.mikutoga.xml; +package jp.sfjp.mikutoga.xml; import java.io.IOException; import java.io.InputStream; diff --git a/src/main/java/jp/sourceforge/mikutoga/xml/package-info.java b/src/main/java/jp/sfjp/mikutoga/xml/package-info.java similarity index 82% rename from src/main/java/jp/sourceforge/mikutoga/xml/package-info.java rename to src/main/java/jp/sfjp/mikutoga/xml/package-info.java index 7a03281..bc49b56 100644 --- a/src/main/java/jp/sourceforge/mikutoga/xml/package-info.java +++ b/src/main/java/jp/sfjp/mikutoga/xml/package-info.java @@ -9,6 +9,6 @@ * MikuToga XML共通ライブラリ。 */ -package jp.sourceforge.mikutoga.xml; +package jp.sfjp.mikutoga.xml; /* EOF */ diff --git a/src/main/resources/jp/sourceforge/mikutoga/xml/resources/xmlspace.xsd b/src/main/resources/jp/sfjp/mikutoga/xml/resources/xmlspace.xsd similarity index 100% rename from src/main/resources/jp/sourceforge/mikutoga/xml/resources/xmlspace.xsd rename to src/main/resources/jp/sfjp/mikutoga/xml/resources/xmlspace.xsd diff --git a/src/test/java/sample/vmd/DummyHandler.java b/src/test/java/sample/vmd/DummyHandler.java index f0ee821..b1a5768 100644 --- a/src/test/java/sample/vmd/DummyHandler.java +++ b/src/test/java/sample/vmd/DummyHandler.java @@ -218,6 +218,20 @@ public class DummyHandler implements VmdUnifiedHandler { return; } + @Override + public void vmdModelSight(boolean show, int keyFrameNo){ + println("modelSight : frame#=" + keyFrameNo + " show=" + show); + return; + } + + @Override + public void vmdIkSwitch(String boneName, + boolean validIk, + int keyFrameNo ){ + println("IKSwitch : frame#=" + keyFrameNo + " bone=" + boneName + " valid=" + validIk); + return; + } + private void println(String msg){ System.out.println(msg); return; diff --git a/src/test/java/sample/vmd/DummyMain.java b/src/test/java/sample/vmd/DummyMain.java index f3c7d3b..ea02cbe 100644 --- a/src/test/java/sample/vmd/DummyMain.java +++ b/src/test/java/sample/vmd/DummyMain.java @@ -27,8 +27,8 @@ public class DummyMain { private static final DummyHandler handler = new DummyHandler(); static{ -// VMDFILE = "D:\\Test\\test.vmd"; - VMDFILE = "D:\\Test\\camera.vmd"; + VMDFILE = "D:\\Test\\test.vmd"; +// VMDFILE = "D:\\Test\\camera.vmd"; } private static InputStream buildSource(String fname){ @@ -52,6 +52,7 @@ public class DummyMain { parser.setBasicHandler(handler); parser.setLightingHandler(handler); parser.setCameraHandler(handler); + parser.setBoolHandler(handler); return; } @@ -66,7 +67,6 @@ public class DummyMain { VmdParser parser = new VmdParser(source); setupHandler(parser); - parser.setIgnoreName(true); parser.setRedundantCheck(false); try{ -- 2.11.0