@PreserveStyle $ #Редактор: Режим замены - Сохранять стиль# В ~редакторе~@Editor@ режим замены #"Сохранять стиль"# позволяет осуществлять замену с сохранением регистра заменяемого текста и/или стиля его написания для файлов исходных текстов. Например, при замене в этом режиме во фразе #"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 ^Если таким способом не получилось сделать ни одной замены, то осуществляется поиск-замена стандартным способом. При замене, если и в образце и в заменяемом тексте первый символ – буква, то регистр этой буквы сохраняется (то есть приводится к регистру первой буквы заменяемой подстроки).