LINUX.ORG.RU

Нужен совет по созданию макроса в LibreOffice

 , ,


0

1

Представим, что у меня есть строка вида

[私.watashi]はペンギンです

Нужно сделать так, чтоб она превратилась в

私はペンギンです,

причём над первым знаком должна быть подпись «watashi».

https://imgur.com/a/31DQlJ4

Вообще делается это просто: Формат - Фонетическое руководство (Азия). Дальше нужно только ввести подпись и указать выравнивание по центру.

https://imgur.com/lVqKvOp

Но как быть, если у меня сотни такого текста и вручную всё сие проделывать придётся до Второго пришествия?

Пришлось впервые в жизни задуматься о макросах, но в них ничего не смыслю. Пробовал посмотреть уроки на ютубе - всё фигня какая-то попадается, на уровне "запусти макрос - выскочит окошко «hello world».

Кто-нибудь может дать дельные советы? Желательно, чтоб макрос писался на Python, ибо по нему есть хоть какие-то базовые знания.

Ответ на: комментарий от Ygor

Желательно, чтоб макрос писался на Python, ибо по нему есть хоть какие-то базовые знания.

ТС жалуется, что на ютубе не документация. Я ему дал ссылку. Вроде всё сходится.

anonymous
()

Если запутаешься в доках по Либре и не найдёшь там нужной функции, можешь попробовать решить свою задачу через автоматизаторы десктопа типа AutoKey (он вроде тоже питон понимает) или какой там аналог Autoit/AHK есть под Линь..

mydibyje ★★★
()
Последнее исправление: mydibyje (всего исправлений: 1)
Ответ на: комментарий от Mapper720

Можно в бейсике всё это реализовать.

Из того пистон-скрипта, который тут советовали, тебя интересует две строки: xWordCursor.setPropertyValue(«RubyText», token.reading) xWordCursor.setPropertyValue(«RubyAdjust», CENTER)

Это и есть главное.

Открываем книгу Питоньяка «OpenOffice.org Macros Explained.Master.pdf» и смотрим готовые примеры. Можно перебором абзацев, можно курсорами (как в пистон-скрипте). Но, кмк, лучше использовать встроенный поиск. Добавить к нему парсинг найденного и заменить, согласно пистон-скрипту:

Sub SimpleSearchExample
	Dim oDescriptor 'описатель поиска
	Dim oFound 'найденный диапазон
	Dim txt as string
	Dim maintxt as string
	Dim furigantxt as string
	
	oDescriptor = ThisComponent.createSearchDescriptor()
	With oDescriptor
		.SearchString = "(\[)(.+?)(\])"
		.SearchRegularExpression = true
	End With
	

	oFound = ThisComponent.findFirst(oDescriptor)
	Do While Not IsNull(oFound)
		txt = oFound.getString()
		ParseTxt txt, maintxt, furigantxt
		oFound.setString(maintxt)
		oFound.setPropertyValue("RubyText", furigantxt)
		oFound.setPropertyValue("RubyAdjust", CENTER)
		oFound = ThisComponent.findNext(oFound.End, oDescriptor)
	Loop
	
End Sub

Private Sub ParseTxt (txt, maintxt, furigantxt)
	Dim n as integer
	txt = Replace(txt, "[", "")
	txt = Replace(txt, "]", "")
	n = InStr(txt, ".") '	'"[私.watashi]はペンギンです"
	maintxt = Mid(txt, 1, n - 1)
	furigantxt = Mid(txt, n + 1)
End sub 

За работу скрипта я не несу никакой ответственности. ))

rechnick ★★★
()
Ответ на: комментарий от rechnick

Благодарю, вроде работает, хотя и до сих пор не так, как хотелось бы (почему-то, например, не выравнивает по центру). Впрочем, уже что-то. Буду думать дальше.

Mapper720
() автор топика