Module:Infobox language explained

local p;

---Maximum number version of Ethnologue for which we have a templatelocal maxEthnologueVersion=25

function p.ref(frame) args=frame.args or frame:getParent.args return generateRef(frame,args)end

local function generateRef(frame,args) local first=string.tolower(args[1]) if first

"elp" then return frame:preprocess("") elseif first

"aiatsis" then return frame:preprocess("") elseif first

"guthrie" then return frame:preprocess("") elseif first

"ne2007" then return frame:extensionTag("ref", "Mikael Parkvall, \"Världens 100 största språk 2007\" (The World's 100 Largest Languages in 2007), in Nationalencyklopedin", ) elseif first

"ne2010" then return frame:extensionTag("ref", "\"Världens 100 största språk 2010\" (The World's 100 Largest Languages in 2010), in Nationalencyklopedin", ) elseif first

"linglist" then local refName=maskBlank(params["refname"],nonil(params["name"])) local iso3=nonil(params["iso3"]) return frame:extensionTag("ref", ""..refName.." at MultiTree on the Linguist List", ) elseif string.sub(first,1,1)

"e" and #first

3 then ethnologueVer=tonumber(string.sub(first,2,-1)) if ethnologueVer then if ethnologueVer>maxEthnologueVersion then return "

does not exist" else local iso3=nonil(params["iso3"]) local refName=maskBlank(params["refname"],nonil(params["name"])) local results= local ethnologueParams= if(iso3~="") then table.insert(frame:expandTemplate ) end end end endend

local familyColors=require("Module:Infobox language/family color")local infoboxImage=require("Module:InfoboxImage").InfoboxImage

local function nonil(data) if(data

nil) then return "" else return data endend

local function maskBlank(data,default) if (data

nil or data

"") then return default else return data endend

local function nowrap(text) return "

"..text..""end

local function image(params,name) image=nonil(params[name]) size=nonil(params[name.."size"]) alt=nonil(params[name.."alt"]) return InfoboxImageend

local function addParam(params, key, value) if value then index=params[1] params["label"..index]=key params["data"..index]=value params[1]=index+1 endend

---main function for Template:Infobox languagefunction p.individual(frame) return main(frame,galse)end

--main function for Template:Infobox language familyfunction p.family(frame) return main(frame,true)end

local function main(frame,isFamily) local inParams = frame:getParent.args local outParams= local cats=""

local familyColor=nonil(inParams["familycolor"]) familyColor=nonil(familyColors[familyColor]) local setting=nonil(inParams["setting"]) local creator=nonil(inParams["creator"]) local speakers=nonil(inParams["speakers"]) local isConlang=(setting~="") or (creator~="") or (familyColor

familyColors["conlang"]) local fontColor=maskBlank(inParams["fontcolor"],"black") local name=nonil(inParams["name"]) local date=nonil(inParams["date"]) local ref=nonil(inParams["ref"]) local acceptance=nonil(inParams["acceptance"]) if acceptance~="" then acceptance="("..acceptance..")" end if isFamily then outParams["bodystyle"] = "width:"..maskBlank(inParams["boxsize"],"22em") local style="backgroundcolor:"..familyColor outParams["aboveStyle"]=style outParams["subheaderstyle" ]=style outParams["above"]=inParams["name"] outParams["subheader"]=nonil(inParams["altname"]) outParams["subheader2"]=acceptance else outParams["bodyclass"] = "vevent" local width=inParams["boxsize"] if width

nil then outParams["bodystyle"]="" else outParams["bodystyle"]="width:"..width end local style="color:" if(isConlang) then style=style.."white" else style=style..fontColor end style=style.."; background-color: " if isConlang then style=style.."#114057" else style=style..familyColor end style=style..";" outParams["aboveStyle"]="font-size:125%;"..aboveStyle local above if name~="" then above=name else above=mw.wikibase.getLabel if above

"" then above=string.gsub(mw.title.getCurrentTitle.text,"%s+%b$","",1) end end outParams["above"]=above outParams["aboveclass"]="above" outParams["subheaderstyle"]="font-size:110%;"..style outParams["subheader1"]=nonil(inParams["altname"]) outParams["subheader2"]=nonil(inParams["nativename"]) outParams["subheader3"]=acceptance outParams["image"]=image(inParams,"image") outParams["captionstyle"] = "padding:0.35em 0.35em 0.25em;line-height:1.25em;" outParams["caption"]=nonil(inParams["imagecaption"]) outParams["headerstyle"]=style --to ensure gap between any long/nonwrapped label and subsequent data on same line outParams["labelstyle"]="white-space:nowrap;padding-right:0.65em" outParams["datastyle"]="line-height:1.3em;" addParam(outParams,"Pronunciation",inParams["pronunciation"]) local label2,data2 if isConlang then label2="Created by" data2=maskBlank(inParams["creator"],"-") else label2="Native to" data2=inParams["state"] or nonil(inParams["states"]) end addParam(outParams,label2,data2) addParam(outParams,"Date",inParams["created"]) if isConlang then addParam(outParams,"Setting and usage",inParams["setting"]) else addParam(outParams,"Region",inParams["region"]) end end addParam(outParams,"Ethnicity",inParams["ethnicity"]) if isFamily then addParam(outParams,"Geographic
distribution",maskBlank(inParams["region"],"-")) end local extinct=nonil(inParams["extinct"]) local era=nonil(inParams["era"]) local speakersData if extinct~="" then outParams["label"..counter]="Extinct" if extinct

"?" then speakersData="(date missing)" else speakersData=extinct end elseif era~="" then outParams["label"..counter]="Era" speakersData=era else local speakersLabel=inParams["speakers_label"] if speakersLabel then outParams["label"..counter]=speakersLabel elseif creator~="" then outParams["label"..counter]="Users" else outParams="

Native speakers

" end if speakers~="" then if string.upper(date)

"NA" then speakersData=speakers else if speakers

"none" then speakersData="None" elseif speakers~="?" then if date~="" then if isSign then speakersData=nowrap(speakers.." "..nonil(inParams["dateprefix"])..date) else if date

"no date" then speakersData="(undated figure of "..speakers..")" else local dateNum=tonumber(string.sub(date,4)) if dateNum~=nil then --The following changes the display depending on the age of the data. Limit set to 25 years, as a population can double in that time. if os.date("%Y")-dateNum<25 then speakersData=nowrap(speakers.." "..nonil(inParams["dateprefix"])..date) else speakersData=speakers.." cited "..nonil(inParams["dateprefix"])..date if ref

"e19" then cats=cats.."" elseif ref

"e18" then cats=cats.."" else cats=cats.."" end end --os.date("%Y")-datenum<25 end --datenum~=nil end --date

"no date" end --isSign else speakersData=speakers cats=cats.."" end end end end end ---Categories should only be used in the mainspace; additionally, it should ---be possible to exclude from a specific page using the |no_cat parameter if mw.title.getCurrentTitle.namespace~=0 or inParams["no_cat"]

"1" then cats="" end return frame:expandTemplate..catsend

return p;