Последний вопрос. Представим ситуацию, когда на полосе найдено несколько строк, удовлетворяющих условию поиска. Что переносить в колонтитул? Наиболее оптимальный вариант- первую и последнюю строки, при этом понадобится их как-то разделять. Предусмотрим свободу' выбора, создав набор разделителей. Для других случаев (занесение только первого или только последнего найденного) разделители не пригодятся.
В случае’ когда текст с заданным стилем на странице не найден, колонтитул будут дублироваться с предыдущей страницы - до тех пор, пока не будет заменен текстом, найденным на текущей странице.
Итак, описательную часть считаем законченной, переходим непосредственно к написанию скрипта (листинг 5.26).
[ Листинг 5.26. Расстановка скользящих колонтитулов
var pS_name = new Array ();
var labels = new Array("L", "R");
var div = new Array "»") ;
var check = false; with(app){
if ( (selection, length!=1) | | (selection. length==l && selection[0].constructor.name!="TextFrame")){ alert("Ничего не выделено или выделено более одного объекта, или выделенный объект не является текстовым фреймом"); exit() ;
)
sel = арр.activeDocument.selection[0];
pS = app.activeDocument.paragraphStyles
for (i=0; i<pS.length; i++) pS_name[i] = pS[i].name;
var DLG = dialogs.add();
with (DLG.dialogColumns.add()) {
with (dialogRows.add().borderPanels.add().dialogColumns.add()) { with (dialogRows.add()) {
staticTexts.add({staticLabel: "Искать стиль:"}); var DLG_pS = dropdowns.add({stringList:pS_name}); dropdowns[0].selectedlndex =
Math.ceil(dropdowns[0].stringList.length/2)
}
with (myRadioButtons = radiobuttonGroups.add()) {
radiobuttonControls.add({staticLabel:"Первый на стр."});
radiobuttonControls.add({staticLabel:"Последний на стр."}); radiobuttonControls.add({checkedState:true, staticLabel:"Все на стр."});
}
with (dialogRows.add()) {
staticTexts.add({staticLabel: "Разделитель подразделов: "}) ; var DLG_div = dropdowns.add((stringList:div, selectedlndex: 0});
}
}
}
var myResult = DLG.show(); findPreferences = null; changePreferences = null;
findPreferences.appliedParagraphStyle = pS [DLG__pS. selectedlndex]; do{
s = sel.search(); do{
if(s.length==0) {break} switch(myRadioButtons.selectedButton){ case 0:
s =s[0].contents; break; case 1:
s =s[s.length-1].contents; break; case 2:
s = s[0].contents; for(i=l; i<s.length; i++)
s += " " + div[DLG_div.selectedlndex] + " " + s[i].contents; s = s.replace(/\r/, "");
}
} while (false) page = sel.parent
colonTitle = page.textFrames.item(labels[page.documentOffset%2]); MasterTF = page.appiiedMaster.textFrames if (colonTitle==null SS
MasterTF.item(labels[page.documentOffset%2]) != null) {
colonTitle = MasterTF.item(
labels[page.documentOffset%2]).override(page);
}
try {colonTitle.contents = c} catch(err){
if(check==false) {
alert ("На стр. " + page, name + " нет ^требуемого фрейма!")