Буквы кириллицы в именах тегов и страниц, а также в именах чекбоксов обрабатываются правильно. Однако в регулярных выражениях символы кириллицы не считаются за буквы! (Это не баг в Trunk Notes, а особенность Lua, работающего в ASCII.) Чтобы нормально работать с текстом, для буквы вместо простого «%a
» нужно использовать диапазон с явным указанием заглавной буквы "Ё":
[а-яА-ЯЁ%a]
Вызов функции wiki.expr
возвращает результат в виде таблицы с единственным элементом, доступ к которому осуществляется по ключу "out"
:
t=wiki.expr('head','Book',1) -- аналог {{head Book,1}}
if t then str=t.out end
Вызов функции wiki.exprl
возвращает массив, который можно обычным образом обходить с помощью pairs()
или ipairs()
.
Обратные апостофы и прочие средства показа кода не экранируют вызовы функций динамического содержимого через фигурные скобки {{}}
.
При вызове скрипта через {{lua}}
с аргументами нужно после слова «lua
» всё перечислять через запятую:
{{lua myscript.lua,arg1,arg2,arg3}}
Скрипт получит эти аргументы в виде массива args
(буква "s" на конце присутствует правильно!), элементы которого являются строками. То есть в данном примере
args[1]=='arg1' and args[2]=='arg2' and args[3]=='arg3'
Это преобразование в строки выполняется автоматически, и дополнительно заключать аргументы вызова в кавычки или апострофы не нужно!
Прочитать состояния чекбоксов на странице можно через метаданные этой страницы. Допустим, на странице с именем page_title
присутствует чекбокс, описанный в виде
{{check Использовать UTF8}}
Для него будет сформирован ключ с именем «checked_использоватьutf8
» (ключ всегда начинается с «checked_
» и далее следует алфавитно-цифровая последовательность из описания чекбокса — только буквы в нижнем регистре и цифры). Буквы кириллицы обрабатываются правильно.
Если чекбокс установлен, то таблица метаданных страницы будет содержать элемент с этим ключом и строковым значением 'YES'
. Если чекбокс не установлен, то для него в метаданных не будет содержаться ничего — то есть по данному ключу из таблицы будет извлечено nil
. Проверка может выглядеть1 примерно так:
g=wiki.get(page_title).metadata
if g["checked_использоватьutf8"]
then sp="Yes!" -- Чекбокс установлен
else sp="No!" -- Чекбокс не установлен
end
return sp
Единственной возможностью получить список всех чекбоксов на странице вне зависимости от их состояния является разбор содержимого страницы — скажем, с помощью string.gmatch
. При этом, разумеется, будут возвращаться не ключи, а их полнотекстовые описания:
g=wiki.get(page_title).contents
for t in string.gmatch(g,"{{check%s+([^}]+)}}") do
-- t имеет значение, совпадающее с описанием очередного чекбокса
end
Чтобы получить ключ из найденного таким образом t
, нужно преобразовать строку в нижний регистр, выбросить из неё всё, что не буквы и не цифры, и наконец, приписать к ней спереди префикс.
-
В этих примерах предполагается, что требуемая страница заведомо существует. По-хорошему нужно сначала выполнить
wiki.get(page_title)
, потом проверить, что вернулся неnil
, и только потом уже извлекать оттуда метаданные либо содержание. ↩︎