Hallo Mike,
Jetzt habe ich die Vermustung, dass der Befehl itemByRange vom falschen Ausgangspunkt ausgeht, da es in der Tabelle ist.
Du liegst mit Deiner Vermutung richtig.
Der Fehler liegt in diesen beiden Zeilen:
st=start[k].parentStory;
st.characters.itemByRange(start[k].index, stop[k].index+(myEnd.length-1)).appliedCharacterStyle=myCharacterStyle;
st ist Deine Story.
Dein itemByRange bezieht sich also auf den Textfluß.
start[k].index bezieht sich, wenn start[k] in einer Tabelle ist, nicht auf den Textfluß, sondern auf die Zelle.
Angenommen Du hast in Zelle 3 der ersten Tabelle im Textfluß nach dem 1. Zeichen ein "[sub]". Dann lautet dessen Index 1. Und dann folgt das Kommando: Weise den Buchstaben von Index 1 im Textfluß bis zum Index (stop[k]) das Zeichenformat xy zu.
Du siehst das Problem?
start[k].index liefert Dir die relative Position des gesuchten Strings in der Tabelle.
Aber du nimmst diesen, um die Zeichen ab einer relativen Position zum Textfluß auszuzeichnen.
Ein Workaround:
1. Prüfen ob der Treffer in einer Zelle ist (...parent.constructor.name == "Cell").
2. Wenn nein -> weiter wie bisher.
3. Wenn ja -> Index der Zelle und Index der Tabelle bestimmen und relativ zu diesen die Zeichen ab Pos x bis Pos y mit dem Zeichenformat auszeichnen. Im itemByRange darfst Du Dich dabei also nicht auf die story beziehen, sondern auf die relative Postition innerhalb der Tabelle.
Das ist ziemlich mühsam.
Hast Du es mal mit dem oben angegebenen Skript ReplaceInStringWithConfig.jsx versucht?