Изменения

Перейти к навигации Перейти к поиску
internalise
Строка 17: Строка 17:  
local radically_wikify = require 'Module:RadicalWikifier'.run
 
local radically_wikify = require 'Module:RadicalWikifier'.run
   −
local function memoize (func)
  −
local memoized = {}
  −
return function (...)
  −
local key = {...}
  −
if not memoized [key] then
  −
memoized [key] = { func (...) }
  −
end
  −
return unpack (memoized [key])
  −
end
  −
end
  −
   
-- Локаль:
 
-- Локаль:
 
local function convert_flags (flags)
 
local function convert_flags (flags)
Строка 81: Строка 70:  
end
 
end
 
local hidden = {}
 
local hidden = {}
 +
-- hide ():
 
return function (string, pattern, flags)
 
return function (string, pattern, flags)
 
return preg_replace (string, pattern, flags, function (found)
 
return preg_replace (string, pattern, flags, function (found)
Строка 87: Строка 77:  
return strip_marker (no)
 
return strip_marker (no)
 
end)
 
end)
 +
-- restore ():
 
end, function (text)
 
end, function (text)
 
for i = #hidden, 1, -1 do
 
for i = #hidden, 1, -1 do
text = gsub (text, strip_marker (i), hidden [i])
+
if type (hidded [i]) == 'string' then
 +
text = gsub (text, strip_marker (i), hidden [i])
 +
end
 
end
 
end
 
hidden = {}
 
hidden = {}
 
return text;
 
return text;
 +
end
 +
end) ()
 +
 +
-- Converting external links to internal:
 +
local collect_link, resolve_links, internalise_link = (function ()
 +
local property = 'URL источника'
 +
local urls = {}
 +
-- collect_link ():
 +
return function (url, alias)
 +
urls [url] = true
 +
-- return as is:
 +
return '[' .. url .. ' ' .. (alias or '') .. ']'
 +
-- resolve_links ():
 +
end, function (text)
 +
local list = {}
 +
for url, _ in pairs (urls) do
 +
list [#list + 1] = url
 +
end
 +
local pages = ask {
 +
'[[' .. property .. '::' .. concat (list, '||') ..']]',
 +
'?#-',
 +
'?' .. property .. '#-',
 +
limit = #list
 +
}
 +
if pages then
 +
for _, row in ipairs (pages) do
 +
local page, url = row [1], row [property]
 +
urls [url] = page
 +
end
 +
end
 +
return text -- as is
 +
-- internalise_link:
 +
end, function (url, alias)
 +
return '[[' .. urls [url] .. (alias and '|' .. alias) .. ']]'
 
end
 
end
 
end) ()
 
end) ()
Строка 109: Строка 136:  
return '[[' .. decode (page) .. '|' .. alias .. ']]';
 
return '[[' .. decode (page) .. '|' .. alias .. ']]';
 
end,
 
end,
internalise = memoize (function (url, alias)
+
collect_link = collect_link,
local property = 'URL источника'
+
resolve_links = resolve_links,
local pages = ask { '[[' .. property .. '::' .. url ..']]', '?#-', limit = 1 }
+
internalise_link = internalise_link,
if pages then
  −
local page = pages [1] [1]
  −
if not (context and page == context) then
  −
return '[[' .. pages [1] [1] .. '|' .. alias .. ']]'
  −
end
  −
end
  −
return '[' .. url .. ' ' .. alias .. ']'
  −
end),
   
char = function (_, s)
 
char = function (_, s)
 
return char (tonumber (sub (s, -4), 16))
 
return char (tonumber (sub (s, -4), 16))

Реклама:

Навигация