[Image]Макрос AltSearch

(Альтернативный поиск и замена для Writer)

версия 1.1


| Что может расширение | Поиск | Замена | Группы | Ограничения | История версий |



Автор: Tomas Bilek – © 2007-2008
Лицензия: LGPL, http://www.volny.cz/macrojtb/0gnu-lgpl_en.html

Этот макрос распространяется в надежде оказаться полезным,
но БЕЗ ГАРАНТИЙ.

Что может это расширение в сравнении со стандартным диалогом ООо:



Советы по настройке наиболее часто используемых клавиатурных комбинаций:

1. Откройте диалоговое окно Сервис - Настройка - Клавиатура

2. В поле Категория выделите Макросы OOo - User - AltSearch - AltSearch

3. В поле Функция выбрать и установить, нажав кнопку Заменить:
_AltSearch и комбинация Ctrl+H (открыть окно поиска);
_FindNext и комбинация Ctrl+L (поиск дальше к концу документа от месторасположения курсора, без необходимости повторно открывать окно поиска);
_FindBack и комбинация Ctrl+Shift+L (поиск к началу документа от месторасположения курсора, без необходимости повторно открывать окно поиска);



[Image]Выпадающие списки (над полем ввода для задания выражений поиска/замены)

содержат часто используемые или сложные регулярные выражения или параметры. После выбора из предлагаемых пунктов соответствующие параметры вставляются в поле ввода (или в оба поля). Они могут быть вставлены разными способами: в начале, в конце, в месте расположения курсора или в заменяемом тексте. Должен быть включен переключатель "Регулярные выражения".


Поиск:

Выпадающий список Регулярные

содержит некоторые полезные регулярные выражения. Их описания доступны в Справке ООо под названием Список регулярных выражений.

Ограничение: Синтакс используемых регулярных выражений не полностью совместим с используемым в OOo. Несовместимость наблюдается прежде всего при поиске с использованием подстановочных знаков * + ? {n,n} после подвыражения, взятого в круглые скобки ().
Например, (Mi)?ster не будет найдено (однако, при использовании команды [ Считать ] оно будет учтено – эта функция работает в совместимом режиме). Далее, при поиске подвыражений типа (.*)any или (.+)any будут найдены самые короткие совпадения, что противоречит стандартам OOo, который ищет наиболее длинные совпадения. Если необходимо сохранить совместимость, то следует взять все искомое выражение в дополнительную пару круглых скобок: ((Mi)?ster). При этом, конечно, будет невозможно указать такое подвыражение в выражении замены как ссылку \# где # это номер ссылки (максимально 9) на подвыражение. Одновременно невозможно использовать ссылку на подвыражение (ограниченное круглыми скобками ()) в выражениях поиска и замены. Смотри также подвыражения.



Дополнительные подстановочные параметры:

\l - представляет любой буквенный символ; то же, что и [:alpha:]{1,1}.

\d - представляет десятиричную цифру; то же, что и [0-9].

\p - представляет знак конца абзаца,

в отличии от стандартного для ООо знака $, он может представлять пустой абзац. Можно использовать следующие подстановочные знаки +, *, {min,max}.

\p{1,} - найдет ближайший конец абзаца, за которым следует неограниченный блок пустых абзацев. То же, что и \p*.

\p{2,4} - найдет ближайший конец абзаца, за которым следует минимум один, максимум три пустых абзаца, в целом получается минимум 2 и максимум 4 последовательных абзаца.

Ограничение: Медленно работает при самостоятельном использовании. Некоторые проблемы при поиске к началу документа.

\xhhhh - позволит ввести шестнадцатиричный код символа (hhhh)

\#ddddd - позволит ввести десятиричный код символа (ddddd)

Если следующий символ не является цифрой, то необязательно представлять все 5 позиций в ddddd. В противном случае необходимо добавить нули слева.

\c - ищет принудительный разрыв колонки. Ограничение: Медленно работает при самостоятельном использовании.

\m - ищет принудительный разрыв страницы.

Ограничение: Медленно работает при самостоятельном использовании. Если используются (), то параметр \m должен быть указан в начале строки поиска, или не может быть указан отдельно: \m(...) кроме (...)\m.

\s – представляет любой пробел: пробел, неразрывный пробел, табуляция, принудительный разрыв строки.

То же, что и [ \xA0\x9\xA].

\S – представляет неразрывный пробел (\x00A0 или \#160)



Выпадающий список Расширенные

[::BigBlock::] - ищет блок абзацев (любой длины), ограниченный известным текстом

start[::BigBlock::]end – сначала ищет start (начало), потом ищет end (конец). Если оба условия выполнены, то весь блок выделяется.

В строке замены можно использовать параметры \b, &, \e для start (начало), found block of paragraphs (найти блок абзацев), end (конец).

Ограничение: Между знаками начала и конца нельзя использовать знак || для множественного поиска и замены, смотри ниже.



[::Grow n1,n2::] - найденный текстовый блок будет увеличен на 1 символ слева и на 2 символа справа

[::Grow -1,-1::]text – если в тексте существует слово text, то оно будет найдено, но отмечено будет только ex.

Ограничение: [::Grow... необходимо использовать всегда в начале строки поиска, а после него вводится искомое выражение. Если будет установлена отрицательная величина смещения, то (в зависимости от размера и содержания искомого выражения) может произойти циклическое нахождение одного и того же совпадения.



text1||text2||text3||… - множественный поиск и замена в один шаг

Эта опция добавляет в конец выражения поиска и замены знак ||, разграничивающий отдельные условия.

Найти: text1||text2||text3
Заменить: neco1||neco2||neco3
Сначала будет найден text1 и заменен на neco1, потом найденый text2 будет заменен на neco2 и т.д.

Ограничение: в этом случае невозможно использовать параметр [::BigBlock::], по той же причине невозможно использовать подвыражения.



Поиск некоторых объектов

[::Note::] - поиск примечаний (желтые выноски) по их содержанию

[::Note::] - будет найдено любое примечание

[::Note::]pozn.- будет найдено примечание, содержащее pozn.

Ограничение: Позволяет искать только текст в содержании примечания - невозможно использовать регулярные выражения.



[::Field::] - поиск текстовых полей по их содержанию

[::Field::] - будет найдено любое текстовое поле

[::Field::]obsah - будет найдено текстовое поле, содержащее текст obsah

Ограничение: То же, что и для [::Note::]. Смотри выше.
Особые поля (например, скрытые) найдены не будут.



[::TextFrame::] - поиск текстовых врезок по их названиям

[::TextFrame::] - будет найдена любая текстовая врезка

[::TextFrame::]rám1 – будет найдена текстовая врезка, содержащая rám1 в названии

Ограничение: 1. при нажатии на кнопку [ Найти ], следуйщая текстовая врезка будет найдена только если она выделена или курсор стоит в ней. Если она расположена далеко, то будет найдена первая врезка из списка врезок. В настоящее время опция "Только текущее выделение" не работает.

2. Применение кнопки [ Заменить ] находится в очень тесной зависимости от пункта 1.

3. Очередность поиска соответствует (надеюсь, временно) очередности врезок в документ, а не их порядку в документе.

4. Позволяет искать только текст в названии врезки - невозможно использовать регулярные выражения.



Использование кнопок [ Найти все ] и [ Заменить все ] скоро будет полнофункциональным, как и опции "Только текущее выделение".



[::Picture::] - поиск рисунков по их названиям

[::Picture::] - будет найден любой рисунок

[::Picture::]obr1 – будет найден рисунок, содержащий текст obr1 в названии

Ограничение: То же, что и для [::TextFrame::]. Смотри выше.



[::TextTable::] - поиск таблиц по их названиям

[::TextTable::] - будет найдена любая таблица

[::TextTable::]tab1 – будет найдена таблица, содержащая текст tab1 в названии

Ограничение: То же, что и для [::TextFrame::]. Смотри выше.



[::Footnote::] - поиск сносок (С)

[::Footnote::] будет найдено место вставки любой С

[::Footnote::]5 будет найдено место вставки С с номером 5

[::Footnote::]\\text будет найдено место вставки С, в тексте которой есть текст text. При использовании кнопки [ Найти все ] будут выделены все С, содержащие текст text.

[::Footnote::]\\ при использовании кнопки [ Найти все ] будет выделен текст всех С, что удобно для применения стиля ко всем С сразу

Ограничение: Это работает начиная с версии OOo 2.3



[::Endnote::] - поиск концевых сносок

Использование параметров и ограничения такие же, как и для [::Footnote::]. Смотри выше.



[::ReferenceMark::] - поиск указателей перекрестных ссылок

[::ReferenceMark::] будет найден любой текст, установленный в виде указателя перекрестной ссылки

[::ReferenceMark::]text будет найден любой текст, установленный в виде указателя перекрестной ссылки и в содержании которого есть текст text

[::ReferenceMark::]\\ref1 будет найден любой текст, установленный в виде указателя перекрестной ссылки и в названии которого содержится ref1

[::ReferenceMark::]\\\\ будет найден любой пустой текст, установленный в виде указателя перекрестной ссылки



[::Reference::] - поиск текста перекрестной ссылки

[::Reference::] будет найден любой текст, заданный в перекрестной ссылке

[::Reference::]above будет найден текст, заданный в перекрестной ссылке и содержащий above

[::Reference::]\\ref1 будет найден текст, заданный в перекрестной ссылке и содержащий в названии ref1

[::Reference::]\\\\ w будет найден пустой текст, заданный в перекрестной ссылке

При использовании Reference из списка Расширенные и курсоре, расположенном в тексте перекрестной ссылки, название этой ссылки будет автоматически введено в поле Найти.



Выпадающий список Свойства

запускает поиск по свойствам (атрибутам), т.е. с их учетом.
Для этого сначала надо ввести
[:::, затем вводится название искомого свойства (названия нескольких свойств разделяются знаком | ) и в конце вводится ::]. После этого вводится спецификация искомого текста. Если надо найти конкретное значение какого-либо свойства, следует использовать конструкцию name=value.

[:::HyperLinkURL::] - будет произведен поиск текста с указанным атрибутом HyperLinkURL

[:::HyperLinkURL::] - будут найдены все гиперссылки

[:::HyperLinkURL::]link – будут найдены гиперссылки, содержащие текст link.

[:::HyperLinkURL=file:///c:/pokus.odt::] - будет найдена гиперссылка, ссылающаяся на адрес file:///c:/pokus.odt.

[:::HyperLinkURL=file:///c:/pokus.odt::]link wбудет найдена гиперссылка, ссылающаяся на адрес file:///c:/pokus.odt и содержащая текст link.

Список доступных атрибутов текста и их текущие значения (в выделенном фрагменте) можно загрузить при помощи кнопки [ Взять свойства ]. С их кратким описанием можно ознакомиться здесь.



Подобные атрибуты символов - производится загрузка атрибутов символов (в выделенном фрагменте) для поиска любого подобного форматирования. Например, если курсор находится в тексте с измененным именем шрифта, то будет найден текст в котором применялось любое ручное изменение имени шрифта – поиск по [:::CharFontName::].

Одинаковые атрибуты символов - производится загрузка атрибутов символов (в выделенном фрагменте) для поиска точно такого же форматирования. Например, если курсор находится в тексте с измененным именем шрифта, то будет найден текст в котором применялось точно такое же ручное изменение имени шрифта – поиск по [:::CharFontName=Arial::].



Ограничение: Отсутствует поддержка всех доступных в ООо свойств абзаца и символов. Не всякая комбинация свойств может быть правилно определена и найдена.



Замена:

Выпадающий список Заменить

& \0 – оба этих параметра имеют одинаковое значение – при замене они представляют весьнайденный текст

Если был использован параметр со значением [::BigBlock::], то он будет представлять

только блок абзацев между символами начала и конца.

Если были использованы параметры со значениями [::Note::], [::Field::], [::TextFrame::], [::Picture::], [::TextTable::], то они будут представлять только указанные объекты (для вставки из буфера обмена).



\b \e - Если был использован параметр со значением [::BigBlock::], то эти параметры задают символы начала и конца блока. Ограничение: невозможно использовать подвыражения ().


\1 \2 \3 \4 \5 \6 \7 \8 \9 – содержание подвыражений

Если в поисковом выражении использовались круглые скобки (), то \1 представляет содержание первой пары скобок, соответственно \2 относится ко второй паре () и т.д., максимум до \9, что соответствует 9-й паре. Значение имеют только скобки 1-го уровня, вложенные уровни игнорируются.

Пример:
При помощи выражения (\d{1,2})\. *(\d{1,2})\. *\d{2,2}(\d{2,2}) можно найти дату в формате 01. 12. 2007 и заменить ее на 07-12-01 при помощи параметров \3-\2-\1.

При необходимости отключить обработку подвыражений (например, из-за несовместимости с регулярными выражениями ООо) следует вставить все искомое выражение в дополнительную пару скобок (). В этом случае все вложенные уровни замены будут игнорироваться.

Ограничение: Использование подвыражений замедляет процесс из-за неполной совместимости со стандартами ООо.

Несовместимость при поиске с подстановочными выражениями сразу после подвыражения (opak)* вызвана следующим за этим поиском текстового блока, смотри здесь. В этом случае функции [ Подсчет ] и [ Найти все ] будут возвращать точные значения, в то же время другие функции не найдут ничего из-за отсутствия совместимости. В более сложных случаях необходимо изучить полученные результаты и проверить их экспериментально.



\p – вставляет пустой абзац

\t – вставляет табуляцию (\x0009 \#9)

\s – вставляет неразрывный пробел (\x00A0 \#160)

\n – вставляет принудительный разрыв строки (\x000A \#10)

\c – вставляет принудительный разрыв колонки "перед" в найденном тексте

\m - вставляет принудительный разрыв страницы "перед" в найденном тексте

\M - вставляет принудительный разрыв страницы "после" в найденном тексте

\r – отключает принудительный разрыв колонки или страницы в найденном тексте

\xhhhh - вставляет символ в его шестнадцатиричном виде (as hhhh)

\#ddddd - вставляет символ в его десятитиричном виде (as ddddd).



\h{addressURL} – устанавливает текст в виде гиперссылки по адресу addressURL

\h{}, \h устанавливает текст в виде гиперссылки по пустому адресу - т.е. удаляет гиперссылку (сам текст не изменяется).

\H{substr} – заменяет строку в существующей гиперссылке

Этот параметр следует использовать одновременно с поиском по [:::HyperLinkURL=::].

Если поиск производился, например, по [:::HyperLinkURL=substr::], то будут найдены только гиперссылки со строкой substr . Использование \H{repl} в выражении замены найдет гиперссылку с текстом substr и заменит его на repl.

\u – вводит в заменяемое выражение гиперссылку к найденному тексту (если там уже имелась гиперссылка)

\P{Text} – устанавливает стиль абзаца (Text) в найденном тексте

Стиль применяется только к тексту указанному в выражении замены. Для установки стиля по умолчанию можно использовать \P или \P{}. При многократном использовании этого параметра в вставляемом тексте, то стиль будет изменятся в соответствии с его изменениями до конца абзаца. Пример: при вводе следующих параметров - block1\P{Subtitle}\p block2\P{Heading 1} в документ будет введен block1 с присвоенным стилем Subtitle, а после него будет введен block2 со стилем Heading 1.

\C{Quotation} – устанавливает стиль символа (Quotation) в найденном тексте

Стиль применяется только к тексту указанному в выражении замены. Для установки стиля по умолчанию можно использовать \C или \C{}. При многократном использовании этого параметра в вставляемом тексте, то стиль будет изменятся в соответствии с его изменениями до конца заменяемого текста. Пример: при вводе следующих параметров – block1\C{Quotation} blok2\C{Example} s в документ будет введен block1 со стилем символа Quotation, after it will be inserted text block2, а после него будет введен block2 со стилем символа Example.

\N{List 3} – устанавливает стиль списка (List 3) в найденном тексте

Применяется аналогично параметру \P{}. Стиль списка можно удалить при помощи ввода \N или \N{}.

\D – устанавливает форматирование по умолчанию, аналогично комбинации Ctrl+Shift+Space

Применяется аналогично параметру \C{}.

\d – восстанавливает атрибуты текста только в месте использования.

В отличие от \D он не влияет на предварительно вставленный текст.

\F{New footnote} – вставляет новую сноску с текстом New footnote в месте замены

Внутри фигурных скобок можно использовать параметры \i, \I, &, или \1

\E{New endnote} – вставляет новую концевую сноску в месте замены, аналогично параметру \F

\B{ref1|text} – вставляет текст text в перекрестную ссылку под именем ref1

Внутри фигурных скобок можно использовать параметры \i, \I, &, или \1

\L{0,0,ref1} – вставляет поле перекрестной ссылки с параметрами 0,0 под именем ref1

Значение числовых параметров

первая цифра – тип ссылки: 0 – номер страницы арабскими цифрами, 1 – номер главы, 2 – текст ссылки , 3 - выше/ниже , 4 – номер страницы со стилем, определенным в стиле страницы, 5 – категория и номер подписи, 6 – текст подписи, 7 – количество последовательных полей (подписей)

вторая цифра – тип источника ссылки; 0 – знак ссылки, 1 – номер ссылки, 2 - закладка, 3 - сноска, 4 – концевая сноска



\o – вставляет текст, содержащий указанный объект

В случае поиска при помощи выражений [::Note::], [::Footnote::], [::Endnote::], [::TextFrame::], [::Picture::], [::TextTable::] будет произведена замена с использованием указанных объектов. Таблица будет преобразована в текст при помощи разделителей: табуляция для разделения столбцов и знак конца абзаца для разделения строк.

Ограничение: Максимальный размер таблицы не должен превышать 65 kB.

В случае поиска при помощи выражений [::Field::], [::Reference::], [::ReferenceMark::] будет произведена вставка соответствующих элементов.



\O – вставляет название объекта

В случае поиска при помощи выражений

[::TextFrame::], [::Picture::], [::TextTable::] - будет вставлено название этих объектов.

[::Note::], [::Field::] - будет указан тип вставляемых полей

[::Reference::], [::ReferenceMark::] - будет вставлено название вставляемой ссылки

[::Footnote::], [::Endnote::] - будет вставлен текст-привязка сноски



\i – вставляет счетчик найденных совпадений - только для [ Заменить все ]

\I – вставляет номер страницы, на которой находится искомое выражение

Если используется перенаправление замены (\R), то будет вставлен номер страницы предварительного расположения замены.

Ограничение: Наблюдается некорректная работа в сносках, нижних и верхних колонтитулах.

\v – вставляет содержимое буфера обмена

\V - вставляет содержимое буфера обмена как текст без форматирования

\f – сохраняет форматирование

При использовании параметров & или \0, замена производится через буфер обмена. Если найденный текст содержит текстовые поля, примечания, ссылки и т.д., они сохранят свой вид.

\R – перенаправляет выражение замены на другой текстовый файл

Эта опция перенаправляет замену на другой файл .ODT вместо замены в текущем файле. Текущий файл не изменяется. Имя файла надо вводить по такому образцу \R{jmeno}. Должен быть указан полный путь к новому файлу с добавлением " - OpenOffice.org Writer". Указанные изменения будут записаны в конец файла.

Пример:
Если поиск производился, например, по [:::HyperLinkURL::] а в замене было указано: Link \i, page \I: & (URL: \u)\p\R, то после нажатия кнопки [ Заменить все ] новом файле будут указаны гиперссылки, найденные в оригинальном файле в следующем виде: Link 1, page 1: textOfHyperlink (URL: URLaddress) в отдельном абзаце.



Кнопка и выпадающий список Взять свойства

Используя кнопку [ Взять свойства ] можно обновить список (некоторых) свойств и их значений в выбранном объекте. Просмотрите и выберите необходимое в списке.

\A{properties=value} – устанавливает в выражении замены значение указанного свойства.

Применение аналогично использованию параметра \C{}.




Использование метода групп: [ Группы >> ]

[Image]Метод групп позволяет сохранять и загружать заранее установленные параметры поиска и замены. Имеется возможность сохранять несколько последовательных параметров поиска и замены в единой последовательности, а затем быстро ее загружать и использовать.

Установленные параметры следует сохранять при помощи кнопки [ Сохранить группу ]. В открывшемся диалоговом окне будет предложено переименовать последнюю использовавшуюся группу. Вводя имя группы вы можете выбрать или перезаписать новое содержимое под прежним названием, или добавить изменения в прежнюю группу. Одновременно будет автоматически сохранена команда "Заменить все" при помощи которой будет выполнена данная группа. Эту команду можно будет позднее отредактировать.

Нажатие кнопки [ Группа >> ] вызовет диалоговое окно Менеджер групп, из которого можно запускать и редактировать существующие группы. Для возврата к окну поиска следует нажать кнопку [ << Поиск ].

Все параметры групп сохраняются в текстовом файле AltSearchScript.txt в директории пользователя …/OpenOffice.org2/user/config/, который можно открыть для редактирования, нажав кнопку [ Редактировать ] в окне Менеджер групп. Для редактирования рекомендуется использовать Блокнот, но отредактировав в той же директории файл AltSearchEditor.ini, можно назначить иной текстовый редактор. После произведенного редактирования следует обновить список групп, нажав кнопку [ Обновить ]. Синтаксис, используемый в файле AltSearchScript.txt описан в его начале, кодировка UTF-8.

После двойного щелчка левой кнопкой мыши по названию группы или нажатия на кнопку [ Выполнить ], эта группа будет загружена и заданная в ней последовательность поиска и замены будет выполнена. При использовании групп в выделенных областях я рекомендую оставить перед и после выделения 1-2 пустых абзаца.

Кнопка [ Перенести ] переносит параметры поиска и замены в окно поиска без выполнения. Если группа содержит последовательно несколько операций поиска и замены, то будет перенесена только последняя операция поиска и замены.



Ограничения:

Частные случаи ограничений перечислены рядом с соответствующими параметрами. Кроме этого, существуют общие ограничения:




История версий:

Версия 1.1   2/08

Новое:



Исправлено:



Версия 1.0   12/07 - Первый публичный релиз