リンクをクリップボードにコピー
コピー完了
Indesign CC2018です。
JavaScriptの正規表現でテキスト内容の比較をしたいのですが、
テキストアンカーやここまでインデントなどの特殊文字は無視して比較したいのです。
テキストアンカーやここまでインデントなどの特殊文字をJSの正規表現で
検索することは可能でしょうか?
できれば特殊文字系全てを一括で、ダメなら個別でも。
リンクをクリップボードにコピー
コピー完了
幾つか教えてください。
以下,InDesign上のテキスト対String型オブジェクトの文字列を前提として,テキストアンカーとここまでインデントを例にテキスト内容を比較する例です。
var indStr = app.selection[0].contents;
var difStr = "てきとうてきすと";
// 単純比較
alert(indStr === difStr); // false
// アンカーテキストとここまでインデントをreplaceする
var tempStr = indStr.replace(/[\ufffc\u0007]/g, "");
alert(tempStr === difStr); // true;
ご参考まで。
リンクをクリップボードにコピー
コピー完了
インデザインのテキストフレームやセルの中身(旧商品情報)をJavaScriptで文字列として取得し、
テキストデータとして用意したテキスト(新商品情報)との比較です。
情報が変更になっていれば、置き換えるという処理を行っており、空白文字列は無視しているのですが
インデザイン側に特殊文字が含まれている場合に異なる文字列として判断されてしまうので。
主にアンカーテキストとここまでインデントの処理なのですが、
他の特殊文字も含まれる可能性もあるので、できれば一括で無視できればと思いました。
アンカーテキストとかの文字コードは存在するのですね。ありがとうございます。
この文字コードってどのように取得したらよいのでしょうか?
リンクをクリップボードにコピー
コピー完了
情報パネルから見られますよ。コードポイントなので,JavaScriptで扱う場合は
'\u0000'
という形で(最大4桁)使ってください。
JSから調べるなら,Ten_Aさんが下でおっしゃっているような方法があります。
リンクをクリップボードにコピー
コピー完了
ありがとうございます。
情報パネル表示したことなかったので気づきませんでした。
リンクをクリップボードにコピー
コピー完了
単純にそのモノを指定するなら文字コードダイレクトに指定すれば可能です。
Stringt.match(/[\x07]/);
ちなみに、InDesignの特殊キャラクタはBellやEnd of Textと言った制御文字を利用してたりします。ただし、無視するのであればそういった事は考えずにマッチさせたい条件をしっかり考えれば良いだけです。
これはJavaScript側のRegExpを使おうがInDesignの検索機能であるfindGrepPreferenceを操作しようが同様です。まずはロジカルな部分を熟考する必要があります。
リンクをクリップボードにコピー
コピー完了
ありがとうございます。
テキスト比較はあらゆる文字が可能性としてはあるので、
視覚的な文字列の内容が一致しているかを知りたいのですが
このような場合に適した比較方法ってどの様にしたら良いのでしょう?
リンクをクリップボードにコピー
コピー完了
横からすみません。
InDesignで表現できる文字列は非常に多いので,実はそんなに簡単な話ではないです。
例えばサロゲートペアを考慮するかどうかだけでもスクリプト側の難易度は跳ね上がります。
また,コードポイントによる比較になるので,InDesignで表現される異体字はString型オブジェクトと単純に比較できません。
InDesignであればオープンタイプフィーチャーまでたどって調べる必要がありますし,String型オブジェクトには字形という概念をもたせることができません(IVSなどを利用する必要があります)。
ですので,「視覚的な文字列の内容」とおっしゃいますが,どの程度のレベルまで比較するかは準備するテキスト,InDesignのデータと比較し,取り得る最大限の範囲をスクリプト開発者側が明確に線引する必要があります。
「このような場合に適した比較方法ってどの様にしたら良いのでしょう?」
というご質問ですが,テキスト比較は地道に実装するほかないと思います。要するに不要な文字列を除外するとか,サロゲートペアの場合の文字コード計算式を組み込むとか…です。
スクリプトで文字を扱う,特にExtendScriptで扱うのは実は非常にシビアで知識も要求されます。
リンクをクリップボードにコピー
コピー完了
そうなのですね、ありがとうございます。
地道に実行時に引っかかった文字コードを追加していくことにします。
リンクをクリップボードにコピー
コピー完了
JavaScriptで調べるのが良いかと思います。
当該キャラクタを選択した状態で
alert(app.selection[0].contents.charCodeAt(0).toString(16))
でいけるかと思います。
リンクをクリップボードにコピー
コピー完了
特殊文字1文字だけを選択した場合のcontentsはSpecialCharacters Enumになってしまうのでこれだとエラーになります。
調べたい文字と、その次の文字まで選択して実行すれば大丈夫。
リンクをクリップボードにコピー
コピー完了
ありがとうございます。
こちらも試してみます。