Модуль:FtlMarking: различия между версиями

мНет описания правки
мНет описания правки
Строка 79: Строка 79:


     return params
     return params
end
local function strip_nowiki_and_unescape(s)
    if not s then return s end
    s = mw.ustring.gsub(s, '<nowiki>', '')
    s = mw.ustring.gsub(s, '</nowiki>', '')
    s = mw.ustring.gsub(s, '<nowiki>', '')
    s = mw.ustring.gsub(s, '</nowiki>', '')
    s = mw.ustring.gsub(s, '<nowiki>', '')
    s = mw.ustring.gsub(s, '</nowiki>', '')
    s = mw.ustring.gsub(s, '&#123;&#123;&#61;&#125;&#125;', '=')
    s = mw.ustring.gsub(s, '&#123;{&#61;}&#125;', '=')
    s = mw.ustring.gsub(s, '{&#123;&#61;&#125;}', '=')
    s = mw.ustring.gsub(s, '{{=}}', '=')
    s = mw.ustring.gsub(s, '&amp;', '&')
    return s
end
end


local function transform(s)
local function transform(s)
     s = s or ""
     s = s or ""
    s = strip_nowiki_and_unescape(s)
     while true do
     while true do
         local c_s, c_e, c_tag = mw.ustring.find(s, "%[/([%w_]+)%]")
         local c_s, c_e, c_tag = mw.ustring.find(s, "%[/([%w_]+)%]")
Строка 119: Строка 100:
         else
         else
             local inner = mw.ustring.sub(s, last_o_e + 1, c_s - 1)
             local inner = mw.ustring.sub(s, last_o_e + 1, c_s - 1)
            inner = strip_nowiki_and_unescape(inner)
             local _, _, raw_attrs = mw.ustring.find(s, "%[" .. c_tag .. "([^%]]*)%]", last_o_s)
             local _, _, raw_attrs = mw.ustring.find(s, "%[" .. c_tag .. "([^%]]*)%]", last_o_s)
            raw_attrs = strip_nowiki_and_unescape(raw_attrs)
             local params = parse_attrs(raw_attrs)
             local params = parse_attrs(raw_attrs)
             local replacement = apply_tag(c_tag, params, inner)
             local replacement = apply_tag(c_tag, params, inner)
Строка 138: Строка 116:
     local args = frame.args or {}
     local args = frame.args or {}
     local text = args[1] or args.text or ""
     local text = args[1] or args.text or ""
     text = strip_nowiki_and_unescape(text)
     text = mw.text.unstripNoWiki(text)
     return transform(text)
     return transform(text)
end
end


return p
return p