InDesign Grep: изменение начала предложения в верхний регистр
Я относительно новичок в написании сценариев и в скрипте InDesign я пытаюсь изменить все первые буквы всех предложений в верхний регистр (многие из них являются строчными, так как я случайно генерировал последовательности из разных текстовых источников).
Я до сих пор смог найти части текста с этим выражением Grep:
\.(\s)+\l
Я также нашел этот сценарий Питера Карела, который он делится на InDesign Secrets:
app.findGrepPreferences.findWhat = "^.";
found = app.activeDocument.findGrep();
for (i = 0; i < found.length; i++)
found[i].characters[0].changecase (ChangecaseMode.lowercase);
Тем не менее, когда я сейчас заменяю ^. с моим собственным выражением и изменением строчных букв на верхние, скрипт не работает, что имеет смысл, так как я не хочу менять первый символ результатов findGrep, но последний. Но как мне найти последнего персонажа? Разрывы между предложениями имеют разную длину, поэтому я не могу просто ввести 2 вместо 0.
Любая помощь будет очень ценится! Спасибо!
Редактировать: я работаю над CS6.
1 ответ
Ваш GREP возвращает совпадения, которые начинаются с точки, затем имеют любое количество пробелов (включая, вероятно, жесткие возвраты) и всегда заканчиваются одним символом в нижнем регистре. Все идет нормально. Вы можете получить доступ к последнему символу (и фактически к любому последнему элементу в любой коллекции объектов InDesign) следующим образом:
found[i].characters[-1].changecase (ChangecaseMode.lowercase);
какие "индексы" с конца, а не с самого начала.
Тем не мение! Единственный символ в ваших матчах, кроме точки и пробелов, всегда будет строчной буквой. Таким образом, вы можете пропустить весь процесс "как найти правильный индекс" и, возможно, немного ускорить выполнение сценария, просто применяя строчные буквы (или, как вы их используете, прописные буквы) ко всему совпадению:
found[i].changecase (ChangecaseMode.lowercase);
потому что ничего не произойдет с символами не в нижнем регистре (слово, которое я объявляю для обозначения "иметь свойство, определенное в Юникоде, быть строчным и иметь эквивалент в верхнем регистре). (Или наоборот, если я правильно понимаю вашу цель.)