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.

  1. 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:
  2. 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.
  3. 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.
  4. 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.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.