最前面のテキストを塗り/線の色でそれぞれの指定数で交互に塗るAppleScript


先日、最前面のテキストを塗り/線の色で1文字ずつ交互に塗るAppleScriptを公開しましたが、その時から「2文字置きにしたい」という声は聞いていたのですが手段が思い浮かばなかったので一旦保留していました。


古旗さんが塗りのパターンを配列にするという手法を取ってらっしゃったのでそれを参考に、2色の塗りの文字数をそれぞれ設定できるように書いてみました。

使い方

前回同様、塗りの色が初めの文字色で線の色が後の方の文字色になります。

※選択しているレイヤーの最上位の文字が対象になります。

--初めの塗りの色数
set fillCount to 2
--あとの塗りの色数
set strokeCount to 1

この部分で文字数を設定します。

上記のようにfillColor2strokeColor1と設定した場合はこのようになります。
必要に応じて書き換えてください。

コード

(*
    最前面のテキストに対し、塗り/線の色でそれぞれの指定数で交互に塗るスクリプト
    既知の問題:サロゲートペアがあると正しく処理できない

    2020-07-15  エラー処理追加/塗りのパターン追加

*)

----塗り分けの文字数の指定
--初めの塗りの文字数
set fillCount to 2
--あとの塗りの文字数
set strokeCount to 1

set _SPACE to ASCII character 32


tell application "Adobe Illustrator"
    activate

    my chkOpenDoc(count of document)

    tell document 1

        set {fillColor, strokeColor} to my getColor()
        set colorList to my getColorList(fillColor, strokeColor, fillCount, strokeCount)
        set colorCount to count of colorList

        set celectText to (current layer)'s every page item
        tell celectText's item 1

            set j to 1

            repeat with i from 1 to count of (contents as string)

                tell character i
                    if contents is greater than _SPACE then
                        set fill color to colorList's item j
                        set j to j + 1
                    end if
                end tell

                if j is greater than colorCount then
                    set j to 1
                end if

            end repeat
        end tell
    end tell
end tell

on chkOpenDoc(i)
    tell application "Adobe Illustrator"
        if (i) is 0 then
            display dialog "ドキュメントが開かれていません" buttons {"OK"} default button "OK" with icon 0
            error number -128
        end if
    end tell
end chkOpenDoc

on getColor()

    tell application "Adobe Illustrator"
        tell document 1

            set fillColor to default fill color
            if fillColor's class is CMYK color info or class is RGB color info then

            else
                display dialog "塗り色が正しく設定されていません。" buttons {"OK"} default button "OK" with icon 0
                error number -128
            end if

            set strokeColor to default stroke color
            if strokeColor's class is CMYK color info or class is RGB color info then

            else
                display dialog "線の色が正しく設定されていません。" buttons {"OK"} default button "OK" with icon 0
                error number -128
            end if

            return {fillColor, strokeColor}

        end tell
    end tell

end getColor

on getColorList(fillColor, strokeColor, fillCount, strokeCount)
    tell application "Adobe Illustrator"
        tell document 1

            set colorList to {}

            repeat with i from 1 to fillCount
                set (colorList)'s end to fillColor
            end repeat

            repeat with i from 1 to strokeCount
                set (colorList)'s end to strokeColor
            end repeat

        end tell

        return colorList

    end tell
end getColorList