/** * @fileoverview XMLインストラクションを使い、節飾りのようなグループを貼り付ける * @author Kenshi Muto <kmuto@debian.org> * @requires libCommon.jsx * @requires glue code.jsx * @version 3 */ /* Copyright: 2010-2011 Kenshi Muto ---------------------------------------------------------------------- ソフトウェア使用許諾同意書 本ソフトウェアの利用・変更・再配布にあたっては、下記の使用許諾同意書に 同意する必要があります。 1. 本使用許諾同意書における「ソフトウェア」とは、機械可読の資料 (ライブ ラリ、スクリプト、ソースファイル、データファイル)、実行形式、および 文書を意味します。 2. 本ソフトウェアの使用許諾同意書に同意する限りにおいて、使用者は 本ソフトウェアを自由に利用、変更することができます。 3. 本ソフトウェアに変更を加えない限りにおいて、使用者は本ソフトウェアを 自由にコピー、再配布することができます。 4. 本ソフトウェアは無保証です。作者およびそれに関連する組織、配布者は、 本ソフトウェアの使用に起因する一切の直接損害、間接損害、偶発的損害、 特別損害、懲戒的損害、派生的損害について何らの責任・保証も負いません。 5. 本ソフトウェアを変更した上で再配布するときには、下記の事項すべてに 従わなければなりません。 - 使用許諾同意書の内容に変更を加えてはなりません。技術上の理由で 文字エンコーディングの変換を行うことは許可しますが、その使用者が 特殊な技術的措置なしに可読な形でなければなりません。 - 技術上の理由でバイナリ化・難読化を行う場合も、変更箇所を含めた ソフトウェアを、その使用者が可読可能な形式の形で同一のメディアで 提供しなければなりません。本使用許諾同意書の2条および3条により、 使用者が可読形式の該当ソフトウェアを変更、コピー、再配布することを 妨げてはなりません。 - ソフトウェア構成物の所定の作者名の欄に、変更者のクレジット (個人名、企業名、所属、連絡先など)を「追加」しなければなりません。 6. 本ソフトウェアを変更した上で再配布するときには、変更理由および その内容を明記することが推奨されます。 7. 使用者がソフトウェアに適用可能な特許に対して特許侵害にかかわる何らか の行動を開始した時点で、この使用許諾同意書は自動的に終了し、以降 使用者はこの使用許諾書によって与えられた一切の権利を放棄するものと します。 著作権所有者 Copyright (C) 2008-2011 Kenshi Muto. All rights reserved. 使用許諾同意書バージョン1.0 著作権所有者による書面での事前の許可がない限り、この使用許諾同意書 に変更を加えてはなりません。 ---------------------------------------------------------------------- */ #include "../libs/libCommon.jsx" #include "../libs/glue code.jsx" /** * 指定のXML要素を探して、指定位置にオブジェクトを貼り付ける * @param {Object} obj パラメータオブジェクト * @param {String} obj.tagname タグ名 * @param {String} obj.onlyattr 属性名の指定。nullでない場合、この属性を持ち、obj.onlyvalの値を持つときのみ実行する * @param {String} obj.onlyval 属性値の指定。nullでない場合、obj.onlyattrの属性名でこの値を持つときのみ実行する * @param {Group} obj.panel 貼り付けるオブジェクト(グループやグラフィック) * @param {String} obj.layername 構成レイヤー名 * @param {Number} obj.leftgeometry[2] 左ページの場合のオブジェクト左上の位置 * @param {Number} obj.rightgeometry[2] 右ページの場合のオブジェクト左上の位置 * @param {boolean} obj.splitno trueの場合は全角空白で番号と文字列を分ける * @param {String} obj.noholder 番号を挿入するプレイスホルダテキスト(#など) * @param {String} obj.strholder 文字列を挿入するプレイスホルダテキスト(SECTITLEなど) * @return Nothing */ function processXMLforDecoratedPanel(obj, document) { var myRuleSet = new Array(new processDecoratedPanel(obj)); __processRuleSet(document.xmlElements.item(0), myRuleSet); } /** * @param {String} obj.tagname * @param {String} obj.onlyattr * @param {String} obj.onlyval */ /** * processXMLforDecoratedPanelから呼び出され、placeDecoratedPanelを呼び出すコールバック * @param {Object} obj パラメータオブジェクト * @type boolean * @return 常にtrue */ function processDecoratedPanel(obj) { this.name = "ProcessSubset"; this.xpath = "//" + obj.tagname; this.apply = function(myElement, myRuleProcessor) { obj.element = myElement; if (obj.onlyattr && obj.onlyval) { if (myElement.xmlAttributes.item(obj.onlyattr) && myElement.xmlAttributes.item(obj.onlyattr).value == obj.onlyval) { placeDecoratedPanel(obj); } } else { placeDecoratedPanel(obj); } } return true; } /** * processXMLforDecoratedPanelから呼び出され、オブジェクトをタグの存在するページの指定位置に配置する。2つのプレースホルダを置き換える * @param {XMLElement} obj.element XMLオブジェクト * @param {Group} obj.panel 貼り付けるオブジェクト(グループやグラフィック) * @param {String} obj.layername 構成レイヤー名 * @param {Number} obj.leftgeometry[2] 左ページの場合のオブジェクト左上の位置 * @param {Number} obj.rightgeometry[2] 右ページの場合のオブジェクト左上の位置 * @param {boolean} obj.splitno trueの場合は全角空白で番号と文字列を分ける * @param {String} obj.noholder 番号を挿入するプレイスホルダテキスト(#など) * @param {String} obj.strholder 文字列を挿入するプレイスホルダテキスト(SECTITLEなど) * @return Nothing */ function placeDecoratedPanel(obj) { var page; if (getCSVersion() <= 3) { page = obj.element.storyOffset.parentTextFrames[0].parent; } else { try { page = obj.element.storyOffset.parentTextFrames[0].parentPage; } catch(e) { page = obj.element.storyOffset.parentTextFrames[0].parent; } } var copiedpanel = obj.panel.duplicate(page); copiedpanel.move(page); if (obj.layername) { var layer = page.parent.parent.layers.itemByRange(obj.layername, obj.layername); if (layer == null) { layer = page.parent.parent.layers.add(); layer.label = obj.layername; layer.name = obj.layername; } copiedpanel.move(layer); } if (page.side == PageSideOptions.LEFT_HAND) { copiedpanel.move(obj.leftgeometry); } else { copiedpanel.move(obj.rightgeometry); } var nostr = ""; var secstr = obj.element.contents; if (obj.splitno) { var array = obj.element.contents.split(/ /, 2); if (array.length == 2) { nostr = array[0]; secstr = array[1]; } } if (obj.noholder && nostr) { var tf = findStringFromObjectWithGroup(copiedpanel, obj.noholder); if (tf[0]) { tf[0].contents = nostr; } } if (obj.strholder && secstr) { var tf = findStringFromObjectWithGroup(copiedpanel, obj.strholder); if (tf[0]) { tf[0].contents = secstr; } } }