Illustrators RE 4

なんだかわけの分からないうちに台風は過ぎ去っていったようです。けっこう拍子抜けでした。
それはそれで良かったのですが、良くないのはこちらの方。先日からぐだぐだになりつつあります。いつまで続ける事やらw
完成まで持っていけるのだろうか???
というわけで、検索対象はStory一本にしぼります。texFrameからレンジ抜き出してって作業も必要になるのです。それはそれで煩わしいですが実装し易そうですので。

var grepper = function(obj, ofst, tglen, re){ //obj:Story ofst:CharacterOffset tglen:targets length re:REObject
    var result =new Array();
    var swp,st,ed;
    var pos = 0, len = 0;
    var tgcStyle,tgpStyle,cstyle,pstyle,tg,tgtStr;

    if (ls0.selection.index==0){ //get target characterStyle
        cstyle= null;
        } else {
            cstyle = charStyles.list()[ls0.selection.index-1];
            }
    if (ls1.selection.index==0){ //get target paragraphStyle
        pstyle= null;
        } else {
            pstyle = paraStyles.list()[ls1.selection.index-1];
            }

    var tmp=””;
    for (var j=0;j<ofst;j++) tmp+=”`”;
    tgtStr = tmp + obj.textRange.contents.substr(ofst,tglen);

    while(re.test(tgtStr)){
        st = tgtStr.match(re)+””;
        swp = “”;
        for(var i=0;i<st.length;i++) swp += “`”;
        pos = tgtStr.indexOf(st);
        len = st.length;
        if (r0.value||(cstyle==null&&pstyle==null)){
            result.push([pos, len]);
            } else {
                tgcStyle = obj.characters[pos+ofst].characterStyles;
                tgpStyle = obj.characters[pos+ofst].paragraphStyles;
                if (tgcStyle!=cstyle&&cstyle!=null) continue;
                if (tgpStyle!=pstyle&&pstyle!=null) continue;
                result.push([pos, len]);
                }
        tgtStr = tgtStr.replace(st, swp);
        }
    return result;
    }<ofst;j++) tmp+="`" ;="" tgtstr="tmp" +="" obj.textrange.contents.substr(ofst,tglen);="" while(re.test(tgtstr)){="" st="tgtStr.match(re)+"";" swp="" for(var="" i="0;i<st.length;i++)" pos="tgtStr.indexOf(st);" len="st.length;" if="" (r0.value||(cstyle="=null&&pstyle==null)){" result.push([pos,="" len]);="" }="" else="" {="" tgcstyle="obj.characters[pos+ofst].characterStyles;" tgpstyle="obj.characters[pos+ofst].paragraphStyles;" (tgcstyle!="cstyle&&cstyle!=null)" continue;="" (tgpstyle!="pstyle&&pstyle!=null)" swp);="" return="" result;="" }

さて、今回のは先日のものとさほど変化はありません。ターゲットがStoryになったのでcontentsの抜き出し方が少し変わったぐらいです。とりあえず要点だけでも説明しておきましょう。

    var tmp=””;
    for (var j=0;j<ofst;j++) tmp+=”`”;
    tgtStr = tmp + obj.textRange.contents.substr(ofst,tglen);<ofst;j++) tmp+="`" ;="" tgtstr="tmp" +="" obj.textrange.contents.substr(ofst,tglen);

抜き出したcontentsもあらかじめオフセットを参照してマスクしてしまう様に変えて、後ろの要らない部分も切り落としています。

st = tgtStr.match(re)+””;

検索対象もREですので可変です。ですからこの様に取り出さないと何がどうなっているのか分かりません。

        swp = “”;
        for(var i=0;i<st.length;i++) swp += “`”;<st.length;i++) swp="" +="`" ;

何がヒットしたのか判った所で後ほど該当箇所をマスクする為のダミー文字列を生成しておきましょう。

        pos = tgtStr.indexOf(st);
        len = st.length;

ヒットした位置を知るにはindexOfメソッドが役に立ちます。文字列の長さはlengthプロパティで。

result.push([pos, len]);

あとは条件が合致すれば上記の様にarrayにpushしておきましょう。

tgtStr = tgtStr.replace(st, swp);

一連の作業が終わったら前述のように当該箇所をマスクしてしまいます。
あとはループしてマッチする部分をすべてarrayに収容すればおわりです。

やれやれ、これでStoryのどの部分をいじれば良いのかが分かりました。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中