/** * @fileoverview width属性、height属性の値(mm)に従って指定要素内にあるオブジェクトの幅を変える * @author Kenshi Muto <kmuto@debian.org> * @requires libCommon.jsx * @requires glue code.jsx */ /* Copyright: 2012 Kenshi Muto ---------------------------------------------------------------------- ソフトウェア使用許諾同意書 本ソフトウェアの利用・変更・再配布にあたっては、下記の使用許諾同意書に 同意する必要があります。 1. 本使用許諾同意書における「ソフトウェア」とは、機械可読の資料 (ライブ ラリ、スクリプト、ソースファイル、データファイル)、実行形式、および 文書を意味します。 2. 本ソフトウェアの使用許諾同意書に同意する限りにおいて、使用者は 本ソフトウェアを自由に利用、変更することができます。 3. 本ソフトウェアに変更を加えない限りにおいて、使用者は本ソフトウェアを 自由にコピー、再配布することができます。 4. 本ソフトウェアは無保証です。作者およびそれに関連する組織、配布者は、 本ソフトウェアの使用に起因する一切の直接損害、間接損害、偶発的損害、 特別損害、懲戒的損害、派生的損害について何らの責任・保証も負いません。 5. 本ソフトウェアを変更した上で再配布するときには、下記の事項すべてに 従わなければなりません。 - 使用許諾同意書の内容に変更を加えてはなりません。技術上の理由で 文字エンコーディングの変換を行うことは許可しますが、その使用者が 特殊な技術的措置なしに可読な形でなければなりません。 - 技術上の理由でバイナリ化・難読化を行う場合も、変更箇所を含めた ソフトウェアを、その使用者が可読可能な形式の形で同一のメディアで 提供しなければなりません。本使用許諾同意書の2条および3条により、 使用者が可読形式の該当ソフトウェアを変更、コピー、再配布することを 妨げてはなりません。 - ソフトウェア構成物の所定の作者名の欄に、変更者のクレジット (個人名、企業名、所属、連絡先など)を「追加」しなければなりません。 6. 本ソフトウェアを変更した上で再配布するときには、変更理由および その内容を明記することが推奨されます。 7. 使用者がソフトウェアに適用可能な特許に対して特許侵害にかかわる何らか の行動を開始した時点で、この使用許諾同意書は自動的に終了し、以降 使用者はこの使用許諾書によって与えられた一切の権利を放棄するものと します。 著作権所有者 Copyright (C) 2012 Kenshi Muto. All rights reserved. 使用許諾同意書バージョン1.0 著作権所有者による書面での事前の許可がない限り、この使用許諾同意書 に変更を加えてはなりません。 ---------------------------------------------------------------------- */ #include "../libs/libCommon.jsx" #include "../libs/glue code.jsx" /** * XML要素を探して、その中のアイテム(ただ1つのグラフィック系オブジェクトと想定)の縦横幅をXML要素の指定属性の値に変更する。縦または横の幅は属性または属性値がなければ変更されない * @param {Object} obj パラメータオブジェクト * @param {String} obj.tagname 要素名(デフォルトはarrow) * @param {Number} obj.objindex XML要素内での対象オブジェクトのインデックス(デフォルトは0) * @param {String} obj.widthattr 要素で幅を指定している属性(デフォルトはwidth) * @param {String} obj.heightattr 要素で高さを指定している属性(デフォルトはheight) * @param {String} obj.origin 左右どちらのX座標および上下どちらのY座標を原点にするか(lt:左上を原点(デフォルト)、rt:右上を原点、lb:左下を原点、rb:右下を原点) * @param {Document} document ドキュメントオブジェクト * @return Nothing */ function processXMLforExtendObj(obj, document) { var backunit = toMmMode(document); if (obj.tagname == null) obj.tagname = "arrow"; if (obj.objindex == null) obj.objindex = 0; if (obj.widthattr == null) obj.widthattr = "width"; if (obj.heightattr == null) obj.heightattr = "height"; if (obj.origin == null) obj.origin = "lt"; var myRuleSet = new Array(new processExtendObj(obj)); __processRuleSet(document.xmlElements.item(0), myRuleSet); revertMmMode(document, backunit); } /** * XML検索するプロシージャ * @param {Object} obj パラメータオブジェクト * @param {String} obj.tagname 要素名 * @type boolean * @return 常にtrue */ function processExtendObj(obj) { this.name = "ProcessSubset"; this.xpath = "//" + obj.tagname; this.apply = function(myElement, myRuleProcessor) { obj.element = myElement; extendObj(obj); return true; } } /** * XML要素内にあるただ1つのグラフィック系オブジェクトの幅をXML要素の指定属性の値に変更する * @param {Object} obj パラメータオブジェクト * @param {XMLElement} obj.element グラフィックオブジェクトを持つ親XML要素 * @param {Number} obj.objindex XML要素内での対象オブジェクトのインデックス(デフォルトは0) * @param {String} obj.widthattr 要素で幅を指定している属性(デフォルトはwidth) * @param {String} obj.heightattr 要素で高さを指定している属性(デフォルトはheight) * @param {String} obj.origin 左右どちらのX座標および上下どちらのY座標を原点にするか(lt:左上を原点(デフォルト)、rt:右上を原点、lb:左下を原点、rb:右下を原点) * @return Nothing */ function extendObj(obj) { var width, height; try { width = obj.element.xmlAttributes.item(obj.widthattr).value; } catch (e) {} try { height = obj.element.xmlAttributes.item(obj.heightattr).value; } catch (e) {} if (obj.element.pageItems.length > obj.objindex) { var target = obj.element.pageItems[obj.objindex]; var unit = target.visibleBounds; switch (obj.origin) { case "lt": // 左上が原点 if (width != null) unit[3] = unit[1] + Number(width); if (height != null) unit[2] = unit[0] + Number(height); break; case "rt": // 右上が原点 if (width != null) unit[1] = unit[3] - Number(width); if (height != null) unit[2] = unit[0] + Number(height); break; case "lb": // 左下が原点 if (width != null) unit[3] = unit[1] + Number(width); if (height != null) unit[0] = unit[2] - Number(height); break; case "rb": // 右下が原点 if (width != null) unit[1] = unit[3] - Number(width); if (height != null) unit[0] = unit[2] - Number(height); break; } target.visibleBounds = unit; } }