Cпособы расстановки ударений: собираем словарь

  • Автор темы Автор темы Skvoznyak
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
В каком месте затык?
Во всех :). Когда у меня не получается найти решение в сети, я пытаюсь найти его в единственной книжке, которая у меня есть: М.Борисов "Скрипты в InDesign". Вот пример из этой книжки:
Код:
myTextFrame.parentStory.insertionPoints.items (-1) .contents = "Привет";
myTextFrame.parentStory.insertionPoints.items (-1) .contents = "\r";
myTextFrame.parentStory.insertionPoints.items (-1) .contents = "Как дела?";
Должно получиться:
Привет
Как дела?
Конечно же он у меня не сработал, т.к. книжка писалась для ЦС3, а у меня ЦС6. В объектной модели ЦС6 у insertionPoints нет свойства items . Далее он пишет, что обозначение items (-1) заменило length -1 . Я попробовал и с length -1, но тоже не работает :(*[[. Я плохо знаю английский, поэтому мне трудно читать объектную модель, а на русском я найти ее не могу :(.
 
Не items а item, вроде...
Вот пример кода как найденные слова сбросить в новый indesign-document
Код:
    // Ищем английскую букву 'a' в тексте, по ней определяем слово, потом слова перегружаем в массив myArr
    // Внимание! В данном примере если в слове две искомые буквы, то это слово будет занесено в массив 2 раза\
    // Далее массив сбрасывается в новый документ
    app.changeGrepPreferences = app.findGrepPreferences = NothingEnum.nothing;
    app.findGrepPreferences.findWhat  = 'a';
    myDoc = app.activeDocument;
    myArr = []; // массив для сбора найденных слов
    myFoundItems = myDoc.findGrep();
    if(myFoundItems.length != 0)
    {
        for (var i=1; i<myFoundItems.length; i++)
        {
                myFoundItem = myFoundItems[i];
                myArr.push(myFoundItem.words[0].contents + '\r');
          }
      }
// Начинаем создавать новый документ
myNewDocument = app.documents.add();
myTextFrame = myNewDocument.pages.item(0).textFrames.add();
myTextFrame.geometricBounds = myGetBounds(myNewDocument, myNewDocument.pages.item(0));
with(myTextFrame)
    {
        textFramePreferences.textColumnCount = 3;
        textFramePreferences.textColumnGutter = 12;
        textFramePreferences.insetSpacing = [0, 0, 0, 0];
    }   
myTextFrame.contents = myArr.join('');
AutoFlowDocument(myNewDocument, myTextFrame);

function myGetBounds(myDocument, myPage){
    // Функция от Adobe
    var myPageWidth = myDocument.documentPreferences.pageWidth;
    var myPageHeight = myDocument.documentPreferences.pageHeight
    if(myPage.side == PageSideOptions.leftHand){
        var myX2 = myPage.marginPreferences.left;
        var myX1 = myPage.marginPreferences.right;
    }
    else{
        var myX1 = myPage.marginPreferences.left;
        var myX2 = myPage.marginPreferences.right;
    }
    var myY1 = myPage.marginPreferences.top;
    var myX2 = myPageWidth - myX2;
    var myY2 = myPageHeight - myPage.marginPreferences.bottom;
    return [myY1, myX1, myY2, myX2];
}
function AutoFlowDocument(doc, textFrame)
{
// Автоматически добавляем страницы, если текст не поместиля во фрейм   
    var overset = textFrame.overflows;
    var prevFrame = textFrame;

    while(overset)
    {
        var pg = doc.pages.add(LocationOptions.AT_END);
        var newFrame = pg.textFrames.add();
       
            with(newFrame)
            {
                var myBounds = myGetBounds(doc, pg);
                geometricBounds = myBounds;
                textFramePreferences.textColumnCount = 3;
                textFramePreferences.textColumnGutter = 12;
                textFramePreferences.insetSpacing = [0, 0, 0, 0];
            }
        prevFrame.nextTextFrame = newFrame;
        overset = newFrame.overflows;
        prevFrame = newFrame;
    }
}
 
Не items а item, вроде...
Вот пример кода как найденные слова сбросить в новый indesign-document
Код:
    // Ищем английскую букву 'a' в тексте, по ней определяем слово, потом слова перегружаем в массив myArr
    // Внимание! В данном примере если в слове две искомые буквы, то это слово будет занесено в массив 2 раза\
    // Далее массив сбрасывается в новый документ
    app.changeGrepPreferences = app.findGrepPreferences = NothingEnum.nothing;
    app.findGrepPreferences.findWhat  = 'a';
    myDoc = app.activeDocument;
    myArr = []; // массив для сбора найденных слов
    myFoundItems = myDoc.findGrep();
    if(myFoundItems.length != 0)
    {
        for (var i=1; i<myFoundItems.length; i++)
        {
                myFoundItem = myFoundItems[i];
                myArr.push(myFoundItem.words[0].contents + '\r');
          }
      }
// Начинаем создавать новый документ
myNewDocument = app.documents.add();
myTextFrame = myNewDocument.pages.item(0).textFrames.add();
myTextFrame.geometricBounds = myGetBounds(myNewDocument, myNewDocument.pages.item(0));
with(myTextFrame)
    {
        textFramePreferences.textColumnCount = 3;
        textFramePreferences.textColumnGutter = 12;
        textFramePreferences.insetSpacing = [0, 0, 0, 0];
    }
myTextFrame.contents = myArr.join('');
AutoFlowDocument(myNewDocument, myTextFrame);

function myGetBounds(myDocument, myPage){
    // Функция от Adobe
    var myPageWidth = myDocument.documentPreferences.pageWidth;
    var myPageHeight = myDocument.documentPreferences.pageHeight
    if(myPage.side == PageSideOptions.leftHand){
        var myX2 = myPage.marginPreferences.left;
        var myX1 = myPage.marginPreferences.right;
    }
    else{
        var myX1 = myPage.marginPreferences.left;
        var myX2 = myPage.marginPreferences.right;
    }
    var myY1 = myPage.marginPreferences.top;
    var myX2 = myPageWidth - myX2;
    var myY2 = myPageHeight - myPage.marginPreferences.bottom;
    return [myY1, myX1, myY2, myX2];
}
function AutoFlowDocument(doc, textFrame)
{
// Автоматически добавляем страницы, если текст не поместиля во фрейм
    var overset = textFrame.overflows;
    var prevFrame = textFrame;

    while(overset)
    {
        var pg = doc.pages.add(LocationOptions.AT_END);
        var newFrame = pg.textFrames.add();
   
            with(newFrame)
            {
                var myBounds = myGetBounds(doc, pg);
                geometricBounds = myBounds;
                textFramePreferences.textColumnCount = 3;
                textFramePreferences.textColumnGutter = 12;
                textFramePreferences.insetSpacing = [0, 0, 0, 0];
            }
        prevFrame.nextTextFrame = newFrame;
        overset = newFrame.overflows;
        prevFrame = newFrame;
    }
}
Пока еще в детали не вгрызался, но в проверочной фразе "Праверяем работу скрипта поиска буквы а" (я знаю, как правильно пишется слово "проверяем" :) ) , он первое слово не нашел (или нашел, но не сохранил). Может быть, из-за заглавной первой буквы? А в принципе, это именно то, что мне нужно! 'cooll)'':=)'Проверил, оказалась заглавная буква не причем, просто он "не любит" первое слово :(. А, нашел, в строке:
Код:
 for (var i=1; i<myFoundItems.length; i++)
должно быть var i=0;
 
Последнее редактирование:
Не items а item, вроде...
Вот пример кода как найденные слова сбросить в новый indesign-document
Но, все-таки, осталась одна проблема. Почему, собственно я и начал ковыряться с примером из книжки М.Борисова. Мне нужно, чтобы словарь можно было пополнять. Т.е. если я запускаю скрипт с новым текстом, найденные слова сохранялись бы не в новом документе, а добавлялись бы к уже существующему. Если можно, подскажите, пожалуйста, как доработать ваш скрипт, чтобы он мог так делать?
 
Не items а item, вроде...
Вот пример кода как найденные слова сбросить в новый indesign-document
Код:
    // Ищем английскую букву 'a' в тексте, по ней определяем слово, потом слова перегружаем в массив myArr
    // Внимание! В данном примере если в слове две искомые буквы, то это слово будет занесено в массив 2 раза\
    // Далее массив сбрасывается в новый документ
    app.changeGrepPreferences = app.findGrepPreferences = NothingEnum.nothing;
    app.findGrepPreferences.findWhat  = 'a';
    myDoc = app.activeDocument;
    myArr = []; // массив для сбора найденных слов
    myFoundItems = myDoc.findGrep();
    if(myFoundItems.length != 0)
    {
        for (var i=1; i<myFoundItems.length; i++)
        {
                myFoundItem = myFoundItems[i];
                myArr.push(myFoundItem.words[0].contents + '\r');
          }
      }
// Начинаем создавать новый документ
myNewDocument = app.documents.add();
myTextFrame = myNewDocument.pages.item(0).textFrames.add();
myTextFrame.geometricBounds = myGetBounds(myNewDocument, myNewDocument.pages.item(0));
with(myTextFrame)
    {
        textFramePreferences.textColumnCount = 3;
        textFramePreferences.textColumnGutter = 12;
        textFramePreferences.insetSpacing = [0, 0, 0, 0];
    } 
myTextFrame.contents = myArr.join('');
AutoFlowDocument(myNewDocument, myTextFrame);

function myGetBounds(myDocument, myPage){
    // Функция от Adobe
    var myPageWidth = myDocument.documentPreferences.pageWidth;
    var myPageHeight = myDocument.documentPreferences.pageHeight
    if(myPage.side == PageSideOptions.leftHand){
        var myX2 = myPage.marginPreferences.left;
        var myX1 = myPage.marginPreferences.right;
    }
    else{
        var myX1 = myPage.marginPreferences.left;
        var myX2 = myPage.marginPreferences.right;
    }
    var myY1 = myPage.marginPreferences.top;
    var myX2 = myPageWidth - myX2;
    var myY2 = myPageHeight - myPage.marginPreferences.bottom;
    return [myY1, myX1, myY2, myX2];
}
function AutoFlowDocument(doc, textFrame)
{
// Автоматически добавляем страницы, если текст не поместиля во фрейм 
    var overset = textFrame.overflows;
    var prevFrame = textFrame;

    while(overset)
    {
        var pg = doc.pages.add(LocationOptions.AT_END);
        var newFrame = pg.textFrames.add();
     
            with(newFrame)
            {
                var myBounds = myGetBounds(doc, pg);
                geometricBounds = myBounds;
                textFramePreferences.textColumnCount = 3;
                textFramePreferences.textColumnGutter = 12;
                textFramePreferences.insetSpacing = [0, 0, 0, 0];
            }
        prevFrame.nextTextFrame = newFrame;
        overset = newFrame.overflows;
        prevFrame = newFrame;
    }
}
В этом скрипте где-то зарыта ошибка, но где я откопать не смог, где-то в части добавления страниц. Если проверять работу скрипта на маленьких текстах, то все нормально. А если текст чуть побольше, настолько, что требует для создания нового документа более 4-х страниц, то содержимое фреймов накладывается друг на друга, начиная со второй страницы. Где ошибка? *[[ Да, и текст помещается только на левую страницу разворота.
 
Скорее всего, после строки
Код:
myNewDocument = app.documents.add();
надо добавить
Код:
myNewDocument.viewPreferences.rulerOrigin = RulerOrigin.PAGE_ORIGIN;
 
Скорее всего, после строки
Код:
myNewDocument = app.documents.add();
надо добавить
Код:
myNewDocument.viewPreferences.rulerOrigin = RulerOrigin.PAGE_ORIGIN;
Да, теперь все замечательно. Как бы теперь разобраться, что это значит, и как можно было бы догадаться, что без этого работать будет с ошибкой? 8*)
 
Как бы теперь разобраться,
Давай я поищу в Google вместо тебя
Screenshot_6.png
"Программное" нажатие правой кнопкой на линейке и выбор этих параметров:
Screenshot_7.png
 
@Сергий Задонский, а можете поделиться тем какие технологии используются, чтобы сделать, то о чём Вы писали - "На основе выбранного для издания шрифта (Font), создаем шрифт (NewFont), в котором все гласные с ударением"?
 
  • Спасибо
Реакции: svlasov
@Сергий Задонский, а можете поделиться тем какие технологии используются, чтобы сделать, то о чём Вы писали - "На основе выбранного для издания шрифта (Font), создаем шрифт (NewFont), в котором все гласные с ударением"?
В любой программе редактирования шрифтов (например, FontLab Studio) открываете выбранный для редактирования шрифт, (например, School) , над всеми гласными прорисовываете ударение и сохраняете этот шрифт с новым названием (например New_School). Вуа ля :)
 
@Сергий Задонский, спасибо, я так и предполагал, но теперь, по крайне мере, есть уточнение - FontLab. Просто я плохо представляю, насколько трудоёмок этот процесс, но и понимаю, что всякие "надвигания" штрихов на буквы бесперспективны. Сейчас мне нужна только буква ѝ, и пока можно обойтись парой десятков имеющихся гарнитур, по впоследствии может потребоваться больше букв, вот и готовлюсь заранее :)
 
@Сергий Задонский, Просто я плохо представляю, насколько трудоёмок этот процесс...
В общем-то не очень сложно, но если вы не знакомы с фонтлабом, сразу может и не получиться. Потому как, когда я написал "...сохраняете с новым названием...", это не просто кликнуть по "сохранить как". Т.е. сначала шрифт нужно сгенерировать, а перед тем, прописать необходимую инфу во вкладке "font info", иначе он может не встать. В-общем, экспериментируйте и помогай вам Бог!
 
  • Спасибо
Реакции: ID_user
Статус
Закрыто для дальнейших ответов.