Modul:entry
Dokumentation för denna modul finns på /dok (redigera), /test
Syfte
redigeraAtt understödja MediaWiki:Gadget-green links.js (och därmed även MediaWiki:Gadget-translation editor.js) genom att automatiskt generera wikitext baserat på data som tillhandahålls av JavaScriptet.
local export = {}
local lang = require("Modul:lang")
local h3 = require("Modul:h3")
function export.getWikitext(frame)
local args = frame.args and mw.text.jsonDecode(frame.args[1]) or {}
local origin_pagename = args["origin_pagename"]
local entries = args["entries"]
local str = ""
local page = {}
page.lang_sections = {}
local function getLangSection(lang_code)
if not page.lang_sections[lang_code] then
page.lang_sections[lang_code] = {
h3_sections = {}
}
end
return page.lang_sections[lang_code]
end
local function getH3Section(lang_section, h3_code)
if not lang_section.h3_sections[h3_code] then
lang_section.h3_sections[h3_code] = {
pos_template_line = "",
bold_title = "",
translitteration = "",
genders = {},
numbers = {},
aspects = {},
definitions = {}
}
end
return lang_section.h3_sections[h3_code]
end
for _,entry in ipairs(entries) do
local entry_type = entry["type"]
local lang_code = entry["lang"]
local h3_code = entry["h3"]
local definition = entry["definition"] and ("#" .. entry["definition"] .. "\n")
local gender = entry["gender"]
local number = entry["number"]
local aspect = entry["aspect"]
local title = entry["title"]
local origin_h3_code = entry["origin_h3"]
local translitteration = entry["tr"]
if lang_code == nil then
error('parameter "lang" missing')
end
if gender == "c" then
gender = "u"
end
if entry_type == "infl" then
definition = "#{{böjning|" .. lang_code .. "|" .. h3_code .. "|" .. origin_pagename .. "}}\n"
elseif entry_type == "translation" then
definition = "#[[" .. origin_pagename .. "]]\n"
elseif entry_type == "adv" then
definition = "#{{avledning|" .. lang_code .. "|" .. origin_pagename .. "|" .. origin_h3_code .. "}}\n"
h3_code = "adv"
elseif (
entry_type == "prespart"
or entry_type == "perfpart"
or entry_type == "aktpart"
or entry_type == "passpart"
or entry_type == "prespartakt"
or entry_type == "prespartpass"
or entry_type == "pretpartakt"
or entry_type == "pretpartpass"
or entry_type == "perfpartakt"
or entry_type == "perfpartpass"
or entry_type == "agentpart"
or entry_type == "agentpart1ps"
or entry_type == "agentpart2ps"
or entry_type == "agentpart1pp"
or entry_type == "agentpart2pp"
or entry_type == "agentpart3p"
or entry_type == "nekpart"
) then
--todo: perfpart with particle
definition = "#{{avledning|" .. lang_code .. "|" .. origin_pagename .. "|ordform=" .. entry_type .. "}}\n"
h3_code = "adj"
elseif (
entry_type == "presger"
or entry_type == "pretger"
) then
definition = "#{{avledning|" .. lang_code .. "|" .. origin_pagename .. "|ordform=" .. entry_type .. "}}\n"
h3_code = "adv"
end
if h3_code == nil then
error('parameter "h3" missing for entry_type = "' .. entry_type .. '"')
end
local lang_section = getLangSection(lang_code)
local h3_section = getH3Section(lang_section, h3_code)
local function insertDefinitionToBeginning(defs, def)
table.insert(defs, 1, def)
end
local function insertDefinitionToEnd(defs, def)
table.insert(defs, def)
end
local definition_exists = false
for _, def in ipairs(h3_section.definitions) do
if def == definition then
definition_exists = true
end
end
if not definition_exists then
if entry_type == "infl" then
insertDefinitionToEnd(h3_section.definitions, definition)
else
insertDefinitionToBeginning(h3_section.definitions, definition)
end
end
if entry_type ~= "infl" then
h3_section.pos_template_line = "{{" .. h3_code .. "|" .. lang_code .. "}}\n"
end
if gender then
h3_section.genders[gender] = true
end
if number then
h3_section.numbers[number] = true
end
if aspect then
h3_section.aspects[aspect] = true
end
if h3_section.bold_title == "" then
h3_section.bold_title = "'''" .. title .. "'''"
elseif not mw.ustring.find(h3_section.bold_title, "'''" .. title .. "'''", 1, true) then
h3_section.bold_title = h3_section.bold_title .. ", " .. "'''" .. title .. "'''"
end
--todo: special rules for chinese etc?
h3_section.translitteration = translitteration and (" (" .. translitteration .. ")") or ""
end
local function compareH3Sections(a, b)
return a.h3_name < b.h3_name
end
local function compareLangSections(a, b)
if a.lang_name == "Svenska" then
return true
elseif b.lang_name == "Svenska" then
return false
end
return a.lang_name < b.lang_name
end
for lang_code, lang_section in pairs(page.lang_sections) do
for h3_code, h3_section in pairs(lang_section.h3_sections) do
h3_section.h3_name = h3.getLongSingUCFirst(h3_code)
lang_section.indexed_h3_sections = lang_section.indexed_h3_sections or {}
table.insert(lang_section.indexed_h3_sections, h3_section)
end
table.sort(lang_section.indexed_h3_sections, compareH3Sections)
lang_section.lang_name = lang.getLanguageUCFirst(lang_code)
page.indexed_lang_sections = page.indexed_lang_sections or {}
table.insert(page.indexed_lang_sections, lang_section)
end
table.sort(page.indexed_lang_sections, compareLangSections)
local is_first_lang_section = true
for _1, lang_section in ipairs(page.indexed_lang_sections) do
if not is_first_lang_section then
str = str .. "\n"
end
str = str .. "==" .. lang_section.lang_name .. "==\n"
local is_first_h3_section = true
for _2, h3_section in pairs(lang_section.indexed_h3_sections) do
if not is_first_h3_section then
str = str .. "\n"
end
str = str .. "===" .. h3_section.h3_name .. "===\n"
str = str .. h3_section.pos_template_line
local bold_line = h3_section.bold_title
bold_line = bold_line .. h3_section.translitteration
bold_line = bold_line .. (h3_section.genders.m and " {{m}}" or "")
bold_line = bold_line .. (h3_section.genders.f and " {{f}}" or "")
bold_line = bold_line .. (h3_section.genders.mf and " {{mf}}" or "")
bold_line = bold_line .. (h3_section.genders.u and " {{u}}" or "")
bold_line = bold_line .. (h3_section.genders.n and " {{n}}" or "")
bold_line = bold_line .. (h3_section.numbers.s and " {{s}}" or "")
bold_line = bold_line .. (h3_section.numbers.d and " {{d}}" or "")
bold_line = bold_line .. (h3_section.numbers.p and " {{p}}" or "")
bold_line = bold_line .. (h3_section.aspects.impf and " {{impf}}" or "")
bold_line = bold_line .. (h3_section.aspects.pf and " {{pf}}" or "")
bold_line = bold_line .. (h3_section.aspects.impfpf and " {{impfpf}}" or "")
bold_line = bold_line .. "\n"
str = str .. bold_line
for _, definition in ipairs(h3_section.definitions) do
str = str .. definition
end
is_first_h3_section = false
end
is_first_lang_section = false
end
str = mw.text.trim(str)
return str
end
return export