/* MocaScript for Peggy Series * $Id: xmlchecker.ms,v 1.1 2009/07/29 14:43:15 nzawa Exp nzawa $ * -------------------------------------------------------------------------- * * xmlchecker.ms * * 【概要】 * MSXMLを呼び出してXMLファイルを検証します。 * MSXML3.0/4.0/5.0/6.0の何れかが必要です。 * * * _/_/_/_/_/_/_/_/_/_/_/_/_/ COPYRIGHT NOTICE _/_/_/_/_/_/_/_/_/_/_/_/_/ * * Copyright (c) 2009 Nzawa * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ */ ///////////////////////////////////////////////////////////////////////////// // コマンド宣言 #command check "XML検証(&V)" ///////////////////////////////////////////////////////////////////////////// // コマンド処理 switch (command) { case "check": checkxml(); break; default: error("コマンド " + command + " は定義されていません."); } ///////////////////////////////////////////////////////////////////////////// // XML検証 function checkxml() { var focusedwin = getFocusedWindowType(); var target; var projectitem; var parser; var parsername; var WIN_PROJ = 3; // プロジェクトウィンドウ var OPW_SCRI = 7; // スクリプトページ(アウトプットウィンドウ) // フォーカスに応じてパスを取得 if ( focusedwin != WIN_PROJ && view ) { target = getFilePath(); } else if ( project ) { projectitem = project.selected; if ( projectitem instanceof FileItem ) target = projectitem.path; } if ( !target ) { error("検証するファイルが指定されていないか、またはパスを取得出来ません."); } else if ( !File.exists(target) ) { error(target + " は存在しません."); } try { parser = createObject("Msxml2.DOMDocument.6.0"); parsername = "MSXML6.0"; } catch (e) { try { parser = createObject("Msxml2.DOMDocument.5.0"); parsername = "MSXML5.0"; } catch (e) { try { parser = createObject("Msxml2.DOMDocument.4.0"); parsername = "MSXML4.0"; } catch (e) { try { parser = createObject("Msxml2.DOMDocument.3.0"); parsername = "MSXML3.0"; } catch (e) { error("MSXMLオブジェクトを作成出来ません."); } } } } setStatusText(target + " を検証中... (" + parsername + ")"); parser.async = false; parser.validateOnParse = true; parser.load(target); output.show(true); output.select(OPW_SCRI); output[OPW_SCRI].clear(); // 結果出力(タグジャンプ可能) if ( parser.parseError.errorCode != 0 ) { output[OPW_SCRI].write(target + ":" + parser.parseError.line + ": " + parser.parseError.reason); output[OPW_SCRI].writeln("line " + parser.parseError.line + ", linepos " + parser.parseError.linepos + ", filepos ", parser.parseError.filepos); output[OPW_SCRI].writeln(parser.parseError.srcText); } else { output[OPW_SCRI].writeln(target + ": " + "エラーは見つかりませんでした。"); } setStatusText(target + " を検証しました. (" + parsername + ")"); return; } /* END OF SCRIPT */