Hello
Here is a draft which seems to do the trick.
property sticky : ASCII character (202) set textBlock to "item1 item2 'item 3' [item 4]" set delimiter to " " set quotePairList to {{quote, quote}, {"'", "'"}, {"[", "]"}} --
set textBlock to normalize(textBlock, quotePairList)
set liste to spaces2space(textBlock)
on spaces2space(T) repeat while T contains " " set AppleScript's text item delimiters to " " set lt to text items of T set AppleScript's text item delimiters to space set T to lt as text end repeat set lt to text items of T set AppleScript's text item delimiters to "" return lt end spaces2space
on normalize(T, L) set k to count of L repeat with ba in L set {b, a} to ba if b is in T then set AppleScript's text item delimiters to b set lt to text items of T if b = a then repeat with i from 2 to ((count of lt) - 1) by 2 set lti to lt's item i if lti contains space then set AppleScript's text item delimiters to space set lt3 to text items of lti set AppleScript's text item delimiters to sticky set lt's item i to lt3 as text end if -- contains space end repeat -- i else repeat with i from 2 to (count of lt) set lti to lt's item i if lti contains a then set AppleScript's text item delimiters to a set lt2 to text items of lti if lt2's item 1 contains space then set AppleScript's text item delimiters to space set lt3 to text items of lt2's item 1 set AppleScript's text item delimiters to sticky set lt2's item 1 to lt3 as text end if -- contains space set AppleScript's text item delimiters to a set lt's item i to lt2 as text end if end repeat -- i end if -- b=a set AppleScript's text item delimiters to b set T to lt as text end if -- b is in T end repeat -- ba set AppleScript's text item delimiters to "" return T end normalize
I assumes that some optimization would be doable with script objects or references
Yvan KOENIG |