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

106 байт добавлено ,  2 года назад
нет описания правки
(Новая страница: «-- This module provides functions for getting the target of a redirect page. local p = {} -- Gets a mw.title object, using pcall to avoid generating script erro...»)
 
Нет описания правки
 
Строка 16: Строка 16:
local function case_insensitive_pattern(pattern)
local function case_insensitive_pattern(pattern)
   -- find an optional '%' (group 1) followed by any character (group 2)
   -- find an optional '%' (group 1) followed by any character (group 2)
   local p = pattern:gsub("(%%?)(.)", function(percent, letter)
   local p = mw.ustring.gsub(pattern, "(%%?)(.)", function(percent, letter)
     if percent ~= "" or not letter:match("%a") then
     if percent ~= "" or not mw.ustring.match(letter, "%a") then
       -- if the '%' matched, or `letter` is not a letter, return "as is"
       -- if the '%' matched, or `letter` is not a letter, return "as is"
       return percent .. letter
       return percent .. letter
     else
     else
       -- else, return a case-insensitive character class of the matched letter
       -- else, return a case-insensitive character class of the matched letter
       return string.format("[%s%s]", letter:lower(), letter:upper())
       return string.format("[%s%s]", mw.ustring.lower(letter), mw.ustring.upper(letter))
     end
     end
   end)
   end)
Строка 33: Строка 33:
local en_redirect = case_insensitive_pattern("redirect");
local en_redirect = case_insensitive_pattern("redirect");
local ru_redirect = case_insensitive_pattern("перенаправление");
local ru_redirect = case_insensitive_pattern("перенаправление");
return string.match(
local result = string.match(
text,
text,
"^%s*#".. en_redirect .. "%s*:?%s*%[%[([^%[%]|]-)%]%]"
"^%s*#".. en_redirect .. "%s*:?%s*%[%[([^%[%]|]-)%]%]"
Строка 39: Строка 39:
text,
text,
"^%s*#".. en_redirect .. "%s*:?%s*%[%[([^%[%]|]-)|[^%[%]]-%]%]"
"^%s*#".. en_redirect .. "%s*:?%s*%[%[([^%[%]|]-)|[^%[%]]-%]%]"
) or string.match(
) or mw.ustring.match(
text,
text,
"^%s*#" .. ru_redirect .. "%s*:?%s*%[%[([^%[%]|]-)%]%]"
"^%s*#" .. ru_redirect .. "%s*:?%s*%[%[([^%[%]|]-)%]%]"
) or string.match(
) or mw.ustring.match(
text,
text,
"^%s*#" .. ru_redirect .. " %s*:?%s*%[%[([^%[%]|]-)|[^%[%]]-%]%]"
"^%s*#" .. ru_redirect .. " %s*:?%s*%[%[([^%[%]|]-)|[^%[%]]-%]%]"
)
)
return result and mw.uri.decode(result, 'w')
end
end