DTPab

DTPにまつわるあれこれ

末尾の改行を除いて段落を選択するスクリプト

何かしらアウトプットの置き場が欲しかったのですが、 ブログがかんたんでいいだろうということでブログを始めようと思います。

ってそれだけじゃアレなので、以前Twitterで紹介したスクリプトです。 詳細はDTPTransitさんのこの記事をご参照ください。

var myerror = function (mes){
    alert(mes);
    exit();
    }

var sel = app.activeDocument.selection[0];

if (sel.paragraphs.length > 1) myerror ("段落をまたいでいます");
var acceptRange = "InsertionPoint,Text,Character,Paragraph,Line,TextStyleRange,Word,";
//$.writeln(a.constructor.name);
if (acceptRange.match(sel.constructor.name+",") === null) myerror ("テキストを選択してください");

sel.paragraphs[0].select();
var sel_n = app.activeDocument.selection[0];
if (/[\r\n]$/.test(sel_n.contents)){
    var chs = sel_n.length;
    sel_n.characters[0].select();
    sel_n.characters[chs-2].select(SelectionOptions.ADD_TO);
    }

冒頭のmyerror関数はよく使う関数で、 alertを出した後、exitメソッド(InDesign専用)でスクリプトを終了する関数です。

var acceptRange = "InsertionPoint,Text,Character,Paragraph,Line,TextStyleRange,Word,";
if (acceptRange.match(sel.constructor.name+",") === null) myerror ("テキストを選択してください");

このくだりで選択しているオブジェクトを判別します。 なんかもっとうまい方法あればいいんですけどね。

sel.paragraphs[0].select();
var sel_n = app.activeDocument.selection[0];

ここであらためて、選択している文字とか挿入点から、それを含む段落を選択し直します。 言い方を変えると、ここをparagraphs[0]から lines[0]にすればその行を選択、ということになります。 ほかにもストーリーであったりセルや表など、割と応用が効くと思います。

if (/[\r\n]$/.test(sel_n.contents)){
    var chs = sel_n.length;
    sel_n.characters[0].select();
    sel_n.characters[chs-2].select(SelectionOptions.ADD_TO);
    }

最終的に、選択した段落に改行(\r)か強制改行(\n)が含まれていれば、 それを除外して選択範囲を指定し直す、という感じです。

以上、末尾の改行を含まず段落を選択するスクリプトでした。