/** * @fileoverview 選択位置の後ろにある()内のテキストをルビとして、選択位置に配置する * @author Kenshi Muto <kmuto@debian.org> */ // @target "InDesign" /* Copyright: 2012-2021 Kenshi Muto ---------------------------------------------------------------------- ソフトウェア使用許諾同意書 本ソフトウェアの利用・変更・再配布にあたっては、下記の使用許諾同意書に 同意する必要があります。 1. 本使用許諾同意書における「ソフトウェア」とは、機械可読の資料 (ライブ ラリ、スクリプト、ソースファイル、データファイル)、実行形式、および 文書を意味します。 2. 本ソフトウェアの使用許諾同意書に同意する限りにおいて、使用者は 本ソフトウェアを自由に利用、変更することができます。 3. 本ソフトウェアに変更を加えない限りにおいて、使用者は本ソフトウェアを 自由にコピー、再配布することができます。 4. 本ソフトウェアは無保証です。作者およびそれに関連する組織、配布者は、 本ソフトウェアの使用に起因する一切の直接損害、間接損害、偶発的損害、 特別損害、懲戒的損害、派生的損害について何らの責任・保証も負いません。 5. 本ソフトウェアを変更した上で再配布するときには、下記の事項すべてに 従わなければなりません。 - 使用許諾同意書の内容に変更を加えてはなりません。技術上の理由で 文字エンコーディングの変換を行うことは許可しますが、その使用者が 特殊な技術的措置なしに可読な形でなければなりません。 - 技術上の理由でバイナリ化・難読化を行う場合も、変更箇所を含めた ソフトウェアを、その使用者が可読可能な形式の形で同一のメディアで 提供しなければなりません。本使用許諾同意書の2条および3条により、 使用者が可読形式の該当ソフトウェアを変更、コピー、再配布することを 妨げてはなりません。 - ソフトウェア構成物の所定の作者名の欄に、変更者のクレジット (個人名、企業名、所属、連絡先など)を「追加」しなければなりません。 6. 本ソフトウェアを変更した上で再配布するときには、変更理由および その内容を明記することが推奨されます。 7. 使用者がソフトウェアに適用可能な特許に対して特許侵害にかかわる何らか の行動を開始した時点で、この使用許諾同意書は自動的に終了し、以降 使用者はこの使用許諾書によって与えられた一切の権利を放棄するものと します。 著作権所有者 Copyright (C) 2012 Kenshi Muto. All rights reserved. 使用許諾同意書バージョン1.0 著作権所有者による書面での事前の許可がない限り、この使用許諾同意書 に変更を加えてはなりません。 ---------------------------------------------------------------------- */ // うしろ括弧版の探索 var str = app.activeDocument.selection[0]; if (str instanceof Word || str instanceof Text) { var point = str.characters[str.characters.length -1].index; if (str.characters[str.characters.length - 1].parent.characters[point + 1].contents == "(" || str.characters[str.characters.length - 1].parent.characters[point + 1].contents == "(") { var results = getRubyInParent(str.characters[str.characters.length - 1].parent, point + 2); setRuby(str, results[0]); for (var i = results[1]; i > point; i--) { str.characters[str.characters.length - 1].parent.characters[i].remove(); } } // elseでひらがな/カタカナ分割はしてみるべきか? } else if (str instanceof Character) { var point = str.index; if (str.parent.characters[point + 1].contents == "(" || str.parent.characters[point + 1].contents == "(") { var results = getRubyInParent(str.parent, point + 2); setRuby(str, results[0]); for (var i = results[1]; i > point; i--) { str.parent.characters[i].remove(); } } } else { alert("ルビかけ範囲を選択してください。"); } function setRuby(str, ruby) { if (str.characters[0].rubyFlag == false) { if (ruby.length == 1 || ruby.match(/[  ]/)) { str.rubyType = RubyTypes.PER_CHARACTER_RUBY; ruby = ruby.replace(" ", " "); } else { str.rubyType = RubyTypes.GROUP_RUBY; } str.rubyString = ruby; str.rubyFlag = true; } } function getRubyInParent(story, index) { var ruby = ""; for (var i = index; i < story.characters.length; i++) { if (story.characters[i].contents == ")" || story.characters[i].contents == ")") { return [ruby, i]; // ルビと閉じ括弧までのインデックスを返す } ruby += story.characters[i].contents; if (ruby.length > 13) { alert("ルビにしては長過ぎます。おそらく閉じ括弧が見つかりません。:" + ruby); exit(0); } } }