[Решено]Форматирование отдельных литералов по условию

Автор argnist, 8 июня 2016, 18:04

0 Пользователи и 1 гость просматривают эту тему.

argnist

Компонент: Writer
Версия продукта: 5.1.2
Сборка: LibreOffice
ОС: Microsoft Windows 7

Дамы и господа, прошу помощи в понимании, как мне реализовать форматирование отдельных слов (или регулярных выражений) только в абзацах с определенным стилем.

Заранее благодарю за помощь.

kompilainenn

это делается при помощи стилей. сейчас поищу статью, как раз про это...

http://librerussia.blogspot.ru/2014/11/LibO-Styles-003.html - листайте/ищите до "Условные стили"
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

argnist

Цитата: kompilainenn от  8 июня 2016, 18:13kompilainenn
Спасибо за ссылку.
До регистрации на этом форуме и создания поста я уже читал этот документ.
К сожалению, я вынужден согласиться с автором, что "я не нашел практического применения данной функции."

Эта функция просто меняет стиль абзаца на указанный, если находится рядом с контекстным условием.

Насколько я за последние пару часов понял, мне нужно сочинить макрос для этого.
Он должен искать регулярные выражения и при совпадении, заменить этот текст форматированным таким же.

Но пока я очень слаб в Бейсике Либры и всё, что я пишу - не работает или работает не так как надо :(

Написал Питоньяку, надеюсь, ответит.

kompilainenn

Цитата: argnist от  8 июня 2016, 18:23Эта функция просто меняет стиль абзаца на указанный, если находится рядом с контекстным условием.
а почему именно стиль абзаца? разве нельзя сделать условным стиль символа?
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

argnist

Цитата: kompilainenn от  8 июня 2016, 21:11
Цитата: argnist от  8 июня 2016, 18:23Эта функция просто меняет стиль абзаца на указанный, если находится рядом с контекстным условием.
а почему именно стиль абзаца? разве нельзя сделать условным стиль символа?
хорошо, сделал я кастомный стиль символа
текст:
one two three two one four two three three
Допустим, я хочу раскрасить two в красный
как стилю символа объяснить, что он работает не на выделение, а на конкретные вхождения?

kompilainenn

беру свои слова назад, стиль символа не может быть условным=)

тогда ждем местных гуру =)
Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут

argnist

Цитата: kompilainenn от  8 июня 2016, 22:01
беру свои слова назад, стиль символа не может быть условным=)

тогда ждем местных гуру =)
вот и я чувствую, что через пару дней буду ставить сдк и писать на джаве (изучаю я ее) свой плагин для либроффиса

maksvlad

А что мешает искать по стилю?
вот пример макроса, который удаляет слово по цвету.
переделать на изменение цвета, труда не составит

function RemoveColor(vRGB)
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

'--- This function replaces any string with another one, using or not the Regular Expressions ---
dim oReplace As Object
dim SrchAttributes (0) As new com.sun.star.beans.PropertyValue
dim ReplAttributes (0) As new com.sun.star.beans.PropertyValue
oReplace = ThisComponent.createReplaceDescriptor()
'Regular expression. Match any text
with oReplace
.SearchString = ".*"
.ReplaceString = " "
.SearchRegularExpression = True
.searchStyles = True
.SearchCaseSensitive = False
.SearchAll = True
end with
SrchAttributes(0).Name = "CharColor" 'Change
SrchAttributes(0).Value = vRGB 'Change
' MsgBox(SrchAttributes(0).Name &","& SrchAttributes(0).Value
oReplace.SetSearchAttributes(SrchAttributes())
ThisComponent.replaceAll (oReplace)
rem ----------------------------------------------------------------------
' dispatcher.executeDispatch(document, ".uno:Delete", "", 0, Array())
end function

economist

Если есть задача сверстать большую красивую книжку с цветными словами и множестом - можно копнуть и добавить свой модуль в Питньяковское расширение - Раскрась макрос (MacroFormatterADP). 
Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...

argnist

#9
Цитата: maksvlad от  9 июня 2016, 11:35А что мешает искать по стилю?
мешает вот это:
Цитата: argnist от  8 июня 2016, 18:23Но пока я очень слаб в Бейсике Либры и всё, что я пишу - не работает или работает не так как надо


Цитата: maksvlad от  9 июня 2016, 11:35вот пример макроса, который удаляет слово по цвету.
Большое спасибо, сейчас опробую!

Цитата: economist от  9 июня 2016, 12:39Если есть задача сверстать большую красивую книжку с цветными словами и множестом - можно копнуть и добавить свой модуль в Питньяковское расширение - Раскрась макрос (MacroFormatterADP).
Я бы и с радостью. При его использовании мой райтер крашится. Что только не делал.

Господа, тема закрыта. Я только зря морочил Вам всем голову.

Моя проблема решается так:
В стиле, с которым мне нужно работать - просто меняю шрифт на отличный от основного, например Comic Sans.
Открываю диалог замены.
Включаю режим "Регулярные выражения".
В поле "Найти" пишу первое|второе.
Жму Формат, выбираю собственно этот узнаваемый шрифт.
Затем в поле "Заменить на" пишу $0 (это означает замену всех вхождений моей регулярки) и также жму Формат, задаю там нужные мне параметры и жму Заменить Всё.

Большое спасибо всем откликнувшимся.