Module:Format

local module = {} -- Перечень особых случаев при разборе тэгов -- Если тэ отвечает паттерну в этой таблице, то вместо стандартной -- будет построена ссылка на секцию статьи с тэгами, указанную в поле section local specialTags = {   { pattern = "^[PMC]+$", section = "P, M, C" }, { pattern = "Drain$", section = "Drain" }, { pattern = "Burn$", section = "Burn" }, { pattern = "^Signature Weapon", section = "Signature Weapon" }, { pattern = "^Signature Move", section = "Signature Move" }, { pattern = "^Signature Form", section = "Signature Form" }, { pattern = "^Extra Training", section = "Extra Training" }, { pattern = "^Shift", section = "Shift", article = "Рыцари_Ключа/Полет_и_дистанция" } }

-- Перечень наборов правил, представленных в вики local ruleSets = {   "Изумрудный Клык", "Рыцари Ключа" }

-- Основная реализация разбора по тэгам -- tags - список тэгов строкой через запятую -- article - статья, в которой перечислены заголовками тэги function tagsInner(tags, article) -- Разделяем тэги local tags = mw.text.split(tags, ",%s?", false); local result = ""; -- Обходим их for index, value in ipairs(tags) do       -- Если это не первый тэг, добавим запятую if (string.len(result) > 0) then result = result..", "; end -- Обрежим лишние пробелы value = mw.text.trim(value); -- Формируем имя нужной секции local section = value; local source = article; -- Если имя тэга соответствует особому случаю, подменим имя секции for indexSpecial, specialCase in ipairs(specialTags) do           if (string.match(value, specialCase.pattern)) then section = specialCase.section; if (specialCase.article) then source = specialCase.article; end break; end end -- Добавляем ссылку на секцию к результату result = result..string.format("%s", source, section, value); end return result; end

-- Определяет, не находимся ли текущая статься внутри частного набора правил для модуля и если да, то возвращает его имя function getRuleSet local title = mw.title.getCurrentTitle; for indexSpecial, ruleSet in ipairs(ruleSets) do       local ruleSetTitle = mw.title.new(ruleSet); if (title:isSubpageOf(ruleSetTitle)) then return ruleSet; end end return nil; end

-- Разбирает список через запятую и превращает его в такой же список ссылок на заголвки статьи в том же наборе правил, что и текущая -- Первый аргумент - список через запятую -- Второй - имя статьи, к которой нужно привязаться -- Внешний метод, конвертирующий параметры фрейма в нормальные аргументы function module.tags(frame) -- Проверим, не находимся ли мы внутри страницы какого-нибудь набора правил и скорректируем адрес статьи, если нужно local article = frame.args[2]; local ruleSet = getRuleSet; if (ruleSet ~= nil) then article = ruleSet.."/"..article; end -- Вызываем формирование тэгов return tagsInner(frame.args[1], article); end

-- Разбирает список через запятую и превращает его в такой же список ссылок на заголвки статьи -- Первый аргумент - список через запятую -- Второй - имя статьи, к которой нужно привязаться -- Внешний метод, конвертирующий параметры фрейма в нормальные аргументы function module.tagsGlobal(frame) return tagsInner(frame.args[1], frame.args[2]); end

-- Создает ссылку на другую статью в тоже наборе правил (т.е. подстатью того же корня) -- Первый агрумент - имя подстатьи, которую нужно найти -- Второй аргумент - как назвать ссылку -- Внешний метод function module.inRuleSet(frame) local ruleSet = getRuleSet; if (ruleSet ~= nil) then return string.format("%s", ruleSet, frame.args[1], frame.args[2]) ; else return string.format("%s", frame.args[1], frame.args[2]); end end

--function module.getSubpages(frame) --  local wikitext = '' --	local text = frame:preprocess(wikitext) --	--	local nowiki = mw.text.nowiki(text) --	nowiki = mw.text.truncate(nowiki, 10) --   return nowiki --end

function module.test return "Ok!" end

return module