Режим замены с сохранением стиля

Far Manager


Режим замены с сохранением стиля

В редакторе режим замены Сохранять стиль позволяет осуществлять замену с сохранением регистра заменяемого текста и/или стиля его написания для файлов исходных текстов. Например, при замене в этом режиме во фразе "Tu be or not tu be" слова "tu" на слово "to" будет получен результат: "To be or not to be" (обратите внимание на регистр). Аналогично, при замене "UserName" на "PersonLogin" в следующем фрагменте:

String writerUserName = user.name || DEFAULT_USER_NAME || configuration("default-user-name");

будет получен результат:

String writerPersonLogin = person.login || DEFAULT_PERSON_LOGIN || configuration("default-person-login");

Обратите внимание, что замена сохранила стиль именования идентификаторов для всех вхождений.

Замена с сохранением стиля использует следующий алгоритм:

  1. Образец и результат замены разбиваются на части, используя символы _ - . в качестве разделителей, кроме того разделением считается изменение регистра буквы со строчного на прописной. Разбиение осуществляется только по одному из вариантов: если существует неоднозначность в выборе правила, то данная строка считается одной частью. Например, строки "testMe", "WhatIsIt", "far-manager", "USER_FIRST_NAME" будут разбиты на части (две, три, две и три части соответственно), а строки «test_userName”, “one.two-three” разбиты не будут (останутся одной частью). Все получившиеся части образца и результата замены не пусты (кроме тривиальных случаев пустых строк в качестве образца и/или текста замены).

  2. Осуществляется проход по тексту и поиск таких подстрок, которые при разбиении на части в соответствии с пунктом 1 дают в точности те же части, что и образец (при сравнении частей регистр игнорируется).

  3. Для всех частей найденной подстроки вычисляется набор правил форматирования, под которые он подходит. Возможные варианты: "всё прописными", "всё строчными", "первая заглавная, затем всё строчными", "произвольный формат". Вариант "произвольный формат" добавляется в набор в любом случае. Для первой части подстроки набор сохраняется как есть, а остальные наборы (для всех частей кроме первой) пересекаются как множества.

  4. Набор частей результата замены преобразуется так, что первая часть форматируется в соответствии с самым сильным из правил в наборе правил первой части строки, а остальные - в соответствии с самым сильным из правил в найденном пересечении правил.

  5. Набор частей замены соединяется в с сохранением того разделителя, которым разделены части обрабатываемой подстроки. Результат записывается на место подстроки.

  6. Если таким способом не получилось сделать ни одной замены, то осуществляется поиск-замена стандартным способом. При замене, если и в образце и в заменяемом тексте первый символ – буква, то регистр этой буквы сохраняется (то есть приводится к регистру первой буквы заменяемой подстроки).


Far Manager © 1996—2000 Eugene Roshal, © 2000—2015 Far Group