Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WiktionaryThe Free Dictionary
Search

Module:etymon

From Wiktionary, the free dictionary

The followingdocumentation is located atModule:etymon/documentation.[edit]
Useful links:subpage listlinkstransclusionstestcasessandbox

This module implements the template{{etymon}}.

localexport={}localfunctionmake_glossary_link(term,display_text)ifnottermthenreturndisplay_textendreturn"[[Appendix:Glossary#"..term:gsub(" ","_").."|"..display_text.."]]"endlocalfunctioncreate_keyword_entry(text,phrase,is_group,abbrev,glossary)localentry={phrase=phrase,is_group=is_grouporfalse,}ifglossarythenlocalbase_word=text:match("^(.-)%s+of")ortext:match("^(.-)%s+from")ortextlocalrest=text:sub(#base_word+1)entry.text=make_glossary_link(glossary,base_word)..restentry.glossary=glossaryelseentry.text=textendifabbrevthenentry.abbrev=abbrevendreturnentryendlocalkeywords={["from"]=create_keyword_entry("From","from",false),["uder"]=create_keyword_entry("From","from",false),["inh"]=create_keyword_entry("Inherited from","from",false,nil,"inherited"),["af"]=create_keyword_entry("From","from",true),["blend"]=create_keyword_entry("Blend of","a blend of",true,"blend","blend"),["bor"]=create_keyword_entry("Borrowed from","borrowed from",false,"bor.","loanword"),["lbor"]=create_keyword_entry("Learned borrowing from","a learned borrowing from",false,"lbor.","learned borrowing"),["obor"]=create_keyword_entry("Orthographic borrowing from","an orthographic borrowing from",false,"obor.","orthographic borrowing"),["slbor"]=create_keyword_entry("Semi-learned borrowing from","a semi-learned borrowing from",false,"slbor.","semi-learned borrowing"),["ubor"]=create_keyword_entry("Unadapted borrowing from","an unadapted borrowing from",false,"ubor.","unadapted borrowing"),["der"]=create_keyword_entry("Derived from","from",false,"der.","derived terms"),["calque"]=create_keyword_entry("Calque of","a calque of",false,"calq.","calque"),["sl"]=create_keyword_entry("Semantic loan of","a semantic loan of",false,"sl.","semantic loan"),["bf"]=create_keyword_entry("Back-formation from","a back-formation from",false,"bf.","back-formation"),["translit"]=create_keyword_entry("Transliteration of","borrowed from",false,"translit.","transliteration"),["vrd"]=create_keyword_entry("Vṛddhi derivative of","a vṛddhi derivative of",false,"vṛd.","vṛddhi derivative"),["aphetic"]=create_keyword_entry("Aphetic form of","an aphetic form of",false,"aph.","aphesis"),["influence"]=create_keyword_entry("Influenced by","influenced by",false,"influ.","contamination"),["denominal"]=create_keyword_entry("Denominal verb of","denominal verb of",false,"denom.","denominal"),}localconfig={unallowed_langs={["zh"]={ref="[[Wiktionary:Beer parlour/2025/May#Template:etymon for Chinese]]"}},colors={GREY="var(--wikt-palette-grey, #9e9e9e)",LIGHTGREY="var(--wikt-palette-lightgrey, #ccc)",BEIGE="var(--wikt-palette-beige, #fffbf2)",CYAN="var(--wikt-palette-cyan, #eaffff)",PINK="var(--wikt-palette-pink, #ffe0f0)",BLACK="var(--wikt-palette-black, #202122)"}}localstate={argsOf={},disambiguationCount={},singleEtymons={},currentPageHasInlineEtymology=false,currentPageHasRedundantEtymology=false,usedIdlessEtymon=false,topLevelHasInlineEtymology=false,topLevelRedundantEtymology=false,topLevelIdlessEtymon=false,maxDepthReached=0,totalNodes=0,languageCount={},}localLoader={}Loader.modules={anchors="Module:anchors",etydate="Module:etydate",etymology="Module:etymology",headword_data="Module:headword/data",languages="Module:languages",languages_errorgetby="Module:languages/errorGetBy",links="Module:links",pages="Module:pages",parameters="Module:parameters",parameters_data="Module:parameters/data",string_utilities="Module:string utilities",template_parser="Module:template parser",utilities="Module:utilities",debug="Module:debug",parse_utilities="Module:parse utilities",references="Module:references",}localtemplatestyles_module_name="Module:TemplateStyles"localfunctiontemplatestyles(...)templatestyles=require(templatestyles_module_name)returntemplatestyles(...)endfunctionLoader.init(self)localloaded={}localfunctionget(module_name)ifnotloaded[module_name]thenloaded[module_name]=require(self.modules[module_name])endreturnloaded[module_name]endlocalmt={}functionmt.__index(t,k)ifself.modules[k]thenlocalfunc_loader={}localfunc_mt={}functionfunc_mt.__index(t2,k2)localfunc=get(k)[k2]rawset(t2,k2,func)returnfuncendsetmetatable(func_loader,func_mt)rawset(t,k,func_loader)returnfunc_loaderendendreturnsetmetatable({},mt)endlocalM=Loader:init()localUtil={}functionUtil.get_lang(code,no_error)ifno_errorthenreturnM.languages.getByCode(code,nil,true)endreturnM.languages.getByCode(code,nil,true)orM.languages_errorgetby.code(code,true,true)endfunctionUtil.get_norm_lang(lang)iflang:inFamily("zhx")andnotlang:inFamily("qfa-cnt")thenreturnM.languages.getByCode("zh")endreturnlangendfunctionUtil.make_link(params)ifparams.lang:getCode()=="zh"thenparams.tr=""endreturnM.links.full_link(params,"term")endlocalis_content_page_cachedfunctionUtil.is_content_page()ifis_content_page_cached==nilthenis_content_page_cached=M.pages.is_content_page(mw.title.getCurrentTitle())endreturnis_content_page_cachedendlocalpage_data_cachedfunctionUtil.get_page_data()ifnotpage_data_cachedthenpage_data_cached=mw.loadData(Loader.modules.headword_data).pageendreturnpage_data_cachedendlocalfunctionparse_etymon_references(refs_text)ifnotrefs_textorrefs_text==""thenreturn""endreturnM.references.parse_references(refs_text)endlocalfunctionparse_tree_references(node)ifnode.refthennode.parsed_ref=parse_etymon_references(node.ref)endifnode.childrenthenfor_,childinipairs(node.children)doparse_tree_references(child)endendendlocalfunctionis_keyword(param,allow_colon_less)ifparam:sub(1,1)==":"thenlocalkeyword=param:sub(2)returnkeywords[keyword]orkeyword=="afeq"orkeyword=="root"orkeyword=="conf"endifallow_colon_lessthenreturnkeywords[param]orparam=="afeq"orparam=="root"orparam=="conf"endreturnfalseendlocalfunctionget_keyword(param,allow_colon_less)ifparam:sub(1,1)==":"thenreturnparam:sub(2)endifallow_colon_lessand(keywords[param]orparam=="afeq"orparam=="root"orparam=="conf")thenreturnparamendreturnnilendlocalDataRetriever={}localetymon_param_mods={id={},t={},tr={},ts={},pos={},alt={},ety={},unc={type="boolean"},ref={},}functionDataRetriever.try_parse_etymon(param,contextLang)ifis_keyword(param)thenreturnnilendlocallang,restlocallang_code,rest_match=param:match("^([a-zA-Z.%-]+):(.*)$")iflang_codethenlang=Util.get_lang(lang_code,false)ifnotlangthenreturnnilendrest=rest_matchelselang=contextLangrest=paramendifnotrest:find("<",1,true)thenreturn{lang=lang,term=M.string_utilities.trim(rest)}endlocalterm_text=rest:match("^(.-)<")orrestlocalfunctiongenerate_obj(ignored_term)return{term=M.string_utilities.trim(term_text)}endlocalparsed_obj=M.parse_utilities.parse_inline_modifiers(rest,{param_mods=etymon_param_mods,generate_obj=generate_obj})ifparsed_obj.idandparsed_obj.id:match("^!")thenparsed_obj.id=parsed_obj.id:sub(2)parsed_obj.override=trueendparsed_obj.lang=langreturnparsed_objendfunctionDataRetriever.scrape_page(etymonPage,etymonTitle,key,etymonLang,etymonId,redirectedFrom)localcontent=etymonTitle:getContent()ifnotcontentthenstate.argsOf[key]="redlink"returnendlocalredirectTarget=etymonTitle.redirectTargetifnotredirectTargetthencontent=M.pages.get_section(content,etymonLang:getFullName(),2)ifnotcontentthenstate.argsOf[key]="missing"returnendendlocaletymonLangcode=etymonLang:getFullCode()localL2_key=etymonLangcode..":"..etymonPagelocalfound_templates_for_lang={}localfound_ids={}fortemplateinM.template_parser.find_templates(content)doiftemplate:get_name()=="etymon"thenlocaltemplateArgs=template:get_arguments()iftemplateArgs[1]==etymonLangcodetheniftemplateArgs.idthenstate.argsOf[L2_key..":"..templateArgs.id]=templateArgstable.insert(found_ids,templateArgs.id)endtable.insert(found_templates_for_lang,templateArgs)endendendstate.disambiguationCount[L2_key]=found_idsif#found_templates_for_lang==1thenstate.singleEtymons[L2_key]=found_templates_for_lang[1]endifredirectedFromandstate.disambiguationCount[L2_key]thenstate.disambiguationCount[redirectedFrom]=state.disambiguationCount[redirectedFrom]or{}for_,idinipairs(state.disambiguationCount[L2_key])dotable.insert(state.disambiguationCount[redirectedFrom],id)endendifstate.argsOf[key]thenreturnelseifredirectedFromornotredirectTargetthenstate.argsOf[key]="missing"returnendetymonPage=redirectTarget.prefixedTextDataRetriever.scrape_page(etymonPage,redirectTarget,L2_key..":"..etymonId,etymonLang,etymonId,L2_key)state.argsOf[key]=state.argsOf[etymonLangcode..":"..etymonPage..":"..etymonId]endfunctionDataRetriever.get_args(etymon_data,isTopLevel)ifetymon_data.id=="?"thenreturn"nolink"endlocalpage=M.links.get_link_page(etymon_data.term,etymon_data.lang)localnormLang=Util.get_norm_lang(etymon_data.lang)ifetymon_data.idthenlocalkey=normLang:getFullCode()..":"..page..":"..etymon_data.idifstate.argsOf[key]==nilthenlocaltitle=mw.title.new(page)ifnottitlethenerror('Invalid page title "'..page..'" encountered.')endDataRetriever.scrape_page(page,title,key,normLang,etymon_data.id)endreturnstate.argsOf[key]elsestate.usedIdlessEtymon=trueifisTopLevelthenstate.topLevelIdlessEtymon=trueendlocalbase_key=normLang:getFullCode()..":"..pageifstate.disambiguationCount[base_key]==nilthenlocaltitle=mw.title.new(page)ifnottitlethenerror('Invalid page title "'..page..'" encountered.')endDataRetriever.scrape_page(page,title,base_key..":",normLang,nil)endlocalids=state.disambiguationCount[base_key]or{}localcount=#idsifcount==1thenreturnstate.singleEtymons[base_key]elseifcount>1thenlocalid_list={}for_,idinipairs(ids)doifidandid~=""thentable.insert(id_list,"\""..id.."\"")endendlocalsuggestion_text=""if#id_list>0thensuggestion_text=" Available IDs: "..table.concat(id_list,", ").."."enderror("Etymology link to '[["..page.."]]' is ambiguous. The page has "..count.." etymon templates for "..normLang:getCanonicalName()..". Please specify an ID."..suggestion_text)elsereturn"missing"endendendfunctionDataRetriever.build_data_tree(lang,title,args,seen,depth)seen=seenor{}depth=depthor0localisTopLevel=(depth==0)ifdepth>state.maxDepthReachedthenstate.maxDepthReached=depthendstate.totalNodes=state.totalNodes+1locallangCode=lang:getCode()state.languageCount[langCode]=(state.languageCount[langCode]or0)+1localcurrId=(type(args)=="table"andargs.id)or""localkey=Util.get_norm_lang(lang):getFullCode()..":"..M.links.get_link_page(title,lang)..":"..currIdlocalnode={lang=lang,title=title,id=currId,args=args,children={},status="ok"}iftype(args)~="table"orseen[key]thennode.status=argsor"missing"returnnodeendseen[key]=truelocalderType,confidence,ignoreEtymons="from","conf",falsefori=2,#argsdolocalparam=args[i]ifis_keyword(param)thenlocalkeyword=get_keyword(param)ifkeyword=="conf"thenconfidence=keywordelsederType=keywordconfidence="conf"ignoreEtymons=(keyword=="afeq")endelseifparam:sub(1,1)==":"thenerror("Invalid keyword '"..param.."'. Did you mean a valid keyword like ':bor', ':inh', etc.?")elselocaletymon_data=DataRetriever.try_parse_etymon(param,lang)ifetymon_dataandnotignoreEtymonsthenlocaletymonArgs=DataRetriever.get_args(etymon_data,isTopLevel)ifetymon_data.etythenifetymonArgs=="redlink"oretymonArgs=="missing"thenstate.currentPageHasInlineEtymology=trueifisTopLevelthenstate.topLevelHasInlineEtymology=trueendlocalety_string=etymon_data.etylocalsegments=M.parse_utilities.parse_balanced_segment_run(ety_string,"<",">")localkeyword=M.string_utilities.trim(segments[1])ifnotis_keyword(keyword,true)thenerror("Invalid keyword '"..keyword.."' in inline etymology <ety:"..keyword..">")endlocalinline_params={}forj=2,#segments,2dolocalparent_wrapper=segments[j]ifparent_wrapperandparent_wrapper~=""thentable.insert(inline_params,parent_wrapper:sub(2,-2))endendetymonArgs={etymon_data.lang:getCode()}table.insert(etymonArgs,":"..keyword)for_,pinipairs(inline_params)dotable.insert(etymonArgs,p)endetymonArgs.id=etymon_data.idelsestate.currentPageHasRedundantEtymology=trueifisTopLevelthenstate.topLevelRedundantEtymology=trueendendendlocalchildNode=DataRetriever.build_data_tree(etymon_data.lang,etymon_data.term,etymonArgs,seen,depth+1)childNode.target_key=Util.get_norm_lang(etymon_data.lang):getFullCode()..":"..M.links.get_link_page(etymon_data.term,etymon_data.lang)childNode.id=etymon_data.idchildNode.t=etymon_data.tchildNode.tr=etymon_data.trchildNode.ts=etymon_data.tschildNode.pos=etymon_data.poschildNode.alt=etymon_data.altchildNode.ref=etymon_data.refchildNode.derType=derTypechildNode.is_uncertain=etymon_data.uncchildNode.override=etymon_data.overridetable.insert(node.children,childNode)endendendreturnnodeendlocalValidator={}functionValidator.run(lang,params,id,title,pos)ifidthenifmw.ustring.len(id)<2thenerror("The `id` parameter must have at least two characters.")endifid==titleorid==Util.get_page_data().pagenamethenerror("The `id` parameter must not be the same as the page title.")endendifposandnot(" prefix suffix interfix infix root "):find(" "..pos.." ")thenerror("Unknown value provided for `pos`.")endlocalcurrentKeyword="from"localetymonsInGroup={}localfunctioncheckGroup()ifkeywords[currentKeyword]andkeywords[currentKeyword].is_groupandcurrentKeyword~='af'and#etymonsInGroup<=1thenerror("Detected `:"..currentKeyword.."` group with fewer than two etymons.")endetymonsInGroup={}endfor_,paraminipairs(params)doifparam:sub(1,1)==":"andnotis_keyword(param)thenerror("Invalid keyword '"..param.."'. Did you mean a valid keyword like ':bor', ':inh', etc.?")endifis_keyword(param)thenifget_keyword(param)~="conf"thencheckGroup()currentKeyword=get_keyword(param)endelselocaletymon_data=DataRetriever.try_parse_etymon(param,lang)ifetymon_datathentable.insert(etymonsInGroup,param)localparamLang=etymon_data.langifcurrentKeyword=="from"andparamLang:getFullCode()~=lang:getFullCode()thenerror("`:from` is for same-language derivation, but language does not match.")elseifcurrentKeyword=="inh"thenM.etymology.check_ancestor(lang,paramLang)endelsetable.insert(etymonsInGroup,param)endendendcheckGroup()endlocalfunctiontrack_ranges(track_func,base_key,value,ranges,langCode)track_func("etymon/"..base_key.."/"..value)iflangCodethentrack_func("etymon/lang/"..langCode.."/"..base_key.."/"..value)endfor_,rangeinipairs(ranges)dolocalmatches=falseifrange.minandrange.maxthenmatches=value>=range.minandvalue<=range.maxelseifrange.minthenmatches=value>=range.minelseifrange.maxthenmatches=value<=range.maxelseifrange.exactthenmatches=value==range.exactendifmatchesthentrack_func("etymon/"..base_key.."/"..range.label)iflangCodethentrack_func("etymon/lang/"..langCode.."/"..base_key.."/"..range.label)endbreakendendendfunctionexport.main(frame)localparentArgs=frame:getParent().argslocalallArgs=M.parameters.process(parentArgs,mw.loadData(Loader.modules.parameters_data).etymon)locallang,id,title,text,tree,exnihilo,etydate,pos,args=allArgs[1],allArgs.id,allArgs.title,allArgs.text,allArgs.tree,allArgs.exnihilo,allArgs.etydate,allArgs.pos,allArgs[2]ifnottitlethenlocalpdata=Util.get_page_data()title=pdata.pagenameifpdata.namespace=="Reconstruction"thentitle="*"..titleendendValidator.run(lang,args,id,title,pos)table.insert(args,1,lang:getCode());args.id=idstate.argsOf[lang:getCode()..":"..title..":"..(idor"")]=argslocaletyDataTree=DataRetriever.build_data_tree(lang,title,args)parse_tree_references(etyDataTree)localoutput={}table.insert(output,tostring(mw.html.create("li"):attr("id",M.anchors.language_anchor(lang,id)):attr("class","etymonid"):attr("data-lang",lang:getCode()):attr("data-id",idor""):css("list-style","none"):allDone()))localdisallowed=config.unallowed_langs[lang:getCode()]ifdisallowedthenlocalerror_text=" for "..lang:getFullName()ifdisallowed["ref"]thenerror_text=error_text.."; see "..disallowed["ref"]elseerror_text=error_text.."."endiftreethenerror("Etymology trees are not allowed"..error_text)endiftextthenerror("Etymology texts are not allowed"..error_text)endendifetydatethenlocaletydate_param_mods={ref={list=true,type="references",allow_holes=true},refn={list=true,allow_holes=true},nocap={type="boolean"},}localfunctiongenerate_etydate_obj(etydate_text)localetydate_specs={}forspecinetydate_text:gmatch("[^,]+")dotable.insert(etydate_specs,mw.text.trim(spec))endreturn{[1]=etydate_specs}endlocalparsed_etydate=M.parse_utilities.parse_inline_modifiers(etydate,{param_mods=etydate_param_mods,generate_obj=generate_etydate_obj})localetydate_args={[1]=parsed_etydate[1],nocap=parsed_etydate.nocaporfalse,ref=parsed_etydate.refor{},refn=parsed_etydate.refnor{maxindex=0}}ifetydate_args.refnthenlocalmax=0fork,vinpairs(etydate_args.refn)doiftype(k)=="number"andk>maxthenmax=kendendetydate_args.refn.maxindex=maxendetyDataTree.etydate=M.etydate.format_etydate(etydate_args)endiftreethenlocaltree_renderer=require('Module:etymon/tree')table.insert(output,templatestyles("Module:etymon/styles.css"))table.insert(output,tree_renderer.render(etyDataTree,config,keywords,Util.make_link))endiftextthenlocaltext_renderer=require('Module:etymon/text')localusePlus,maxDepthiftext=="++"thenusePlus,maxDepth=true,falseelseiftext=="+"thenusePlus,maxDepth=true,1elseiftext=="-"thenusePlus,maxDepth=false,1elseusePlus,maxDepth=false,falseendtable.insert(output,text_renderer.render(etyDataTree,keywords,Util.make_link,usePlus,maxDepth))endifUtil.is_content_page()andstate.maxDepthReached>0thenlocaltrack=require("Module:debug/track")locallangCode=lang:getCode()localdepth_ranges={{min=50,label="extremely-deep"},{min=20,label="20+"},{min=10,max=19,label="10-19"},{min=5,max=9,label="5-9"},{min=3,max=4,label="3-4"},{max=2,label="1-2"}}localnode_ranges={{min=100,label="extremely-large"},{min=50,label="50+"},{min=20,max=49,label="20-49"},{min=10,max=19,label="10-19"},{min=5,max=9,label="5-9"},{max=4,label="1-4"}}locallanguage_ranges={{min=10,label="10+"},{min=5,max=9,label="5-9"},{min=3,max=4,label="3-4"},{exact=2,label="2"},{exact=1,label="1"}}track_ranges(track,"depth",state.maxDepthReached,depth_ranges,langCode)track_ranges(track,"nodes",state.totalNodes,node_ranges,langCode)localuniqueLanguages=0for_inpairs(state.languageCount)douniqueLanguages=uniqueLanguages+1endtrack_ranges(track,"unique-languages",uniqueLanguages,language_ranges,langCode)ifstate.totalNodes==state.maxDepthReached+1thentrack_ranges(track,"linear-depth",state.maxDepthReached,depth_ranges,langCode)endendlocalcategories={}ifUtil.is_content_page()thenlocalcategory_renderer=require('Module:etymon/categories')categories=category_renderer.render(lang,etyDataTree,state.disambiguationCount,Util.get_norm_lang)iftreethentable.insert(categories,"Pages with etymology trees")table.insert(categories,lang:getCanonicalName().." entries with etymology trees")endiftextthentable.insert(categories,lang:getCanonicalName().." entries with etymology texts")endifexnihilothentable.insert(categories,lang:getCanonicalName().." terms coined ex nihilo")endifstate.topLevelHasInlineEtymologythentable.insert(categories,"Pages with inline etymon for redlinks")endifstate.topLevelRedundantEtymologythentable.insert(categories,"Pages with redundant inline etymon")endifstate.topLevelIdlessEtymonthentable.insert(categories,"Pages using etymon with no ID")endendif#categories>0andlang:getCode()~="zh"thentable.insert(output,M.utilities.format_categories(categories,lang))endreturntable.concat(output)endreturnexport
Retrieved from "https://en.wiktionary.org/w/index.php?title=Module:etymon&oldid=87614065"
Category:

[8]ページ先頭

©2009-2025 Movatter.jp