위키낱말사전 kowiktionary https://ko.wiktionary.org/wiki/%EC%9C%84%ED%82%A4%EB%82%B1%EB%A7%90%EC%82%AC%EC%A0%84:%EB%8C%80%EB%AC%B8 MediaWiki 1.47.0-wmf.3 case-sensitive 미디어 특수 토론 사용자 사용자토론 위키낱말사전 위키낱말사전토론 파일 파일토론 미디어위키 미디어위키토론 틀토론 도움말 도움말토론 분류 분류토론 부록 부록 토론 TimedText TimedText talk 모듈 모듈토론 행사 행사토론 0 1147 4484145 4145326 2026-05-23T21:37:27Z Jeebeen 13056 /* 명사 2 */ 4484145 wikitext text/x-wiki == 한국어 == {{발음 듣기|Ko-눈.ogg}} {{ko-IPA}} === 명사 === ==== 명사 1 ==== [[파일:Eyesection.svg|섬네일|180픽셀|눈의 구조]] # 무엇을 보는 기능을 하는 몸의 감각 기관. :* '''눈'''을 똑바로 뜨고 글을 써라. :* '''눈'''을 두었다 어디에 쓰려고 하니? :* '''눈'''이 어둡다. *동사: [[눈감다]], [[눈뜨다]], [[눈멀다]], [[눈여기다]] *형용사: [[눈꼴틀리다]], [[눈꼴사납다]], [[눈꼴시다]], [[눈부시다]] ===== 관련 어휘 ===== *파생어: [[겹눈]], [[눈매]], [[눈치레]], [[맨눈]], [[실눈]], [[외눈]], [[짝눈]], [[홑눈]] {{합성어 상자|눈가|눈가죽|눈깔|눈꺼풀|눈꼬리|눈꼴|눈꼽|눈구멍|눈길|눈대중|눈동자|눈두덩|눈망울|눈맵시|눈모|눈물|눈병|눈부처|눈비음|눈웃음|눈빛|눈썰미|눈썹|눈시울|눈알|눈앞|눈언저리|눈요기|눈인사|눈자위|눈짓|눈초리|눈총|눈코|눈화장}} {{합성어 상자|가자미눈|갈고리눈|개구리눈|까막눈|거적눈|곁눈|길눈|나비눈|낚시눈|딱부리눈|도끼눈|독사눈|동태눈|두꺼비눈|머루눈|반달눈|방울눈|뱀눈|뱁새눈|봉의눈|붕어눈|사팔눈|샛눈|송곳눈|애꾸눈|옆눈|옴팡눈|움펑눈|옹이눈|자웅눈|족제비눈|좁쌀눈|쥐눈|찔꺽눈|첫눈|퉁방울눈|한눈}} {{외국어| * 갈리시아어(gl): [[ollo]] * 고대 교회 슬라브어(cu): [[око]](키릴)/[[ⰑⰍⰑ]](글라골 문자)(oko) * 고대 노르드어(non): [[øgha]](동부 방언), [[auga]](서부 방언) * 고대 아일랜드어(sga): [[súil]] * 고대 영어(ang): [[eage|ēaġe]] * 구자라트어(gu): [[આંખ]] * 과라니어(gn): [[resa]], [[tesa]] * 그리스어(el): * 그린란드어(kl): [[isi]] * 남부알타이어(alt): [[кӧс]] * 네네츠어(yrk): [[сэв]] * 네덜란드어(nl): [[oog]], [[kijker]] * 노가이어(nog): [[коьз]] * 노르웨이어(no): [[øye]] * 덴마크어(da): [[øje]] * 독일어(de): [[Auge]] * 돌간어(dlg): [[карак]] * 라오어(lo): [[ຕາ]](taa) * 라틴어(la): [[oculus]] * 러시아어(ru): [[глаз]](glaz) * 로마니어(rom): [[jakh]] * 로힝야어(rhm): [[suk]] * 루마니아어(ro): [[ochi]] * 루신어(rue): [[око]] * 루야어(luy): [[chimoni]], [[emoni]] * 루툴어(rut): [[ул]] * 리보니아어(fiu-liv): [[sīlma]] * 리투아니아어(lt): [[akis]] * 마라티어(mr): [[डोळा]](dolā), [[नयन]](nayan) * 마리어(chm): [[шинча]] * 마오리어(mi): [[mata]] * 마케도니아어(mk): [[око]](óko) * 마푸체어(arn): [[nge]] * 만딩카어(mnk): [[ñaa]] * 말라얄람어(ml): [[കണ്ണ്]](kaNNu), [[നേത്രം]](nethram) * 말레이어(ms): [[mata]] * 맨어(gv): [[sooill]] * 몰타어(mt): [[għajn]] * 몽골어(mn): [[нүд]] * 미얀마어(my): [[မျက်စိ]](myetsi.) * 바스크어(eu): [[begi]] * 발루치어(bal): [[چھم]], [[چم]] * 베네토어(vec): [[ocio]] * 벨라루스어(be): [[вока]] * 벱스어(vep): [[sil'm]] * 보스니아어(bs): [[oko]] * 보트어(fiu-vot): [[silmä]] * 북부사미어(se): [[čalbmi]] * 불가리아어(bg): [[око]](oko) * 브르타뉴어(br): [[lagad]] * 사모기트어(bat-smg): [[akis]] * 샨어(shn): [[တႃ]](tǎa) * 산스크리트어(sa): [[अक्षि]](ákṣi), [[नेत्र]](netra), [[नयनम]](nayana) * 산탈어(sat): [[ᱢᱮᱫ]](met') * 상소르브어(hsb): [[woko]] * 세르비아어(sr): [[око]](키릴)/[[oko]](라틴) * 서프리지아어(fy): [[each]] * 소토어(st): [[leihlo]] * 수메르어(sux): [[𒅆]](IGI) * 순다어(su): [[panon]] * 스와힐리어(sw): [[jicho]] * 스웨덴어(sv): [[öga]] * 스코틀랜드 게일어(gd): [[sùil]] * 스페인어(es): [[ojo]] * 슬로바키아어(sk): [[oko]] * 슬로베니아어(sl): [[oko]] * 시칠리아어(scn): [[occhiu]] * 아라곤어(an): [[güello]] * 아람어(arc): [[ܥܝܢܐ]](시리아)/[[עינא]](히브리 문자)(ʕaynā’) * 아랍어(ar): [[عين|عَين]](ʕain) * 아르메니아어(hy): [[աչք]](ačk’), (고대); [[ակն]](akn) * 아르치어(aqc): [[лур‎]](lur) * 아미어(ami): [[mata]] * 아이누어(ain): [[シク]](sik) * 비슬라마(bi): [[ae]] | * 아이슬란드어(is): [[auga]] * 아일랜드어(ga): [[súil]] * 아제르바이잔어(az): [[göz]] * 아카드어(akk): [[𒅆]](īnu) * 아프리칸스어(af): [[oog]] * 알루토르어(alr): [[лылялгын]] * 알류트어(ale): [[dax̂]] * 알바니아어(sq): [[sy]] * 암하라어(am): [[ዐይን]](ayn), [[አይን]] * 야쿠트어(sah): [[харах]] * 에르자어(myv): [[сельме]](selme) * 에블라이트어(xeb): [[𒀀𒈾𒈾]](anana) * 에스토니아어(et): [[silm]] * 에스페란토(eo): [[okulo]] * 영어(en): [[eye]] * 오로첸어(orh): [[yɛ:ʃa]] * 오크어(oc): [[uèlh]] * 우가리트어(uga): [[𐎀𐎐]](ʿn) * 우르두어(ur): [[آنکھ]](ā.nkh), [[نین]](nayan) * 우크라이나어(uk): [[око]](óko) * 웨일스어(cy): [[llygad]] * 위구르어(ug): [[كۆز]](köz) * 응가나산어(nio): [[сеймы]] * 이그보어(ig): [[anya]] * 이누이트어(iu): [[ᐃᔨ]](이누이트 문자)/[[iji]](라틴), (이누피아크어); [[iri]] * 이도(io): [[okulo]] * 이디시어(yi): [[אױג]](oyg) * 이탈리아어(it): [[occhio]] * 인도네시아어(id): [[mata]] * 인터링구아(ia): [[oculo]] * 일로카노어(ilo): [[mata]] * 일본어(ja): {{lang|ja|[[目]]([[め]])}}(me) * 자와어(jv): [[mata]] * 조지아어(ka): [[თვალი]](t'vali) * 중국어(zh): [[眼睛]](yǎnjīng) * 차미쿠로어(ccc): [[ojki]] * 체로키어(chr): [[ᎠᎦᏙᎵ]](agadoli) * 체코어(cs): [[oko]] * 축치어(ckt): [[лылялгын]] * 카슈미르어(ks): [[کن]](kan) * 카자흐어(kk): [[көз]] * 카탈루냐어(ca): [[ull]] * 칸나다어(kn): [[ಕಣ್ಣು]](kaṇṇu) * 칼렌진어(kln): [[konyak]] * 칼미크어(xal): [[нүдн]] * 케추아어(qu): [[ñawi]] * 코랴크어(kpy): [[лылалӈын]] * 콥트어(cop): [[ⲉⲓⲁ]](eia), [[ⲃⲁⲗ]](bal) * 쿠르드어(ku): [[چاو]] * 크로아티아어(hr): [[oko]] * 키르기스어(ky): [[көз]] * 키리바시어(gil): [[mata]] * 키쿠유어(ki): [[maitho]] * 타갈로그어(tl): [[mata]] * 타로코어(trv): [[dowriq]] * 타오스어(twf): [[cínemą]] * 타이어(th): [[ตา]](taa) * 타지크어(tg): [[чашм]](čašm) * 텔루구어(te): [[కన్ను]](kannu), [[నేత్రం]](netram) * 터키어(tr): [[göz]] * 톡피신(tpi): [[ai]] * 통가어(to): [[mata]] * 투피남바어(tpn): [[esá]] (t-) * 티베트어(bo): [[མིག་]](mig), [[སྤྱན་]](spyan) * 파이완어(pwn): [[maca]] * 페니키아어(phn): [[𐤀𐤍]](ʕn), [[𐤍𐤉𐤀]](ʕyn) * 페로어(fo): [[eyga]] * 페르시아어(fa): [[چشم]](čašm) * 포르투갈어(pt): [[olho]] (남성) * 폴란드어(pl): [[oko]] * 프랑스어(fr): [[œil]] (복수: [[yeux]]) * 핀란드어(fi): [[silmä]] * 하소르브어(dsb): [[woko]] * 하와이어(haw): [[maka]] * 헝가리어(hu): [[szem]] * 히브리어(he): [[עין|עַיִן]](ʕayin) * 힌디어(hi): [[आँख]](ā.nkh), [[नयन]](nayan) }} # '[[시력]]'. *합성어: [[밤눈]] {{보기|시력}} # 사람들의 눈길. {{외국어| * 영어(en): * 일본어(ja): {{lang|ja| }} | * 중국어(zh): * 프랑스어(fr): }} ==== 명사 ==== [[파일:LhotseMountain.jos.500pix.jpg|섬네일|200픽셀|{{l|ko|설산(雪山)}}]] {{한국어 명사}} # {{senseid|ko|Q7561}} 지표면이나 해상에서 증발된 물이 기후의 변화에 따라 응고되어 하늘에서 내리는 것. #: {{ux|ko|지난 겨울에는 '''눈'''이 많이 내렸다.}} #: {{ux|ko|문밖에 '''눈'''을 치우다.}} #: {{ux|ko|아, 아버지가 '''눈'''을 헤치고 따 오신 {{따옴|김종길,(성탄제)}}}} ===== 파생어 ===== {{col|ko|눈발|눈가루|눈기운|눈길|눈덩이|눈물|눈바람|눈밭|눈벌판|눈보라|눈비|눈사람|눈사태|눈싸움|눈산|눈송이|눈얼음|눈웅덩이|눈집|가랑눈|가루눈|도둑눈|도적눈|마른눈|싸라기눈|숫눈|얼음눈|자국눈|함박눈}} ===== 번역 ===== {{외국어| * 가가우스어(gag): [[kaar]] * 갈리시아어(gl): [[neve]] (여성) * 고대 교회 슬라브어(cu): [[снѣгъ]](sněgŭ) (남성) * 고트어(got): [[snaiws]] * 구자라트어(gu): [[બરફ]](barpʰ) * 과라니어(gn): [[yrypy’a]] * 그리스어(el): (고대); [[χιών]](khion) (여성), (현대); [[χιόνι]](khióni) (중성) * 그린란드어(kl): [[aput]] * 나나이어(gld): [[симата]]; [[симана]] * 나바호어(nv): [[zas]] * 나와틀어(nah): [[cehpayahuitl]] * 나폴리어(nap): [[néva]] * 남소토어(sot): [[lehlwa]] * 네네츠어(yrk): [[сыра]]; [[идебя]]; [[хаб’луй]]; [[иӈгаем’]]; [[хав’]]; [[нара]]; [[сырад]]; [[маромбэй]] * 네덜란드어(nl): [[sneeuw]] (남성) * 네팔어(ne): [[हिउँ]] * 노르웨이어(no): [[snø]] (남성), [[sne]] (남성) * 노비알(nov): [[nive]] * 다르긴어(dar): [[дяхӀи]] * 다리어(prs): [[برف]](barf) * 덴마크어(da): [[sne]] * 독일어(de): [[Schnee]] (남성) * 돌간어(dlg): [[каар]] * 디베히어(dv): [[ސްނޯ]](snō) * 라디노어(lad): [[inyeve]](라틴)/[[אינייב'י]](히브리 문자), [[naiv]] * 라오어(lo): [[ຫິມະ]](hima) * 라크어(lbe): [[марххала]] * 라트비아어(lv): [[sniegs]] (남성) * 라틴어(la): [[nix]] (여성) * 레즈긴어(lez): [[жив]] * 러시아어(ru): [[снег]](sneg) (남성) * 로망슈어(rm): [[naiv]] * 로지반(jbo): [[carvi]] [[snime]]([[tanru]]) * 롬바르드어(lmo): [[neu]] * 루마니아어(ro): [[zăpadă]] (여성), [[nea]] (여성), [[omăt]] (중성) * 룩셈부르크어(lb): [[Schnéi]] * 리투아니아어(lt): [[sniegas]] (남성) * 림뷔르흐어(li): [[snieë]]; [[sjnie]] * 마라티어(mr): [[बर्फ]](barpʰ) * 마리어(chm): [[лум]] * 마사이어(mas): [[isoitok lenjan]] * 마오리어(mi): [[hukarere]]; [[huka]] * 마케도니아어(mk): [[снег]](sneg) (남성) * 마푸체어(arn): [[ñapüz]] * 말라가시어(mg): [[oram-panala]] * 말라얄람어(ml): [[ഹിമം]], [[മഞ്ഞ്]](maññ) * 말레이어(ms): [[salji]], [[salju]] * 맨어(gv): [[sniaghtey]] * 모크샤어(mdf): [[лов]] * 몰도바어(mo): [[зэпадэ]]; [[ня]] * 몰타어(mt): [[silġ]] * 몽골어(mn): [[цас]] * 밍그렐리야어(xmf): [[თირი]] * 바슈키르어(ba): [[ҡар]] * 바스크어(eu): [[elur]] * 베트남어(vi): [[tuyết]] * 벨라루스어(be): [[снег]]; [[сьнег]](타라셴카) (남성) * 벱스어(vep): [[lumi]] * 벵골어(bn): [[বরফ]](baraph) * 보로어(fiu-vro): [[lumi]] * 보스니아어(bs): [[snijeg]] (남성) * 볼라퓌크(vo): [[nif]] * 부랴트어(bua): [[саһан]] * 북부사미어(se): [[muohta]] * 불가리아어(bg): [[сняг]](snjag) (남성) * 브르타뉴어(br): [[erc'h]] (남성) * 사르데냐어(sc): [[ni]] * 사모기트어(bat-smg): [[snėigs]] * 사모아어(sm): [[kiona]] * 산스크리트어(sa): [[हिमः]](himaḥ) * 상소르브어(hsb): [[sněh]] * 산탈어(sat): [[ᱦᱤᱢ]](him) * 세르보크로아트어(sh): [[снијег|сније̑г]](키릴)/[[snijeg|snijȇg]](라틴) (남성), [[снег|сне̑г]](키릴)/[[sneg|snȇg]](라틴) (남성), (차카비아/이카비아 방언); [[snig]] (남성) * 세르비아어(sr): [[снег]](키릴)/[[sneg]](라틴) (남성) * 셰르파어(xsr): [[खा]](kʰā) * 서프리지아어(fy): [[snie]] * 소토어(st): [[lehlwa]] * 쇼르어(cjs): [[текпер]]; [[қар]] * 순다어(su): [[salju]] * 스와힐리어(sw): [[theluji]] * 스웨덴어(sv): [[snö]] * 스코트어(sco): [[snaw]] * 스코틀랜드 게일어(gd): [[sneachda]] (남성), [[sneachd]] (남성) * 스페인어(es): [[nieve]] (여성) * 슬로바키아어(sk): [[sneh]] (남성) * 슬로베니아어(sl): [[sneg]] (남성) * 시칠리아어(scn): [[nivi]] (여성) * 신드어(sd): [[برف]](barfa) * 실레지아어(szl): [[śniyg]] (남성) ([[śńyg]]) * 아라곤어(an): [[nieu]] * 아디게이어(ady): [[осы]] * 아라곤어(an): [[neu]] (여성); [[nieu]] * 아람어(arc): [[ܬܠܓܐ]](시리아)/[[תלגא]](히브리 문자)(talgā’) (남성) * 아랍어(ar): [[ثلج]](θalj) (남성) * 아로마니아어(rup): [[neao]] * 아르메니아어(hy): [[ձյուն]](jyun), (고대); [[ձիւն]](jiwn) * 아바르어(av): [[гӀазу]] * 아바자어(abq): [[сы]] * 아삼어(asm): [[বৰফ]](bôrôpʰ) * 아스투리아스어(ast): [[ñeve]] * 아이누어(ain): [[upas]](라틴)/[[ウパス]](가타카나) * 아이마라어(ay): [[khunu]] * 아이슬란드어(is): [[snjór]] (남성), [[snær]] (남성), [[fönn]] (여성) * 아이티크레올어(ht): [[lanèj]] * 아일랜드어(ga): [[sneachta]] (남성) * 아제르바이잔어(az): [[qar]] * 아프리칸스어(af): [[sneeu]] * 알루토르어(alr): [[г'ылг'ыл]] * 알류트어(ale): [[qaniigix]] * 알바니아어(sq): [[borë]] (여성) * 알타이어(alt): [[кар]]; [[чарак]] * 암하라어(am): [[የበረዶ ብናኝ]](yäbärädo bnany) * 압하스어(ab): [[асы]] * 앨라배마어(akz): [[hipli]] * 야쿠트어(sah): [[хаар]] * 에르자어(myv): [[лов]] * 에벤어(eve): [[еманра]] * 에벤키어(evn): [[сиӈилгэн]]; [[иманна]] * 에스토니아어(et): [[lumi]] * 에스페란토(eo): [[neĝo]] | * 영어(en): [[snow]] * 오로첸어(orh): [[ɪmana]] * 오세티야어(os): [[мит]](mit) * 오크어(oc): [[nèu]] (여성) * 요루바어(yo): [[ìrì dídìòjò dídì]] * 우가리트어(uga): [[𐎂𐎍𐎘]](glṯ) * 우드무르트어(udm): [[лымы]] * 우르두어(ur): [[برف]](barf) * 우즈베크어(uz): [[qor]] * 우크라이나어(uk): [[сніг]] (남성) * 와라이어(war): [[niyebe]]([[nyebe]]) * 왈론어(wa): [[nive]]; [[nîvaye]] * 웨일스어(cy): [[eira]] * 월로프어(wo): [[donju galaas]] * 위구르어(ug): [[k̡ar]]/[[qar]](라틴)/[[قار]](아랍 문자) * 응가나산어(nio): [[сирү]] * 이누이트어(iu): [[ᐊᐳᑦ]](이누이트 문자)/[[aput]](라틴) * 이누피아크어(ik): [[apun]]; [[aniu]] * 이도(io): [[nivo]] * 이디시어(yi): [[שניי]](šney) * 이어(ii): [[ꃰ]] * 이탈리아어(it): [[neve]] (여성) * 이텔멘어(itl): [[ӄәллал]] * 인도네시아어(id): [[salju]] * 인터링구아(ia): [[nive]] * 일본어(ja): {{lang|ja|[[雪]]([[ゆき]])}}(yuki) * 잉구쉬어(inh): [[лоа]] * 잉그리아어(izh): [[lumi]] * 자자키어(zza): [[vewre]] * 저지색슨어(nds): [[Snee]] * 조지아어(ka): [[თოვლი]](t’ovli) * 줄루어(zu): [[khithika]] * 중국어(zh): [[雪]](xuě) * 중부아틀라스타마지트어(tzm): [[ⴰⴷⴼⴻⵍ]](adfel) (남성) * 체로키어(chr): [[ᎤᎾᏥ]] * 체첸어(ce): [[ло]] * 체코어(cs): [[sníh]] (남성) * 추바슈어(cv): [[юр]] * 축치어(ckt): [[ы'льыл]] * 카라차이발카르어(krc): [[къар]](qar) * 카라칼파크어(kaa): [[qar]] * 카렐리야어(krl): [[lumi]] * 카바르딘어(kbd): [[уэс]] * 카바일어(kab): [[adfel]] (남성) * 카슈브어(csb): [[snieg]] * 카자흐어(kk): [[қар]](키릴)/[[قار]](아랍 문자)(qar) * 카탈루냐어(ca): [[neu]] (여성) * 칸나다어(kn): [[ಹಿಮ]](hima) * 칼미크어(xal): [[цасн]] * 케추아어(qu): [[rit’i]] * 코르시카어(co): [[neve]] * 코미지리안어(kom): [[лым]] * 코미페르먀크어(koi): [[лым]] * 콘월어(kw): [[ergh]] (남성) * 콘카니어(kok): [[दोउ]](dou) * 쿠르드어(ku): [[berf]], (소라니어); [[بەفر]](befr) * 크로아티아어(hr): [[snijeg]] (남성) * 크림타타르어(crh): [[qar]] * 쿠미크어(kum): [[къар]] * 키르기스어(ky): [[кар]] * 킬딘사미어(sjd): [[вэ̄дз]] * 타갈로그어(tl): [[niyebe]]; [[busilak]] * 타밀어(ta): [[உறைபனிக்கட்டி]](uṛaipaṉikkaṭṭi); [[பனித்தூவி]] * 타바사란어(tab): [[йиф]] * 타이어(th): [[หิมะ]](hima) * 타지크어(tg): [[барф]] * 타타르어(tt): [[кар]](키릴)/[[qar]](라틴) * 타트어(ttt): [[вэрф]] * 타히티어(ty): [[hiona]] * 텔루구어(te): [[మంచు]](maMchu); [[హిమము]](himamu) * 터키어(tr): [[kar]] * 투르크멘어(tk): [[gar]] * 투바어(tyv): [[хар]] * 트라키아어(txh): [[niva]] * 티베트어(bo): [[གངས]](gangs) * 파슈토어(ps): [[واوره]](wāwrâ) * 파피아멘토어(pap): [[sneu]] * 페로어(fo): [[kavi]] (남성) * 페르시아어(fa): [[برف]](barf) * 펀자브어(pa): [[ਬਰਫ਼]](barf) * 포르투갈어(pt): [[neve]] (여성) * 폴란드어(pl): [[śnieg]] (남성) * 프랑스어(fr): [[neige]] (여성) * 프리울리아어(fur): [[nêf]] * 피에몬테어(pms): [[fiòca]] * 핀란드어(fi): [[lumi]] * 하소르브어(dsb): [[sněg]] * 하와이어(haw): [[hau]] * 하카스어(kjh): [[хар]] * 헝가리어(hu): [[hó]] * 히브리어(he): [[שלג]](šeleg) * 힌디어(hi): [[हिमपात]](himpāt) }} ==== 명사 3 ==== [[파일:Flower Buds.jpeg|섬네일|200픽셀|[[꽃눈]]]] # 새로 막 터져 돋아나려는 식물의 싹. ===== 관련 어휘 ===== *파생어: [[겹눈]], [[곁눈]], [[막눈]], [[홑눈]] *합성어: [[꽃눈]], [[끝눈]], [[잎눈]], [[잣눈]] {{외국어| * 영어(en): * 일본어(ja): {{lang|ja| }} | * 중국어(zh): * 프랑스어(fr): }} ==== 명사 4 ==== [[파일:Folding Rules 2.jpg|섬네일|170픽셀|눈이 새겨진 자]] # '[[눈금]]'. {{위키프로젝트|이름=백과}} [[분류:표준어 단일어명사]] [[분류:표준어 자립명사]] [[분류:한국어 고유어]] [[분류:한국어 해부학]] [[분류:한국어 날씨]] [[분류:한국어 식물]] lmn0w31d6rgcf3z2p39brlm7ijzg6px 눈물 0 12931 4484144 4484049 2026-05-23T21:30:44Z Jeebeen 13056 /* 명사 */ 4484144 wikitext text/x-wiki == 한국어 == === 어원 === [[파일:Crying-girl.jpg|thumb|눈물 (1)]] * {{inh|ko|okm|누ᇈ믈}}, {{surf|ko|눈|-ㅅ-|물}} === 발음 === {{발음 듣기|}} {{ko-IPA}} === 명사 === {{한국어 명사}} # 슬프거나 또는 너무 기뻐서 혹은 다른 장애로 인하여 [[눈]]에 고이는 [[물]]. #: {{uxi|ko|아이가 엄마를 길거리에서 잃고는 눈물을 글썽이는 것이 처량하다.}} #: {{uxi|ko|슬픈 영화를 보고 눈물을 흘리다.}} {{C|ko|체액|생리학}} ==== 파생어 ==== {{col|ko|눈물을 머금다|t1=슬픔을 억누르다|pos1=주로 연결형으로|눈물이 헤프다|t2=눈물을 자주 흘리다|눈물짓다|눈물바다|눈물뼈|눈물샘|피눈물}} ==== 번역 ==== {{외국어| * 구자라트어(gu): [[આંસૂં]](ā.nsū.n) * 그리스어(el): * 나와틀어(nah): [[ixayotl]] * 네덜란드어(nl): [[traan]] ''de'' * 노르웨이어(no): * 덴마크어(da): {{t+|da|tåre|c}} * 독일어(de): {{t+|de|Träne|f}} * 라틴어(la): {{t+|la|lacrima|f}} * 러시아어(ru): {{t+|ru|слеза́|f}} * 로망슈어(rm): [[larma]] (여성) * 루마니아어(ro): {{t+|ro|lacrimă|f}} * 리투아니아어(lt): [[ašara]] (여성) * 몽골어(mn): * 보스니아어(bs): [[suza]] (여성) * 불가리아어(bg): * 브르타뉴어(br): * 산스크리트어(sa): * 세르비아어(sr): [[суза]](키릴)/[[suza]](라틴) (여성) * 스와힐리어(sw): [[machozi]] * 스웨덴어(sv): {{t+|sv|tår|c}} * 스코틀랜드게일어(gd): [[deur]] (남성) * 스콜트사미어(sms): [[kõõnjâl]] * 스페인어(es): {{t+|es|lágrima|f}} * 슬로바키아어(sk): {{t|sk|slza|f}} * 슬로베니아어(sl): {{t+|sl|solza|f}} * 아랍어(ar): [[دمع]](dam') (남성), [[دموع]](dumú', 복수형) * 아로마니아어(rup): [[lacãrmã]] (여성) * 아르메니아어(hy): [[արցունք]](arc'unk'), [[արտասուք]](artasuk') * 아이슬란드어(is): {{t+|is|tár|n}} * 아일랜드어(ga): {{t|ga|deoir|f}} * 알바니아어(sq): [[lot]] (여성) | * 에스토니아어(et): {{t+|et|pisar}} * 에스페란토(eo): {{t+|eo|larmo}} * 영어(en): {{t+|en|tear}} * 우르두어(ur): [[انسو|آنسو]](ānsū), [[آنسو]] (남성) * 이도(io): * 이탈리아어(it): {{t+|it|lacrima|f}} * 인도네시아어(id): [[air]] [[mata]] * 인터링구아(ia): * 일본어(ja): {{t+|ja|涙|tr=namida}} * 중국어(zh): [[眼泪]] * 체코어(cs): {{t+|cs|slza|f}} * 카자흐어(kk): {{t+|kk|жас}} * 카탈루냐어(ca): {{t+|ca|llàgrima|f}} * 쿠르드어(ku): [[فرمێسک]] * 크로아티아어(hr): [[suza]] (여성) * 타지크어(tg): [[ашк]] * 텔루구어(te): [[కన్నీటి బొట్టు]](kanneeTi boTTu) * 튀르키예어(tr): {{t+|tr|gözyaşı}} * 페르시아어(fa): [[اشک]](ashk) * 포르투갈어(pt): {{t+|pt|lágrima|f}} * 폴란드어(pl): {{t+|pl|łza|f}} * 프랑스어(fr): {{t+|fr|larme|f}} * 핀란드어(fi): {{t+|fi|kyynel}} * 헝가리어(hu): {{t+|hu|könny}} * 히브리어(he): * 힌디어(hi): [[आँसू]](ā.nsū) (남성) }} ==== 명사 2 ==== *어원: [[눈]] + [[물]] # 눈이 녹은 물. {{외국어| * 영어(en): * 일본어(ja): {{lang|ja|[[雪水]]([[ゆきみず]])}}(yukimizu) * 프랑스어(fr): }} cz8cra75c8k0jk21m0zvrz4hbdrzo1g duck 0 61908 4484153 4484136 2026-05-24T09:16:32Z Apisite 21408 /* 영어 */ + en-noun 4484153 wikitext text/x-wiki == 영어 == [[파일:Mallard drake.jpg|섬네일|오리]] === 발음 === {{발음 듣기|en-us-{{PAGENAME}}.ogg|미국}} {{IPA|dʌk}} === 명사 === {{en-noun|~|s|duck}} # {{라벨|en|조류}} [[오리]] #: {{예문|en|She saw a '''duck''' swimming in the pond and took a picture.|그녀는 연못에서 헤엄치는 오리를 보고 사진을 찍었다.}} [[분류:영어 조류]] 3bc69ffsosg48xlci5jd18xf1a7vvgl 오륜 0 122441 4484147 4281420 2026-05-24T06:45:11Z YeBoy371 10964 /* 같이 보기 */ 4484147 wikitext text/x-wiki == 한국어 == {{ko-IPA}} === 명사 === ==== 명사 1 ==== {{표제어}} # 정통 유교의 근본. {{어원|五倫|오륜|언어=한국어|형태=한자어 독음}} ===== 같이 보기 ===== * [[삼강]] * [[부자유친]], [[군신유의]], [[부부유별]], [[장유유서]], [[붕우유신]] ==== 명사 2 ==== # {{이철자|오대|언어=한국어}} {{어원|五大|오대|언어=한국어|형태=한자어 독음}} {{보기|오대}} ==== 명사 3 ==== {{표제어}} # 왼쪽으로부터 파랑, 노랑, 검정, 녹색, 빨강 순으로 W자 모양으로 겹쳐 연결된 올림픽을 상징하는 5개의 고리. {{어원|五輪|오륜|언어=한국어|형태=한자어 독음}} [[분류:한국어 단일어명사]] [[분류:한국어 자립명사]] [[분류:한국어 유교]] 2hqln6fg2kjfnddjauncgn7wb16blsj 삼강 0 183996 4484148 4172145 2026-05-24T06:45:13Z YeBoy371 10964 /* 같이 보기 */ 4484148 wikitext text/x-wiki == 한국어 == {{ko-IPA}} === 명사 === ==== 명사 1 ==== {{표제어}} # 오륜 후에 정치적 목적으로 마련된 것. {{어원|三綱|삼강|언어=한국어|형태=한자어 독음}} ===== 같이 보기 ===== * [[오륜]] * [[군위신강]], [[부위자강]], [[부위부강]] ==== 명사 2 ==== # 한강의 세 부분을 통틀어 이르는 말. {{어원|三江|삼강|언어=한국어|형태=한자어 독음}} [[분류:한국어 단일어명사]] [[분류:한국어 자립명사]] [[분류:한국어 유교]] 4osutc9v3d6osje2ksldoe3vgqsh9ha ᠴᠠᠪᠴᠠᠯ ᠰᡞᠪᡝ ᠪᡝᠶᡝ ᡩᠠᠰᠠᠩᡤᠠ ᠰᡞᠶᠠᠨ 0 203798 4484141 2543824 2026-05-23T16:28:29Z Braveattack 12591 4484141 wikitext text/x-wiki == 시버어 == === 명사 === [[분류:시버어 명사]][[분류:시버어 지명]] {{발음 듣기|}} {{IPA|cabcal sibe beje dasaŋga sijan}} *'''1.''' [[차부차얼 시버족 자치현]]. 7i45exwr5tb46wsmk9g89ocpc434ekj 4484142 4484141 2026-05-23T21:15:22Z Jeebeen 13056 4484142 wikitext text/x-wiki == 시버어 == === 발음 === * {{IPA-uni|sjo|/cabcal sibe beje dasaŋɡa sijan/}} === 명사 === {{head|sjo|명사}} # [[차부차얼 시버족 자치현]]. {{C|sjo|지명}} g993p33ohcu06yfc622yx6s8fbaqwqg Google 0 225072 4484146 4484062 2026-05-24T06:36:26Z Jeebeen 13056 4484146 wikitext text/x-wiki [[파일:Google 2026 logo.svg|250px|섬네일|오른쪽|구글 로고]] == 영어 == {{위키백과}} === 발음 === * {{IPA-uni|en|/ˈɡuːɡəl/}} ==== 고유명사 ==== {{영어 고유명사}} # [[구글]]; 미국의 인터넷 회사. # 같은 이름을 가진 인터넷 회사에서 운영중인 검색 엔진. ==== 동사 ==== {{영어 동사}} # {{alternative case form of|en|google}}. moqh7xs7f2jxd17sznzymmp70hwmemd 모듈:languages/data/3/s 828 445945 4484143 4484056 2026-05-23T21:16:13Z Jeebeen 13056 4484143 Scribunto text/plain local m_langdata = require("Module:languages/data") -- Loaded on demand, as it may not be needed (depending on the data). local function u(...) u = require("Module:string utilities").char return u(...) end local c = m_langdata.chars local p = m_langdata.puaChars local s = m_langdata.shared local m = {} m["saa"] = { "Saba", 3914885, "cdc-est", "Latn", } m["sab"] = { "Buglere", 3368506, "cba", "Latn", } m["sac"] = { "Fox", 12714767, "alg-sfk", "Latn", } m["sad"] = { "Sandawe", 34016, "qfa-iso", "Latn", } m["sae"] = { "Sabanê", 3460478, "sai-nmk", "Latn", } m["saf"] = { "Safaliba", 36432, "nic-mre", "Latn", } m["sah"] = { "야쿠트어", 34299, "trk-nsb", "Cyrl", translit = "sah-translit", override_translit = true, } m["saj"] = { "Sahu", 7399757, "paa-nha", "Latn", } m["sak"] = { "Sake", 36425, "bnt-kel", "Latn", } m["sam"] = { "Samaritan Aramaic", 56612, "sem-arw", "Samr", translit = "Samr-translit", entry_name = s["Samr-entryname"], sort_key = s["Samr-sortkey"], } m["sao"] = { "Sause", 4409155, "paa-tkw", "Latn", } m["saq"] = { "Samburu", 56536, "sdv-lma", } m["sar"] = { "Saraveca", 3450556, "awd", "Latn", } m["sas"] = { "Sasak", 1294047, "poz-bss", "Latn, Bali, Java", } m["sat"] = { "Santali", 33965, "mun", "Olck", translit = "Olck-translit", override_translit = true, } m["sau"] = { "Saleman", 7404262, "poz-cet", } m["sav"] = { "Saafi-Saafi", 36308, "alv-cng", "Arab, Latn", } m["saw"] = { "Sawi", 677064, "ngf", "Latn", } m["sax"] = { "Sa", 3460352, "poz-vnn", "Latn", } m["say"] = { "Saya", 3914431, "cdc-wst", "Latn", } m["saz"] = { "Saurashtra", 13292, "inc-wes", "Saur, Latn, Taml, Deva", translit = "saz-translit", ancestors = "inc-ogu", } m["sba"] = { "Ngambay", 2372207, "csu-sar", "Latn", } m["sbb"] = { "Simbo", 3484101, "poz-ocw", } m["sbc"] = { "Gele'", 3194847, "poz-aay", "Latn", } m["sbd"] = { "Southern Samo", 33122730, "dmn-sam", "Latn", } m["sbe"] = { "Saliba (New Guinea)", 3469737, "poz-ocw", } m["sbf"] = { "Shabo", 36342, "ssa", "Latn", } m["sbg"] = { "Seget", 7446237, } m["sbh"] = { "Sori-Harengan", 36515, "poz-aay", "Latn", } m["sbi"] = { "Seti", 7456682, "qfa-tor", "Latn", } m["sbj"] = { "Surbakhal", 759995, } m["sbk"] = { "Safwa", 4121160, "bnt-mby", "Latn", } m["sbl"] = { "Botolan Sambal", 4095195, "phi", "Latn", } m["sbm"] = { "Sagala", 11732610, "bnt-ruv", "Latn", } m["sbn"] = { "Sindhi Bhil", 25559289, "inc-snd", "Arab, Deva, Sind, Guru", ancestors = "sd", } m["sbo"] = { "Sabüm", 7396535, "mkh-asl", } m["sbp"] = { "Sangu (Tanzania)", 7418149, "bnt-bki", "Latn", } m["sbq"] = { "Sileibi", 7514337, "ngf-mad", } m["sbr"] = { "Sembakung Murut", 7449148, "poz-san", } m["sbs"] = { "Subiya", 6442073, "bnt-bot", "Latn", } m["sbt"] = { "Kimki", 6410160, "paa-pau", } m["sbu"] = { "Stod Bhoti", 15622700, "sit-las", } m["sbv"] = { "Sabine", 65455885, "itc-sbl", "Latn", display_text = s["itc-Latn-displaytext"], entry_name = s["itc-Latn-entryname"], sort_key = s["itc-Latn-sortkey"], } m["sbw"] = { "Simba", 36430, "bnt-tso", "Latn", } m["sbx"] = { "Seberuang", 12473470, "poz-mly", } m["sby"] = { "Soli", 7557754, "bnt-bot", "Latn", } m["sbz"] = { "Sara Kaba", 25559318, "csu-kab", "Latn", } m["scb"] = { "Chut", 2967709, "mkh-vie", "Latn", } m["sce"] = { "Dongxiang", 32947, "xgn-shr", "Arab, Latn", } m["scf"] = { "San Miguel Creole French", 12953094, "crp", "Latn", ancestors = "gcf", sort_key = s["roa-oil-sortkey"], } m["scg"] = { "Sanggau", 12473466, "day", } m["sch"] = { "Sakachep", 37054, "tbq-kuk", } m["sci"] = { "Sri Lankan Creole Malay", 1089151, "crp", "Latn", ancestors = "ms", } m["sck"] = { "Sadri", 765922, "inc-bih", "Deva, Kthi", translit = { Deva = "hi-translit", Kthi = "bho-Kthi-translit", }, } m["scl"] = { "Shina", 1353320, "inc-shn", "ur-Arab, Deva", } m["scn"] = { "Sicilian", 33973, "roa-itr", "Latn", } m["sco"] = { "스코트어", 14549, "gmw-ang", "Latn", ancestors = "gmw-msc", } m["scp"] = { "Yolmo", 22662107, "sit-kyk", "Deva", } m["scq"] = { "Sa'och", 6583617, "mkh-pea", } m["scs"] = { "North Slavey", 20628, "den", "Latn", } m["scu"] = { "Shumcho", 22077739, "sit-kin", } m["scv"] = { "Sheni", 11015820, "nic-jer", "Latn", ancestors = "zir", } m["scw"] = { "Sha", 3438816, "cdc-wst", "Latn", } m["scx"] = { "Sicel", 36667, "itc", "Polyt", translit = "grc-translit", display_text = s["Polyt-displaytext"], entry_name = s["Polyt-entryname"], sort_key = s["Polyt-sortkey"], } m["sda"] = { "Toraja-Sa'dan", 36673, "poz-ssw", "Latn", } m["sdb"] = { "Shabak", 3289596, "ira-zgr", ancestors = "hac", } m["sdc"] = { "Sassarese", 845441, "roa-itr", "Latn", } m["sde"] = { "Surubu", 3913336, "nic-kau", "Latn", } m["sdf"] = { "Sarli", 7424256, "ira-zgr", ancestors = "hac", } m["sdg"] = { "Savi", 3474654, "inc-shn", } m["sdh"] = { "Southern Kurdish", 1496597, "ku", "ku-Arab", translit = "sdh-translit", entry_name = {remove_diacritics = c.kasra .. c.sukun}, } m["sdj"] = { "Suundi", 7650407, "bnt-kng", "Latn", } m["sdk"] = { "Sos Kundi", 7563811, "paa-spk", "Latn", } m["sdl"] = { "Saudi Arabian Sign Language", 3504160, "sgn", } m["sdm"] = { "Semandang", 7449012, "day", } m["sdn"] = { "Gallurese", 612220, "roa-itr", "Latn", ancestors = "co", } m["sdo"] = { "Bukar-Sadung Bidayuh", 2927799, "day", "Latn", } m["sdp"] = { "Sherdukpen", 7494785, "sit-khm", } m["sdr"] = { "Oraon Sadri", 12953860, "inc-bih", } m["sds"] = { "Tunisian Berber", 5329732, "ber", } m["sdu"] = { "Sarudu", 7424700, "poz-cet", } m["sdx"] = { "Sibu Melanau", 18642842, "poz-bnn", } m["sea"] = { "Semai", 3135426, "mkh-asl", "Latn", } -- seb is a duplicate code of spp m["sec"] = { "Sechelt", 7442898, "sal", "Latn", } m["sed"] = { "써당어", 56448, "mkh-nbn", "Latn", } m["see"] = { "Seneca", 1185133, "iro-nor", "Latn", } m["sef"] = { "Cebaara Senoufo", 10975121, "alv-snr", "Latn", } m["seg"] = { "Segeju", 17584599, "bnt-mij", "Latn", } m["seh"] = { "Sena", 2964008, "bnt-sna", "Latn", } m["sei"] = { "Seri", 36583, "qfa-iso", "Latn", } m["sej"] = { "Sene", 7450252, } m["sek"] = { "Sekani", 28562, "ath-nor", "Latn", } m["sen"] = { "Nanerigé Sénoufo", 36002, "alv-sma", } m["seo"] = { "Suarmin", 7630513, "paa", } m["sep"] = { "Sìcìté Sénoufo", 56787, "alv-sma", } m["seq"] = { "Senara Sénoufo", 35210, "alv-snr", } m["ser"] = { "Serrano", 3479942, "azc-tak", "Latn", } m["ses"] = { "Koyraboro Senni", 35655, "son", "Latn", } m["set"] = { "Sentani", 3441672, "paa-sen", "Latn", } m["seu"] = { "Serui-Laut", 7455503, "poz-hce", "Latn", } m["sev"] = { "Nyarafolo Senoufo", 36306, "alv-snr", } m["sew"] = { "Sewa Bay", 7458126, "poz-ocw", } m["sey"] = { "Secoya", 3477218, "sai-tuc", "Latn", } m["sez"] = { "Senthang Chin", 7451223, "tbq-kuk", } m["sfb"] = { "French Belgian Sign Language", 3217332, "sgn", } m["sfe"] = { "Eastern Subanun", 63311321, "phi", "Latn", } m["sfm"] = { "Small Flowery Miao", 7542773, "hmn", } m["sfs"] = { "South African Sign Language", 3322093, "sgn", } m["sfw"] = { "Sehwi", 36593, "alv-ctn", "Latn", } m["sga"] = { "Old Irish", 35308, "cel-gae", "Latn, Ogam", entry_name = {remove_diacritics = c.dotabove .. c.diaer .. "·"}, sort_key = "sga-sortkey", standardChars = "AaÁáBbCcDdEeÉéFfGgHhIiÍíLlMmNnOoÓóPpRrSsTtUuÚú0123456789ᚁᚂᚃᚄᚅᚆᚇᚈᚉᚊᚋᚌᚍᚎᚏᚐᚑᚒᚓᚔ" .. c.punc, } m["sgb"] = { "Mag-Anchi Ayta", 4356243, "phi", "Latn", } m["sgc"] = { "Kipsigis", 56339, "sdv-nma", } m["sgd"] = { "Surigaonon", 34140, "phi", "Latn", } m["sge"] = { "Segai", 7446180, } m["sgg"] = { "Swiss-German Sign Language", 35150, "sgn", } m["sgh"] = { "Shughni", 34053, "ira-shr", "Latn, Cyrl", translit = "sgh-translit", override_translit = true, } m["sgi"] = { "Suga", 36475, "nic-mmb", "Latn", } m["sgk"] = { "Sangkong", 2945610, "tbq-bis", } m["sgm"] = { "Singa", 7522797, "bnt-lok", "Latn", } m["sgp"] = { "Singpho", 7524158, "sit-jnp", "Latn", } m["sgr"] = { "Sangisari", 3394363, "ira-kms", "Arab", } m["sgs"] = { "사모기트어", 213434, "bat-eas", "Latn", wikimedia_codes = "bat-smg", ancestors = "olt", display_text = "lt-common", entry_name = "lt-common", sort_key = "lt-common", } m["sgt"] = { "Brokpake", 56603, "sit-tib", "Tibt", translit = "Tibt-translit", override_translit = true, display_text = s["Tibt-displaytext"], entry_name = s["Tibt-entryname"], sort_key = "Tibt-sortkey", } m["sgu"] = { "Salas", 7403694, "poz-cma", } m["sgw"] = { "Sebat Bet Gurage", 2707343, "sem-eth", "Ethi", } m["sgx"] = { "Sierra Leone Sign Language", 7511448, "sgn", } m["sgy"] = { "Sanglechi", 3472220, "ira-sgi", } m["sgz"] = { "Sursurunga", 36511, "poz-ocw", "Latn", } m["sha"] = { "Shall-Zwall", 3915355, "nic-beo", } m["shb"] = { "Ninam", 3436586, "sai-ynm", "Latn", } m["shc"] = { "Sonde", 7560881, "bnt-pen", "Latn", } m["shd"] = { "Kundal Shahi", 6444265, "inc-shn", "Arab", } m["she"] = { "Sheko", 3183355, "omv-diz", } m["shg"] = { "Shua", 3501092, "khi-kal", "Latn", } m["shh"] = { "Shoshone", 33811, "azc-num", "Latn", } m["shi"] = { "Tashelhit", 34152, "ber", "Latn, Arab, Tfng, Hebr", ancestors = "shi-med", translit = { Tfng = "Tfng-translit", }, display_text = { Hebr = "Hebr-common", }, entry_name = { Arab = "ar-entryname", Hebr = "Hebr-common", }, sort_key = { Hebr = "Hebr-common", }, } m["shj"] = { "Shatt", 56344, "sdv-daj", } m["shk"] = { "Shilluk", 36486, "sdv-lon", "Latn", } m["shl"] = { "Shendu", 22074616, "tbq-kuk", } m["shm"] = { "Shahrudi", 7462280, "xme-ttc", "fa-Arab, Latn", ancestors = "xme-ttc-cen", } m["shn"] = { "샨어", 56482, "tai-swe", "Mymr", translit = "shn-translit", sort_key = { from = {"[ၢႃ]", "ဵ", "ႅ", "ႇ", "ႈ", "း", "ႉ", "ႊ"}, to = {"ာ", "ေ", "ႄ", "႒", "႓", "႔", "႕", "႖"} }, } m["sho"] = { "Shanga", 3913931, "dmn-bbu", "Latn", } m["shp"] = { "Shipibo-Conibo", 2671988, "sai-pan", "Latn", } m["shq"] = { "Sala", 10961665, "bnt-bot", "Latn", } m["shr"] = { "Shi", 3481999, "bnt-shh", "Latn", } m["shs"] = { "Shuswap", 3482685, "sal", "Latn", } m["sht"] = { "Shasta", 56396, "nai-shs", "Latn", } m["shu"] = { "Chadian Arabic", 56497, "sem-arb", "Arab", entry_name = { remove_diacritics = c.kashida .. c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef, from = {u(0x0671)}, to = {u(0x0627)} }, } m["shv"] = { "Shehri", 33445, "sem-sar", "Arab, Latn", } m["shw"] = { "Shwai", 36527, "alv-hei", } m["shx"] = { "She", 2605689, "hmn", } m["shy"] = { "Tachawit", 33274, "ber", "Tfng, Arab, Latn", translit = "Tfng-translit", } m["shz"] = { "Syenara Senoufo", 36316, "alv-snr", } m["sia"] = { "Akkala Sami", 35241, "smi", "Cyrl, Latn", translit = "sia-translit", display_text = { from = {"'"}, to = {"ˈ"} }, entry_name = {remove_diacritics = "'ˈ"}, } m["sib"] = { "Sebop", 7442799, "poz-swa", "Latn", } m["sid"] = { "시다마어", 33786, "cus-hec", "Latn, Ethi", } m["sie"] = { "Simaa", 7517329, "bnt-kav", "Latn", } m["sif"] = { "Siamou", 36252, } m["sig"] = { "Paasaal", 36426, "nic-sis", "Latn", } m["sih"] = { "Sîshëë", 8072753, "poz-cln", "Latn", } m["sii"] = { "Shom Peng", 1039346, "aav", } m["sij"] = { "Numbami", 3346277, "poz-ocw", "Latn", } m["sik"] = { "Sikiana", 3443734, "sai-prk", "Latn", } m["sil"] = { "Tumulung Sisaala", 25383006, "nic-sis", "Latn", } m["sim"] = { "Seim", 7446815, "paa-spk", } m["sip"] = { "Sikkimese", 35285, "sit-tib", "Tibt", ancestors = "xct", translit = "Tibt-translit", override_translit = true, display_text = s["Tibt-displaytext"], entry_name = s["Tibt-entryname"], sort_key = "Tibt-sortkey", } m["siq"] = { "Sonia", 7561770, } m["sir"] = { "Siri", 3438729, "cdc-wst", "Latn", } m["sis"] = { "Siuslaw", 2315424, } m["siu"] = { "Sinagen", 7521655, "qfa-tor", "Latn", } m["siv"] = { "Sumariup", 7636966, "paa-spk", "Latn", } m["siw"] = { "Siwai", 7532519, "paa-sbo", } m["six"] = { "Sumau", 7637021, "ngf-mad", "Latn", } m["siy"] = { "Sivandi", 13269, "xme", "fa-Arab, Latn", ancestors = "xme-mid", } m["siz"] = { "Siwi", 36814, "ber", "Tfng, Arab, Latn", } m["sja"] = { "Epena", 3055682, "sai-chc", "Latn", } m["sjb"] = { "Sajau Basap", 4684353, "poz-bnn", } m["sjc"] = { "Shaojiang Min", 3431451, "zhx-inm", "Hants", generate_forms = "zh-generateforms", sort_key = "Hani-sortkey", } m["sjd"] = { "Kildin Sami", 33656, "smi", "Cyrl", translit = "sjd-translit", display_text = { from = {"'"}, to = {"ˈ"} }, entry_name = {remove_diacritics = "'ˈ"}, } m["sje"] = { "Pite Sami", 56314, "smi", "Latn", display_text = { from = {"'"}, to = {"ˈ"} }, entry_name = {remove_diacritics = c.macron .. "'ˈ"}, sort_key = "sje-sortkey", } m["sjg"] = { "Assangori", 3502255, "sdv-tmn", } m["sjk"] = { "Kemi Sami", 35871, "smi", "Latn", display_text = { from = {"'"}, to = {"ˈ"} }, entry_name = {remove_diacritics = "'ˈ"}, } m["sjl"] = { "Miji", 6845470, "sit-hrs", } m["sjm"] = { "Mapun", 3287253, "poz-sbj", "Latn", } m["sjn"] = { "Sindarin", 56437, "art", "Latn, Teng", type = "appendix-constructed", } m["sjo"] = { "시버어", 13223, "tuw-jrc", "sjo-Mong", ancestors = "mnc", } m["sjp"] = { "Surjapuri", 7645351, "inc-krd", "Deva, as-Beng, Kthi", } m["sjr"] = { "Siar-Lak", 3482907, "poz-ocw", } m["sjs"] = { "Senhaja De Srair", 56744, "ber", } m["sjt"] = { "Ter Sami", 36656, "smi", "Cyrl, Latn", display_text = { from = {"'"}, to = {"ˈ"} }, entry_name = {remove_diacritics = "'ˈ"}, translit = "sjt-translit", } m["sju"] = { "Ume Sami", 56415, "smi", "Latn", entry_name = {remove_diacritics = c.macron .. "'ˈ"}, display_text = { from = {"'"}, to = {"ˈ"} }, sort_key = "sju-sortkey", } m["sjw"] = { "Shawnee", 2669206, "alg", "Latn", } m["ska"] = { "Skagit", 25559652, "sal", "Latn", } m["skb"] = { "Saek", 36437, "tai-nor", "Thai", sort_key = "Thai-sortkey", } m["skc"] = { "Ma Manda", 6720783, "ngf-fin", } m["skd"] = { "Southern Sierra Miwok", 3492334, "nai-utn", "Latn", } m["ske"] = { "Ske", 7534244, "poz-vnn", "Latn", } m["skf"] = { "Mekéns", 3304806, "tup", "Latn", } m["skh"] = { "Sikule", 3121081, "poz-nws", } m["ski"] = { "Sika", 33960, "poz-cet", "Latn", } m["skj"] = { -- compare 'ths' "Seke", 30226846, "sit-tam", } m["skk"] = { "Sok", 12953887, "mkh-ban", } m["skm"] = { "Sakam", 6448517, "ngf-fin", } m["skn"] = { "Kolibugan Subanon", 18755617, "phi", "Latn", } m["sko"] = { "Seko Tengah", 15613270, "poz", } m["skp"] = { "Sekapan", 7447132, "poz-bnn", } m["skq"] = { "Sininkere", 3914896, "dmn-man", "Latn", } m["skr"] = { "Saraiki", 33902, "inc-pan", "pa-Arab, Mult, Deva", ancestors = "lah", entry_name = {remove_diacritics = c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.nunghunna}, translit = { ["pa-Arab"] = "pa-Arab-translit", Deva = "hi-translit", Mult = "Mult-translit", }, } m["sks"] = { "Maia", 12952760, "ngf-mad", "Latn", } m["skt"] = { "Sakata", 36691, "bnt-bnm", "Latn", } m["sku"] = { "Sakao", 3298421, "poz-vnn", "Latn", } m["skv"] = { "Skou", 3915200, "paa-msk", "Latn", } m["skw"] = { "Skepi Creole Dutch", 2522153, "crp", "Latn", ancestors = "nl", } m["skx"] = { "Seko Padang", 15613282, "poz-ssw", "Latn", } m["sky"] = { "Sikaiana", 7439242, "poz-pnp", "Latn", } m["skz"] = { "Sekar", 7447136, "poz-cet", } m["slc"] = { "Saliba (Colombia)", 3441097, nil, "Latn", } m["sld"] = { "Sissala", 11020264, "nic-sis", "Latn", } m["sle"] = { "Sholaga", 7500203, "dra-kan", "Knda", translit = "kn-translit" } m["slf"] = { "Swiss-Italian Sign Language", 12953479, "sgn", } m["slg"] = { "Selungai Murut", 7448844, "poz-san", } m["slh"] = { "Southern Puget Sound Salish", 12642471, "sal", "Latn", } -- "sli" "Silesian German" IS SUBSUMED INTO "gmw-ecg" "East Central German" m["slj"] = { "Salumá", 7406296, "sai-prk", "Latn", } m["sll"] = { "Salt-Yui", 7405785, } m["slm"] = { "Pangutaran Sama", 3362086, "poz-sbj", "Latn", } m["sln"] = { "Salinan", 1568938, "qfa-iso", "Latn", } m["slp"] = { "Lamaholot", 6480777, "poz-cet", "Latn", } m["slq"] = { "Salchuq", 56752, "trk", } m["slr"] = { "Salar", 33963, "trk-ogz", "Arab, Latn", ancestors = "trk-eog", } m["sls"] = { "Singapore Sign Language", 7512563, "sgn", } m["slt"] = { "Sila", 7514021, "tbq-sil", } m["slu"] = { "Selaru", 7447500, "poz-cet", "Latn", } m["slw"] = { "Sialum", 7506694, "ngf", } m["slx"] = { "Salampasu", 7403607, "bnt-lun", "Latn", } m["sly"] = { "셀라야어", 7447520, "poz-ssw", } m["slz"] = { "Ma'ya", 2291492, "poz-hce", "Latn", } m["sma"] = { "남부 사미어", 13293, "smi", "Latn", display_text = { from = {"'"}, to = {"ˈ"} }, entry_name = {remove_diacritics = "'ˈ"}, sort_key = "sma-sortkey", } m["smb"] = { "Simbari", 7517427, "ngf", "Latn", } m["smc"] = { "Som", 7559081, "ngf-fin", "Latn", } m["smd"] = { "Sama", 6407456, "bnt-kmb", "Latn", } m["smf"] = { "Auwe", 3502072, "paa-brd", ancestors = "dnd", } m["smg"] = { "Simbali", 56692, "paa-bng", "Latn", } m["smh"] = { "Samei", 7409269, "tbq-axi", } m["smj"] = { "Lule Sami", 56322, "smi", "Latn", display_text = { from = {"'"}, to = {"ˈ"} }, entry_name = {remove_diacritics = c.macron .. "'ˈ"}, sort_key = "smj-sortkey", } m["smk"] = { "Bolinao", 2669235, "phi", "Latn, Tglg", } m["sml"] = { "Central Sama", 3470593, "poz-sbj", "Latn", } m["smm"] = { "Musasa", 6940122, "inc-eas", ancestors = "bh", } m["smn"] = { "Inari Sami", 33462, "smi", "Latn", display_text = { from = {"'"}, to = {"ˈ"} }, entry_name = {remove_diacritics = c.dotbelow .. "'ˈ"}, sort_key = "smn-sortkey", } m["smp"] = { "Samaritan Hebrew", 56502, "sem-can", "Samr", translit = "Samr-translit", entry_name = s["Samr-entryname"], sort_key = s["Samr-sortkey"], ancestors = "hbo", } m["smq"] = { "Samo", 7409884, "ngf", "Latn", } m["smr"] = { "Simeulue", 2992833, "poz-nws", "Latn", } m["sms"] = { "Skolt Sami", 13271, "smi", "Latn", display_text = { from = {"'"}, to = {"ˈ"} }, entry_name = {remove_diacritics = c.dotbelow .. "'ˈ"}, sort_key = "sms-sortkey", } m["smt"] = { "Simte", 7521268, "tbq-kuk", } m["smu"] = { "Somray", 6583612, "mkh-pea", } m["smv"] = { "Samvedi", 6345632, "inc-sou", } m["smw"] = { "Sumbawa", 3182585, "poz-bss", "Latn", } m["smx"] = { "Samba", 11120157, "bnt-pen", "Latn", } m["smy"] = { "Semnani", 14531212, "xme", "fa-Arab, Latn", } m["smz"] = { "Simeku", 7517534, "paa-sbo", } m["snb"] = { "Sebuyau", 7442836, "poz-mly", } m["snc"] = { "Sinaugoro", 4170719, "poz-ocw", "Latn", } m["sne"] = { "Bau Bidayuh", 2891938, "day", "Latn", } m["snf"] = { "Noon", 36304, "alv-cng", "Latn", } m["sng"] = { "Sanga (Congo)", 3438316, "bnt-lub", "Latn", } m["sni"] = { "Sensi", 7451029, "sai-pan", "Latn", } m["snj"] = { "Riverain Sango", 25559751, "crp", "Latn", ancestors = "ngb", } m["snk"] = { "Soninke", 36660, "dmn-snb", "Latn", } m["snl"] = { "Sangil", 3472206, "phi", "Latn", } m["snm"] = { "Southern Ma'di", 15637273, "csu-mma", } m["snn"] = { "Siona", 3485116, "sai-tuc", "Latn", } m["sno"] = { "Snohomish", 25559662, "sal", "Latn", } m["snp"] = { "Siane", 7506812, "paa-kag", "Latn", } m["snq"] = { "Sangu (Gabon)", 36609, "bnt-sir", "Latn", } m["snr"] = { "Sihan", 7513400, "ngf-mad", } m["sns"] = { "Nahavaq", 2160435, "poz-vnc", "Latn", } m["snu"] = { "Senggi", 7929052, "paa-brd" } m["snv"] = { "Sa'ban", 3474891, "poz-swa", "Latn", } m["snw"] = { "Selee", 36272, "alv-ntg", "Latn", } m["snx"] = { "Sam", 7408387, } m["sny"] = { "Saniyo-Hiyewe", 7418302, "paa-spk", "Latn", } m["snz"] = { "Kou", 7525035, -- also 4803639 "ngf-mad", "Latn", } m["soa"] = { "Thai Song", 7709159, "tai-swe", "Tavt, Thai", --translit = "Tavt-translit", sort_key = { from = {"([ꪵꪶꪹꪻꪼ])([ꪀ-ꪯ])", "([เแโใไ])([ก-ฮ])"}, to = {"%2%1", "%2%1"} }, } m["sob"] = { "Sobei", 3121035, "poz-ocw", "Latn", } m["soc"] = { "Soko", 7555138, "bnt-ske", "Latn", } m["sod"] = { "Songoora", 7561296, "bnt-lgb", "Latn", } m["soe"] = { "Songomeno", 5713543, "bnt-bsh", "Latn", } m["sog"] = { "Sogdian", 205979, "ira-sgc", "Sogd, Mani, Syrc, Sogo", translit = { Sogd = "Sogd-translit", Mani = "Mani-translit", Sogo = "Sogo-translit", }, } m["soh"] = { "Aka (Sudan)", 3450949, "sdv-eje", "Latn", } m["soi"] = { "Sonha", 12953890, "inc-eas", } m["sok"] = { "Sokoro", 3441303, "cdc-est", "Latn", } m["sol"] = { "Solos", 3489591, "poz-ocw", } m["soo"] = { "Nsong", 12953148, "bnt-bdz", "Latn", } m["sop"] = { "Songe", 3130911, "bnt-lbn", "Latn", } m["soq"] = { "Kanasi", 11732656, } m["sor"] = { "Somrai", 3123566, "cdc-est", "Latn", } m["sos"] = { "Seenku", 36274, "dmn-smg", } m["sou"] = { "Southern Thai", 56508, "tai-swe", "Thai", sort_key = "Thai-sortkey", } m["sov"] = { "Sonsorolese", 13281, "poz-mic", "Latn", } m["sow"] = { "Sowanda", 7571845, "paa-brd" } m["sox"] = { "Swo", 36604, "bnt-mka", "Latn", } m["soy"] = { "Miyobe", 35913, "alv-sav", "Latn", } m["soz"] = { "Temi", 13278, "bnt-kka", "Latn", } m["spb"] = { "Sepa (Indonesia)", 18603687, "poz-cma", "Latn", } m["spc"] = { "Sapé", 2888158, nil, "Latn", } m["spd"] = { "Saep", 7398312, "ngf-mad", } m["spe"] = { "Sepa (New Guinea)", 7451725, "poz-ocw", "Latn", } m["spg"] = { "Sian", 7506806, "poz-bnn", } m["spi"] = { "Saponi", 3915418, "paa", } m["spk"] = { "Sengo", 7450584, "paa-spk", "Latn", } m["spl"] = { "Selepet", 7447917, "ngf", } m["spm"] = { "Sepen", 4701931, "paa", "Latn", } m["spn"] = { "Sanapaná", 3033556, "sai-mas", "Latn", } m["spo"] = { "Spokane", 3493704, "sal", } m["spp"] = { "Supyire", 56284, "alv-sma", "Latn", } m["spr"] = { "Saparua", 7420921, "poz-cma", "Latn", } m["sps"] = { "Saposa", 3473187, "poz-ocw", } m["spt"] = { "Spiti Bhoti", 22080879, "sit-las", } m["spu"] = { "Sapuan", 7421168, "mkh-ban", } m["spv"] = { "Sambalpuri", 6433240, "inc-eas", "Orya", translit = "or-translit", ancestors = "or", } m["spx"] = { "South Picene", 36688, "itc-sbl", "Ital, Latn", translit = { Ital = "Ital-translit", }, display_text = { Latn = s["itc-Latn-displaytext"] }, entry_name = { Latn = s["itc-Latn-entryname"], }, sort_key = { Latn = s["itc-Latn-sortkey"], }, } m["spy"] = { "Sabaot", 7395896, "sdv-kln", } m["sqa"] = { "Shama-Sambuga", 3914392, "nic-kmk", "Latn", } m["sqh"] = { "Shau", 3913925, "nic-jer", "Latn", } m["sqk"] = { "Albanian Sign Language", 4709168, "sgn", } m["sqm"] = { "Suma", 11008431, "gba-wes", } m["sqn"] = { "Susquehannock", 3505736, "iro-nor", } m["sqo"] = { "Sorkhei", 3491964, "ira-kms", } m["sqq"] = { "Sou", 16979751, "mkh-ban", } m["sqr"] = { "Siculo-Arabic", 1069489, "sem-arb", "Arab", } m["sqs"] = { "Sri Lankan Sign Language", 3915466, "sgn", } m["sqt"] = { "Soqotri", 13283, "sem-sar", "Arab, Latn", } m["squ"] = { "Squamish", 2484579, "sal", "Latn", } m["sra"] = { "Saruga", 7424699, "ngf-mad", "Latn", } m["srb"] = { "Sora", 13284, "mun", "Sora, Latn, Orya", } m["sre"] = { "Sara", 33957, "day", } m["srf"] = { "Nafi", 6958174, "poz-ocw", } m["srg"] = { "Sulod", 7636489, "phi", } m["srh"] = { "Sarikoli", 33873, "ira-shr", "Latn, ug-Arab, Cyrl", } m["sri"] = { "Siriano", 3485264, "sai-tuc", "Latn", } m["srk"] = { "Serudung Murut", 7455497, "poz-san", } m["srl"] = { "Isirawa", 4203802, "paa-tkw", } m["srm"] = { "Saramaccan", 33779, "crp", "Latn", ancestors = "en, pt", } m["srn"] = { "Sranan Tongo", 33989, "crp", "Latn", ancestors = "en", } m["srq"] = { "Sirionó", 3027953, "tup-gua", "Latn", } m["srr"] = { "Serer", 36284, "alv-fwo", "Latn", } m["srs"] = { "Tsuut'ina", 20825, "ath-nor", "Latn", } m["srt"] = { "Sauri", 7427547, "paa-egb", } m["sru"] = { "Suruí", 7646993, "tup", "Latn", } m["srv"] = { "Waray Sorsogon", 18755610, "phi", "Latn", } m["srw"] = { "Serua", 14916905, "poz-cet", } m["srx"] = { "Sirmauri", 7530505, "him", } m["sry"] = { "Sera", 7452602, "poz-ocw", "Latn", } m["srz"] = { "Shahmirzadi", 12953126, "ira-msh", "fa-Arab", } m["ssb"] = { "Southern Sama", 3470594, "poz-sbj", "Latn", } m["ssc"] = { "Suba-Simbiti", 7630687, "bnt-lok", "Latn", } m["ssd"] = { "Siroi", 10771067, "ngf-mad", "Latn", } m["sse"] = { "Balangingi", 2880535, "poz-sbj", "Latn", } m["ssf"] = { "Thao", 676492, "map", "Latn", } m["ssg"] = { "Seimat", 3182581, "poz-aay", "Latn", } m["ssh"] = { "Shihhi Arabic", 56571, "sem-arb", "Arab", entry_name = { remove_diacritics = c.kashida .. c.fathatan .. c.dammatan .. c.kasratan .. c.fatha .. c.damma .. c.kasra .. c.shadda .. c.sukun .. c.superalef, from = {u(0x0671)}, to = {u(0x0627)} }, } m["ssi"] = { "Sansi", 3309366, "inc-nwe", } m["ssj"] = { "Sausi", 7427605, "ngf-mad", "Latn", } m["ssk"] = { "Sunam", 11002210, "sit-kin", } m["ssl"] = { "Western Sisaala", 11154776, "nic-sis", "Latn", } m["ssm"] = { "Semnam", 7449713, "mkh-asl", "Latn", } m["sso"] = { "Sissano", 7530937, "poz-ocw", "Latn", } m["ssp"] = { "Spanish Sign Language", 3100814, "sgn", } m["ssq"] = { "So'a", 7572120, "poz-cet", "Latn", } m["ssr"] = { "Swiss-French Sign Language", 12953483, "sgn", } m["sss"] = { "Sô", 3082037, "mkh-kat", } m["sst"] = { "Sinasina", 7521813, "ngf", "Latn", } m["ssu"] = { "Susuami", 7649752, "ngf", "Latn", } m["ssv"] = { "Shark Bay", 7489783, "poz-vnn", "Latn", } m["ssx"] = { "Samberigi", 7409020, "paa-eng", "Latn", } m["ssy"] = { "사호어", 36353, "cus-eas", "Latn, Ethi, Arab", } m["ssz"] = { "Sengseng", 7450601, "poz-ocw", "Latn", } m["stb"] = { "Northern Subanen", 12953892, "phi", "Latn", } m["std"] = { "Sentinelese", 568377, } m["ste"] = { "Liana-Seti", 6539924, "poz-cma", } m["stf"] = { "Seta", 7456326, "qfa-tor", "Latn", } m["stg"] = { "Trieng", 22694648, "mkh-ban", } m["sth"] = { "Shelta", 36705, "qfa-mix", "Latn", ancestors = "ga, en", } m["sti"] = { "Bulo Stieng", 15771431, "mkh-ban", "Khmr, Latn", } m["stj"] = { "Matya Samo", 10974879, "dmn-sam", "Latn", } m["stk"] = { "Arammba", 3502094, "ngf", "Latn", } m["stm"] = { "Setaman", 7456333, "ngf-okk", "Latn", } m["stn"] = { "Owa", 1324132, "poz-sls", "Latn", } m["sto"] = { "Stoney", 3033570, "sio-dkt", "Latn", } m["stp"] = { "Southeastern Tepehuan", 12953917, "azc-pim", "Latn", } m["stq"] = { "Saterland Frisian", 27154, "gmw-fri", "Latn", } m["str"] = { "Saanich", 36444, "sal", "Latn", } m["sts"] = { "Shumashti", 33777, "inc-kun", "Arab", } m["stt"] = { "Budeh Stieng", 12953891, "mkh-ban", } m["stu"] = { "Samtao", 25559550, "mkh-pal", } m["stv"] = { "Silt'e", 33880, "sem-eth", "Ethi", } m["stw"] = { "Satawalese", 28477, "poz-mic", "Latn", } m["sty"] = { "Siberian Tatar", 4418344, "trk-kno", "Cyrl", } m["sua"] = { "Sulka", 7636341, "paa", } m["sub"] = { "Suku", 12953160, "bnt-yak", "Latn", } m["suc"] = { "Western Subanon", 16113894, "phi", "Latn", } m["sue"] = { "Suena", 7634386, "ngf", "Latn", } m["sug"] = { "Suganga", 7634706, "ngf-okk", "Latn", } m["sui"] = { "Suki", 2089984, "ngf", "Latn", } m["suk"] = { "Sukuma", 2638144, "bnt-tkm", "Latn", } m["suq"] = { "Suri", 5364172, "sdv", } m["sur"] = { "Mwaghavul", 3440486, "cdc-wst", "Latn", } m["sus"] = { "Susu", 33990, "dmn-sya", "Latn", } m["sut"] = { "Subtiaba", 3915405, "omq", "Latn", } m["suv"] = { "Puroik", 56408, "sit-khb", "Beng, Deva, Latn", ancestors = "sit-khp-pro", } m["suw"] = { "Sumbwa", 7637055, "bnt-glb", "Latn", } m["sux"] = { "Sumerian", 36790, "qfa-iso", "Xsux, Latn", } m["suy"] = { "Suyá", 3505859, "sai-nje", "Latn", } m["suz"] = { "Sunwar", 56549, "sit-kiw", "Deva, Sunu" } m["sva"] = { "Svan", 34067, "ccs", "Geor, Cyrl", translit = "sva-translit", override_translit = true, } m["svb"] = { "Ulau-Suain", 7878769, "poz-ocw", "Latn", } m["svc"] = { "Vincentian Creole English", 3501785, "crp", "Latn", ancestors = "en", } m["sve"] = { "Serili", 7454834, "poz-tim", } m["svk"] = { "Slovakian Sign Language", 7541557, "sgn", } m["svm"] = { "Slavomolisano", 36254, "zls", "Latn", ancestors = "sh", } m["svs"] = { "Savosavo", 3130296, "paa", "Latn", } m["svx"] = { "Skalvian", 3486125, "bat-wes", "Latn", } m["swb"] = { "Maore Comorian", 34075, "bnt-com", "Latn", sort_key = "bnt-com-sortkey", } m["swf"] = { "Sere", 7453056, "nic-ser", "Latn", } m["swg"] = { "Swabian", 327274, "gmw-hgm", "Latn", ancestors = "gsw", } m["swi"] = { "Sui", 3112388, "qfa-kms", "Latn, Shui, Hani", sort_key = {Hani = "Hani-sortkey"}, } m["swj"] = { "Sira", 36599, "bnt-sir", "Latn", } m["swl"] = { "Swedish Sign Language", 36558, "sgn", } m["swm"] = { "Samosa", 7410037, "ngf-mad", "Latn", } m["swn"] = { "Sokna", 2988323, "ber", } m["swo"] = { "Shanenawa", 61974839, "sai-pan", "Latn", } m["swp"] = { "Suau", 3502368, "poz-ocw", } m["swq"] = { "Sharwa", 56791, "cdc-cbm", "Latn", } m["swr"] = { "Saweru", 3474649, } m["sws"] = { "Seluwasan", 7448845, "poz-cet", } m["swt"] = { "Sawila", 7428639, } m["swu"] = { "Suwawa", 7650588, "phi", } m["sww"] = { "Sowa", 7571843, "poz-vnn", "Latn", } m["swx"] = { "Suruahá", 3114402, "auf", } m["swy"] = { "Sarua", 56261, "cdc-est", "Latn", } m["sxb"] = { "Suba", 33916, "bnt-lok", "Latn", } m["sxc"] = { "Sicanian", 36335, } m["sxe"] = { "Sighu", 36431, "bnt-kel", "Latn", } m["sxg"] = { "Shixing", 56337, "sit-nax", "Latn", } m["sxk"] = { "Southern Kalapuya", 3192122, "nai-klp", } m["sxl"] = { "Selonian", 36491, "bat-eas", "Latn", } m["sxm"] = { "Samre", 6583615, "mkh-pea", } m["sxn"] = { "Sangir", 25714758, "phi", "Latn", } m["sxo"] = { "Sorothaptic", 2762254, } m["sxr"] = { "Saaroa", 716599, "map", "Latn", } m["sxs"] = { "Sasaru", 3913384, "alv-yek", "Latn", } -- "sxu" "Upper Saxon" IS SUBSUMED INTO "gmw-ecg" "East Central German" m["sxw"] = { "Saxwe Gbe", 7428892, "alv-pph", "Latn", } m["sya"] = { "Siang", 3482903, } m["syb"] = { "Central Subanen", 12953893, "phi", "Latn", } m["syc"] = { "Classical Syriac", 33538, "sem-are", "Syrc", entry_name = {remove_diacritics = c.macron .. c.diaer .. c.macronbelow .. u(0x0730) .. "-" .. u(0x0748)}, } m["syi"] = { "Seki", 36547, "bnt-kel", "Latn", } m["syk"] = { "Sukur", 56292, "cdc-cbm", "Latn", } m["syl"] = { "Sylheti", 2044560, "inc-bas", "Sylo, Beng", ancestors = "inc-obn", translit = "syl-translit", } m["sym"] = { "Maya Samo", 10950421, "dmn-sam", "Latn", } m["syn"] = { "Senaya", 33914, "sem-nna", } m["syo"] = { "Suoy", 7641864, "mkh-pea", } m["sys"] = { "Sinyar", 56840, "csu", "Latn", } m["syw"] = { "Kagate", 12952538, "sit-kyk", "Deva", } m["syx"] = { "Osamayi", 7408415, "bnt-kel", "Latn", } m["syy"] = { "Al-Sayyid Bedouin Sign Language", 2915457, "sgn", } m["sza"] = { "Semelai", 3111827, "mkh-asl", "Latn", } m["szb"] = { "Ngalum", 11732516, "ngf-okk", "Latn", } m["szc"] = { "Semaq Beri", 7449119, "mkh-asl", } m["szd"] = { "Seru", 7455488, "poz-bnn", "Latn", } m["sze"] = { "Seze", 373683, "omv-mao", "Latn", } m["szg"] = { "Sengele", 7450555, "bnt-mon", "Latn", } m["szl"] = { "Silesian", 30319, "zlw-lch", "Latn", ancestors = "zlw-opl", } m["szn"] = { "Sula", 3503403, "poz-cma", "Latn", } m["szp"] = { "Suabo", 7630429, "ngf-sbh", "Latn", } m["szv"] = { "Isubu", 35431, "bnt-saw", "Latn", } m["szw"] = { "Sawai", 3447258, "poz-hce", "Latn", } m["szy"] = { "Sakizaya", 718269, "map", "Latn", } return require("Module:languages").finalizeData(m, "language") cfgw46575w1r453wt4ydji6fa5dlj7d 모듈:etymon/data 828 496351 4484149 2026-05-24T08:41:53Z Jeebeen 13056 새 문서: local export = {} export.STATUS = { OK = "ok", INLINE = "inline", MISSING = "missing", REDLINK = "redlink", AMBIGUOUS = "ambiguous", } export.TRANSITIVE = { ALWAYS = "always", -- always recurse into children NEVER = "never", -- never recurse into children CROSS_LANG = "cross_lang", -- only recurse when source lang differs from target lang (but pos... 4484149 Scribunto text/plain local export = {} export.STATUS = { OK = "ok", INLINE = "inline", MISSING = "missing", REDLINK = "redlink", AMBIGUOUS = "ambiguous", } export.TRANSITIVE = { ALWAYS = "always", -- always recurse into children NEVER = "never", -- never recurse into children CROSS_LANG = "cross_lang", -- only recurse when source lang differs from target lang (but pos chain continues) CROSS_LANG_NO_INTERNAL_SOURCE = "cross_lang_no_internal_source", -- like CROSS_LANG, but source breaks for internal derivations in the same language context } -- Deep merge tables (nested tables are merged recursively, later values override earlier) local function deep_merge(...) local result = {} for _, t in ipairs({ ... }) do for k, v in pairs(t) do if type(v) == "table" and type(result[k]) == "table" then result[k] = deep_merge(result[k], v) else result[k] = v end end end return result end local function make_glossary_link(term, display_text) if not term then return display_text end return "[[Appendix:Glossary#" .. term:gsub(" ", "_") .. "|" .. display_text .. "]]" end -- Extract base word and connector from text like "Borrowed from" or "calque of" local function split_glossary_text(text) for _, pattern in ipairs({ "^(.-)(%s+[Oo][Ff])$", "^(.-)(%s+[Ff][Rr][Oo][Mm])$" }) do local base, rest = text:match(pattern) if base then return base, rest end end return text, "" end local TRANSITIVE = export.TRANSITIVE local function create_keyword(opts) local entry = { is_group = opts.is_group or false, abbrev = opts.abbrev, glossary = opts.glossary, transitive = opts.transitive or TRANSITIVE.ALWAYS, -- default "always" inherited_chain = opts.inherited_chain or false, affix_categories = opts.affix_categories or false, borrowing_type = opts.borrowing_type, specialized_borrowing = opts.specialized_borrowing, toplevel_category = opts.toplevel_category, no_child_categories = opts.no_child_categories or false, source_category_type = opts.source_category_type, invisible = (opts.invisible == true and "all") or opts.invisible or false, pos_override = opts.pos_override, new_sentence = opts.new_sentence or false, separate_clause = opts.separate_clause or false, aliases = opts.aliases, } -- Only set text/phrase when visible in text (invisible ~= "all" and ~= "text") local inv = entry.invisible if inv ~= "all" and inv ~= "text" then entry.phrase = opts.phrase if opts.text then if opts.glossary then local base_word, rest = split_glossary_text(opts.text) entry.text = make_glossary_link(opts.glossary, base_word) .. rest else entry.text = opts.text end end end return entry end -- Shared defaults for keyword groups local DEFAULTS = { -- Keywords that pass through inheritance chain inheritance = { transitive = TRANSITIVE.ALWAYS, inherited_chain = true, }, -- Standard transitive derivation transitive = { transitive = TRANSITIVE.ALWAYS, }, -- Standard for internal derivations: transitive across languages, but not within them internal_derivation = { transitive = TRANSITIVE.CROSS_LANG, }, -- Borrowing keywords borrowing = { transitive = TRANSITIVE.ALWAYS, }, -- Affix group keywords (compound words, blends, etc.) affix_group = { is_group = true, transitive = TRANSITIVE.CROSS_LANG, affix_categories = true, }, -- Calque-like keywords (calque, partial calque, semantic loan) calque_like = { transitive = TRANSITIVE.NEVER, no_child_categories = true, new_sentence = true, }, -- Non-transitive influence influence_like = { transitive = TRANSITIVE.NEVER, no_child_categories = true, }, } export.keywords = { -- -- Inheritance keywords -- ["from"] = create_keyword(deep_merge(DEFAULTS.inheritance, { text = "From", phrase = "from", })), ["inherited"] = create_keyword(deep_merge(DEFAULTS.inheritance, { text = "Inherited from", phrase = "from", glossary = "inherited", aliases = { "inh" }, })), -- -- Basic derivation keywords -- ["uder"] = create_keyword(deep_merge(DEFAULTS.transitive, { text = "From", phrase = "from", toplevel_category = "undefined derivations", })), ["derived"] = create_keyword(deep_merge(DEFAULTS.transitive, { text = "Derived from", phrase = "from", abbrev = "der.", glossary = "derived terms", aliases = { "der" }, })), -- -- Affix/compound group keywords -- ["affix"] = create_keyword(deep_merge(DEFAULTS.affix_group, { text = "From", phrase = "from", aliases = { "af" }, })), ["surf"] = create_keyword(deep_merge(DEFAULTS.affix_group, { text = "By surface analysis,", phrase = "by surface analysis,", abbrev = "surf.", glossary = "surface analysis", new_sentence = true, invisible = "tree", })), ["blend"] = create_keyword(deep_merge(DEFAULTS.affix_group, { text = "Blend of", phrase = "a blend of", abbrev = "blend", glossary = "blend", toplevel_category = "blends", })), ["univerbation"] = create_keyword(deep_merge(DEFAULTS.affix_group, { text = "Univerbation of", phrase = "univerbation of", abbrev = "univ.", glossary = "univerbation", toplevel_category = "univerbations", aliases = { "univ" }, })), ["vrd-af"] = create_keyword(deep_merge(DEFAULTS.affix_group, { text = "Vṛddhi derivative of", phrase = "a vṛddhi derivative of", abbrev = "vṛd.", glossary = "vṛddhi derivative", toplevel_category = "vrddhi derivatives", })), -- -- Borrowing keywords -- ["bor"] = create_keyword(deep_merge(DEFAULTS.borrowing, { text = "Borrowed from", phrase = "borrowed from", abbrev = "bor.", glossary = "loanword", borrowing_type = "borrowed", aliases = { "borrowed" }, })), ["lbor"] = create_keyword(deep_merge(DEFAULTS.borrowing, { text = "Learned borrowing from", phrase = "a learned borrowing from", abbrev = "lbor.", glossary = "learned borrowing", specialized_borrowing = "learned", })), ["obor"] = create_keyword(deep_merge(DEFAULTS.borrowing, { text = "Orthographic borrowing from", phrase = "an orthographic borrowing from", abbrev = "obor.", glossary = "orthographic borrowing", specialized_borrowing = "orthographic", })), ["slbor"] = create_keyword(deep_merge(DEFAULTS.borrowing, { text = "Semi-learned borrowing from", phrase = "a semi-learned borrowing from", abbrev = "slbor.", glossary = "semi-learned borrowing", specialized_borrowing = "semi-learned", })), ["ubor"] = create_keyword(deep_merge(DEFAULTS.borrowing, { text = "Unadapted borrowing from", phrase = "an unadapted borrowing from", abbrev = "ubor.", glossary = "unadapted borrowing", specialized_borrowing = "unadapted", })), -- -- Calque-like keywords (non-transitive, start new sentence) -- ["calque"] = create_keyword(deep_merge(DEFAULTS.calque_like, { text = "Calque of", phrase = "a calque of", abbrev = "calq.", glossary = "calque", specialized_borrowing = "calque", aliases = { "cal", "clq" }, })), ["partial calque"] = create_keyword(deep_merge(DEFAULTS.calque_like, { text = "Partial calque of", phrase = "a partial calque of", abbrev = "pcalq.", glossary = "partial calque", specialized_borrowing = "partial-calque", aliases = { "pcal" }, })), ["semantic loan"] = create_keyword(deep_merge(DEFAULTS.calque_like, { text = "Semantic loan of", phrase = "a semantic loan of", abbrev = "sl.", glossary = "semantic loan", specialized_borrowing = "semantic-loan", aliases = { "sl" }, })), ["psm"] = create_keyword(deep_merge(DEFAULTS.calque_like, { text = "Phono-semantic matching of", phrase = "a phono-semantic matching of", abbrev = "psm.", glossary = "phono-semantic matching", specialized_borrowing = "phono-semantic-matching", aliases = { "phono-semantic matching" }, })), -- -- Influence keywords (non-transitive, separate clause) -- ["influence"] = create_keyword(deep_merge(DEFAULTS.influence_like, { text = "Influenced by", phrase = "influenced by", abbrev = "influ.", glossary = "contamination", separate_clause = true, })), -- -- Morphological derivation keywords -- ["clipping"] = create_keyword(deep_merge(DEFAULTS.transitive, { text = "Clipping of", phrase = "clipping of", abbrev = "clip.", glossary = "clipping", toplevel_category = "clippings", aliases = { "clip" }, })), ["ellipsis"] = create_keyword(deep_merge(DEFAULTS.transitive, { text = "Ellipsis of", phrase = "ellipsis of", abbrev = "ellip.", glossary = "ellipsis", toplevel_category = "ellipses", aliases = { "ellip" }, })), ["back-formation"] = create_keyword(deep_merge(DEFAULTS.transitive, { text = "Back-formation from", phrase = "a back-formation from", abbrev = "bf.", glossary = "back-formation", toplevel_category = "back-formations", aliases = { "bf" }, })), ["nominalization"] = create_keyword(deep_merge(DEFAULTS.transitive, { text = "Nominalization of", phrase = "a nominalization of", abbrev = "nom.", glossary = "nominalization", toplevel_category = "nominalizations", aliases = { "nom" }, })), ["transliteration"] = create_keyword(deep_merge(DEFAULTS.transitive, { text = "Transliteration of", phrase = "borrowed from", abbrev = "translit.", glossary = "transliteration", aliases = { "translit" }, })), ["vrd"] = create_keyword(deep_merge(DEFAULTS.transitive, { text = "Vṛddhi derivative of", phrase = "a vṛddhi derivative of", abbrev = "vṛd.", glossary = "vṛddhi derivative", toplevel_category = "vrddhi derivatives", })), ["apheretic"] = create_keyword(deep_merge(DEFAULTS.transitive, { text = "Apheretic form of", phrase = "an apheretic form of", abbrev = "aph.", glossary = "apheresis", aliases = { "apheresis", "aphetic" }, })), ["denominal"] = create_keyword(deep_merge(DEFAULTS.transitive, { text = "Denominal verb from", phrase = "denominal verb from", abbrev = "denom.", glossary = "denominal", toplevel_category = "denominal verbs", aliases = { "denom" }, })), ["deverbal"] = create_keyword(deep_merge(DEFAULTS.transitive, { text = "Deverbal from", phrase = "deverbal from", abbrev = "deverb.", glossary = "deverbal", toplevel_category = "deverbals", })), ["reduplication"] = create_keyword(deep_merge(DEFAULTS.transitive, { text = "Reduplication of", phrase = "reduplication of", abbrev = "redup.", glossary = "reduplication", toplevel_category = "reduplications", aliases = { "redup" }, })), ["abbreviation"] = create_keyword(deep_merge(DEFAULTS.transitive, { text = "Abbreviation of", phrase = "abbreviation of", abbrev = "abbr.", glossary = "abbreviation", aliases = { "abbr", "abbrev" }, })), ["syllabic abbreviation"] = create_keyword(deep_merge(DEFAULTS.transitive, { text = "Syllabic abbreviation of", phrase = "syllabic abbreviation of", abbrev = "syl. abbr.", glossary = "syllabic abbreviation", aliases = { "sylabbr", "sylabbrev" }, })), ["acronym"] = create_keyword(deep_merge(DEFAULTS.transitive, { text = "Acronym of", phrase = "acronym of", abbrev = "acronym", glossary = "acronym", aliases = { "acro" }, })), ["initialism"] = create_keyword(deep_merge(DEFAULTS.transitive, { text = "Initialism of", phrase = "initialism of", abbrev = "init.", glossary = "initialism", aliases = { "init" }, })), ["metathesis"] = create_keyword(deep_merge(DEFAULTS.transitive, { text = "Metathesis of", phrase = "metathesis of", abbrev = "meta.", glossary = "metathesis", toplevel_category = "words derived through metathesis", aliases = { "meta" }, })), -- -- Invisible keywords (no text output) -- ["root"] = create_keyword { transitive = TRANSITIVE.ALWAYS, invisible = "all", pos_override = "root", }, ["afeq"] = create_keyword(deep_merge(DEFAULTS.affix_group, { text = "From", phrase = "from", transitive = TRANSITIVE.NEVER, invisible = "all", })), } local aliases_to_register = {} local canonical_aliases = {} -- Map every keyword (canonical or alias) to its canonical form for consistent checks and tracking. export.keyword_canonical = {} for name, keyword_data in pairs(export.keywords) do export.keyword_canonical[name] = name if keyword_data.aliases then canonical_aliases[name] = keyword_data.aliases for _, alias in ipairs(keyword_data.aliases) do if export.keywords[alias] then error("Alias '" .. alias .. "' defined in keyword '" .. name .. "' collides with existing keyword '" .. alias .. "'.") end if aliases_to_register[alias] then error("Alias '" .. alias .. "' defined in keyword '" .. name .. "' is already claimed by another keyword.") end aliases_to_register[alias] = keyword_data export.keyword_canonical[alias] = name end keyword_data.aliases = nil end end for alias, data in pairs(aliases_to_register) do export.keywords[alias] = data end -- -- Language exception presets -- local EXCEPTION_PRESETS = { -- Fully disallowed: no tree, no text, no categories disallowed = { disallow = { tree = true, text = true }, suppress_categories = true, }, -- Suppress transliteration only no_translit = { suppress_tr = true, }, -- Suppress all categories only no_categories = { suppress_categories = true, }, } --[=[ Available exception options: disallow = { Related options for disallowing output: tree Disallow etymology trees for this language text Disallow etymology text generation for this language ref Reference link shown when tree/text is disallowed } suppress_tr Suppress transliteration in links suppress_categories Suppress all category generation normalize_to Normalize language code to a different code normalize_from_families Apply normalization to languages in these families normalize_exclude_families Exclude these families from normalization keyword_overrides Per-keyword categorisation overrides (e.g. { ["af"] = { transitive = TRANSITIVE.NEVER } }) ]=] local function create_exception(preset, overrides) local base = preset and EXCEPTION_PRESETS[preset] or {} return deep_merge(base, overrides or {}) end export.config = { lang_exceptions = { ["zh"] = create_exception("disallowed", { disallow = { ref = "[[Wiktionary:Beer parlour/2025/May#Template:etymon for Chinese]]" }, suppress_tr = true, normalize_to = "zh", normalize_from_families = { "zhx" }, normalize_exclude_families = { "qfa-cnt" }, }), }, } -- Supported codes for the nominalization <g:code> modifier (subset of common gender/number-style codes) export.nominalization_g_codes = { ["m"] = "masculine", ["f"] = "feminine", ["n"] = "neuter", ["c"] = "common", ["gneut"] = "gender-neutral", ["s"] = "singular", ["p"] = "plural", ["d"] = "dual", ["pauc"] = "paucal", ["mf"] = "masculine or feminine", ["fm"] = "masculine or feminine", ["mfn"] = "masculine, feminine or neuter", ["mnf"] = "masculine, feminine or neuter", ["fmn"] = "masculine, feminine or neuter", ["fnm"] = "masculine, feminine or neuter", ["nmf"] = "masculine, feminine or neuter", ["nfm"] = "masculine, feminine or neuter", } -- -- Propagate keyword overrides to aliases -- if export.config.lang_exceptions then for lang_code, exception in pairs(export.config.lang_exceptions) do if exception.keyword_overrides then for canonical, aliases in pairs(canonical_aliases) do if exception.keyword_overrides[canonical] then local override_data = exception.keyword_overrides[canonical] for _, alias in ipairs(aliases) do if not exception.keyword_overrides[alias] then exception.keyword_overrides[alias] = override_data end end end end end end end return export 192silgrvixc7wvmk5fi6803k4xcy7d 모듈:etymon/tree 828 496352 4484150 2026-05-24T08:42:43Z Jeebeen 13056 새 문서: local export = {} local html_create = mw.html.create local max = math.max local function create_vertical_connector() return html_create('span'):addClass('etytree-connector-vertical') end local function create_abbr(text, title, glossary) local abbr = html_create('abbr') :attr('title', title) :wikitext(text) if glossary then abbr = '[[Appendix:Glossary#' .. glossary .. '|' .. tostring(abbr) .. ']]' end return html_create('span'):addClass('etytree-label'):node(abbr)... 4484150 Scribunto text/plain local export = {} local html_create = mw.html.create local max = math.max local function create_vertical_connector() return html_create('span'):addClass('etytree-connector-vertical') end local function create_abbr(text, title, glossary) local abbr = html_create('abbr') :attr('title', title) :wikitext(text) if glossary then abbr = '[[Appendix:Glossary#' .. glossary .. '|' .. tostring(abbr) .. ']]' end return html_create('span'):addClass('etytree-label'):node(abbr) end local function create_uncertainty_marker() return html_create('abbr') :addClass('etytree-unc') :attr('title', 'uncertain') :wikitext('?') end local function create_label_container() return html_create('span'):addClass('etytree-label-container') end local function invisible_in_tree(inv) return inv == "all" or inv == true or inv == "tree" end local function render_label(term_block, keyword_info, keyword_modifiers, is_uncertain, is_group_child, term_labels) -- Skip label when invisible in tree local has_label = keyword_info and keyword_info.abbrev and not is_group_child and not invisible_in_tree(keyword_info.invisible) -- For group children, keyword uncertainty is shown on the group label, not on individual terms local keyword_uncertain = keyword_modifiers and keyword_modifiers.unc and not is_group_child local show_term_uncertainty = is_uncertain -- Check if we have term-specific labels local has_term_labels = term_labels and #term_labels > 0 if not has_label and not show_term_uncertainty and not keyword_uncertain and not has_term_labels then return end local label_span = create_label_container() if has_label then local glossary_title = keyword_info.glossary and keyword_info.glossary:gsub("_", " ") or keyword_info.abbrev label_span:node(create_abbr( keyword_info.abbrev, glossary_title, keyword_info.glossary )) -- Show uncertainty marker if term or keyword is uncertain if show_term_uncertainty or keyword_uncertain then label_span:node(create_uncertainty_marker()) end else -- No label, but term or keyword is uncertain if show_term_uncertainty or keyword_uncertain then label_span:node(create_uncertainty_marker()) end end -- Add term-specific labels if has_term_labels then for _, label_info in ipairs(term_labels) do label_span:node(create_abbr(label_info.abbrev, label_info.title, label_info.glossary)) end end term_block:node(label_span) end local function render_term_block(node_data, format_term_func, is_toplevel) local link_content = html_create() link_content :tag('span') :addClass('etyl') :wikitext(node_data.lang:getCanonicalName()) :done() local term_text = format_term_func(node_data, is_toplevel) if term_text then link_content :wikitext(' ') :tag('span') :addClass('etytree-term') :wikitext(term_text) :done() end local block = html_create('div'):addClass('etytree-block'):node(link_content) -- Add duplicate styling if this is a duplicate node if node_data.is_duplicate then block:addClass('etytree-duplicate') end return block end local function create_dotted_connector() return html_create('span'):addClass('etytree-connector-dotted') end -- Create an L-shaped connector for nodes with hidden ancestry (duplicate or no_child_categories) local function create_duplicate_connector() local container = html_create('div'):addClass('etytree-duplicate-connector') local inner_wrapper = container:tag('div') inner_wrapper:tag('span'):addClass('etytree-dup-right') inner_wrapper:tag('span'):addClass('etytree-dup-horiz') inner_wrapper:tag('span'):addClass('etytree-dup-left') inner_wrapper:tag('span'):addClass('etytree-dup-arrow'):wikitext('▲') return container end local function render_group_label(connecting_line, keyword_info, keyword_modifiers) local has_abbrev = keyword_info and keyword_info.abbrev local keyword_uncertain = keyword_modifiers and keyword_modifiers.unc -- Nothing to show if no abbrev and no uncertainty if not has_abbrev and not keyword_uncertain then return end local label_span = connecting_line:tag('span'):addClass('etytree-group-label') if has_abbrev then local glossary_title = keyword_info.glossary and keyword_info.glossary:gsub("_", " ") or keyword_info.abbrev label_span:node(create_abbr(keyword_info.abbrev, glossary_title, nil)) end -- Add uncertainty marker if keyword has <unc> modifier if keyword_uncertain then label_span:node(create_uncertainty_marker()) end end local function add_branch_connector(column, index, total) if index == 1 then column:tag('span'):addClass('etytree-branch-left') elseif index == total then column:tag('span'):addClass('etytree-branch-right') else column:tag('span'):addClass('etytree-connector-vertical-short') column:tag('span'):addClass('etytree-branch-mid') end end function export.render(opts) opts = opts or {} local data_tree = opts.data_tree local format_term_func = opts.format_term_func -- Forward declaration local render_term -- Render a container (keyword + its terms) local function render_container(container, is_toplevel) local keyword_info = container.keyword_info local keyword_modifiers = container.keyword_modifiers or {} local is_group = keyword_info and keyword_info.is_group local terms = container.terms or {} -- Skip container entirely only when invisible = "all" (or true) if keyword_info and invisible_in_tree(keyword_info.invisible) then return nil, 0, 0 end if #terms == 0 then return nil, 0, 0 end -- For no_child_categories keywords (calque, semantic loan, etc.), don't render term's children local skip_child_rendering = keyword_info and keyword_info.no_child_categories -- Render each term in the container local rendered_terms = {} local container_height = 0 local container_width = 0 for _, term in ipairs(terms) do -- Collect term-specific labels local term_labels = {} if term.bor then table.insert(term_labels, { abbrev = "bor.", title = "borrowed", glossary = "loanword" }) end if term.slbor then table.insert(term_labels, { abbrev = "slbor.", title = "semi-learned borrowing", glossary = "semi-learned_borrowing" }) end if term.lbor then table.insert(term_labels, { abbrev = "lbor.", title = "learned borrowing", glossary = "learned_borrowing" }) end local term_tree, term_height, term_width = render_term(term, keyword_info, keyword_modifiers, is_group, false, skip_child_rendering, term_labels) table.insert(rendered_terms, { tree = term_tree, height = term_height, width = term_width, is_uncertain = term.is_uncertain, }) container_height = max(container_height, term_height) container_width = container_width + term_width end local rendered_html local has_connector = false if #rendered_terms == 1 then -- Single term: just return it directly rendered_html = rendered_terms[1].tree container_height = rendered_terms[1].height container_width = rendered_terms[1].width else -- Multiple terms: group them together local subtree_container = html_create('div'):addClass('etytree-branch-group') for i, term_data in ipairs(rendered_terms) do local column = html_create('div'):addClass('etytree-branch') column:node(term_data.tree) add_branch_connector(column, i, #rendered_terms) subtree_container:node(column) end local connecting_line = create_vertical_connector() -- Add group label for group keywords if is_group and not invisible_in_tree(keyword_info.invisible) then render_group_label(connecting_line, keyword_info, keyword_modifiers) end rendered_html = html_create() :node(subtree_container) :node(connecting_line) has_connector = true end return rendered_html, container_height, container_width, has_connector end -- Render a term node render_term = function(term_node, keyword_info, keyword_modifiers, is_group_child, is_toplevel_term, skip_child_rendering, term_labels) local tree_width, tree_height = 0, 0 local subtrees = {} -- Process term's children (which are containers) local has_hidden_children = false if not term_node.is_duplicate and not skip_child_rendering then for _, container in ipairs(term_node.children or {}) do local subtree, sub_height, sub_width, subtree_has_connector = render_container(container, is_toplevel_term) if subtree then table.insert(subtrees, { tree = subtree, height = sub_height, width = sub_width, has_connector = subtree_has_connector, }) tree_height = max(tree_height, sub_height) tree_width = tree_width + sub_width end end elseif skip_child_rendering then -- Check if there are any visible children -- When stop_recursion is true, children aren't parsed, but has_visible_children flag is set if term_node.has_visible_children then has_hidden_children = true elseif term_node.children and #term_node.children > 0 then -- Fallback: check parsed children for visibility for _, container in ipairs(term_node.children) do local child_keyword_info = container.keyword_info if not (child_keyword_info and (child_keyword_info.invisible == "all" or child_keyword_info.invisible == true)) then has_hidden_children = true break end end end end local is_toplevel_node = (keyword_info == nil) local term_block = render_term_block(term_node, format_term_func, is_toplevel_node) render_label(term_block, keyword_info, keyword_modifiers, term_node.is_uncertain, is_group_child, term_labels or {}) local term_html = html_create() if #subtrees == 0 then local show_connector = (term_node.is_duplicate and term_node.original_has_children) or has_hidden_children if show_connector then term_html:node(create_duplicate_connector()) end term_html:node(term_block) tree_width = tree_width + 1 elseif #subtrees == 1 then term_html:node(subtrees[1].tree) if not subtrees[1].has_connector then term_html:node(create_vertical_connector()) end term_html:node(term_block) else -- Multiple containers: need to merge them local subtree_container = html_create('div'):addClass('etytree-branch-group') for i, subtree_data in ipairs(subtrees) do local column = html_create('div'):addClass('etytree-branch') column:node(subtree_data.tree) add_branch_connector(column, i, #subtrees) subtree_container:node(column) end local connecting_line = create_vertical_connector() term_html :node(subtree_container) :node(connecting_line) :node(term_block) end return term_html, tree_height + 1, tree_width end local final_tree, final_height, final_width = render_term(data_tree, nil, nil, false, true) local container = html_create('div') :addClass('etytree-body') :node(final_tree) return tostring(html_create('div') :addClass('etytree NavFrame') :attr('data-etytree-height', final_height) :attr('data-etytree-width', final_width) :tag('div') :addClass('NavHead') :tag('div') :wikitext('Etymology tree') :done() :done() :tag('div') :addClass('NavContent') :node(container) :done()) end return export ok2w6x96bozaxhyj2cy4qex9anfbtx5 모듈:etymon/text 828 496353 4484151 2026-05-24T08:43:22Z Jeebeen 13056 새 문서: local export = {} local loader = require("Module:module loader") local M = loader.init({ require = { en_utilities = "Module:en-utilities", references = "Module:references", }, loadData = { data = "Module:etymon/data", }, }) function export.render(opts) opts = opts or {} local data_tree = opts.data_tree local format_term_func = opts.format_term_func local max_depth = opts.max_depth local stop_at_blue_link = opts.stop_at_blue_link local curr_page = opts.curr_pag... 4484151 Scribunto text/plain local export = {} local loader = require("Module:module loader") local M = loader.init({ require = { en_utilities = "Module:en-utilities", references = "Module:references", }, loadData = { data = "Module:etymon/data", }, }) function export.render(opts) opts = opts or {} local data_tree = opts.data_tree local format_term_func = opts.format_term_func local max_depth = opts.max_depth local stop_at_blue_link = opts.stop_at_blue_link local curr_page = opts.curr_page local nodot = opts.nodot local stop_at_lang = opts.stop_at_lang local stop_at_lang_or_bluelink = opts.stop_at_lang_or_bluelink local children = data_tree.children if not children or #children == 0 then return "" end local top_l2 = data_tree.lang:getFullCode() .. ":" .. curr_page -- Get refs for a term local function get_term_refs(term, term_lang, depth) local term_l2 = term_lang:getFullCode() .. ":" .. curr_page if term.parsed_ref and (depth == 1 or term_l2 == top_l2) then return M.references.format_references(term.parsed_ref) end return "" end -- Build a text part for a single term local function build_term_part(term, current_lang, depth) local text = "" local new_lang = current_lang local lang_changed = term.lang:getCanonicalName() ~= current_lang:getCanonicalName() -- Use centralized format_term (handles suppress_term, unknown_term, and regular terms) local term_text = format_term_func(term) if lang_changed then new_lang = term.lang if term_text then text = term.lang:makeWikipediaLink() .. " " .. term_text elseif term.is_family then text = M.en_utilities.add_indefinite_article(term.lang:makeWikipediaLink() .. " language", false) else -- suppress_term with language change: show only language text = term.lang:makeWikipediaLink() end else text = term_text or "" end return { type = "term", text = text, refs = get_term_refs(term, new_lang, depth), lang = new_lang, is_uncertain = term.is_uncertain or false, } end -- Build text parts for a container local function build_container_part(container, node, depth, allow_continuation, fallback_to_bluelink) local keyword_info = container.keyword_info local keyword_modifiers = container.keyword_modifiers or {} local terms = container.terms or {} if not keyword_info or #terms == 0 then return nil end -- Skip building text part when invisible in text ("all", "text", or true) local inv = keyword_info.invisible if inv == "all" or inv == true or inv == "text" then return nil end local is_group = keyword_info.is_group local keyword_uncertain = keyword_modifiers.unc or false -- Determine text and phrase (allowing for overrides) local intro_text = keyword_info.text local phrase = keyword_info.phrase if keyword_modifiers.text then -- User-provided override: assumed to be lowercase phrase = keyword_modifiers.text -- Auto-capitalize for intro text (e.g., "derived from" -> "Derived from") intro_text = mw.ustring.upper(phrase:sub(1, 1)) .. phrase:sub(2) end -- Get keyword references local keyword_refs = "" if keyword_modifiers.ref then local parsed_keyword_refs = M.references.parse_references(keyword_modifiers.ref) if parsed_keyword_refs and parsed_keyword_refs ~= "" then keyword_refs = M.references.format_references(parsed_keyword_refs) end end -- Build term parts local term_parts = {} local current_lang = node.lang for _, term in ipairs(terms) do local term_part = build_term_part(term, current_lang, depth) if term_part.text ~= "" then table.insert(term_parts, term_part) current_lang = term_part.lang end end -- Check uncertainty distribution local uncertain_count = 0 for _, term_part in ipairs(term_parts) do if term_part.is_uncertain then uncertain_count = uncertain_count + 1 end end -- If keyword itself is uncertain, treat all terms as uncertain local all_uncertain = keyword_uncertain or (uncertain_count == #term_parts and #term_parts > 0) local has_mixed_uncertainty = not keyword_uncertain and uncertain_count > 0 and uncertain_count < #term_parts -- Check if there are more steps (only if continuation is allowed) local has_more_steps = false local next_node = nil local first_term = terms[1] -- Check if we should stop at this language local reached_stop_lang = false if stop_at_lang then for _, term in ipairs(terms) do if term.lang and term.lang:getCode() == stop_at_lang then reached_stop_lang = true break end end elseif stop_at_lang_or_bluelink then -- Check if we should stop at this language, or at the first bluelink if it's a redlink for _, term in ipairs(terms) do if term.lang and term.lang:getCode() == stop_at_lang_or_bluelink then if first_term.status == M.data.STATUS.OK then reached_stop_lang = true else fallback_to_bluelink = true end break end end if fallback_to_bluelink and first_term.status == M.data.STATUS.OK then reached_stop_lang = true end end if allow_continuation and not is_group and #terms == 1 and not reached_stop_lang then local first_term_children = first_term.children if first_term_children and #first_term_children > 0 and (not max_depth or depth < max_depth) then local next_container = first_term_children[1] local next_keyword_info = next_container and next_container.keyword_info if not (next_keyword_info and next_keyword_info.invisible) then if stop_at_blue_link then if first_term.status ~= M.data.STATUS.OK then has_more_steps = true next_node = first_term end else has_more_steps = true next_node = first_term end end end end return { type = "container", intro_text = intro_text, phrase = phrase, is_uncertain = all_uncertain, has_mixed_uncertainty = has_mixed_uncertainty, term_parts = term_parts, is_group = is_group, has_more_steps = has_more_steps, next_node = next_node, new_sentence = keyword_info.new_sentence or false, separate_clause = keyword_info.separate_clause or false, conj = keyword_modifiers.conj, -- custom conjunction: "and", "or", "and/or", etc. lit = keyword_modifiers.lit, keyword_refs = keyword_refs, fallback_to_bluelink = fallback_to_bluelink, } end -- Build the full tree of text parts local function build_text_tree(node, depth, allow_continuation, fallback_to_bluelink) local containers = node.children if not containers or #containers == 0 then return nil end local container_parts = {} -- Count containers that get a text part (invisible in text = "all", "text", or true) local visible_container_count = 0 for _, container in ipairs(containers) do local keyword_info = container.keyword_info local inv = keyword_info and keyword_info.invisible if not (inv == "all" or inv == true or inv == "text") then visible_container_count = visible_container_count + 1 end end -- If there are multiple visible containers at this level, don't allow continuation for any local has_multiple_containers = visible_container_count > 1 local should_allow_continuation = allow_continuation and not has_multiple_containers for _, container in ipairs(containers) do local part = build_container_part(container, node, depth, should_allow_continuation, fallback_to_bluelink) if part then -- Recursively build children if there are more steps if part.has_more_steps and part.next_node then part.continuation = build_text_tree(part.next_node, depth + 1, true, part.fallback_to_bluelink) end table.insert(container_parts, part) end end if #container_parts == 0 then return nil end return { type = "tree", container_parts = container_parts, depth = depth, } end -- Check if tree has mixed joining types local function check_complexity(tree) if not tree then return nil end local parts = tree.container_parts if #parts <= 1 then -- Single container if parts[1] and parts[1].continuation then return check_complexity(parts[1].continuation) end return nil end -- Multiple containers local has_or_join = false local has_new_sentence = false local has_separate_clause = false for i = 2, #parts do local part = parts[i] -- Ignore etydate parts for complexity checks if part.type ~= "etydate" then if part.new_sentence then has_new_sentence = true elseif part.separate_clause then has_separate_clause = true else has_or_join = true end end end local join_type_count = 0 if has_or_join then join_type_count = join_type_count + 1 end if has_new_sentence then join_type_count = join_type_count + 1 end if has_separate_clause then join_type_count = join_type_count + 1 end if join_type_count > 1 then error( "Cannot generate etymology text: mixed joining styles (e.g., alternatives joined with 'or' cannot be combined with calques or influences in the same list).") end return nil end -- Analyze tree and assign punctuation local function analyze_punctuation(tree, is_toplevel) if not tree then return end local parts = tree.container_parts local num_parts = #parts for i, part in ipairs(parts) do local is_first = (i == 1) local is_last = (i == num_parts) local next_part = parts[i + 1] -- Analyze term punctuation within container -- Terms use Oxford comma style: "A, B, or C" -- Custom conjunction can be specified via conj modifier (e.g., "and/or", "and") local num_terms = #part.term_parts local term_conj = part.conj or "or" -- default to "or" for j, term_part in ipairs(part.term_parts) do local is_last_term = (j == num_terms) if part.is_group then -- Group: terms joined with " + " term_part.joiner = is_last_term and "" or " + " elseif num_terms > 1 then -- Multiple terms not in a group: Oxford comma style if is_last_term then term_part.joiner = "" elseif j == num_terms - 1 then -- Second to last term if num_terms == 2 then term_part.joiner = " " .. term_conj .. " " else term_part.joiner = ", " .. term_conj .. " " end else term_part.joiner = ", " end else -- Single term term_part.joiner = "" end end -- Determine container punctuation based on what comes next if part.continuation then -- Has continuation part.punctuation = "," -- Recursively analyze continuation analyze_punctuation(part.continuation, false) elseif is_last then -- Last container part.punctuation = (is_toplevel and nodot) and "" or "." elseif next_part and next_part.new_sentence then -- Next container starts a new sentence part.punctuation = "." elseif next_part and next_part.separate_clause then -- Next container is a separate clause part.punctuation = "," else -- Not last, next is joined with "or" -- Containers use repeated "or" style: "A, or B, or C" part.punctuation = "," end -- Determine joiner to next part -- Containers use repeated "or" style: ", or" between each -- Custom conjunction can be specified via conj modifier local container_conj = part.conj or "or" -- default to "or" if not is_last then if next_part and next_part.new_sentence then -- New sentence part.joiner = " " elseif next_part and next_part.separate_clause then -- Separate clause part.joiner = " " else -- Same sentence: use custom conjunction or default "or" part.joiner = " " .. container_conj .. " " end else part.joiner = "" end -- Determine intro formatting -- Capitalize if first at top level, OR if this container starts a new sentence if (is_first and is_toplevel) or part.new_sentence then part.intro_capitalized = true part.use_full_intro = true else part.intro_capitalized = false part.use_full_intro = false end end end -- Assemble text from analyzed tree local function assemble_text(tree) if not tree then return "" end local result = "" for i, part in ipairs(tree.container_parts) do if part.type == "etydate" then result = result .. part.etydate_text if part.punctuation and part.punctuation ~= "" then result = result .. part.punctuation end if part.etydate_refs and next(part.etydate_refs) then result = result .. M.references.format_references(part.etydate_refs) end if part.joiner and part.joiner ~= "" then result = result .. part.joiner end else -- Build intro local intro if part.use_full_intro then if part.is_uncertain then intro = "Possibly " .. part.phrase else intro = part.intro_text end else if part.is_uncertain then intro = "possibly " .. part.phrase else intro = part.phrase end end result = result .. intro -- Build terms if #part.term_parts > 0 then result = result .. " " for j, term_part in ipairs(part.term_parts) do -- Add "possibly" prefix for uncertain terms when there's mixed uncertainty if part.has_mixed_uncertainty and term_part.is_uncertain then result = result .. "possibly " end result = result .. term_part.text -- Add joiner between terms if term_part.joiner ~= "" then -- Check if joiner contains comma (punctuation) local comma_pos = term_part.joiner:find(",") if comma_pos then -- Add up to and including comma result = result .. term_part.joiner:sub(1, comma_pos) -- Add refs after comma if term_part.refs ~= "" then result = result .. term_part.refs end -- Add rest of joiner result = result .. term_part.joiner:sub(comma_pos + 1) else -- No comma, add refs before joiner if term_part.refs ~= "" then result = result .. term_part.refs end result = result .. term_part.joiner end end end -- For the last term, add punctuation then refs local last_term = part.term_parts[#part.term_parts] if last_term and last_term.joiner == "" then if part.punctuation ~= "" then -- If we have literal text, punctuation goes AFTER it if part.lit then -- Add refs first (attached to term) if last_term.refs ~= "" then result = result .. last_term.refs end -- Add keyword refs if part.keyword_refs and part.keyword_refs ~= "" then result = result .. part.keyword_refs end -- Add literal text result = result .. ", literally “" .. part.lit .. "”" -- Add punctuation result = result .. part.punctuation else -- Normal behavior: punctuation then refs result = result .. part.punctuation if last_term.refs ~= "" then result = result .. last_term.refs end -- Add keyword refs after term refs if part.keyword_refs and part.keyword_refs ~= "" then result = result .. part.keyword_refs end end else -- No punctuation if last_term.refs ~= "" then result = result .. last_term.refs end -- Add keyword refs if part.keyword_refs and part.keyword_refs ~= "" then result = result .. part.keyword_refs end -- Add literal text if present (even without punctuation) if part.lit then result = result .. ", literally “" .. part.lit .. "”" end end end else -- No terms, just add punctuation and keyword refs if part.punctuation ~= "" then result = result .. part.punctuation end -- Add keyword refs even when there are no terms if part.keyword_refs and part.keyword_refs ~= "" then result = result .. part.keyword_refs end end -- Add continuation if part.continuation then result = result .. " " .. assemble_text(part.continuation) end -- Add joiner to next container if part.joiner ~= "" then result = result .. part.joiner end end end return result end local text_tree = build_text_tree(data_tree, 1, true, false) if not text_tree then return "" end -- Add etydate container if data_tree.etydate and data_tree.etydate ~= "" then table.insert(text_tree.container_parts, { type = "etydate", etydate_text = data_tree.etydate, etydate_refs = data_tree.etydate_refs, term_parts = {}, new_sentence = true, }) end check_complexity(text_tree) analyze_punctuation(text_tree, true) return assemble_text(text_tree) end return export apkzd2ykoxaur8xi7e7q6ckn0p4heg1 모듈:etymon/categories 828 496354 4484152 2026-05-24T08:43:50Z Jeebeen 13056 새 문서: local export = {} local M = require("Module:module loader").init({ require = { etymology = "Module:etymology", affix = "Module:affix", etymology_specialized = "Module:etymology/specialized", utilities = "Module:utilities", }, loadData = { data = "Module:etymon/data", }, }) -- Evaluate whether a keyword is transitive for a given term local function is_transitive(transitive_mode, page_lang, term_lang) if transitive_mode == M.data.TRANSITIVE.ALWAYS then return tr... 4484152 Scribunto text/plain local export = {} local M = require("Module:module loader").init({ require = { etymology = "Module:etymology", affix = "Module:affix", etymology_specialized = "Module:etymology/specialized", utilities = "Module:utilities", }, loadData = { data = "Module:etymon/data", }, }) -- Evaluate whether a keyword is transitive for a given term local function is_transitive(transitive_mode, page_lang, term_lang) if transitive_mode == M.data.TRANSITIVE.ALWAYS then return true elseif transitive_mode == M.data.TRANSITIVE.NEVER then return false elseif transitive_mode == M.data.TRANSITIVE.CROSS_LANG then return page_lang:getCode() ~= term_lang:getCode() elseif transitive_mode == M.data.TRANSITIVE.CROSS_LANG_NO_INTERNAL_SOURCE then return page_lang:getCode() ~= term_lang:getCode() end error("Unknown transitive mode: " .. tostring(transitive_mode)) end -- Get keyword config with language-specific overrides local function get_keyword_config(keyword, lang_exc) local base_config = M.data.keywords[keyword] if not base_config then return nil -- Invalid keyword end local overrides = lang_exc and lang_exc.keyword_overrides and lang_exc.keyword_overrides[keyword] if not overrides then return base_config end -- Merge overrides into base config local merged = {} for k, v in pairs(base_config) do merged[k] = v end for k, v in pairs(overrides) do merged[k] = v end return merged end function export.get_cat_name(source) local _, cat_name = M.etymology.get_display_and_cat_name(source, true) return cat_name end -- Normalize affix type aliases local aftype_aliases = { ["pre"] = "prefix", ["suf"] = "suffix", ["in"] = "infix", ["inter"] = "interfix", ["circum"] = "circumfix", ["naf"] = "non-affix", ["root"] = "non-affix", } local function add_category(categories, cat_name, sort_key, sort_base) if categories[cat_name] == nil then categories[cat_name] = { sort_key = sort_key, sort_base = sort_base, } return end local existing = categories[cat_name] if existing.sort_key == nil and sort_key ~= nil then existing.sort_key = sort_key end if existing.sort_base == nil and sort_base ~= nil then existing.sort_base = sort_base end end -- Collect affix categories from top-level group containers local function collect_affix_categories(node, page_lang, available_etymon_ids, senseid_parent_etymon, lang_exc) local parts = {} local part_index = 1 for _, container in ipairs(node.children or {}) do local config = container.keyword_info if config and config.affix_categories then for _, term in ipairs(container.terms or {}) do if not term.unknown_term then local part_data = { term = term.title, tr = term.tr, ts = term.ts, alt = term.alt, itemno = part_index, orig_index = part_index } -- Determine affix type: explicit aftype > pos=root > auto-detect local aftype = term.aftype if aftype then aftype = aftype_aliases[aftype] or aftype part_data.type = aftype elseif term.args and term.args.pos and term.args.pos == "root" then part_data.type = "non-affix" end if term.lang:getCode() ~= page_lang:getCode() then part_data.lang = term.lang end local target_ids = available_etymon_ids[term.target_key] local has_multiple_ids = target_ids and #target_ids > 1 local id_exists_in_disambiguation = false local matched_id = nil -- Count available senseids for the target page local senseid_count = 0 local target_prefix = term.target_key .. ":" if senseid_parent_etymon then for key, _ in pairs(senseid_parent_etymon) do if key:sub(1, #target_prefix) == target_prefix then senseid_count = senseid_count + 1 end end end local has_multiple_senseids = senseid_count > 1 if term.id then -- Check if user provided a valid senseid local senseid_key = term.target_key .. ":" .. term.id if senseid_parent_etymon and senseid_parent_etymon[senseid_key] then if has_multiple_senseids then -- Ambiguous senseid: use senseid matched_id = term.id id_exists_in_disambiguation = true elseif has_multiple_ids then -- Unique senseid but ambiguous etymon: use etymon ID matched_id = term.etymon_id or term.id id_exists_in_disambiguation = true end else -- Check if user provided a valid etymon ID if has_multiple_ids and target_ids then for _, id_data in ipairs(target_ids) do local stored_id = type(id_data) == "table" and id_data.id or id_data if stored_id == term.id then -- Ambiguous etymon: use etymon ID id_exists_in_disambiguation = true matched_id = term.id break end end end -- Fallback: check resolved etymon_id (e.g. from previous steps) if not id_exists_in_disambiguation and has_multiple_ids and term.etymon_id and target_ids then for _, id_data in ipairs(target_ids) do local stored_id = type(id_data) == "table" and id_data.id or id_data if stored_id == term.etymon_id then id_exists_in_disambiguation = true matched_id = term.etymon_id break end end end end end -- Use the matched ID if found if term.override or id_exists_in_disambiguation then part_data.id = matched_id or term.id end table.insert(parts, part_data) part_index = part_index + 1 end end end end if #parts == 0 then return {} end local affix_data = { lang = page_lang, parts = parts, pos = "term", sort_key = nil, } if #parts == 1 then affix_data.allow_no_affixes_or_compounds = true end local affix_categories = M.affix.get_affix_categories_only(affix_data) local result = {} for _, cat in ipairs(affix_categories) do if type(cat) == "table" then table.insert(result, { cat = cat.cat, sort_key = cat.sort_key, sort_base = cat.sort_base }) else table.insert(result, { cat = cat }) end end return result end -- Add borrowing-related categories (top-level only) local function collect_borrowing_categories(categories, page_lang, term, config) if config.borrowing_type == "borrowed" then local temp_categories = {} M.etymology.insert_borrowed_cat(temp_categories, page_lang, term.lang) for _, cat in ipairs(temp_categories) do add_category(categories, cat) end end if config.specialized_borrowing then local result = M.etymology_specialized.specialized_borrowing { bortype = config.specialized_borrowing, lang = page_lang, sources = { term.lang }, terms = { { lang = term.lang, term = "-" } }, notext = true, nocat = false, } for cat_name in result:gmatch("%[%[Category:([^%]]+)%]%]") do add_category(categories, cat_name) end end end -- Add source-based derivation categories (top-level only) local function collect_source_derivation_categories(categories, page_lang, term, config) if not config.source_category_type then return end local temp_categories = {} M.etymology.insert_source_cat_get_display { lang = page_lang, source = term.lang, categories = temp_categories, borrowing_type = config.source_category_type, nocat = false, } for _, cat in ipairs(temp_categories) do add_category(categories, cat) end end -- Add source language categories local function collect_source_categories(categories, page_lang, term, chain, get_norm_lang_func) if page_lang:getCode() == get_norm_lang_func(term.lang):getCode() then return end local temp_categories = {} M.etymology.insert_source_cat_get_display { lang = page_lang, source = term.lang, categories = temp_categories, nocat = false, } for _, cat in ipairs(temp_categories) do add_category(categories, cat) end if chain.inherited then temp_categories = {} M.etymology.insert_source_cat_get_display { lang = page_lang, source = term.lang, categories = temp_categories, borrowing_type = "terms inherited", nocat = false, } for _, cat in ipairs(temp_categories) do add_category(categories, cat) end end end -- Add root/word categories local function collect_pos_categories(categories, page_lang, root_title, term, available_etymon_ids, chain, get_norm_lang_func, lang_exc, keyword) local pos_types = { root = "root", word = "word" } -- Determine pos: from term's postype, keyword's pos_override, or args.pos local pos local config = get_keyword_config(keyword, lang_exc) if term.postype then -- Term-level postype modifier takes highest priority pos = term.postype elseif config and config.pos_override then pos = config.pos_override elseif type(term.args) == "table" and term.args.pos then pos = term.args.pos end local pos_type = pos_types[pos] if not pos_type or term.unknown_term then return end -- Skip root/word categories for descendants of affix groups -- if pos_type then -- return -- end local same_language = get_norm_lang_func(page_lang):getFullCode() == get_norm_lang_func(term.lang):getFullCode() -- Skip self-references if same_language and root_title == term.title then return end -- Use makeEntryName to strip diacritics for category names local entry_name = term.lang:makeEntryName(term.title) local lang_name = page_lang:getCanonicalName() local cat_name if chain.passed_through then local etymon_lang_name = export.get_cat_name(term.lang) cat_name = lang_name .. " terms derived from the " .. etymon_lang_name .. " " .. pos_type .. " " .. entry_name else cat_name = lang_name .. " terms belonging to the " .. pos_type .. " " .. entry_name end -- Add ID disambiguation if needed (for roots/words: use etymon_id if resolved via senseid, otherwise use id) local target_ids = available_etymon_ids[term.target_key] local effective_id = term.etymon_id or term.id -- etymon_id if senseid, otherwise id is already an etymon id if target_ids and effective_id then local same_pos_count = 0 for _, id_data in ipairs(target_ids) do if type(id_data) == "table" and id_data.pos == pos then same_pos_count = same_pos_count + 1 end end if same_pos_count > 1 then cat_name = cat_name .. " (" .. effective_id .. ")" end end add_category(categories, cat_name) end -- Compute chain state for a term based on parent chain and keyword config -- Hyphen patterns for affix detection (regular hyphen + script-specific) local AFFIX_HYPHEN_PATTERN = "[%-%־ـ᠊]" -- regular hyphen, Hebrew maqqef, Arabic tatweel, Mongolian hyphen -- Check if a term is an actual affix (not a non-affix member of an affix group) local function is_actual_affix(term) -- Check explicit aftype modifier if term.aftype then local normalized = aftype_aliases[term.aftype] or term.aftype return normalized ~= "non-affix" end -- Check if pos=root (treated as non-affix) if term.args and term.args.pos and term.args.pos == "root" then return false end -- Auto-detect by hyphen: prefix ends with -, suffix starts with -, etc. if term.title then local title = term.title -- Strip leading * for reconstructed terms before checking hyphens title = title:gsub("^%*", "") -- Check for hyphens at start or end (handles script-specific hyphens too) if title:match("^" .. AFFIX_HYPHEN_PATTERN) or title:match(AFFIX_HYPHEN_PATTERN .. "$") then return true end end -- Default: not an affix return false end local function compute_category_chain(parent_chain, config, page_lang, term_lang, get_norm_lang_func, parent_term_lang, term) -- Track if we're inside an actual affix (for suppressing root categories on descendants) -- Only set if the term is an actual affix (prefix, suffix, etc.), not a non-affix member local inside_affix = parent_chain.inside_affix if config.affix_categories and term and is_actual_affix(term) then inside_affix = true end -- If no_child_categories is set, disable everything if config.no_child_categories then return { passed_through = parent_chain.passed_through or page_lang:getCode() ~= get_norm_lang_func(term_lang):getCode(), inherited = false, source = false, pos = false, recurse = false, inside_affix = inside_affix, } end local term_is_transitive = is_transitive(config.transitive, page_lang, term_lang) local new_source = parent_chain.source and term_is_transitive -- For CROSS_LANG_NO_INTERNAL_SOURCE: track internal derivation language context -- Check if this term is internal relative to parent term's language (if parent_term_lang provided) -- or relative to page language (if no parent_term_lang) local internal_lang = parent_chain.internal_lang local is_internal_in_context = false if config.transitive == M.data.TRANSITIVE.CROSS_LANG_NO_INTERNAL_SOURCE then local check_lang = parent_term_lang or page_lang local term_lang_code = get_norm_lang_func(term_lang):getCode() local check_lang_code = get_norm_lang_func(check_lang):getCode() if internal_lang then -- Already in an internal derivation context: check if this term is also internal is_internal_in_context = term_lang_code == internal_lang else -- Check if this term is internal relative to parent term (or page if no parent) is_internal_in_context = term_lang_code == check_lang_code end end -- Source chain behavior for CROSS_LANG_NO_INTERNAL_SOURCE if config.transitive == M.data.TRANSITIVE.CROSS_LANG_NO_INTERNAL_SOURCE then if is_internal_in_context then -- Internal derivation new_source = false internal_lang = get_norm_lang_func(term_lang):getCode() else -- Cross-language new_source = parent_chain.source and term_is_transitive internal_lang = nil end end local new_pos = parent_chain.pos return { passed_through = parent_chain.passed_through or page_lang:getCode() ~= get_norm_lang_func(term_lang):getCode(), inherited = parent_chain.inherited and config.inherited_chain, source = new_source, pos = new_pos, internal_lang = internal_lang, recurse = new_source or new_pos, inside_affix = inside_affix, } end function export.render(opts) opts = opts or {} local data_tree = opts.data_tree local page_lang = opts.page_lang local available_etymon_ids = opts.available_etymon_ids local senseid_parent_etymon = opts.senseid_parent_etymon local get_norm_lang_func = opts.get_norm_lang_func local lang_exc = opts.lang_exc local categories = {} local seen = {} local lang_name = page_lang:getCanonicalName() local root_title = data_tree.title -- Collect the tree recursively local function collect(node, parent_chain, is_toplevel) -- Avoid processing same node twice if not node.unknown_term and node.title then local key = node.lang:getFullCode() .. ":" .. (node.title or "") .. ":" .. (node.id or "") if seen[key] then return end seen[key] = true end -- Collect affix categories at top level only if is_toplevel then local affix_cats = collect_affix_categories(node, page_lang, available_etymon_ids, senseid_parent_etymon, lang_exc) for _, cat in ipairs(affix_cats) do add_category(categories, lang_name .. " " .. cat.cat, cat.sort_key, cat.sort_base) end end -- Process each container for _, container in ipairs(node.children or {}) do local keyword = container.keyword local config = get_keyword_config(keyword, lang_exc) -- Skip invalid keywords if config then -- Process each term in the container for _, term in ipairs(container.terms or {}) do local term_chain = compute_category_chain(parent_chain, config, page_lang, term.lang, get_norm_lang_func, node.lang, term) local no_child_categories = config.no_child_categories == true local term_is_transitive = is_transitive(config.transitive, page_lang, term.lang) -- Top-level only processing if is_toplevel then -- Missing/ambiguous etymon tracking if not term.unknown_term and (term.status == M.data.STATUS.MISSING or term.status == M.data.STATUS.REDLINK) then add_category(categories, lang_name .. " entries referencing missing etymons") end if not term.unknown_term and term.status == M.data.STATUS.AMBIGUOUS then add_category(categories, lang_name .. " entries referencing ambiguous etymons") end if term.missing_descendants_header then add_category(categories, lang_name .. " entries referencing etymons without Descendants sections") end if term.missing_descendants_entry then add_category(categories, lang_name .. " entries referencing etymons without this term in Descendants sections") end -- Top-level category (e.g., "undefined derivations") if config.toplevel_category then add_category(categories, lang_name .. " " .. config.toplevel_category) end -- Borrowing categories (bor, lbor, slbor, ubor, obor) if config.borrowing_type or config.specialized_borrowing then collect_borrowing_categories(categories, page_lang, term, config) end -- Borrowing categories from <bor>, <lbor>, or <slbor> modifiers on :af/:surf terms if keyword == "affix" or keyword == "surf" then if term.bor then local bor_config = { borrowing_type = "borrowed" } collect_borrowing_categories(categories, page_lang, term, bor_config) elseif term.lbor then local bor_config = { specialized_borrowing = "learned" } collect_borrowing_categories(categories, page_lang, term, bor_config) elseif term.slbor then local bor_config = { specialized_borrowing = "semi-learned" } collect_borrowing_categories(categories, page_lang, term, bor_config) end end -- Source-based derivation categories (sl, calque, pcal) if config.source_category_type then collect_source_derivation_categories(categories, page_lang, term, config) end -- Skip all child categorisation if no_child_categories is set if not no_child_categories then -- Source categories only if transitive if term_is_transitive then collect_source_categories(categories, page_lang, term, term_chain, get_norm_lang_func) end -- Pos categories always (unless no_child_categories) collect_pos_categories(categories, page_lang, root_title, term, available_etymon_ids, term_chain, get_norm_lang_func, lang_exc, keyword) end else -- Below top level, respect the parent chain if parent_chain.source then collect_source_categories(categories, page_lang, term, term_chain, get_norm_lang_func) end if parent_chain.pos then collect_pos_categories(categories, page_lang, root_title, term, available_etymon_ids, term_chain, get_norm_lang_func, lang_exc, keyword) end end -- Recurse into term's children if needed and status allows if term_chain.recurse and (term.status == M.data.STATUS.OK or term.status == M.data.STATUS.INLINE) then collect(term, term_chain, false) end end end end end -- Initial chain state local initial_chain = { passed_through = false, inherited = true, source = true, pos = true, internal_lang = nil, recurse = true, inside_affix = false, } collect(data_tree, initial_chain, true) local cat_list = {} for cat_name, sort_data in pairs(categories) do if sort_data.sort_key ~= nil or sort_data.sort_base ~= nil then table.insert(cat_list, { name = cat_name, sort_key = sort_data.sort_key, sort_base = sort_data.sort_base, }) else table.insert(cat_list, cat_name) end end return cat_list end function export.format(entries, lang) if type(entries) ~= "table" or #entries == 0 then return "" end local parts = {} for _, category in ipairs(entries) do if type(category) == "table" and type(category.name) == "string" then table.insert(parts, M.utilities.format_categories({ category.name }, lang, category.sort_key, category.sort_base)) elseif type(category) == "string" then table.insert(parts, M.utilities.format_categories({ category }, lang)) end end return table.concat(parts) end return export qaazt3r5h8qyyj6gn4rl4zbmoaycwgt ເປັດ 0 496355 4484154 2026-05-24T09:18:33Z Apisite 21408 새 문서: {{참고|ເປີດ}} == 라오어 == === 어원 === {{inh|lo|tai-pro|*pitᴰ}} === 발음 === {{IPA|pet̚˧˥|비엔티안}} {{IPA|pet̚˩˨|루앙프라방}} === 명사 === {{head|lo|명사}} # [[오리]] [[분류:라오어 동물]] 4484154 wikitext text/x-wiki {{참고|ເປີດ}} == 라오어 == === 어원 === {{inh|lo|tai-pro|*pitᴰ}} === 발음 === {{IPA|pet̚˧˥|비엔티안}} {{IPA|pet̚˩˨|루앙프라방}} === 명사 === {{head|lo|명사}} # [[오리]] [[분류:라오어 동물]] nzawmdlu9j0idn2odel636o3ayod5nd ᥙᥥᥖᥱ 0 496356 4484155 2026-05-24T09:59:15Z Apisite 21408 새 문서: == 따이느아어 == === 어원 === {{inh|tdd|tai-pro|*pitᴰ}} === 발음 === {{IPA|pet˩˩}} === 명사 === {{head|tdd|명사}} # [[오리]] [[분류:따이느아어 동물]] 4484155 wikitext text/x-wiki == 따이느아어 == === 어원 === {{inh|tdd|tai-pro|*pitᴰ}} === 발음 === {{IPA|pet˩˩}} === 명사 === {{head|tdd|명사}} # [[오리]] [[분류:따이느아어 동물]] cw19uyrjovsj1d9w841ukww8zj28267 ᦵᦔᧆ 0 496357 4484156 2026-05-24T10:00:48Z Apisite 21408 새 문서: == 따이르어 == === 어원 === {{inh|khb|tai-pro|*pitᴰ}} === 발음 === {{IPA|pet̚˧˥}} === 명사 === {{head|khb|명사}} # [[오리]] [[분류:따이르어 동물]] 4484156 wikitext text/x-wiki == 따이르어 == === 어원 === {{inh|khb|tai-pro|*pitᴰ}} === 발음 === {{IPA|pet̚˧˥}} === 명사 === {{head|khb|명사}} # [[오리]] [[분류:따이르어 동물]] tcwr2cpvs4f8gs4uuaed2f7a3nl5ppx ꪹꪜꪸꪒ 0 496358 4484157 2026-05-24T10:02:08Z Apisite 21408 새 문서: == 따이담어 == === 어원 === {{inh|blt|tai-pro|*pitᴰ}} === 발음 === {{IPA|pet̚˦˥}} === 명사 === {{head|blt|명사}} # [[오리]] [[분류:따이담어 동물]] 4484157 wikitext text/x-wiki == 따이담어 == === 어원 === {{inh|blt|tai-pro|*pitᴰ}} === 발음 === {{IPA|pet̚˦˥}} === 명사 === {{head|blt|명사}} # [[오리]] [[분류:따이담어 동물]] ke2l95z73ktc9bi78xc01dqcjxgyqv6 ပဵတ်း 0 496359 4484158 2026-05-24T10:03:29Z Apisite 21408 새 문서: == 샨어 == === 어원 === {{inh|shn|tai-pro|*pitᴰ}} === 발음 === {{IPA|pet̚˥}} === 명사 === {{head|shn|명사}} # [[오리]] [[분류:샨어 동물]] 4484158 wikitext text/x-wiki == 샨어 == === 어원 === {{inh|shn|tai-pro|*pitᴰ}} === 발음 === {{IPA|pet̚˥}} === 명사 === {{head|shn|명사}} # [[오리]] [[분류:샨어 동물]] cyacwshj9n38m3urlx34q5ksn362xfp