[ID CC-CC2021] Как исправить ошибку в наборе текста

InD

Топикстартер
15 лет на форуме
Сообщения
22
Реакции
0
Добрый день!
Подскажите есть ли скрипт, чтобы заменить символы с начертанием как в кириллице, но набранные латиницей внутри русских слов, на кириллические символы. Конечно, не затрагивая тексты на языках с латин. алфавитом.
Например, О (лат.) на О (рус.) в слове "Ошибка" или а (лат.) на а (рус.) в слове "набора" и т.д.
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 188
Реакции
10 844
Можно безо всякого скрипта греп заменой
 

InD

Топикстартер
15 лет на форуме
Сообщения
22
Реакции
0
А сразу все грепом можно или только по одной букве?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 188
Реакции
10 844
Я в грепе дубдубом, но, вроде как можно и скопом, пусть меня гуру поправят
 

InD

Топикстартер
15 лет на форуме
Сообщения
22
Реакции
0
Да, спасибо, а чтобы не затрагивать слова на латинице (eng, fr) есть скрипт?!
 

Любимцев

15 лет на форуме
Сообщения
4 205
Реакции
2 057
Найдите все :[слова]: (eng, fr) и присвойте им символьные стили (eng, fr)
Только вот как быть с однобуквенными словами... не понятно
 

InD

Топикстартер
15 лет на форуме
Сообщения
22
Реакции
0
Языкам на латинице присваиваю симв.стиль сразу в грепе стиля параграфа. Чтобы отловить только однобуквенные слова можно немного исправить скрип - добавить пробел к букве, например )
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 188
Реакции
10 844
Лично я вижу другую проблему - как определить язык слова,в котором более одной буквы и того и другого языка?
 

lev

Модератор
20 лет на форуме
Сообщения
2 145
Реакции
2 071
Приведённый скрипт не поправит "Ошибка", т.к. не заточен на прописные, попортит слова на латинице, как уже упоминалось.
Может проще набить стандартный FindChangeList.txt строками типа:
Код:
grep {findWhat:"a([А-Яа-яЁё])"} {changeTo:"а$1"} {includeFootnotes:true, includeMasterPages:true, includeHiddenLayers:true, wholeWord:false} test
grep {findWhat:"([А-Яа-яЁё])a"} {changeTo:"$1а"} {includeFootnotes:true, includeMasterPages:true, includeHiddenLayers:true, wholeWord:false} test
grep {findWhat:"A([А-Яа-яЁё])"} {changeTo:"А$1"} {includeFootnotes:true, includeMasterPages:true, includeHiddenLayers:true, wholeWord:false} test
grep {findWhat:"([А-Яа-яЁё])A"} {changeTo:"$1А"} {includeFootnotes:true, includeMasterPages:true, includeHiddenLayers:true, wholeWord:false} test
, чтобы не возиться особо.
Лучше, конечно, написать свою менялку с массивом пар соответствий (или парой массивов).
 

Eugenyus

12 лет на форуме
Сообщения
1 960
Реакции
3 589
Языкам на латинице присваиваю симв.стиль сразу в грепе стиля параграфа.
В параметрах стиля язык импортный прописан? Тогда в параметры "найти" вбить русский язык — и иностранные слова затронуты не будут.
 

George

I wish I was a monster you think I am
15 лет на форуме
Сообщения
17 323
Реакции
7 870

Не по теме:
В параметрах стиля язык импортный прописан?
Это же не спортивно. Зачем верстать, вообще, со стилями? Каждый раз когда вижу предположения, что кто-то тупо не использует стили, - бесит, сильно бесит, хочется убивать.

 
  • Спасибо
Реакции: Валера1966 и NNN5

lev

Модератор
20 лет на форуме
Сообщения
2 145
Реакции
2 071
Пробуем:
JavaScript:
var story = app.activeDocument;

var eng = ["A", "B", "C", "E", "H", "K", "M", "O", "P", "T", "X", "Y", "a", "b", "c", "g", "e", "k", "m", "n", "o", "p", "u", "x", "y"];
var rus = ["А", "В", "С", "Е", "Н", "К", "М", "О", "Р", "Т", "Х", "У", "а", "в", "с", "д", "е", "к", "т", "п", "о", "р", "и", "х", "у"];

for (var w = 0; w < eng.length; w++) {
     //очищаем опции поиска
    app.findGrepPreferences = NothingEnum.NOTHING;
    app.changeGrepPreferences = NothingEnum.NOTHING;
    app.findGrepPreferences.findWhat = eng[w]+"([А-Яа-яЁё])";
    app.changeGrepPreferences.changeTo=rus[w]+"$1";
    // переменная story должна быть определена ранее, в старом скрипте есть код
    story.changeGrep();
    app.findGrepPreferences.findWhat = "([А-Яа-яЁё])"+eng[w];
    app.changeGrepPreferences.changeTo="$1"+rus[w];
    story.changeGrep();
}
Одиночные буквы не правил. Не будет работать с длинными последовательностями латиницы в кириллице, потребуется несколько раз прогнать. Не закладывался на украинскую, белорусскую и т.п. кириллицу с "i" и им подобными.
 
Последнее редактирование:
  • Спасибо
Реакции: Как_же_так и InD

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 188
Реакции
10 844
Пробуем:
JavaScript:
var story = app.activeDocument;

var eng = ["A", "B", "C", "E", "H", "K", "M", "O", "P", "T", "X", "Y", "a", "b", "c", "g", "e", "k", "m", "n", "o", "p", "u", "x", "y"];
var rus = ["А", "В", "С", "Е", "Н", "К", "М", "О", "Р", "Т", "Х", "У", "а", "в", "с", "д", "е", "к", "т", "п", "о", "р", "и", "х", "у"];

for (var w = 0; w < eng.length; w++) {
     //очищаем опции поиска
    app.findGrepPreferences = NothingEnum.NOTHING;
    app.changeGrepPreferences = NothingEnum.NOTHING;
    app.findGrepPreferences.findWhat = eng[w]+"([А-Яа-яЁё])";
    app.changeGrepPreferences.changeTo=rus[w]+"$1";
    // переменная story должна быть определена ранее, в старом скрипте есть код
    story.changeGrep();
    app.findGrepPreferences.findWhat = "([А-Яа-яЁё])"+eng[w];
    app.changeGrepPreferences.changeTo="$1"+rus[w];
    story.changeGrep();
}
Одиночные буквы не правил. Не будет работать с длинными последовательностями латиницы в кириллице, потребуется несколько раз прогнать. Не закладывался на украинскую, белорусскую и т.п. кириллицу с "i" и им подобными.
Если в латинском слове русская буква встретится - попортит
 

lev

Модератор
20 лет на форуме
Сообщения
2 145
Реакции
2 071
Как я понял условия задачи, у нас нет латинских слов с русскими буквами, это слово русское с латиницей.