/** * @fileoverview XML要素の範囲の背景に画像を配置する * @author Kenshi Muto <kmuto@debian.org> * @requires libBackGroundImage3.jsx * @requires glue code.jsx */ /* Copyright: 2009 Kenshi Muto ---------------------------------------------------------------------- ソフトウェア使用許諾同意書 本ソフトウェアの利用・変更・再配布にあたっては、下記の使用許諾同意書に 同意する必要があります。 1. 本使用許諾同意書における「ソフトウェア」とは、機械可読の資料 (ライブ ラリ、スクリプト、ソースファイル、データファイル)、実行形式、および 文書を意味します。 2. 本ソフトウェアの使用許諾同意書に同意する限りにおいて、使用者は 本ソフトウェアを自由に利用、変更することができます。 3. 本ソフトウェアに変更を加えない限りにおいて、使用者は本ソフトウェアを 自由にコピー、再配布することができます。 4. 本ソフトウェアは無保証です。作者およびそれに関連する組織、配布者は、 本ソフトウェアの使用に起因する一切の直接損害、間接損害、偶発的損害、 特別損害、懲戒的損害、派生的損害について何らの責任・保証も負いません。 5. 本ソフトウェアを変更した上で再配布するときには、下記の事項すべてに 従わなければなりません。 - 使用許諾同意書の内容に変更を加えてはなりません。技術上の理由で 文字エンコーディングの変換を行うことは許可しますが、その使用者が 特殊な技術的措置なしに可読な形でなければなりません。 - 技術上の理由でバイナリ化・難読化を行う場合も、変更箇所を含めた ソフトウェアを、その使用者が可読可能な形式の形で同一のメディアで 提供しなければなりません。本使用許諾同意書の2条および3条により、 使用者が可読形式の該当ソフトウェアを変更、コピー、再配布することを 妨げてはなりません。 - ソフトウェア構成物の所定の作者名の欄に、変更者のクレジット (個人名、企業名、所属、連絡先など)を「追加」しなければなりません。 6. 本ソフトウェアを変更した上で再配布するときには、変更理由および その内容を明記することが推奨されます。 7. 使用者がソフトウェアに適用可能な特許に対して特許侵害にかかわる何らか の行動を開始した時点で、この使用許諾同意書は自動的に終了し、以降 使用者はこの使用許諾書によって与えられた一切の権利を放棄するものと します。 著作権所有者 Copyright (C) 2008 Kenshi Muto. All rights reserved. 使用許諾同意書バージョン1.0 著作権所有者による書面での事前の許可がない限り、この使用許諾同意書 に変更を加えてはなりません。 ---------------------------------------------------------------------- */ #include "../libs/libBackGroundImage3.jsx" #include "../libs/glue code.jsx" var __xmlmaxcount = 0; var __xmlcount = 0; /** * XML要素を探してその範囲の背景に指定のファイルを配置する(processRuleSet版)。オブジェクトオフセットおよび画像ファイルオブジェクトはページごとに指定できる。配列がページ数に満たなかった場合、その最後のオブジェクトが使われる。オフセットとファイルは別個に指定できる * @param {Document} document ドキュメントオブジェクト * @param {String} obj.layername レイヤー名。nullの場合には現在のレイヤー * @param {String} obj.tagname XML要素名 * @param {Long[][4]} obj.offsetunits 各ページごとのオフセット値 * @param {File[]} obj.files 各ページごとの画像ファイルオブジェクト * @param {ObjectStyle} obj.ostyle オブジェクトスタイルオブジェクト * @param {boolean} obj.lfit 左端を版面に合わせるか(true=合わせる、false=合わせずに先頭文字から判定) * @param {Float} obj.width ボックスの幅。nullのときには文字から自動算出 * @param {boolean} obj.fit ページをまたぐときにオフセット前の下の位置を版面に合わせる(true=合わせる、false=合わせない) * @return Nothing */ function processXMLforBackgroundImage3(obj, document) { var myRuleSet = new Array(new processCountTargetImage(obj)); __processRuleSet(document.xmlElements.item(0), myRuleSet); var pg; if (obj.progress == true) { obj.pgcomp = createBGProgressBar(__xmlmaxcount, 200, obj.tagname); obj.pgcomp.show(); } if (__xmlmaxcount > 0) { myRuleSet = new Array(new processBackgroundImage(obj)); __processRuleSet(document.xmlElements.item(0), myRuleSet); } if (obj.pgcomp != null) obj.pgcomp.hide(); __xmlmaxcount = 0; __xmlcount = 0; } /** * プログレスバーの作成 * @param {Long} maxValue バーの最大値 * @param {Long} width バーの幅ピクセル * @param {String} tag タイトルに表示する処理中タグ名 * @type Object * @return プログレスバーのオブジェクト */ function createBGProgressBar(maxValue, width, tag) { var wObj = new Window('window', tag + 'の背景画像の処理中'); with(wObj) { wObj.myProgressBar = add('progressbar', [12, 12, width, 24], 0, maxValue); } var pp = { 'ProgressPanel' : wObj, 'show' : function() { this.ProgressPanel.show() }, 'hide' : function() { this.ProgressPanel.hide() }, 'max' : maxValue, 'barwidth' : width, 'val' : function(val) { if(typeof val == "undefined") return this.ProgressPanel.myProgressBar.value; this.ProgressPanel.myProgressBar.value = val + 1; this.show(); this.hide(); this.show(); } } return pp; } /** * XML検索して指定の要素に背景を描くプロシージャ * @param {String} obj.layername レイヤー名。nullの場合には現在のレイヤー * @param {String} obj.tagname XML要素名 * @param {Long[][4]} obj.offsetunits 各ページごとのオフセット値 * @param {File[]} obj.files 各ページごとの画像ファイルオブジェクト * @param {ObjectStyle} obj.ostyle オブジェクトスタイルオブジェクト * @param {boolean} obj.lfit 左端を版面に合わせるか(true=合わせる、false=合わせずに先頭文字から判定) * @param {Float} obj.width ボックスの幅。nullのときには文字から自動算出 * @param {boolean} obj.fit ページをまたぐときにオフセット前の下の位置を版面に合わせる(true=合わせる、false=合わせない) * @type boolean * @return 常にtrue */ function processBackgroundImage(obj) { this.name = "ProcessSubset"; this.xpath = "//" + obj.tagname; this.apply = function(myElement, myRuleProcessor) { if (__xmlcount == __xmlmaxcount) return true; obj.startpoint = myElement.storyOffset; obj.endpoint = getEndStoryPoint2(myElement); obj.story = myElement.parentStory; backGroundImage3(obj); __xmlcount++; if (obj.pgcomp != null) { obj.pgcomp.val(__xmlcount); } return true; } } /** * XML検索して指定の要素の数をカウントするプロシージャ * @param {String} obj.tagname XML要素名 * @type boolean * @return 常にtrue */ function processCountTargetImage(obj) { this.name = "ProcessSubset"; this.xpath = "//" + obj.tagname; this.apply = function(myElement, myRuleProcessor) { __xmlmaxcount++; return true; } }