5.2. Эти неуловимые абзацы
С чем чаще всего приходится иметь дело в верстке? Думаю, вряд ли кто-то будет сильно возражать против того, что наиболее частая операция - работа с абзацами и отдельными символами: форматирование текста всегда занимает львиную долю времени всей верстки. Давайте разберемся, как реализовать основные возможности программы по форматированию.
Для того чтобы найти номер абзаца, в котором стоит курсор, логично воспользоваться свойством paragraphs. Однако если мы устроим проверку, результат будет на первый взгляд странным. Что mySelection[0]. paragraphs [0] . index, ЧТО mySelection[0] . index' - обе ССЫЛКИ ведут К ОДНОМУ и тому же объекту. Это свидетельствует о том, что объект paragraph в чистом виде в объектной модели InDesign не содержится - он определяется исключительно по наличию знака абзаца в тексте. Иными словами, InDesign под считывает, сколько ему встретилось символов абзаца с начала текста до заданного места, и только после этого определяет порядковый номер абзаца. Поэтому непосредственное задание порядкового номера абзаца - малопроизводительный и времязатратный процесс.
Для облегчения работы предусмотрен простой и эффективный способ, заключающийся В использовании конструкции mySelection.paragraphs [0] как базовой и связанных с нею методов относительной адресации: lastitemo, firstltem(), nextltem(), previousltemf). В большинстве случаев такой ПОДХОД проще, чем получение абсолютного порядкового номера абзаца.
Однако для того чтобы иметь полный и удобный способ контроля за публикацией (вместо использования длинных и плохо читаемых конструкций типа nextitem(nextitem(nextitem)) - в случае, если, например, нужно обратиться к третьему абзацу после текущего), лучше использовать непосредственную (абсолютную) и ндексацию.
Чтобы найти номер интересующего нас абзаца, поступим так, как это делает InDesign - подсчитаем количество встретившихся нам абзацев до места курсора. Для этого нам сначала потребуется узнать код символа абзаца. Его можно определить несколькими способами. Самый простой- выделить символ и открыть в InDesign палитру Info. В среднем ряду в ней отображаются коды выделенных символов, и для абзаца там будет стоять "Unicode: OxD". Второй вариант- использовать традиционные обозначения для спецсимволов (более подробная информация о них представлена в разд. 172.6).
Далее. Давайте посмотрим на текст под не совсем обычным ракурсом. Фактически, его можно представить как цепочку текстовых фрагментов, разделенных разделителями- извиняюсь за каламбур- (в качестве которых можно использовать любой символ- пробел, точку, запятую или, как в нашем случае, символ абзаца). Первый фрагмент отделен от второго первым знаком абзаца, второй от третьего- вторым и т. д. Таким образом, мы можем взять текст от начала материала до точки вставки и разбить его по абзацам. Это реализуется через метод split о, который в качестве результата возвращает массив из получившихся текстовых фрагментов. Нам останется только узнать длину полученного массива- поскольку каждый абзац будет храниться в своей ячейке массива. Итак, переходим к самому материалу: