/** * @fileoverview 脚注記号を任意のものに変更する * @author Kenshi Muto <kmuto@debian.org> * @version 3,4,5 ` @requires libCommon.jsx */ /* Copyright: 2011-2012 Kenshi Muto ---------------------------------------------------------------------- ソフトウェア使用許諾同意書 本ソフトウェアの利用・変更・再配布にあたっては、下記の使用許諾同意書に 同意する必要があります。 1. 本使用許諾同意書における「ソフトウェア」とは、機械可読の資料 (ライブ ラリ、スクリプト、ソースファイル、データファイル)、実行形式、および 文書を意味します。 2. 本ソフトウェアの使用許諾同意書に同意する限りにおいて、使用者は 本ソフトウェアを自由に利用、変更することができます。 3. 本ソフトウェアに変更を加えない限りにおいて、使用者は本ソフトウェアを 自由にコピー、再配布することができます。 4. 本ソフトウェアは無保証です。作者およびそれに関連する組織、配布者は、 本ソフトウェアの使用に起因する一切の直接損害、間接損害、偶発的損害、 特別損害、懲戒的損害、派生的損害について何らの責任・保証も負いません。 5. 本ソフトウェアを変更した上で再配布するときには、下記の事項すべてに 従わなければなりません。 - 使用許諾同意書の内容に変更を加えてはなりません。技術上の理由で 文字エンコーディングの変換を行うことは許可しますが、その使用者が 特殊な技術的措置なしに可読な形でなければなりません。 - 技術上の理由でバイナリ化・難読化を行う場合も、変更箇所を含めた ソフトウェアを、その使用者が可読可能な形式の形で同一のメディアで 提供しなければなりません。本使用許諾同意書の2条および3条により、 使用者が可読形式の該当ソフトウェアを変更、コピー、再配布することを 妨げてはなりません。 - ソフトウェア構成物の所定の作者名の欄に、変更者のクレジット (個人名、企業名、所属、連絡先など)を「追加」しなければなりません。 6. 本ソフトウェアを変更した上で再配布するときには、変更理由および その内容を明記することが推奨されます。 7. 使用者がソフトウェアに適用可能な特許に対して特許侵害にかかわる何らか の行動を開始した時点で、この使用許諾同意書は自動的に終了し、以降 使用者はこの使用許諾書によって与えられた一切の権利を放棄するものと します。 著作権所有者 Copyright (C) 2011-2012 Kenshi Muto. All rights reserved. 使用許諾同意書バージョン1.0 著作権所有者による書面での事前の許可がない限り、この使用許諾同意書 に変更を加えてはなりません。 ---------------------------------------------------------------------- */ #include "../libs/libCommon.jsx" /** * 脚注記号を任意のものに変更する * @param {Object} obj パラメータオブジェクト * @param {Story} obj.story ターゲットのストーリーオブジェクト * @param {CharacterStyle} obj.contentorgcstyle 本文での脚注文字スタイル(置き換え前) * @param {CharacterStyle} obj.contentnewcstyle 本文での脚注文字スタイル(置き換え後)。幅をほぼ0(1Q・幅1%)、前後ベタ、カラーなしと設定するのがよい * @param {CharacterStyle} obj.contentcstyle 本文での任意脚注記号に適用する文字スタイル。contentorgcstyleおよびcontentnewcstyleとは別の名前のものにし、これ以外の用途では使わないこと * @param {CharacterStyle} obj.footnotecstyle 脚注内での任意脚注記号に適用する文字スタイル。contentorgcstyleおよびcontentnewcstyleとは別の名前のものにし、これ以外の用途では使わないこと * @param {Boolean} obj.prebeta 脚注前の1文字の後アキをベタにするか(true) * @param {String} obj.marks[] 任意マーカーの文字配列(各要素は1文字) * @param {Boolean} obj.markseq 任意マーカーの挿入方法を指定する。trueの場合、任意マーカーを脚注番号に合わせてobj.marksから選ぶ。falseの場合、obj.marksの最初の要素を、脚注番号の個数分並べる(「*、**、***」相当) * @return Nothing */ function replaceFootnoteMark(obj) { var fp = []; // キーはID、値はページオフセット var fn = []; // キーはID、値はそのページでの脚注数 var fs = []; // キーはシーケンシャル、値はID var seq = 0; var numinpage = 0; var prepage = -1; var footnotes = obj.story.footnotes; // 崩れる前に番号などを取得しておく for (var i = 0; i < footnotes.length; i++) { var p; if (getCSVersion() == 3) { p = footnotes[i].storyOffset.parentTextFrames[0].parent.documentOffset; } else { p = footnotes[i].storyOffset.parentTextFrames[0].parentPage.documentOffset; } fp[footnotes[i].id] = p; if (prepage < p) { prepage = p; numinpage = 0; } numinpage++; seq++; fn[footnotes[i].id] = numinpage; fs[seq] = footnotes[i].id; } // オリジナルの脚注スタイルを隠しスタイルに置換 app.findTextPreferences = NothingEnum.nothing; app.changeTextPreferences = NothingEnum.nothing; app.findTextPreferences.appliedCharacterStyle = obj.contentorgcstyle; app.changeTextPreferences.appliedCharacterStyle = obj.contentnewcstyle; obj.story.parent.changeText(); // かつて入れていた任意脚注マークを消す app.findTextPreferences.appliedCharacterStyle = obj.contentcstyle; app.changeTextPreferences.appliedCharacterStyle = NothingEnum.nothing; app.changeTextPreferences.changeTo = "^t"; obj.story.parent.changeText(); app.findTextPreferences.appliedCharacterStyle = obj.footnotecstyle; obj.story.parent.changeText(); for (var i = footnotes.length - 1; i >= 0; i--) { var inspoints = footnotes[i].parent.characters[footnotes[i].storyOffset.index].insertionPoints; if (obj.markseq == true) { // 配列から順に使用 inspoints[-1].contents = obj.marks[fn[footnotes[i].id] - 1]; footnotes[i].parent.characters[inspoints[-1].index].appliedCharacterStyle = obj.contentcstyle; } else { // 同じ文字を脚注数だけ並べる for (var i2 = 1; i2 <= fn[footnotes[i].id]; i2++) { inspoints[-1].contents = obj.marks[0]; footnotes[i].parent.characters[inspoints[-1].index].appliedCharacterStyle = obj.contentcstyle; if (footnotes[i].characters[0].contents == SpecialCharacters.FOOTNOTE_SYMBOL) { footnotes[i].characters[0].remove(); } footnotes[i].characters[0].insertionPoints[0].contents = obj.marks[0]; } } if (obj.prebeta == true) { // ベタ指定 footnotes[i].parent.characters[footnotes[i].storyOffset.index - 1].trailingAki = 0; } } } /** * 脚注記号を元に戻す * @param {Object} obj パラメータオブジェクト * @param {Story} obj.story ターゲットのストーリーオブジェクト * @param {CharacterStyle} obj.contentorgcstyle 本文での脚注文字スタイル(置き換え前) * @param {CharacterStyle} obj.contentnewcstyle 本文での脚注文字スタイル(置き換え後) * @param {CharacterStyle} obj.contentcstyle 本文での任意脚注記号に適用する文字スタイル。contentorgcstyleおよびcontentnewcstyleとは別の名前のものにし、これ以外の用途では使わないこと * @param {CharacterStyle} obj.footnotecstyle 脚注内での任意脚注記号に適用する文字スタイル。contentorgcstyleおよびcontentnewcstyleとは別の名前のものにし、これ以外の用途では使わないこと * @param {Boolean} obj.prebeta 脚注前の1文字の後アキをベタにしていて自動に戻すべきか(true) * @return Nothing */ function revertFootnoteMark(obj) { // スタイルを戻して追加文字列も消す app.findTextPreferences = NothingEnum.nothing; app.changeTextPreferences = NothingEnum.nothing; app.findTextPreferences.appliedCharacterStyle = obj.contentcstyle; app.changeTextPreferences.appliedCharacterStyle = NothingEnum.nothing; app.changeTextPreferences.changeTo = ""; obj.story.parent.changeText(); app.findTextPreferences.appliedCharacterStyle = obj.footnotecstyle; obj.story.parent.changeText(); app.findTextPreferences = NothingEnum.nothing; app.changeTextPreferences = NothingEnum.nothing; app.findTextPreferences.appliedCharacterStyle = obj.contentnewcstyle; app.changeTextPreferences.appliedCharacterStyle = obj.contentorgcstyle; obj.story.parent.changeText(); var footnotes = obj.story.footnotes; for (var i = 0; i < footnotes.length; i++) { if (footnotes[i].characters[0].contents != SpecialCharacters.FOOTNOTE_SYMBOL) { footnotes[i].characters[0].insertionPoints[0].contents = SpecialCharacters.FOOTNOTE_SYMBOL; // FIXME: なぜ効かない? (CS5.5) } if (obj.prebeta == true) { footnotes[i].parent.characters[footnotes[i].storyOffset.index - 1].trailingAki = -1; } } }