applescriptadobe-illustratornon-breaking-characters

Apply noBreak AppleScript Illustrator


My goal here is to apply the no break parameter of Illustrator with AppleScript to two words in a text frame.

I'm able to detect the non-breaking space in a string. Then I need to apply the no break parameter to the word after and before the character 202 as no break space isn't supported by Illustrator

Open this Scriplet in your Editor:

set ourText to "Hello my friend Jon<non-breaking-space>Doe."
set findThis to (ASCII character 202)
set MW to words of ourText

repeat with aWord in MW
   if findThis is in aWord then
       set myWord to aWord
       exit repeat
   end if
end repeat

myWord --> display: Jon Doe

Then I would like to search in the text frame for "Jon Doe" apply the no break parameter. I tried manually in Illustrator, this would work.


Solution

  • Your script doesn’t work because you are building a list of words. Spaces (including no-break spaces) are word delimiters, so they are not in your word list (MW).

    It will work if we use the no-break space as text item delimiter:

    use scripting additions
    
    set theResult to {}
    set ourText to "Hello my friends Jon Doe, Jane Doe and Joe Doe!" # Each name contains a no-break space
    set findThis to character id 160 # Decimal notation of U+00A0 (no-break space)
    
    set saveTID to AppleScript's text item delimiters
    set AppleScript's text item delimiters to findThis # The no-break space
    set countTextItems to count of text items of ourText
    
    if countTextItems > 1 then
        repeat with i from 1 to countTextItems - 1
            set end of theResult to word -1 of text item i of ourText & findThis & word 1 of text item (i + 1) of ourText
        end repeat
    else
        set theResult to "[no character id " & id of findThis & " found]"
    end if
    
    set AppleScript's text item delimiters to linefeed
    display dialog theResult as text
    set AppleScript's text item delimiters to saveTID
    

    Input (ourText):

    Hello my friends Jon[noBreakSpace]Doe, Jane[noBreakSpace]Doe and Joe[noBreakSpace]Doe!

    Output:

    Output


    Please note that this will fail in cases like

    my friends J.[noBreakSpace]Doe

    because we are using word inside the repeat loop.

    If you often have cases like these then replace word -1 and word 1 with text -1 and text 1. The output then will only contain the two characters around the spaces, but for searching purposes this is still enough.