}
myXl = myTextFrame.geometricBounds[1] + myLeftlnset; myX2 = myXl + myColumnWidth;
}
else(
// Для текущей колонки
if(i == myTextFrame.textFramePreferences.textColumnCount)( myX2 = myTextFrame.geometricBounds[1] -myRightlndent; myXl = myX2 - myTextWidth;
}
// Накопление результата из всех предыдущих колонок, см. рис. 6.1 else(
myXl = myTextFrame.geometricBounds[1] +
(myColumnWidth*i) + (myGutterWidth * i) ; myX2 = myXl + myColumnWidth;
}
}
// Искомые значения myArray.push([myXl, myX2]);
}
for(i = 0; i < myArray.length; i ++)( if((myPagePosition >= myArray[i][0])&&
(myPagePosition <=myArray[i][1]))( myColumnEdge = myArray[i][0]; break;
}
}
return myColumnEdge;
}
Начало представляет собой традиционную "защиту от неподготовленного пользователя": проверяем, что точка вставки находится в тексте (арр.documents. length, арр. selection[0] . constructor.name). Затем- отображение диалогового окна, в котором предусмотрены задание позиции табулятора (Tab Stop, четыре варианта) и заполнителя (Tab Leader). Главная цель - найти необходимое положение точки вставки и выразить его через доступные нам свойства фрейма.
В зависимости от выбранного варианта позиции табулятора будут происходить различные действия. Рассмотрим каждое по порядку.
Случай первый - табуляция должна быть установлена по.правому краю колонки (практическое использование- создание содержания, например). Чтобы определить ширину колонки (функция findcoiumnEdge), согласно объектной модели от точки вставки insertionPoints[0] переходим к родительскому текстовому фрейму parentTextFrair.es[0], у которого получить необходимое значение уже не составит никакого труда:
myTabPosition = myParagraph.insertionPoints[0].parentTextFrames[0]. textFramePreferences. textColumnFixedWidth
Дальнейшее - дело техники: задание типа табулятора и собственно его установка
myParagraph.tabStops.add({alignment:myTabAlignment, leader:myLeader, position:myTabPosition}); В случае, если выбран второй вариант (установка табулятора на текущей позиции), положение текущей позиции получаем через свойство horizontaioffset. Однако оно дает абсолютное значение (относительно точки начала координат публикации). А для того чтобы получить смещение относительно левого края колонки (вспомните окно Tab position в InDesign), нужно найти положение самого края. В самом простом случае (одноколоночный фрейм) оно равно
mylnsertionPoint.horizontaioffset - myTextFrame.geometricBounds[1]; Как правило, нужно еще вычесть расстояние от края колонки до текста
myLeftlnset:
myLeftlnset = myTextFrame.textFramePreferences.insetSpacing[1]; В случае, если фрейм многоколоночный, нужно сделать поправку на количество колонок и суммарное расстояние между колонками (см. рис. 6.1):
myTextFrame.geometricBounds[1] + (myColumnWidth*i) + (myGutterWidth » i); Естественно, при этом должен быть установлен табулятор с левой выключкой:
myTabAlignment = TabStopAlignment.leftAlign; Наконец, последний случай (hanging indent на текущей позиции): для установки табулятора сначала определяем необходимую позицию: из абсолютного значения текущей точки вставки вычитаем позицию начала колонки, что даст нам положение точки вставки относительно текущей колонки: