Модул:R:CAL
Документацију овог модула можете да направите на страници Модул:R:CAL/док
local export = {}
local title = mw.title.getCurrentTitle()
local data = mw.loadData 'Module:R:CAL/data'
local function indexof(arr, val)
for i, v in ipairs(arr) do
if v == val then
return i
end
end
return -1
end
local function if_not_empty(val)
if val == '' then
return nil
end
return val
end
local function convert(word, source, target)
local converted = ''
local source, target = data[source], data[target]
for char in word:gmatch '[%z\1-\127\194-\244][\128-\191]*' do
converted = converted .. (target[indexof(source, char)] or char)
end
if target == CAL_code then
converted = converted:gsub('%*%*', '@')
end
return converted
end
local function percent_encode(str)
return mw.uri.encode(str, "PATH")
end
local function detect_encoding(word)
-- only ASCII characters
if not word:find '[\128-\255]' then
return 'CAL_code'
-- Search for leading byte of UTF-8 encoding of codepoints U+700-U+73F,
-- which includes the basic Syriac letters (U+710-U+72E).
elseif word:find '\220' then
return 'Syriac'
-- Search for leading byte of UTF-8 encoding of codepoints U+5C0-U+5FF,
-- which includes the basic Hebrew letters (U+5D0-U+5EA).
elseif word:find '\215' then
return 'Hebrew'
else
return 'translit'
end
end
function export.URL(frame)
local args = frame.args
local word = if_not_empty(args[1]) or if_not_empty(args.entry) or title.text
local POS = if_not_empty(args[2]) or if_not_empty(args.POS) or "N"
if word:find '%%' then
word = mw.uri.decode(word)
end
local encoding = detect_encoding(word)
return ("http://cal.huc.edu/oneentry.php?lemma=%s+%s&cits=all")
:format(
mw.uri.encode(convert(word, encoding, 'CAL_code')),
POS)
end
function export.title(frame)
local args = frame.args
local word = if_not_empty(args[1]) or title.text
if word:find '%%' then
word = mw.uri.decode(word)
end
word = word:gsub('#(%d+)', '<sup>%1</sup>')
local encoding = detect_encoding(word)
return convert(word, encoding, 'translit')
end
return export