Module:R:M&A
--[[
This module provides the front-end to an index of Meissner and Auden's Latin
phrasebook. It includes three data modules. The exported function `phrasebook'
retrieves the calling template's argument or, if none exists, the calling page's
name, and passes this into the table found in
"Module:R:M&A/lemmas_no_collision_to_ix_phrase", which yields a set of phrase
indices unambiguously containing forms of the given word. These indices are
retrieved from the table in "Module:R:M&A/ix_to_phrase", formatted into a
collapsed phrase list, and returned to the caller. When no match is found, an
empty string is returned.
Approximately 78% of the words in Meissner and Auden's phrase book can be
de-stemmed unambigously. Those which cannot are indexed separately in the
table exported by this module: "Module:R:M&A/lemmas_collision_to_ix_phrase".
The corresponding additional lines are added to the bottom and prefaced with the
caption: (ambiguous). If this is too obtrusive they can be perhaps further
collapsed.
]]--
local export = {}
local special_cases = {["a"]={false}, ["de"]={true}}
function print_collapsible_list_html(ls, x)
local lst = {}
local count = 0
for k,x in pairs(ls) do
table.insert(lst, "<li>"..x.."</li>")
count = count + 1
end
local expandtext = count.." "..x..(count==1 and "" or "s")
table.insert(lst, 1, "<div class='mw-collapsible mw-collapsed' style='display: inline' data-expandtext='"..expandtext.."><ul>")
table.insert(lst, "</ul></div>")
return table.concat(lst)
end
function map(f, xs)
local s = {}
if not (xs == nil) then for i,x in pairs(xs) do s[#s+1] = f(x) end end
return s
end
function is_member(xs, i)
if (not (xs==nil)) then for k,v in pairs(xs) do if v==i then return true end end end
return false
end
function load_lemma_nc_to_ix(w)
--return lemmas_no_collision_to_ix_phrase = mw.loadData("Module:R:M&A/lemmas_no_collision_to_ix_phrase")[w]
return require("Module:data tables").index_table("la_RMA_lemmas_no_collision_to_ix_phrase", w)
end
function print_html(w)
local lemmas_collision_to_ix_phrase = mw.loadData("Module:R:M&A/lemmas_collision_to_ix_phrase") --small table, hence loaded unsharded
local lsNC, lsC = load_lemma_nc_to_ix(w), lemmas_collision_to_ix_phrase[w]
local ls = {}
if lsNC then for k,v in pairs(lsNC) do ls[#ls+1] = v end end
if lsC then for k,v in pairs(lsC) do ls[#ls+1] = v end end
--local ix_to_phrase = mw.loadData("Module:R:M&A/ix_to_phrase") --needs a data_table.select_array function: table_name -> [key] -> (key -> val); TBD
local ix_to_phrase = (w=="a" or w=="de") and special_cases[w][1] and require("Module:R:M&A/memory special cases")[w] or require("Module:data tables").index_table_all("la_RMA_index_to_phrases", ls)
function print_phrase(i)
local pL, pE = ix_to_phrase[i][1], ix_to_phrase[i][2]
local prevSubst = 1
local n = 1
while prevSubst > 0 do
pL, prevSubst = string.gsub(pL, "_", (n%2==1 and "<i><b>" or "</b></i>"), 1)
pE, pS0 = string.gsub(pE, "_", (n%2==1 and "<i>" or "</i>"), 1)
prevSubst = prevSubst + pS0
n = n + 1
end
pL = string.gsub(pL, "%[%d%]", "")
return (is_member(lsC, i) and "<b><i>(ambiguous)</i></b> " or "").. string.gsub(pE..": "..pL.."<br/>", ".:", ":")
end
local ls_html = print_collapsible_list_html(map(print_phrase, ls), "phrase")
--return true and "True" or "False"
return ((ls == nil and "") or ls_html)
end
function export.phrasebook(frame)
local args = frame:getParent().args
local w = args[1] or mw.title.getCurrentTitle().text
if (not args[1] or args[1] == "") and mw.title.getCurrentTitle().nsText == "Template" then
return ""
else
return print_html(w)
end
end
return export
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.