Замена падежа имен собственных из именительного в родительный

Статус
Закрыто для дальнейших ответов.
Простите, что загрузил вас задачей, актуальность которой отпала. Сейчас актуальная задача сделать так, чтобы скрипт работал только с выделенным фрагментом текста. Все-равно, признателен вам, т.к. мне как чайнику ваша помощь полезна для пополнения "багажа" :)
 
В продолжение предыдущего сообщения. Я пытаюсь сделать так, чтобы скрипт работал только с выделенным фрагментом текста. В справочнике по javascript, в разделе Контексты исполнения читаю: " ...
10.1.4 Иерархия областей видимости и разрешение идентификаторов

... Во время исполнения кода в контексте исполнения на иерархию областей видимости влияют только инструкции with (см. раздел 12.10) и конструкции catch (см. раздел 12.14)."
Пытаюсь использовать инструкцию with :
Код:
if(app.selection.length != 0) { // app.selection.length = 0
    var mySelection = app.selection[0];
    var myObject;
myObject = mySelection;
  with  (myObject){
var mySampleForSearchWord = '[А-Яа-я]+';
app.findGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = mySampleForSearchWord;              
myFoundedWords = app.findGrep();
//alert (myFoundedWords);
}
if (myFoundedWords.length != 0) { // != 0
// цикл по числу элементов коллекции. Движение снизу вверх
    for (j=myFoundedWords.length-1; j >= 0; j--) { //  j >= 0
      
        myLine = myFoundedWords[j];
      
                var myWord = myRightName[myLine.contents]; // найденное слово  передается в ассоциативный массив
                                                              
              if (myWord == undefined) {// такого слова в ассоциативном масиве нет
                myLine.fillColor = "myProblemColor";
                continue;
                }             
      
        // замена слова
        myLine.contents = myWord;     
        } // j >= 0
} // != 0
exit();
}

alert("Ничего не выделено");
exit();
Выделяю часть текста, но, почему-то alert (myFoundedWords) показывает мне что найдены все слова текста, а не только выделенная область. В чем ошибка?
 
Код:
myFoundedWords = app.findGrep();
Область поиска определяется в этой строке. Если нужен поиск в выделенной области, нужно заменить на
Код:
myFoundedWords = myObject.findGrep();
 
Код:
myFoundedWords = app.findGrep();
Область поиска определяется в этой строке. Если нужен поиск в выделенной области, нужно заменить на
Код:
myFoundedWords = myObject.findGrep();
'alil''dans))' Тему можно закрыть.:)
 
Уважаемые профессионалы! Я думал, что тему можно закрыть, но, неожиданно столкнулся с почти мистическим для меня явлением. Как обойти этот "глюк" я нашел, но причина его для меня совершенно непостижима. Я искренне надеюсь, что вы сможете найти эту причину и подсказать мне в чем дело, чтобы впредь в подобных случаях я знал, где копать. Итак, имеется список имен в именительном падеже, перед каждым из которых стоит р.Б. (раб Божий). Скрипт должен убрать р.Б. и изменить падеж на родительный. Вот код:
Код:
//#targetengine session
#include NamesCut.jsx



myProblemColorSample = [0, 100, 100, 0];


if(app.documents.length != 0)
var myDocument = app.documents[0];


try{
    myColor = myDocument.colors.item("myProblemColor");
    myName = myColor.name;
    }
catch (myError) {
    myColor = myDocument.colors.add ({name:"myProblemColor", model:ColorModel.process, space:ColorSpace.CMYK, colorValue:myProblemColorSample});
    }

if(app.selection.length != 0) { // app.selection.length = 0
    var mySelection = app.selection[0];
    var myObject;
myObject = mySelection;
  var mySampleForSearchWord = 'р\.Б\.|р\.б\.|[А-Яа-я]+';
app.findGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = mySampleForSearchWord;               
myFoundedWords = myObject.findGrep();

if (myFoundedWords.length != 0) { // != 0
// цикл по числу элементов коллекции. Движение снизу вверх
    for (j=myFoundedWords.length-1; j >= 0; j--) { //  j >= 0
       
        myLine = myFoundedWords[j];
       
                var myWord = myRightName[myLine.contents]; // найденное слово  передается в ассоциативный массив
                                                               
              if (myWord == undefined) {// такого слова в ассоциативном масиве нет
                myLine.fillColor = "myProblemColor";
                continue;
                }              
       
        // замена слова
        myLine.contents = myWord;      
        } // j >= 0
} // != 0
exit();
}

alert("Ничего не выделено");
exit();
Вот словарь, в отдельном файле, который должен располагаться в той же директории, что и скрипт:
Код:
var myRightName = (function()
{
var name={};
name['р.б.']='';
name['р.Б.']='';
name['Августин']='Августина';
name['Августина']='Августины';
name['Августа']='Августы';
name['Агапия']='Агапии';
name['Александр']='Александра';
name['Александра']='Александры';
name['Алевтина']='Алевтины';
name['Анастасий']='Анастасия';
name['Анастасия']='Анастасии';
name['Настя']='Анастасии';
name['Анатолий']='Анатолия';
name['Анфиса']='Анфисы';
name['Аполлинария']='Аполлинарии';
name['Аполинария']='Аполлинарии';
name['Аристарх']='Аристарха';

return(name);
})();
И вот тестовый файл, открытый в InDesign:
р.Б.Августин
р.Б.Августина
р.Б.Августа
р.Б.Агапия
р.Б.Александр
р.Б.Александра
р.Б.Алевтина
р.Б.Анастасий
р.Б.Анастасия
р.Б.Настя
р.Б.Анатолий
р.Б.Анфиса
р.Б.Аполлинария
р.Б.Аполинария
р.Б.Аристарх

Запустив скрипт с этим проверочным списком имен, я получаю совершенно непостижимый результат:

р.Б.Августина
Августины
Августы
Агапии
р.Б.Александра
Александры
Алевтины
Анастасия
Анастасии
р.Б.Анастасии
Анатолия
Анфисы
Аполлинарии
р.Б.Аполлинарии
р.Б.Аристарха
Жирным здесь выделено то, что скрипт у меня выделил заливкой "myProblemColor".
Почему в совершенно одинаковых случаях скрипт выдает разные результаты???*[['hz'
 
Для начала удвойте обратную косую линию как в строке ниже;
Код:
var mySampleForSearchWord = 'р\\.Б\\.|р\\.б\\.|[А-Яа-я]+';
 
Для начала удвойте обратную косую линию как в строке ниже;
Код:
var mySampleForSearchWord = 'р\\.Б\\.|р\\.б\\.|[А-Яа-я]+';
К сожалению, это ничего не меняет :( И лишь добавляет непоняток - как скрипт работал с неэкранированным обратным слэшем ?
 
Код:
var myProblemColorSample = [0, 100, 100, 0];

var myRightName = (function()
{
var name={};
name['р.б.']='';
name['р.Б.']='';
name['Августин']='Августина';
name['Августина']='Августины';
name['Августа']='Августы';
name['Агапия']='Агапии';
name['Александр']='Александра';
name['Александра']='Александры';
name['Алевтина']='Алевтины';
name['Анастасий']='Анастасия';
name['Анастасия']='Анастасии';
name['Настя']='Анастасии';
name['Анатолий']='Анатолия';
name['Анфиса']='Анфисы';
name['Аполлинария']='Аполлинарии';
name['Аполинария']='Аполлинарии';
name['Аристарх']='Аристарха';

return(name);
})();

function main ()  {

    try {
        var doc = app.activeDocument;
    } catch (error) {
        return false;
    }

    try {
        var text = app.selection[0];
        var story = text.parentStory;
    } catch (error) {
        return false;
    }

    try {
        var color = doc.colors.itemByName('myProblemColor').getElements()[0];
    } catch (error) {
        var color = doc.colors.add({
                name:"myProblemColor",
                model:ColorModel.process,
                space:ColorSpace.CMYK,
                colorValue:myProblemColorSample
        });
    }

    app.findGrepPreferences = NothingEnum.NOTHING;

    app.findGrepPreferences.findWhat = '[рР]\\.[бБ]\\.[\\l\\u]{1,}';

    try {
        var words = text.findGrep(true);
    } catch (error) {
        return false;
    }

    app.findGrepPreferences = NothingEnum.NOTHING;

    var names = myRightName;

    for (var i = 0; i < words.length; i++) {
        var item = words[i];
        var content = item.contents.toString();
        var name = content.replace(/^р\.б\./gim, '');
        var find = names[name];
        if (find) {
            item.contents = find;
        } else {
            item.fillColor = color;
        };

    };

    return true;

}

main();
 
Благодарю всех за предложенные варианты решения проблемы. Как я уже писал, я тоже нашел, как обойти этот глюк. В моем варианте кода проблема исчезает если заменить цикл по перебору элементов коллекции с движения снизу вверх, на движение сверху вниз. НО, главный вопрос остался. В чем причина этого глюка? Почему одни имена скрипту "нравятся" а другие, почти такие же - "не нравятся" ? Чем Августин "хуже" Августины??*[['hz'
 
Возможно потому, что Августина это Августин в родительном падеже, а вы встраивали проверку на то, чтобы не обрабатывать/обрабатывать по-особому имена уже находящиеся в родительном падеже.
 
Возможно потому, что Августина это Августин в родительном падеже, а вы встраивали проверку на то, чтобы не обрабатывать/обрабатывать по-особому имена уже находящиеся в родительном падеже.
Увы, эта версия не подходит. Посмотрите сообщение #25 и проанализируйте, какие имена ему "нравятся" а какие - нет. Никакой логики и закономерности я не нашел :(
 
Статус
Закрыто для дальнейших ответов.