[ID CC-CC2021] SelectedTextToNewFrame

Bebs

Топикстартер
15 лет на форуме
Сообщения
461
Реакции
223
Отыскался старый скрипт, который копирует выделенный фрагмент текста в новый фрейм.
Код:
if (app.documents.length > 0 && app.selection.length == 1 && app.selection[0].hasOwnProperty("baseline") && app.selection[0].characters.length > 0) {
    selectedTextToNewFrame(app.selection[0]);
}

function selectedTextToNewFrame(sText) {
    hProps = [sText.paragraphs[0].horizontalOffset - sText.paragraphs[0].leftIndent - sText.paragraphs[0].firstLineIndent, sText.parentTextFrames[0].textFramePreferences.textColumnFixedWidth];
    nFrame = sText.parentTextFrames[0].parent.textFrames.add();
    nFrame.geometricBounds = [sText.lines[-1].baseline, hProps[0], sText.lines[0].baseline - sText.lines[0].ascent, hProps[0] + hProps[1]];
    nFrame.textFramePreferences.firstBaselineOffset = FirstBaseline.ascentOffset;
    nFrame.textWrapPreferences.textWrapMode = TextWrapModes.BOUNDING_BOX_TEXT_WRAP;
    nFrame.textWrapPreferences.textWrapOffset = [sText.paragraphs[0].spaceBefore,0,sText.paragraphs[-1].spaceAfter,0];
    sText.move(LocationOptions.atBeginning, nFrame.insertionPoints.item(0));
}
Пытаюсь сделать возможной отмену выполнения одним нажатием Ctrl-Z
Добавил пару строк
Код:
function main(){
if (app.documents.length > 0 && app.selection.length == 1 && app.selection[0].hasOwnProperty("baseline") && app.selection[0].characters.length > 0) {
    selectedTextToNewFrame(app.selection[0]);
}

function selectedTextToNewFrame(sText) {
    hProps = [sText.paragraphs[0].horizontalOffset - sText.paragraphs[0].leftIndent - sText.paragraphs[0].firstLineIndent, sText.parentTextFrames[0].textFramePreferences.textColumnFixedWidth];
    nFrame = sText.parentTextFrames[0].parent.textFrames.add();
    nFrame.geometricBounds = [sText.lines[-1].baseline, hProps[0], sText.lines[0].baseline - sText.lines[0].ascent, hProps[0] + hProps[1]];
    nFrame.textFramePreferences.firstBaselineOffset = FirstBaseline.ascentOffset;
    nFrame.textWrapPreferences.textWrapMode = TextWrapModes.BOUNDING_BOX_TEXT_WRAP;
    nFrame.textWrapPreferences.textWrapOffset = [sText.paragraphs[0].spaceBefore,0,sText.paragraphs[-1].spaceAfter,0];
    sText.move(LocationOptions.atBeginning, nFrame.insertionPoints.item(0));
}
}
app.doScript(main,UndoModes.ENTIRE_SCRIPT);
Но скрипт перестал работать. Что неправильно?
 
  • Спасибо
Реакции: catpaw

Eugenyus

12 лет на форуме
Сообщения
1 960
Реакции
3 589
Код:
app.doScript(main, ScriptLanguage.JAVASCRIPT, undefined, UndoModes.ENTIRE_SCRIPT);
Или даже так:
Код:
app.doScript(main, undefined, undefined, UndoModes.ENTIRE_SCRIPT);
 
  • Спасибо
Реакции: catpaw и Bebs

Bebs

Топикстартер
15 лет на форуме
Сообщения
461
Реакции
223
Так!
Код:
app.doScript(main, undefined, undefined, UndoModes.ENTIRE_SCRIPT);
 
  • Спасибо
Реакции: catpaw

Bebs

Топикстартер
15 лет на форуме
Сообщения
461
Реакции
223
Вот полный код. Может пригодится кому
Код:
function main(){
if (app.documents.length > 0 && app.selection.length == 1 && app.selection[0].hasOwnProperty("baseline") && app.selection[0].characters.length > 0) {
    selectedTextToNewFrame(app.selection[0]);
}

function selectedTextToNewFrame(sText) {
    hProps = [sText.paragraphs[0].horizontalOffset - sText.paragraphs[0].leftIndent - sText.paragraphs[0].firstLineIndent, sText.parentTextFrames[0].textFramePreferences.textColumnFixedWidth];
    nFrame = sText.parentTextFrames[0].parent.textFrames.add();
    nFrame.geometricBounds = [sText.lines[-1].baseline, hProps[0], sText.lines[0].baseline - sText.lines[0].ascent, hProps[0] + hProps[1]];
    nFrame.textFramePreferences.firstBaselineOffset = FirstBaseline.ascentOffset;
    nFrame.textWrapPreferences.textWrapMode = TextWrapModes.BOUNDING_BOX_TEXT_WRAP;
    nFrame.textWrapPreferences.textWrapOffset = [sText.paragraphs[0].spaceBefore,0,sText.paragraphs[-1].spaceAfter,0];
    sText.move(LocationOptions.atBeginning, nFrame.insertionPoints.item(0));
}
}
app.doScript(main,UndoModes.ENTIRE_SCRIPT);
 
  • Спасибо
Реакции: catpaw, К.Т. и LeonidB

К.Т.

Участник
Сообщения
324
Реакции
337
А какие здесь преимущества перед вытаскиванием куска текста в новый фрейм мышкой?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 188
Реакции
10 844
Вот полный код. Может пригодится кому
Код:
function main(){
if (app.documents.length > 0 && app.selection.length == 1 && app.selection[0].hasOwnProperty("baseline") && app.selection[0].characters.length > 0) {
    selectedTextToNewFrame(app.selection[0]);
}

function selectedTextToNewFrame(sText) {
    hProps = [sText.paragraphs[0].horizontalOffset - sText.paragraphs[0].leftIndent - sText.paragraphs[0].firstLineIndent, sText.parentTextFrames[0].textFramePreferences.textColumnFixedWidth];
    nFrame = sText.parentTextFrames[0].parent.textFrames.add();
    nFrame.geometricBounds = [sText.lines[-1].baseline, hProps[0], sText.lines[0].baseline - sText.lines[0].ascent, hProps[0] + hProps[1]];
    nFrame.textFramePreferences.firstBaselineOffset = FirstBaseline.ascentOffset;
    nFrame.textWrapPreferences.textWrapMode = TextWrapModes.BOUNDING_BOX_TEXT_WRAP;
    nFrame.textWrapPreferences.textWrapOffset = [sText.paragraphs[0].spaceBefore,0,sText.paragraphs[-1].spaceAfter,0];
    sText.move(LocationOptions.atBeginning, nFrame.insertionPoints.item(0));
}
}
app.doScript(main,UndoModes.ENTIRE_SCRIPT);
А ошибку специально повторили, дабы людям не скучно жить было?