Ноу-хау: проверка ссылок в Trunk Notes

Если вики включает в себя хотя бы несколько десятков страниц, то отслеживать её целостность уже становится нелегко. Самым очевидным средством такого отслеживания является поиск неработающих ссылок, указывающих на несуществующие страницы (причины их несуществования могут быть самыми разными — забыли создать, переименовали не так что-то существовавшее, допустили опечатку в ссылке или имени страницы, да мало ли что).

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

Нужно иметь в виду, что две подряд квадратные скобки, означающие в Trunk Notes ссылку, в языке Lua имеют собственное значение (и не одно), а также могут употребляться в скриптах при оформлении результатов работы. Во избежание ложных срабатываний лучше записывать свои скрипты в вики так, чтобы эти скобки в них подряд не встречались. Например, вместо можно написать '['..'[' и т.п.



-- Сканирует все страницы вики и формирует таблицу
-- с найденными ссылками на несуществующие страницы

-- Служебные страницы, имена которых начинаются с
-- 'Docs:' и 'Special:', в сканирование не включаются

-- Проверяются только ссылки, оформленные в двойных
-- квадратных скобках

alltitles=wiki.titles()
res='Страницы | Нерабочие ссылки\n|----|----|\n'

for i=1,#alltitles do
  curttl=alltitles[i]
  if string.find(curttl,'Docs:') or string.find(curttl,'Special:') then else
    crpg=wiki.get(curttl)
    curpage=tostring(crpg.contents)
    for lnk in string.gmatch(curpage,'%[%[(.-)%]%]') do
      j,foo = string.find(lnk,'|')
      if j then ttl=string.sub(lnk,1,j-1) else ttl=lnk end
      if not wiki.exists(ttl)
        then res=res..'['..'['..curttl..']'..'] | '..'['..'['..ttl..']'..']\n'
        cnt=1
      end
    end
  end
end

if not cnt then res='Нерабочих ссылок не найдено.\n' end

return res