Module:Swadesh
- The following documentation is located at Module:Swadesh/documentation. [edit]
- Useful links: subpage list • links • transclusions • testcases • sandbox
This module is responsible for automating the display of Swadesh lists.
See {{Swadesh list auto}}
for how to use this module on Swadesh list pages.
Data format
The data submodules should return a table of words indexed by their index on the 207-word Swadesh list. Indexes may be left out at will. The values should be a list of terms (explained below).
For example:
m[1] = {{term = "I"}} m[2] = {{term = "you"}}
A term is a table with the following keys (all of which are technically optional, but at least either term
or tr
must be provided in practice:
term
- The term in the specified language.
alt
- The text to display, if not the same as the term to link to.
tr
- The transliteration. If none is provided, one is automatically generated when appropriate.
ts
- The transcription.
id
- The sense ID (provided by
{{senseid}}
or{{etymid}}
). ipa
- The IPA transcription of the word. Only displayed if the table contains only the specified language. Not displayed by default for reconstructed languages even if specified.
notes
- A short note displayed after the entry (or as an asterisk with a tooltip on Swadesh list tables with multiple languages).
nolink
- Pass
true
to disable the link to the term.
In addition, the returned table may also have a key nativename
that contains the name of that language in that language.
See the submodule links below for more examples.
Language-specific submodules
- acy
- ae
- af
- aii
- ajp
- akk
- alt
- am
- ar
- ary
- as
- ast
- atv
- av
- awa
- az
- ba
- bal
- bdg
- bdr
- be
- bee
- bft
- bfu
- bfz
- bg
- bga
- bgc
- bhd
- bho
- bht
- bn
- bpx
- br
- bra
- brh
- bsk
- ca
- cdh
- cdj
- cdn
- cdo
- cel-bry-pro
- cel-pro
- ch
- chg
- cih
- cik
- cjs
- cjy
- ckb
- cmn
- cmn/Hefeinese
- cmn/Jinanese
- cmn/Nanjingnese
- cmn/Nanjingnese/documentation
- cmn/Sichuanese
- cmn/Wuhannese
- cmn/Xiannese
- cmn/Yangzhounese
- cnu
- cop
- crh
- cs
- csb
- cu
- cv
- cy
- da
- de
- dml
- doi
- dra-bad
- dra-pro
- drd
- dsb
- dty
- dv
- el
- es
- et
- ett
- eve
- eve/documentation
- eve/sandbox
- fa
- fi
- fr
- fur
- fy
- gbk
- gbm
- gcf
- gem-pro
- gmy
- gon
- got
- gu
- hak
- he/IL
- he/hbo
- hi
- hif
- hii
- hsb
- hsn
- hsn/Shuangfengnese
- ht
- hu
- huu
- id
- iir-pro
- ilo
- inc-ash
- inc-kho
- inc-kho/Arora
- inc-oas
- inc-ogu
- inc-ohi
- ine-bsl-pro
- ine-pro
- it
- itc-pro
- izh
- jda
- jje
- jns
- jpx-pro
- ka
- ka-os
- kaa
- kab
- kca-nor
- kfa
- kfb
- kfc
- kfk
- kfr
- kfs
- kfx
- kfy
- khw
- kjh
- kjo
- kk
- kls
- kmr
- kn
- kok
- kpv
- kpv/documentation
- krc
- krl
- kru
- ks/Arab
- ks/Deva
- kum
- kw
- kxu
- kxv
- ky
- lae
- lbf
- lbj
- lhl
- lij
- liv
- lmo
- lrl
- lt
- luv
- lv
- mai
- mdf
- mg
- mhr
- mjl
- mk
- ml
- mnc
- mni/Mtei
- mnp
- mns-nor
- mns-nor/documentation
- mr
- mt
- mvy
- mwr
- myp
- myv
- nan-hbl
- nan-hbl/Teochew
- nap
- ne
- nes
- new
- nio
- nl
- nog
- oc
- omr/Deva
- omr/Modi
- or
- os/dig
- os/iro
- ota
- otk
- pa/Arab
- pa/Guru
- pal
- peo
- pgd
- pgg
- phl
- pi
- pl
- pms
- pox
- pra-ard
- pra-mag
- pra-mah
- pra-sau
- prx
- ps
- pt
- raj
- rau
- rif
- rji
- rmt/Aleppo
- rmt/Jerusalem
- rnp
- ro
- rom
- ru
- rue
- rup
- sa
- sah
- sbu
- sc/Logudorese
- scl
- scl/Drasi
- scn
- sd
- sdg
- se
- sgr
- sh/Cyrl
- sh/Latn
- shi
- shy
- si
- sjd
- sk
- skr
- sl
- sla-pro
- spt
- sq
- srx
- sty
- sv
- szl
- ta
- ta/documentation
- taq
- tcx
- tcy
- te
- tet
- tg
- tk
- tl
- tpi
- tr
- trk-pro
- trw
- tsg
- tt
- ttj
- ttj/documentation
- ttq
- txb
- tyv
- tzm
- udm
- ug
- uk
- ur
- urj-fin-pro
- urj-pro
- uz
- vec
- vep
- vot
- vro
- war
- wtm
- wuh
- wuu
- wuu/Suzhounese
- wuu/Wenzhounese
- xhe
- xnr
- xns
- xqa
- xsb
- yrk
- yue
- yue/Taishanese
- yue/Yangjiangnese
- zlw-mas
- zlw-ocs
- zlw-opl
- zlw-slv
- zza
local export = {}
local m_links = require("Module:links")
local m_ipa = require("Module:IPA")
local English = {
"[[I]] (<span style=\"font-variant:small-caps;\">1sg</span>)",
"[[you]] (<span style=\"font-variant:small-caps;\">2sg</span>)",
"[[he]], [[she]], [[it]] (<span style=\"font-variant:small-caps;\">3sg</span>)",
"[[we]] (<span style=\"font-variant:small-caps;\">1pl</span>)",
"[[you]] (<span style=\"font-variant:small-caps;\">2pl</span>)",
"[[they]] (<span style=\"font-variant:small-caps;\">3pl</span>)",
"[[this]]",
"[[that]]",
"[[here]]",
"[[there]]",
"[[who]]",
"[[what]]",
"[[where]]",
"[[when]]",
"[[how]]",
"[[not]]",
"[[all]]",
"[[many]]",
"[[some]]",
"[[few]]",
"[[other]]",
"[[one]]",
"[[two]]",
"[[three]]",
"[[four]]",
"[[five]]",
"[[big]]",
"[[long]]",
"[[wide]]",
"[[thick]]",
"[[heavy]]",
"[[small]]",
"[[short]]",
"[[narrow]]",
"[[thin]]",
"[[woman]]",
"[[man]] (adult male)",
"[[man]] (human being)",
"[[child]]",
"[[wife]]",
"[[husband]]",
"[[mother]]",
"[[father]]",
"[[animal]]",
"[[fish]]",
"[[bird]]",
"[[dog]]",
"[[louse]]",
"[[snake]]",
"[[worm]]",
"[[tree]]",
"[[forest]]",
"[[stick]]",
"[[fruit]]",
"[[seed]]",
"[[leaf]]",
"[[root]]",
"[[bark]] (of a tree)",
"[[flower]]",
"[[grass]]",
"[[rope]]",
"[[skin]]",
"[[meat]]",
"[[blood]]",
"[[bone]]",
"[[fat]] (noun)",
"[[egg]]",
"[[horn]]",
"[[tail]]",
"[[feather]]",
"[[hair]]",
"[[head]]",
"[[ear]]",
"[[eye]]",
"[[nose]]",
"[[mouth]]",
"[[tooth]]",
"[[tongue]] (organ)",
"[[fingernail]]",
"[[foot]]",
"[[leg]]",
"[[knee]]",
"[[hand]]",
"[[wing]]",
"[[belly]]",
"[[guts]]",
"[[neck]]",
"[[back]]",
"[[breast]]",
"[[heart]]",
"[[liver]]",
"to [[drink]]",
"to [[eat]]",
"to [[bite]]",
"to [[suck]]",
"to [[spit]]",
"to [[vomit]]",
"to [[blow]]",
"to [[breathe]]",
"to [[laugh]]",
"to [[see]]",
"to [[hear]]",
"to [[know]]",
"to [[think]]",
"to [[smell]]",
"to [[fear]]",
"to [[sleep]]",
"to [[live]]",
"to [[die]]",
"to [[kill]]",
"to [[fight]]",
"to [[hunt]]",
"to [[hit]]",
"to [[cut]]",
"to [[split]]",
"to [[stab]]",
"to [[scratch]]",
"to [[dig]]",
"to [[swim]]",
"to [[fly]]",
"to [[walk]]",
"to [[come]]",
"to [[lie]] (as in a bed)",
"to [[sit]]",
"to [[stand]]",
"to [[turn]] (intransitive)",
"to [[fall]]",
"to [[give]]",
"to [[hold]]",
"to [[squeeze]]",
"to [[rub]]",
"to [[wash]]",
"to [[wipe]]",
"to [[pull]]",
"to [[push]]",
"to [[throw]]",
"to [[tie]]",
"to [[sew]]",
"to [[count]]",
"to [[say]]",
"to [[sing]]",
"to [[play]]",
"to [[float]]",
"to [[flow]]",
"to [[freeze]]",
"to [[swell]]",
"[[sun]]",
"[[moon]]",
"[[star]]",
"[[water]]",
"[[rain]]",
"[[river]]",
"[[lake]]",
"[[sea]]",
"[[salt]]",
"[[stone]]",
"[[sand]]",
"[[dust]]",
"[[earth]]",
"[[cloud]]",
"[[fog]]",
"[[sky]]",
"[[wind]]",
"[[snow]]",
"[[ice]]",
"[[smoke]]",
"[[fire]]",
"[[ash]]",
"to [[burn]]",
"[[road]]",
"[[mountain]]",
"[[red]]",
"[[green]]",
"[[yellow]]",
"[[white]]",
"[[black]]",
"[[night]]",
"[[day]]",
"[[year]]",
"[[warm]]",
"[[cold]]",
"[[full]]",
"[[new]]",
"[[old]]",
"[[good]]",
"[[bad]]",
"[[rotten]]",
"[[dirty]]",
"[[straight]]",
"[[round]]",
"[[sharp]] (as a knife)",
"[[dull]] (as a knife)",
"[[smooth]]",
"[[wet]]",
"[[dry]]",
"[[correct]]",
"[[near]]",
"[[far]]",
"[[right]]",
"[[left]]",
"[[at]]",
"[[in]]",
"[[with]]",
"[[and]]",
"[[if]]",
"[[because]]",
"[[name]]"
}
--array - list of 207 objects in this form {gloss=term}
local data = {}
function export.python_dictionary(frame)
local args = frame:getParent().args
local dataurl = args['lang']
if args['var'] then dataurl = dataurl .. '/' .. args['var'] end
local data = require("Module:Swadesh/data/" .. dataurl)
local lang = require("Module:languages").getByCode(args.lang, "lang", "allow etym")
local res = "{'name': '" .. lang:getCanonicalName()
if data['header'] ~= nil then res = res .. ' (' .. data['header'] .. ')' end
res = res .. "',"
for word = 1, #English do
res = res .. "'" .. word .. "': ["
if data[word] ~= nil then
for _, termdata in ipairs(data[word]) do
local translit = (lang:transliterate(termdata.alt or termdata.term))
res = res .. '{'
if termdata.term then res = res .. "'term': '" .. termdata.term:gsub("'", "'") .. "', " end
if termdata.alt then res = res .. "'alt': '" .. termdata.alt:gsub("'", "'") .. "', " end
if termdata.tr or translit then res = res .. "'translit': '" .. (termdata.tr or translit):gsub("'", "'") .. "', " end
if termdata.ts then res = res .. "'transcript': '" .. termdata.ts:gsub("'", "'") .. "', " end
if termdata.id then res = res .. "'id': '" .. termdata.id:gsub("'", "'") .. "', " end
if termdata.ipa then res = res .. "'ipa': '" .. termdata.ipa:gsub("'", "'") .. "', " end
if termdata.nolink then res = res .. "'nolink': '" .. termdata.nolink:gsub("'", "'") .. "', " end
if termdata.notes then res = res .. "'notes': '" .. termdata.notes:gsub("'", "'") .. "', " end
res = res .. '},'
end
end
res = res .. "],"
end
res = res .. "}"
return "<pre>" .. require("Module:string/nowiki")(res) .. "</pre>"
end
function export.show(frame)
local parent_args = frame:getParent().args
local data = {}
local langs = {}
local res = mw.html.create("table"):addClass("wikitable sortable")
local headers = res:tag("tr")
for _, text in ipairs { "№", "English" } do
headers:tag("th"):node(text)
end
local params = {
[1] = {list = true, disallow_holes = true},
["var"] = {list = true, allow_holes = true},
["translit"] = {type = "boolean"},
["ipa"] = {type = "boolean"},
["from"] = {type = "number"},
["to"] = {type = "number"},
}
local args = require("Module:parameters").process(parent_args, params, nil, "Swadesh", "show")
local from = args.from or 1
local to = args.to or #English
for i, arg in ipairs(args[1]) do
local lang = arg
local header = arg
local lang_obj = require("Module:languages").getByCode(lang, i, "allow etym")
langs[i] = lang_obj
local var = args["var"][i]
if var then
arg = arg .. "/" .. var
end
local data_module = require("Module:Swadesh/data/" .. arg)
data[i] = data_module
local header = lang_obj:getCanonicalName()
local header_in_data = data_module["header"]
if header_in_data ~= nil and args.translit then
header = header .. " (" .. header_in_data .. ")"
end
local nativename = data_module["nativename"]
if nativename ~= nil then
header = header .. "<br><small>" .. m_links.full_link{lang = lang_obj, alt = nativename} .. "</small>"
end
local count = 0
for k, v in pairs(data_module) do
if (type(k) == "number") then count = count + 1 end
end
header = header .. "<br><small><sup>[[Module:Swadesh/data/" .. arg .. "|edit (" .. count .. ")]]</sup></small>"
headers:tag("th"):node(header)
end
local show_ipa = #args[1] < 2 and not args.translit
if show_ipa then
show_ipa = args.ipa
-- do not display IPA by default for reconstructed languages
if not show_ipa then
show_ipa = not langs[1]:hasType("reconstructed")
end
if show_ipa then
local has_ipa = false
for word = from, to do
if data[1][word] then
for _, termdata in ipairs(data[1][word]) do
if termdata.ipa then
has_ipa = true
break
end
end
end
if has_ipa then break end
end
show_ipa = has_ipa
end
if show_ipa then
local key = ""
if mw.loadData("Module:IPA/data").langs_with_infopages[langs[1]:getCode()] then
key = "<br><small>([[Appendix:" .. langs[1]:getCanonicalName() .. " pronunciation|key]])</small>"
end
headers:tag("th"):node("IPA" .. key)
end
end
for word = from, to do
local row = mw.html.create("tr")
row:tag("td"):node(word)
row:tag("td"):node(English[word])
for lang, arg in ipairs(args[1]) do
local res = ""
local count = 0
local terms = data[lang][word]
local lang_obj = langs[lang]
if terms then
for _, termdata in ipairs(terms) do
if count ~= 0 then res = res .. ", " end
local term = termdata.term
if args["translit"] then
res = res .. '<span class="swadesh-translit">'
local alt = termdata.ts or termdata.tr or (lang_obj:transliterate(termdata.alt or term)) or term
or (termdata.ipa and '<span class="IPA">' .. termdata.ipa .. "</span>")
or "?"
if not termdata.nolink and term ~= nil and term ~= "" then
res = res .. m_links.language_link{lang = lang_obj, term = term or "?",
alt = alt}
else
res = res .. alt
end
else
res = res .. '<span class="swadesh-term">'
if termdata.nolink == nil then
res = res .. m_links.full_link{lang = lang_obj, term = term, alt = termdata.alt, tr = termdata.tr, ts = termdata.ts, id = termdata.id}
else
res = res .. term
end
end
local notes = termdata.notes
if notes then
if #args[1] < 2 then res = res .. " (''<span class=\"swadesh-note\">" .. notes .. "</span>'')"
else res = res .. '<abbr title = "' .. notes .. ">*</abbr>" end
end
res = res .. "</span>"
count = count + 1
end
end
row:tag("td"):node(res)
end
if show_ipa then
local ipas = ""
local count = 0
if data[1][word] then
for _, termdata in ipairs(data[1][word]) do
if count ~= 0 then
ipas = ipas .. ", "
end
if termdata.ipa then
ipas = ipas .. '<span class="IPA">' .. termdata.ipa .. "</span>"
count = count + 1
end
end
end
row:tag("td"):node(ipas)
end
res:node(row)
end
return res;
end
return export