Module:interlinear: Difference between revisions
No edit summary |
No edit summary |
||
| (8 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
local data = mw.loadData( 'Module: | local data = mw.loadData( 'Module:interlinear/data' ) | ||
local gloss_override = {} -- for custom gloss abbreviations | local gloss_override = {} -- for custom gloss abbreviations | ||
local getArgs = require('Module:Arguments').getArgs | local getArgs = require('Module:Arguments').getArgs | ||
| Line 30: | Line 30: | ||
combining_gender_numbers = "[0-9][0-9]?$", --e.g. G4 '4th gender' or CL7 'class 7' | combining_gender_numbers = "[0-9][0-9]?$", --e.g. G4 '4th gender' or CL7 'class 7' | ||
combining_gender_prefixes = {G = "gender", CL = "class"}, | combining_gender_prefixes = {G = "gender", CL = "class"}, | ||
combining_person = {["1"] = "first person", ["2"] = "second person", ["3"] = "third person"}, | combining_person = {["1"] = "first person", ["2"] = "second person", ["3"] = "third person",}, | ||
combining_number = {S = "singular", SG = "singular", P = "plural", PL = "plural", D = "dual", DU = "dual", TRI = "trial"}, | combining_number = { | ||
S = "singular", SG = "singular", | |||
P = "plural", PL = "plural", | |||
D = "dual", DU = "dual", | |||
TRI = "trial", PAU = "paucal", COL = "collective", | |||
IN = "inclusive", INC = "inclusive", INCL = "inclusive", | |||
EX = "exclusive", EXC = "exclusive", EXCL = "exclusive" | |||
}, | |||
combining_gender = {F = "feminine", M = "masculine", N = "neuter"}, | combining_gender = {F = "feminine", M = "masculine", N = "neuter"}, | ||
LowerCaseGlosses = {["1sg"] = true, ["2sg"] = true, ["3sg"] = true, ["1du"] = true, ["2du"] = true, ["3du"] = true, ["1pl"] = true, ["2pl"] = true, | LowerCaseGlosses = { | ||
["1sg"] = true, ["2sg"] = true, ["3sg"] = true, | |||
["1du"] = true, ["2du"] = true, ["3du"] = true, | |||
["1pl"] = true, ["2pl"] = true, ["3pl"] = true, | |||
["Fsg"] = true, ["Fpl"] = true, ["Msg"] = true, ["Mpl"] = true, | |||
}, -- these are the non-all-upper-case strings that will be recognised as glossing abbreviations | |||
ErrorHelpLocation = "Template:Interlinear", | ErrorHelpLocation = "Template:Interlinear", | ||
} | } | ||
| Line 45: | Line 56: | ||
WordMargin = "margin-right: 1em;", | WordMargin = "margin-right: 1em;", | ||
WordP = "margin: 0px;", -- the style for the word <p> elements | WordP = "margin: 0px;", -- the style for the word <p> elements | ||
GlossAbbr = "font-variant: small-caps; font-variant-numeric: | GlossAbbr = "font-variant: small-caps; font-variant-numeric: lining-nums; text-transform: lowercase; ", -- won't be applied to gloss abbreviations containing lower-case characters | ||
HiddenText = "display: none;", | HiddenText = "display: none;", | ||
EndDiv = "clear: left; display: block;", -- style of the <div> element at the end of the interlinear display | EndDiv = "clear: left; display: block;", -- style of the <div> element at the end of the interlinear display | ||
| Line 57: | Line 68: | ||
ErrorMessage = "error", | ErrorMessage = "error", | ||
} | } | ||
--------------------- | |||
-- Section transclusion | |||
--------------------- | |||
local page_content = nil -- lazy initilization | |||
local function get_section(frame, section_name) | |||
if page_content == nil then | |||
local current_title = mw.title.getCurrentTitle() | |||
page_content = current_title:getContent() | |||
end | |||
if page_content then | |||
if mw.ustring.find(page_content, section_name, 1, true) then | |||
return frame:preprocess('{{#section:{{FULLPAGENAME}}|' .. section_name .. '}}') | |||
end | |||
end | |||
return '' | |||
end | |||
--------------------- | --------------------- | ||
-- Sundry small functions | -- Sundry small functions | ||
| Line 78: | Line 104: | ||
local function tone_sup(str) | local function tone_sup(str) | ||
return mw.ustring.gsub(str, "([^%p%s0-9])([0-9])", "%1<sup>%2</sup>") | return mw.ustring.gsub(str, "([^%p%s0-9])([0-9]+)", "%1<sup>%2</sup>") | ||
end | end | ||
| Line 90: | Line 116: | ||
local function help_link (anchor) | local function help_link (anchor) | ||
if anchor then | if anchor then | ||
return " ([[ | return " ([[" .. conf.ErrorHelpLocation .. "#" .. anchor .. "|help]])" | ||
else return "" end | else return "" end | ||
end | end | ||
| Line 206: | Line 232: | ||
if displaying_messages and (next(self.gloss_messages) or next(self.warnings)) then | if displaying_messages and (next(self.gloss_messages) or next(self.warnings)) then | ||
local div = mw.html.create("div") | local div = mw.html.create("div") | ||
div:addClass(" | div:addClass("interlinear-preview-warning") | ||
: | :cssText('border: 1px solid #a2a9b1; background-color: #f8f9fa; width: 80%; padding: 0.2em;') | ||
:wikitext("<i>This message box is shown only in preview:</i>") | :wikitext("<i>This message box is shown only in preview:</i>") | ||
:newline() | :newline() | ||
| Line 282: | Line 308: | ||
--------------------- | --------------------- | ||
local function format_gloss(gloss, label, wikilink) | local function format_gloss(gloss, label, wikilink) | ||
if string.sub(gloss,1,3) == "000" then -- checks for a common component of exposed strip markers (see [[:mw:Strip marker]]) | |||
return gloss | |||
end | |||
local gloss2 = mw.ustring.gsub(gloss,"<.->","") -- remove any html fluff | local gloss2 = mw.ustring.gsub(gloss,"<.->","") -- remove any html fluff | ||
gloss2 = mw.ustring.gsub(gloss2, "%'%'+", "") -- remove wiki bold/italic formatting | gloss2 = mw.ustring.gsub(gloss2, "%'%'+", "") -- remove wiki bold/italic formatting | ||
| Line 314: | Line 343: | ||
end | end | ||
if glossing_type == "wikilink" and wikilink | if glossing_type == "wikilink" and wikilink | ||
then gloss_node:wikitext("[[ | then gloss_node:wikitext("[[", wikilink, "|" , gloss, "]]") | ||
else gloss_node:wikitext(gloss) end | else gloss_node:wikitext(gloss) end | ||
if source ~= "local" and displaying_messages then -- logging gloss lookups: | if source ~= "local" and displaying_messages then -- logging gloss lookups: | ||
| Line 453: | Line 482: | ||
removeBlanks = false, | removeBlanks = false, | ||
parentOnly = true, | parentOnly = true, | ||
wrappers = {'Template: | wrappers = {'Template:Grammatical category label'}, | ||
}) | }) | ||
msg = UserMessages | msg = UserMessages | ||
| Line 518: | Line 547: | ||
end | end | ||
--this looks for a list of glossing abbreviations on the page that transcludes the template: | --this looks for a list of glossing abbreviations on the page that transcludes the template: | ||
local _ablist_section = frame | local _ablist_section = get_section(frame, 'list-of-glossing-abbreviations') | ||
if _ablist_section and _ablist_section ~= "" then | if _ablist_section and _ablist_section ~= "" then | ||
local _a = mw.ustring.gsub(_ablist_section, '</?div [^\n]*>', '') -- strips off the div tags | local _a = mw.ustring.gsub(_ablist_section, '</?div [^\n]*>', '') -- strips off the div tags | ||
| Line 589: | Line 618: | ||
line[1].class = line[1].class .. " uchen" | line[1].class = line[1].class .. " uchen" | ||
line[1].attr.style = line[1].attr.style .. "font-size:1.25em; word-wrap:break-word;" | line[1].attr.style = line[1].attr.style .. "font-size:1.25em; word-wrap:break-word;" | ||
end | |||
end | |||
--the following emulates the behaviour of {{Spell-nv}}: | |||
if template_name == 'Template:Interlinear' then | |||
if _lang == "nv" and i == 1 then | |||
line[1].attr.style = line[1].attr.style .. "font-family: Aboriginal Sans, DejaVu Sans, Calibri, Arial Unicode MS, sans-serif;" | |||
end | end | ||
end | end | ||