Wiktionary
zhwiktionary
https://zh.wiktionary.org/wiki/Wiktionary:%E9%A6%96%E9%A1%B5
MediaWiki 1.46.0-wmf.24
case-sensitive
Media
Special
Talk
User
User talk
Wiktionary
Wiktionary talk
File
File talk
MediaWiki
MediaWiki talk
Template
Template talk
Help
Help talk
Category
Category talk
Appendix
Appendix talk
Transwiki
Transwiki talk
Rhymes
Rhymes talk
Thesaurus
Thesaurus talk
Citations
Citations talk
Reconstruction
Reconstruction talk
TimedText
TimedText talk
Module
Module talk
Event
Event talk
Wiktionary:统计
4
1718
9739197
9739102
2026-04-21T04:18:48Z
TongcyBot
83009
機器人:更新每日統計數據 (2026-04-21)
9739197
wikitext
text/x-wiki
{{Interwiki}}
{{shortcut|WT:STAT}}
==基本資料==
{| class="wikitable"
! 項目 !! 資料
|-
! MediaWiki版本
| {{CURRENTVERSION}}
|-
! 詞條數量
| [[Special:Statistics|'''{{NUMBEROFARTICLES}}''']]
|-
! 總頁面數
| {{NUMBEROFPAGES}}
|-
! 已編碼的語言數量
| {{#invoke:list of languages|count}}
|-
! 檔案數量
| {{NUMBEROFFILES}}
|-
! 註冊用戶數
| {{NUMBEROFUSERS}}
|-
! 活躍用戶數
| {{NUMBEROFACTIVEUSERS}}
|-
! 管理員數量
| {{NUMBEROFADMINS}}
|-
! 全站頁面編輯次數
| {{NUMBEROFEDITS}}
|}
其他資料請參考[[Special:Statistics]]。
==頁面==
本表是中文维基詞典詞條数依日期到達的里程碑,以每一万个词条为单位计数。<!-- 以下內容已不再更新
* 近期統計圖表(區分機器人與一般用戶,選擇zhwiktionary_p,每日自動更新):[https://tools.wmflabs.org/wmcharts/wmchart0001.php 編輯次數]{{·}}[https://tools.wmflabs.org/wmcharts/wmchart0002.php 新增詞條數量]-->
* 目前的詞條數:'''{{NUMBEROFARTICLES}}'''({{重新整理|更新}})。
{{Milestone}}
==与相邻语言版本的比较==
中文维基词典词条收录量为'''{{NUMBEROFARTICLES}}''',在所有语言版本的詞典中[[meta:Wiktionary#List of Wiktionaries|'''位列第4''']]。
{{autoStat
| 2026-02-01
| fr | mg | zh | th | el
| 6850004 | 5845024 | 2275887 | 2175551 | 1573098
| 6850345 | 5845584 | 2276308 | 2175582 | 1573160
| 6850725 | 5847457 | 2276767 | 2175584 | 1573720
| 6851652 | 5849481 | 2277384 | 2175591 | 1573803
| 6852713 | 5852239 | 2278184 | 2175597 | 1573831
| 6853652 | 5854745 | 2278668 | 2175597 | 1573875
| 6854600 | 5856400 | 2279159 | 2175597 | 1573904
| 6855269 | 5860021 | 2279717 | 2175602 | 1573931
| 6856995 | 5861650 | 2280111 | 2175602 | 1573974
| 6858496 | 5861925 | 2280523 | 2175606 | 1574010
| 6859068 | 5863378 | 2281180 | 2175610 | 1574059
| 6859550 | 5864820 | 2281779 | 2175648 | 1574065
| 6860006 | 5865410 | 2282233 | 2175659 | 1574108
| 6860511 | 5865582 | 2282764 | 2175691 | 1574175
| 6860894 | 5866847 | 2283304 | 2175722 | 1574205
| 6861223 | 5868427 | 2283693 | 2175727 | 1574260
| 6861776 | 5870004 | 2284109 | 2175731 | 1574300
| 6862419 | 5870602 | 2284590 | 2175734 | 1574418
| 6863171 | 5871562 | 2285025 | 2175734 | 1574468
| 6863586 | 5872064 | 2285424 | 2175734 | 1574488
| 6863905 | 5872518 | 2285789 | 2175734 | 1574553
| 6864178 | 5873120 | 2286234 | 2175737 | 1574625
| 6864939 | 5874299 | 2286358 | 2175737 | 1574686
| 6865748 | 5875396 | 2286601 | 2175740 | 1574811
| 6866095 | 5876150 | 2286788 | 2175755 | 1574836
| 6866383 | 5876434 | 2286940 | 2175773 | 1574851
| 6866628 | 5876827 | 2287042 | 2175802 | 1574888
| 6866824 | 5878178 | 2287263 | 2175826 | 1574899
| 6866983 | 5878642 | 2287576 | 2175826 | 1574938
| 6868401 | 5879172 | 2287835 | 2175826 | 1574971
| 6870969 | 5879759 | 2287936 | 2175826 | 1575014
| 6871411 | 5880264 | 2288163 | 2175841 | 1575058
| 6871620 | 5880715 | 2288369 | 2175842 | 1575109
| 6872279 | 5881198 | 2288782 | 2175843 | 1575128
| 6872643 | 5882593 | 2289039 | 2175847 | 1575136
| 6873266 | 5882979 | 2289415 | 2175853 | 1575156
| 6873836 | 5883429 | 2289897 | 2175865 | 1575267
| 6875329 | 5883913 | 2290462 | 2175865 | 1575332
| 6876008 | 5884173 | 2290771 | 2175878 | 1575409
| 6876464 | 5884543 | 2291515 | 2175911 | 1575420
| 6877010 | 5884931 | 2292095 | 2175918 | 1575435
| 6877547 | 5885272 | 2292622 | 2175942 | 1575463
| 6877943 | 5886541 | 2293083 | 2175943 | 1575552
| 6878381 | 5887036 | 2293568 | 2175945 | 1575573
| 6879395 | 5887590 | 2294058 | 2175958 | 1575611
| 6881230 | 5888336 | 2294618 | 2175958 | 1575635
| 6881775 | 5889592 | 2295438 | 2176041 | 1575648
| 6882626 | 5890596 | 2295985 | 2176211 | 1575664
| 6883590 | 5891531 | 2296470 | 2176221 | 1575697
| 6884275 | 5892220 | 2296891 | 2176228 | 1575730
| 6885464 | 5892627 | 2297611 | 2176231 | 1575751
| 6886165 | 5892866 | 2298294 | 2176232 | 1575826
| 6887008 | 5893349 | 2298804 | 2176360 | 1575843
| 6888862 | 5893938 | 2299891 | 2176454 | 1575864
| 6890874 | 5894702 | 2300481 | 2176467 | 1575898
| 6891828 | 5895850 | 2301143 | 2176502 | 1575950
| 6892318 | 5896168 | 2301819 | 2176584 | 1575960
| 6892652 | 5896455 | 2306423 | 2176588 | 1575980
| 6893222 | 5896775 | 2306643 | 2176599 | 1576018
| 6894035 | 5896941 | 2306806 | 2176644 | 1576089
| 6894718 | 5897529 | 2306948 | 2176660 | 1576131
| 6895612 | 5898892 | 2307125 | 2176818 | 1576153
| 6896097 | 5898938 | 2307283 | 2176823 | 1576174
| 6896467 | 5898938 | 2307359 | 2176837 | 1576232
| 6897149 | 5899141 | 2307532 | 2176843 | 1576311
| 6898007 | 5899196 | 2307815 | 2176860 | 1576394
| 6898770 | 5899196 | 2307983 | 2176910 | 1576467
| 6899271 | 5899250 | 2308126 | 2176914 | 1576507
| 6900054 | 5899591 | 2308407 | 2176927 | 1576583
| 6900604 | 5899812 | 2308799 | 2176958 | 1576642
| 6901169 | 5900032 | 2309063 | 2177153 | 1576718
| 6902021 | 5900658 | 2309478 | 2177183 | 1576785
| 6902797 | 5902011 | 2309707 | 2177189 | 1576888
| 6903517 | 5902352 | 2309845 | 2177192 | 1577155
| 6904212 | 5902352 | 2310549 | 2177208 | 1577171
| 6904857 | 5902514 | 2310713 | 2177209 | 1577231
| 6905252 | 5903735 | 2311026 | 2179386 | 1577300
| 6905857 | 5905034 | 2311313 | 2180286 | 1577349
| 6906327 | 5906789 | 2311936 | 2180320 | 1577511
| 6907384 | 5908261 | 2312589 | 2180350 | 1577641
| 6907917 | 5908602 | 2313265 | 2180403 | 1577690
}}
* 来源:[https://wikistats.wmcloud.org/display.php?t=wt Wikistats] 统计的具体时间为当日1时(UTC)左右,近似表示前一天的数据
* 关于里程碑,参见[[Wiktionary:宣告]]
==页面访问统计==
历史数据参见:[[Wiktionary:统计/存档]]
===总页面浏览量===
{{Collapse2|header=最近一年中文維基詞典的存取量|float=right
|{{Graph:PageViews| 365 | _ |scale=sqrt}}
}}
{{Collapse2|header=自2016年起中文維基詞典總頁面瀏覽量(時間單位:月)|float=right
|{{Graph:Chart
| width = 800
| height = 300
| xAxisTitle = 時間
| yAxisTitle = 瀏覽量(次)
| x = 2016/01/01,2016/02/01,2016/03/01,2016/04/01,2016/05/01,2016/06/01,2016/07/01,2016/08/01,2016/09/01,2016/10/01,2016/11/01,2016/12/01,2017/01/01,2017/02/01,2017/03/01,2017/04/01,2017/05/01,2017/06/01,2017/07/01,2017/08/01,2017/09/01,2017/10/01,2017/11/01,2017/12/01,2018/01/01,2018/02/01,2018/03/01,2018/04/01,2018/05/01,2018/06/01,2018/07/01,2018/08/01,2018/09/01,2018/10/01,2018/11/01,2018/12/01,2019/01/01,2019/02/01,2019/03/01,2019/04/01,2019/05/01,2019/06/01,2019/07/01,2019/08/01,2019/09/01,2019/10/01,2019/11/01,2019/12/01,2020/01/01,2020/02/01,2020/03/01,2020/04/01,2020/05/01,2020/06/01,2020/07/01,2020/08/01,2020/09/01,2020/10/01,2020/11/01,2020/12/01,2021/01/01,2021/02/01,2021/03/01,2021/04/01,2021/05/01,2021/06/01,2021/07/01,2021/08/01,2021/09/01,2021/10/01,2021/11/01,2021/12/01,2022/01/01,2022/02/01,2022/03/01,2022/04/01,2022/05/01,2022/06/01,2022/07/01,2022/08/01,2022/09/01,2022/10/01,2022/11/01,2022/12/01,2023/01/01,2023/02/01,2023/03/01,2023/04/01,2023/05/01,2023/06/01,2023/07/01,2023/08/01,2023/09/01,2023/10/01,2023/11/01,2023/12/01,2024/01/01,2024/02/01,2024/03/01,2024/04/01,2024/05/01,2024/06/01,2024/07/01,2024/08/01,2024/09/01,2024/10/01,2024/11/01,2024/12/01,2025/01/01,2025/02/01,2025/03/01,2025/04/01,2025/05/01,2025/06/01,2025/07/01,2025/08/01,2025/09/01,2025/10/01,2025/11/01,2025/12/01,2026/01/01
| xType = date
| yAxisFormat =
| showSymbols =
| y1 = 10097003,10370374,8792159,8941196,7730585,8096248,6653053,7707543,10114598,7503416,6761878,8479478,6306309,7029498,7793566,8952099,7201718,7403015,9094546,8753927,8887701,8836025,7012428,8297104,9776325,7383846,6846537,6478883,7844796,6800241,7032236,8907342,8070578,8878639,7374038,10399016,8843049,11735279,15986235,6536323,7794540,6340229,6963086,7077486,7262235,8135613,7350657,5924829,5389757,6706817,5468323,6028296,7420864,8089314,9463391,8952807,8032717,7976343,8839864,8511738,9062568,9099531,9196338,11036657,13507384,12075399,13497219,15603301,16689908,15728651,14140022,16914100,13589392,14818070,19016624,15144543,14891967,17026541,17298554,14032388,14847453,17608848,19967345,16730368,14386645,12098112,13610799,13122059,13901295,13433194,15511876,15674859,17748912,26144678,22153348,21554742,23027727,29476088,31116352,31891299,31844500,26251290,24446253,43524978,42154325,30934003,60141744,38114834,35,256,147,36402985,32703811,27105782,45361042,55198883,39017796,28042128,37231311,52390983,65887852,43219295,50138160
}}
}}
{| class="wikitable mw-collapsible mw-collapsed"
! 日期 !! 浏览量
|-
| 2026-01-01 || 50,138,160
|-
| 2025-12-01 || 43,219,295
|-
| 2025-11-01 || 65,887,852
|-
| 2025-10-01 || 52,390,983
|-
| 2025-09-01 || 37,231,311
|-
| 2025-08-01 || 28,042,128
|-
| 2025-07-01 || 39,017,796
|-
| 2025-06-01 || 55,198,883
|-
| 2025-05-01 || 45,361,042
|-
| 2025-04-01 || 27,105,782
|-
| 2025-03-01 || 32,703,811
|-
| 2025-02-01 || 36,402,985
|-
| 2025-01-01 || 35,256,147
|-
| 2024-12-01 || 38,114,834
|-
| 2024-11-01 || 60,141,744
|-
| 2024-10-01 || 30,934,003
|-
| 2024-09-01 || 42,154,325
|-
| 2024-08-01 || 43,524,978
|-
| 2024-07-01 || 24,446,253
|-
| 2024-06-01 || 26,251,290
|-
| 2024-05-01 || 31,844,500
|-
| 2024-04-01 || 31,891,299
|-
| 2024-03-01 || 31,116,352
|-
| 2024-02-01 || 29,476,088
|-
| 2024-01-01 || 23,027,727
|-
| 2023-12-01 || 21,554,742
|-
| 2023-11-01 || 22,153,348
|-
| 2023-10-01 || 26,144,678
|-
| 2023-09-01 || 17,748,912
|-
| 2023-08-01 || 15,674,859
|-
| 2023-07-01 || 15,511,876
|-
| 2023-06-01 || 13,433,194
|-
| 2023-05-01 || 13,901,295
|-
| 2023-04-01 || 13,122,059
|-
| 2023-03-01 || 13,610,799
|-
| 2023-02-01 || 12,098,112
|-
| 2023-01-01 || 14,386,645
|-
| 2022-12-01 || 16,730,368
|-
| 2022-11-01 || 19,967,345
|-
| 2022-10-01 || 17,608,848
|-
| 2022-09-01 || 14,847,453
|-
| 2022-08-01 || 14,032,388
|-
| 2022-07-01 || 17,298,554
|-
| 2022-06-01 || 17,026,541
|-
| 2022-05-01 || 14,891,967
|-
| 2022-04-01 || 15,144,543
|-
| 2022-03-01 || 19,016,624
|-
| 2022-02-01 || 14,818,070
|-
| 2022-01-01 || 13,589,392
|-
| 2021-12-01 || 16,914,100
|-
| 2021-11-01 || 14,140,022
|-
| 2021-10-01 || 15,728,651
|-
| 2021-09-01 || 16,689,908
|-
| 2021-08-01 || 15,603,301
|-
| 2021-07-01 || 13,497,219
|-
| 2021-06-01 || 12,075399
|-
| 2021-05-01 || 13,507,384
|-
| 2021-04-01 || 11,036,657
|-
| 2021-03-01 || 9,196,338
|-
| 2021-02-01 || 9,099,531
|-
| 2021-01-01 || 9,062,568
|-
| 2020-12-01 || 8,511,738
|-
| 2020-11-01 || 8,839,864
|-
| 2020-10-01 || 7,976,343
|-
| 2020-09-01 || 8,032,717
|-
| 2020-08-01 || 8,952,807
|-
| 2020-07-01 || 9,463,391
|-
| 2020-06-01 || 8,089,314
|-
| 2020-05-01 || 7,420,864
|-
| 2020-04-01 || 6,028,296
|-
| 2020-03-01 || 5,468,323
|-
| 2020-02-01 || 6,706,817
|-
| 2020-01-01 || 5,389,757
|-
| 2019-12-01 || 5,924,829
|-
| 2019-11-01 || 7,350,657
|-
| 2019-10-01 || 8,135,613
|-
| 2019-09-01 || 7,262,235
|-
| 2019-08-01 || 7,077,486
|-
| 2019-07-01 || 6,963,086
|-
| 2019-06-01 || 6,340,229
|-
| 2019-05-01 || 7,794,540
|-
| 2019-04-01 || 6,536,323
|-
| 2019-03-01 || 15,986,235
|-
| 2019-02-01 || 11,735,279
|-
| 2019-01-01 || 8,843,049
|-
| 2018-12-01 || 10,399,016
|-
| 2018-11-01 || 7,374,038
|-
| 2018-10-01 || 8,878,639
|-
| 2018-09-01 || 8,070,578
|-
| 2018-08-01 || 8,907,342
|-
| 2018-07-01 || 7,032,236
|-
| 2018-06-01 || 6,800,241
|-
| 2018-05-01 || 7,844,796
|-
| 2018-04-01 || 6,478,883
|-
| 2018-03-01 || 6,846,537
|-
| 2018-02-01 || 7,383,846
|-
| 2018-01-01 || 9,776,325
|-
| 2017-12-01 || 8,297,104
|-
| 2017-11-01 || 7,012,428
|-
| 2017-10-01 || 8,836,025
|-
| 2017-09-01 || 8,887,701
|-
| 2017-08-01 || 8,753,927
|-
| 2017-07-01 || 9,094,546
|-
| 2017-06-01 || 7,403,015
|-
| 2017-05-01 || 7,201,718
|-
| 2017-04-01 || 8,952,099
|-
| 2017-03-01 || 7,793,566
|-
| 2017-02-01 || 7,029,498
|-
| 2017-01-01 || 6,306,309
|-
| 2016-12-01 || 8,479,478
|-
| 2016-11-01 || 6,761,878
|-
| 2016-10-01 || 7,503,416
|-
| 2016-09-01 || 10,114,598
|-
| 2016-08-01 || 7,707,543
|-
| 2016-07-01 || 6,653,053
|-
| 2016-06-01 || 8,096,248
|-
| 2016-05-01 || 7,730,585
|-
| 2016-04-01 || 8,941,196
|-
| 2016-03-01 || 8,792,159
|-
| 2016-02-01 || 10,370,374
|-
| 2016-01-01 || 10,097,003
|}
数据来源:[https://stats.wikimedia.org/#/zh.wiktionary.org/reading/total-page-views/normal|table|1-year|~total|monthly Total page views]
===热词===
页面浏览量最高的词条:
{{Wiktionary:統計/熱詞
|year=2024 |month=6
|t1=尛 |cat1=[[:Category:漢字|漢字]] |v1=5,385 |m1=82.8
|t2=。 |cat2=[[:Category:標點符號|標點符號]] |v2=5,355 |m2=94.4
|t3=! |cat3=[[:Category:標點符號|標點符號]] |v3=3,407 |m3=74.2
|t4=凪 |cat4=[[:Category:和製漢字|和製漢字]]|v4=3,120 |m4=62.0
|t5=雫 |cat5=[[:Category:和製漢字|和製漢字]] |v5= 3,114 |m5=64.6
|t6=又双叒叕 |cat6=[[:Category:漢語副詞|漢語副詞]] |v6=2,528 |m6=73.4
|t7=你好 |cat7=[[:Category:漢語感嘆詞|漢語感嘆詞]] |v7=2,513 |m7=41.1
|t8=昶 |cat8=[[:Category:漢字|漢字]] |v8=2,412 |m8=56.7
|t9=肉便器 |cat9=[[:Category:漢語名詞|漢語名詞]] |v9=2,345 |m9=78.4
|t10=辻 |cat10=[[:Category:和製漢字|和製漢字]] |v10=2,150 |m10=71.8
}}
数据来源:[https://pageviews.toolforge.org/topviews/?project=zh.wiktionary.org&platform=all-access&date={{CURRENTYEAR}}-{{CURRENTMONTH}}&excludes= Topviews Analysis - Most viewed pages of a project]
==收录词条==
{{See|Wiktionary:统计/各语言词条}}
==参看==
*[[Special:Statistics|基本统计]]
[[Category:維基詞典統計]]
hgmq49ahvywpy2tayrlhu5fstgzdxi3
tuba
0
27735
9739198
7792011
2026-04-21T04:29:44Z
Chihunglu83
87715
9739198
wikitext
text/x-wiki
{{also|Tuba|túba|tuba'}}
{{minitoc}}
==斐濟語==
外边
==马来语==
鱼藤
{{-mnc-}}
那里;彼处
[[Category:马来语]]
[[Category:英语名词]]
lsjuierdf24apl7qi0imgil0bcb7am5
escalade
0
80317
9739618
9087760
2026-04-21T07:11:07Z
Chihunglu83
87715
/* 發音 */
9739618
wikitext
text/x-wiki
{{also|escaladé}}
==英語==
===發音===
* {{IPA|en|/ˌɛskəˈleɪd/|a=RP}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-escalade.wav|a=Southern England}}
* {{IPA|en|/ˈɛskəˌleɪd/|/ˈɛskəˌlɑd/|a=US}}
* {{rhymes|en|eɪd|s=3}}
===名詞===
{{en-noun}}
# 用梯攀登城壁
# [[攀登]]
# 以梯子攀登
===動詞===
{{en-verb}}
# {{lb|en|military|dated}} {{rfdef|zh}}
e74rd5ocg0tl7e0s57c0mwoh808xyww
Liberalismus
0
115082
9739167
4841414
2026-04-20T13:56:46Z
TongcyDai
53191
9739167
wikitext
text/x-wiki
{{also|liberalismus}}
==德語==
===發音===
* {{IPA|de|/libeʁaˈlɪsmʊs/}}
* {{audio|de|De-Liberalismus.ogg|a=柏林}}
===名詞===
{{de-noun|m.sg}}
# [[自由主義]]
====用法說明====
* 有關該詞的用法,請參閱 {{m|de|liberal}} 的註釋,這與(美式)英語中的用法截然不同。
====變格====
{{de-ndecl|m.sg}}
====派生詞彙====
* {{l|de|Wirtschaftsliberalismus}}
===延伸閱讀===
* {{R:de:DWDS}}
* {{R:de:UniLeipzig}}
* {{R:de:Duden}}
* {{pedia|lang=de}}
{{cln|de|含有後綴-ismus的詞}}
nij8pg0m22syl377gkmrep30piyoy02
めでたしめでたし
0
147277
9739148
7145888
2026-04-20T13:43:01Z
TongcyDai
53191
9739148
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|alt=目出度し目出度し:rare}}
===發音===
{{ja-pron|めでたし めでたし|acc=めでたし+めでたし 2+2|acc2=めでたし+めでたし 3+3|acc_ref=NKD2|acc2_ref=NKD2}}
===感嘆詞===
{{ja-pos|interjection|めでたし めでたし}}
# [[可喜可賀]]可喜可賀
===使用說明===
常見於日本童話故事的末尾,表達歡喜與慶賀的意思;在流行語中亦有說反話、開玩笑的用法。
===參考資料===
<references/>
o2gxcmm2uz1jtzactoh2d0dt71mpxmx
火併
0
338707
9739196
7138690
2026-04-21T02:20:08Z
Hzy980512
19278
9739196
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=火并|alt=火拼,火拚}}
===詞源===
原指[[內鬥]]、[[內鬨]],源於「[[火伴]]」一詞,火伴(伙伴)互相併吞就是「火併」;可能受「[[火]]」字影響,多指與[[軍火]]、[[槍枝]]有關者。
===讀音===
{{zh-pron
|m=huǒbìng
|c=fo2 bing3
|cat=v
}}
===動詞===
{{zh-verb}}
# [[内部]][[发生]][[斗争]]进而[[相互]][[残杀]]和[[吞并]]。
owm93jagq3mhchi4ngllcqp6fbbti3d
出庭
0
589118
9739592
9029125
2026-04-21T06:08:39Z
TongcyDai
53191
9739592
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
===發音===
{{zh-pron
|m=chūtíng
|c=ceot1 ting4
|h=pfs=chhut-thìn;hrs=h:chud tin
|mn=chhut-têng
|mn-t=cug4 têng5
|cat=v
}}
===動詞===
{{zh-verb|type=vo}}
# {{lb|zh|law|不及物}} [[訴訟]]案件有關係的人[[出席]][[法庭]],參加庭審
#: {{zh-x|出庭 作證|}}
====近義詞====
{{syn-saurus|zh|出庭}}
dbgxdeete66ru0ke7iaw3wgh8163mq3
鬼子
0
615231
9739739
8510111
2026-04-21T09:14:43Z
Fglffer
55252
9739739
wikitext
text/x-wiki
==汉语==
{{zh-forms}}
===发音===
{{zh-pron
|m=guǐzi
|c=gwai2 zi2
|mn=zp:kúi-chú
|mc=y
|cat=n
}}
===名词===
{{head|zh|名詞}}
# {{lb|zh|弃用|貶義}} 称呼[[流氓]][[地痞]]的骂人用语
#* {{zh-x|我 父祖 名 播 海內,寧{nìng} 有 不知?鬼子 敢 爾!|我祖上名扬天下,他怎么可能会不知道?这个'''痞子'''竟敢这样!|CL|ref=《{{w|世说新语}}》}}
# {{lb|zh|过时|口语|贬义}} 在[[帝国主义]][[侵华]]时期,对[[外国]][[侵略者]]的[[蔑称]],尤指[[日本]][[侵略者]]
#: {{zh-x|鬼子{zi} 進 村 啦,快 躲 起來!|}}
====近义词====
* {{qual|指西方人|主要用於官话}} {{zh-l|老外}}
* {{qual|指西方人|主要用於粵語}} {{zh-l|鬼佬}}
* {{qual|指西方人|主要用於客語}} {{zh-l|紅毛}}、{{zh-l|紅毛猴}}、{{zh-l|紅毛人}}
====衍生词====
{{col3|zh|二鬼子|日本鬼子|東洋鬼子|洋鬼子|英國鬼子|法國鬼子|紅毛鬼子}}
{{zh-cat|Advanced}}
==日语==
{{ja-kanjitab|おに|こ|k2=ご|yomi=kun}}
===发音===
{{ja-pron|おにご}}
===名词===
{{ja-noun|おにご}}
# 不[[像]][[父母]]的[[小孩]]
# 生下来就有[[牙齿]]的[[婴儿]]
{{C|ja|小孩|sort=おにご}}
q5vqyr8j8kjxxev1fpnxdvails0913d
9739740
9739739
2026-04-21T09:15:42Z
Fglffer
55252
9739740
wikitext
text/x-wiki
==汉语==
{{zh-forms}}
===發音===
{{zh-pron
|m=guǐzi
|c=gwai2 zi2
|g=gui3 zi
|j=gui2 zeh
|mn=zp:kúi-chú
|mc=y
|cat=n
}}
===名词===
{{head|zh|名詞}}
# {{lb|zh|弃用|貶義}} 称呼[[流氓]][[地痞]]的骂人用语
#* {{zh-x|我 父祖 名 播 海內,寧{nìng} 有 不知?鬼子 敢 爾!|我祖上名扬天下,他怎么可能会不知道?这个'''痞子'''竟敢这样!|CL|ref=《{{w|世说新语}}》}}
# {{lb|zh|过时|口语|贬义}} 在[[帝国主义]][[侵华]]时期,对[[外国]][[侵略者]]的[[蔑称]],尤指[[日本]][[侵略者]]
#: {{zh-x|鬼子{zi} 進 村 啦,快 躲 起來!}}
====近义词====
* {{qual|指西方人|主要用於官话}} {{zh-l|老外}}
* {{qual|指西方人|主要用於粵語}} {{zh-l|鬼佬}}
* {{qual|指西方人|主要用於客語}} {{zh-l|紅毛}}、{{zh-l|紅毛猴}}、{{zh-l|紅毛人}}
====衍生词====
{{col3|zh|二鬼子|日本鬼子|東洋鬼子|洋鬼子|英國鬼子|法國鬼子|紅毛鬼子}}
{{zh-cat|Advanced}}
==日语==
{{ja-kanjitab|おに|こ|k2=ご|yomi=kun}}
===发音===
{{ja-pron|おにご}}
===名词===
{{ja-noun|おにご}}
# 不像[[父母]]的[[小孩]]
# 生下来就有[[牙齿]]的[[婴儿]]
===來源===
* {{R:Kanjipedia Kotoba|0001231300}}
{{C|ja|小孩|sort=おにご}}
emvctg32omf0wd1kpfrvpce26ijuf2w
9739741
9739740
2026-04-21T09:17:39Z
Fglffer
55252
/* 日语 */
9739741
wikitext
text/x-wiki
==汉语==
{{zh-forms}}
===發音===
{{zh-pron
|m=guǐzi
|c=gwai2 zi2
|g=gui3 zi
|j=gui2 zeh
|mn=zp:kúi-chú
|mc=y
|cat=n
}}
===名词===
{{head|zh|名詞}}
# {{lb|zh|弃用|貶義}} 称呼[[流氓]][[地痞]]的骂人用语
#* {{zh-x|我 父祖 名 播 海內,寧{nìng} 有 不知?鬼子 敢 爾!|我祖上名扬天下,他怎么可能会不知道?这个'''痞子'''竟敢这样!|CL|ref=《{{w|世说新语}}》}}
# {{lb|zh|过时|口语|贬义}} 在[[帝国主义]][[侵华]]时期,对[[外国]][[侵略者]]的[[蔑称]],尤指[[日本]][[侵略者]]
#: {{zh-x|鬼子{zi} 進 村 啦,快 躲 起來!}}
====近义词====
* {{qual|指西方人|主要用於官话}} {{zh-l|老外}}
* {{qual|指西方人|主要用於粵語}} {{zh-l|鬼佬}}
* {{qual|指西方人|主要用於客語}} {{zh-l|紅毛}}、{{zh-l|紅毛猴}}、{{zh-l|紅毛人}}
====衍生词====
{{col3|zh|二鬼子|日本鬼子|東洋鬼子|洋鬼子|英國鬼子|法國鬼子|紅毛鬼子}}
{{zh-cat|Advanced}}
==日语==
{{ja-kanjitab|おに|こ|k2=ご|yomi=kun}}
===发音===
{{ja-pron|おにご|acc=0|acc2=2|acc_ref=DJR|acc2_ref=DJR}}
===名词===
{{ja-noun|おにご}}
# 不像[[父母]]的[[小孩]]
# 生下来就有[[牙齿]]的[[婴儿]]
===來源===
<references />
* {{R:Kanjipedia Kotoba|0001231300}}
{{C|ja|孩童|sort=おにご}}
bg70quzseng8tc62pokw786j564ivpk
荷蘭薯
0
627692
9739179
8294984
2026-04-20T14:21:25Z
明瑤
132921
9739179
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=荷兰薯|type=21}}
===發音===
{{zh-pron
|c=ho4 laan4-1 syu4-2
|h=gd=ho2 lan2 su2
|mn=kh:hô-lân-chî/tp:hô-lân-chû/sg:hô-lan-chû/sg:hô-lan-chîr/sg:hô-lan-chî
|mn-t=ho5 lang1 ze5/ho5 lang5 ze5
|cat=n
}}
=== 詞源1 ===
{{head|zh|名詞}}
# {{lb|zh|主要用於|_|廣東|&|海南}} [[馬鈴薯]]
====同義詞====
{{zh-dial|馬鈴薯}}
=== 詞源2 ===
{{head|zh|名詞}}
# {{lb|zh|主要用於山口洋[[客家語]]}} [[木薯]]
==== 同義詞 ====
{{Zh-dial|木薯}}
fmx2va3wbx1ewkynksvbekhdiwvf0fw
9739182
9739179
2026-04-20T15:09:57Z
明瑤
132921
9739182
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=荷兰薯|type=21}}
===發音===
{{zh-pron
|c=ho4 laan4-1 syu4-2
|h=hrs=h:ho lan shu;gd=ho2 lan2 su2
|mn=kh:hô-lân-chî/tp:hô-lân-chû/sg:hô-lan-chû/sg:hô-lan-chîr/sg:hô-lan-chî
|mn-t=ho5 lang1 ze5/ho5 lang5 ze5
|cat=n
}}
=== 詞源1 ===
{{head|zh|名詞}}
# {{lb|zh|主要用於|_|廣東|&|海南}} [[馬鈴薯]]
====同義詞====
{{zh-dial|馬鈴薯}}
=== 詞源2 ===
{{head|zh|名詞}}
# {{lb|zh|主要用於山口洋[[客家語]]}} [[木薯]]
==== 同義詞 ====
{{Zh-dial|木薯}}
jgdsitqweozoxyopkqc1tg0dmlqtpg2
9739194
9739182
2026-04-21T01:24:16Z
Sayonzei
40728
/* 漢語 */
9739194
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=荷兰薯|type=21}}
===發音===
{{zh-pron
|c=ho4 laan4-1 syu4-2
|h=hrs=h:ho lan shu;gd=ho2 lan2 su2
|mn=kh:hô-lân-chî/tp:hô-lân-chû/sg:hô-lan-chû/sg:hô-lan-chîr/sg:hô-lan-chî
|mn-t=ho5 lang1 ze5/ho5 lang5 ze5
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|mainly|廣東|澳門|&|海南}} [[馬鈴薯]]
# {{lb|zh|mainly|山口洋|_|客家語}} [[木薯]]
====同義詞====
{{zh-dial|馬鈴薯}}
{{Zh-dial|木薯}}
hmpfiv8vhow0pvfmyeacsdj98iwtb5f
禍不單行
0
634863
9739742
8178199
2026-04-21T09:20:21Z
Fglffer
55252
9739742
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=祸不单行|type=112}}
===發音===
{{zh-pron
|m=huò不dānxíng
|c=wo6 bat1 daan1 hang4
|mn-t=hua6 bug4 duan1 gian5
|cat=cy
}}
===成語===
{{head|zh|成語}}
# [[不幸]]的事[[不斷]]地[[發生]]
9hzalnx0m8lxi4nq0ivgvtlkgvn3lme
9739744
9739742
2026-04-21T09:46:58Z
Sayonzei
40728
/* 漢語 */
9739744
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=祸不单行|type=112}}
===發音===
{{zh-pron
|m=huò不dānxíng
|c=wo6 bat1 daan1 hang4
|mn-t=hua6 bug4 duan1 gian5
|cat=cy
}}
===成語===
{{head|zh|成語}}
# [[不幸]]的事[[不斷]]地[[發生]]
====衍生詞====
{{col|zh|福無雙至,禍不單行}}
o22hni8g5jl8bwi3qri4342l5sy8phj
木薯
0
680146
9739180
7620576
2026-04-20T14:54:39Z
明瑤
132921
9739180
wikitext
text/x-wiki
==漢語==
===寫法===
{{漢語寫法|简=[[木]][[薯]]|正=[[]]}}
===讀音===
{{zh-pron|m=mùshǔ}}
===名詞===
{{Head|zh|名詞}}
#[[大戟科]]木薯屬[[塊根]]植物,有肉質長圓柱形塊根
==== 同義詞 ====
{{Zh-dial|木薯}}
===翻譯===
{{翻译-顶}}
*德语:*俄语:[[бот.]] [[маниок]] [[наиполезнейший]] ([[Manihot]] [[utilissima]] ''[[Pohl.]]'')
{{翻译-底}}
[[Category:待分類的漢語詞]]
[[Category:漢語|木00艸14]]
f52d5n068ykq3keolkpw9ztd6bpbilc
9739195
9739180
2026-04-21T01:26:15Z
Sayonzei
40728
9739195
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{wikipedia|zh:}}
===發音===
{{zh-pron
|m=mùshǔ
|c=muk6 syu4
|h=ct=mu2 shu2
|mb=mù-cṳ̿
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# [[大戟科]]木薯屬[[塊根]]植物({{taxfmt|Manihot esculenta|species}}),有肉質長圓柱形塊根
====同義詞====
{{zh-dial}}
====派生詞彙====
{{col3|zh|木薯粉}}
====翻譯====
{{trans-top|植物}}
* 阿丘亞爾語:{{t|acu|mama}}
* 阿拉伯語:
*: 朱巴阿拉伯語:{{t|pga|bafra}}
* 亞美尼亞語:{{t+|hy|հացարմատ}}
* 班尤馬山語:{{t|map-bms|ꦗꦮꦮ꧀|tr=jawaw}}、{{t|map-bms|ꦗꦮꦲꦸ|tr=jawau}}、{{t|map-bms|ꦒꦸꦩ꧀ꦧꦶꦭꦶꦏꦪꦸ|tr=gumbili kayu}}
* 巴烏萊語:{{t|bci|agba}}
* 孟加拉語:{{t|bn|কাসাভা}}
* 比科爾語:
*: 中比科爾語:{{t+|bcl|balinghoy}}
* 博羅洛語:{{t|bor|ju}}
* 布吉語:{{t|bug|lame aju}}
* 保加利亞語:{{t|bg|маниока|f}}
* 緬甸語:{{t+|my|ပီလောပီနံ}}
* 加泰羅尼亞語:{{t|ca|mandioca|f}}、{{t|ca|iuca|f}}
* 宿霧語:{{t|ceb|balanghoy}}
* 齊切瓦語:{{t|ny|chinangwa}}
* 科卡馬語:{{t|cod|yahuiri}}
* 科爾語:{{t|liw|kepar kayu}}
* 科摩羅語支:
*: 大科摩羅語:{{t|zdj|mhogo|c3|c4}}
* 杜亞拉語:{{t|dua|makwamba}}
* 荷蘭語:{{t+|nl|cassave}}、{{t+|nl|maniok|m}}
* 英語:{{t+|en|cassava}}、{{t+|en|manioc}}、{{t+|en|yuca}}
* 世界語:{{t|eo|manioko}}
* 愛沙尼亞語:{{t|et|maniokk}}
* 埃維語:{{t|ee|agbeli|n}}
* 依汪都語:{{t|ewo|mbong}}
* 斐濟語:{{t|fj|tavioka}}
* 芬蘭語:{{t+|fi|maniokki}}
* 法語:{{t+|fr|manioc|m}}
* 德語:{{t+|de|Maniok|m}}、{{t|de|Mandioka|f}}、{{t|de|Kassawa|f}}、{{t|de|Kassava|f}}
* 哥倫打洛語:{{t+|gor|kasubi}}
* 瓜拉尼語支:
*: 巴拉圭瓜拉尼語:{{t-check|gug|mandi'o}}
* 古吉拉特語:{{t|gu|મોગો}}
* 豪薩語:{{t|ha|rogo}}
* 印地語:{{t+|hi|सागू|m}}
* 希卡利亞納語:{{t|hix|xerye}}
* 關必沙語:{{t|hub|mama}}
* 伊博語:{{t|ig|akpu}}
* 伊洛卡諾語:{{t|ilo|balinghoy}}
* 印尼語:{{t+|id|ubi kayu}}、{{t+|id|ketela pohon}}、{{t+|id|singkong}}
* 意大利語:{{t+|it|manioca|f}}
* 日語:{{t+|ja|キャッサバ|tr=kyassaba}}
* 爪哇語:{{t|jv|ꦏꦼꦠꦺꦭꦥꦺꦴꦲꦸꦁ|tr=ketéla pohung}}、{{t|jv|ꦱꦶꦁꦏꦺꦴꦁ|tr=singkong}}、{{t|jv|ꦏꦱ꧀ꦥꦺ|tr=kaspé}}
* 卡納達語:{{t+|kn|ಮರಗೆಣಸು}}
* 卡片片甘語:{{t|pam|kamuting bagin}}、{{t|pam|kamuting dutung}}
* 噶瑪蘭語:{{t|ckv|apaw}}
* 高棉語:{{t|km|ដំឡូងមី}}、{{t|km|ដំឡូងឈើ}}
* 基庫尤語:{{t|ki|mwanga|c3}}
* 柯莫林語:{{t|kge|hubi kayu}}
* 剛果語:{{t|kg|mandioko}}
* 朝鮮語:{{t+|ko|카사바}}、{{t|ko|마니옥}}
* 老撾語:{{t+|lo|ມັນຕົ້ນ}}
* 林加拉語:{{t|ln|nsɔngɔ́}}、{{t|ln|manyɔ́kɔ}}、{{t|ln|mbala}}
* 阿拉瓦克語:{{t|arw|bosoli}}、{{t|arw|kanaküdi}}
* 馬都拉語:{{t+|mad|sabbhrâng}}
* 望加錫語:{{t|mak|lame kayu}}
* 馬拉加斯語:{{t+|mg|mangahazo}}
* 馬來語:{{t|ms|ubi kayu}}
* 馬拉雅拉姆語:{{t+|ml|മരച്ചീനി}}、{{t|ml|കപ്പ}}
* 曼達爾語:{{t|mdr|lameayu}}、{{t|mdr|kandoha'}}
* 毛利語:{{t|mi|tapioka}}、{{t|mi|kahawa}}
* 米南佳保語:{{t|min|ubi parancih}}、{{t|min|ubi kayu}}、{{t|min|singkong}}
* 米佐語:{{t|lus|pângbâl}}
* 納瓦特爾語:{{t|nah|cuauhcamohtli}}
* 恩魯納語:{{t|niy|mɔ᷅kɔ̀}}
* 古圖皮語:{{t|tpw|mani'oka}}
* 帕勞哈諾語:{{t|pbg|üi}}
* 波蘭語:{{t+|pl|maniok|m}}、{{t|pl|kassawa|f}}
* 葡萄牙語:{{t+|pt|mandioca|f}}、{{t+|pt|aipim|m}}、{{t+|pt|macaxeira|f}}
* 克丘亞語:{{t|qu|rumu}}、{{t|qu|yuka}}; {{t|qu|lumu|q=Napo Lowland Quechua}}
* 羅馬尼亞語:{{t+|ro|manioc|m}}
* 俄語:{{t+|ru|манио́к|m}}、{{t+|ru|манио́ка|f}}、{{t+|ru|манио́т|m}}
* 盧旺達語:{{t|rw|inyumbati}}
* 桑格語:{{t|sxn|bungkahe}}
* 桑海語:
*: 東桑海語:{{t|ses|bananku}}
* 索尼基語:{{t|snk|bantara}}
* 西班牙語:{{t+|es|mandioca|f}}、{{t+|es|yuca|f}}、{{t|es|cashcamote|m}} {{qualifier|危地馬拉}}
* 蘇里南湯加語:{{t|srn|kasaba}}
* 巽他語:{{t|su|ᮞᮙ᮪ᮕᮩ}}
* 斯瓦希里語:{{t|sw|muhogo}}
* 他加祿語:{{t|tl|kamoteng-kahoy}}、{{t|tl|balinghoy}}
* 大溪地語:{{t|ty|māniota}}
* 泰諾語:{{t|tnq|caçabi}}
* 泰米爾語:{{t+|ta|மரவள்ளி}}、{{t|ta|மரவள்ளிக் கிழங்கு}}、{{t|ta|குச்சிக் கிழங்கு}}、{{t|ta|குச்சிவள்ளிக் கிழங்கு}}
* 塔里阿納語:{{t|tae|káini}}
* 德頓語:{{t|tet|ai-farina}}
* 泰語:{{t+|th|มันสำปะหลัง}}
* 湯加語:{{t|to|mānioke}}
* 托拉查-薩達語:{{t|sda|dua' kayu}}
* 特魯邁語:{{t|tpy|ole}}
* 土耳其語:{{t+|tr|manyok}}
* 越南語:{{t+|vi|sắn}}、{{t+|vi|khoai mì}}
* 瓦瑞瓦瑞語:{{t|war|bilanghoy}}、{{t|war|balinghoy}}、{{t|war|lagikway}}
* 沃洛夫語:{{t|wo|pulloox}}
* 約魯巴語:{{t|yo|ẹ̀gẹ́}}
* 壯語:{{t|za|moegsawz}}、{{t|za|maenzfaex}}
{{trans-bottom}}
===參考資料===
* {{R:zh:cbgycdxdb|32909}}
* {{R:hak:Zhou 2023|||414}}
{{C|zh|大戟科植物}}
881rotzh9z14jp6bmlz2y4nk40whgbc
Hauptmann
0
800753
9739727
4835558
2026-04-21T08:16:24Z
TongcyDai
53191
9739727
wikitext
text/x-wiki
==英語==
{{wikipedia|en:+ (surname)}}
===其他形式===
* {{alter|en|Hauptman}}
===詞源===
{{bor+|en|de|Hauptmann}}。
===發音===
{{rfp|en}}
===專有名詞===
{{en-prop}}
# {{surname|en|from=德語}}。
====統計====
* According to the 2010 United States Census, ''Hauptmann'' is the 47966<sup>th</sup> most common surname in the United States, belonging to 441 individuals. ''Hauptmann'' is most common among White (91.61%) individuals.
==德語==
{{wikipedia|de:+ (Offizier)}}
===詞源===
{{inh+|de|gmh|houbetman||領導者;統帥;團體負責人}},{{inh+|de|goh|houbitman}},{{inh+|de|gmw-pro|*haubidamann}}。和{{cog|nds|Hööftmann}}、{{cog|nl|hoofdman}} 以及{{cog|ang|hēafodmann}} 同源。等價於 {{prefix|de|haupt|Mann|t1=首領|t2=人}}。{{dbt|de|Hetman}}(來源於{{cog|pl|hetman}})。
===發音===
* {{IPA|de|/ˈhaʊp(t)ˌman/}}
* {{audio|de|De-Hauptmann.ogg|a=柏林}}
* {{hyphenation|de|Haupt|mann}}
===名詞===
{{de-noun|m,(e)s,Hauptleute:^er|f=Hauptfrau,^in}}
# {{lb|de|軍銜}} [[上尉]](男性〔也用於女性〕或未指定性別);比較 {{m|de|[[Herr]] / [[Frau]] Hauptmann}}
====用法說明====
正常的複數形式是 {{m|de|Hauptleute}},而複數形式 {{m|de|Hauptmänner}} 很少使用,至少在當代軍事術語中是如此。
====變格====
{{de-ndecl|m,(e)s,Hauptleute:^er}}
====派生詞彙====
{{col4|de
|Amtshauptmann
|Bezirkshauptmann
|Deichhauptmann
|Feuerwehrhauptmann
|Hauptmännin
|Landeshauptmann
|Oberstschlosshauptmann
|Räuberhauptmann
|Römerhauptmann
|Stabshauptmann
|Stadthauptmann
}}
====派生語彙====
* {{desc|nl|hopman|bor=1}}
* {{desc|dsb|hawptman|bor=1}}
* {{desc|pdc|Hauptman|Haaptman|bor=1}}
* {{desc|cs|hejtman|bor=1}}
* {{desctree|pl|hetman|bor=1}}
===延伸閱讀===
* {{R:de:DWDS}}
* {{R:de:Duden|Hauptmann_Anfuehrer_Befehlshaber|Hauptmann}}
* {{R:de:Duden|Hauptmann_Schriftsteller|Proper noun}}
4n5tpfjtaeua99ytgdxa3j8fxabd6va
9739729
9739727
2026-04-21T08:41:22Z
TongcyDai
53191
9739729
wikitext
text/x-wiki
==英語==
{{wikipedia|en:+ (surname)}}
===其他形式===
* {{alter|en|Hauptman}}
===詞源===
{{bor+|en|de|Hauptmann}}。
===發音===
{{rfp|en}}
===專有名詞===
{{en-prop}}
# {{surname|en|from=德語}}。
====統計====
* {{U:en:2010 US Census|rank=47966|pop=441|race1=White|pct1=91.61}}
==德語==
{{wikipedia|de:+ (Offizier)}}
===詞源===
{{inh+|de|gmh|houbetman||領導者;統帥;團體負責人}},{{inh+|de|goh|houbitman}},{{inh+|de|gmw-pro|*haubidamann}}。和{{cog|nds|Hööftmann}}、{{cog|nl|hoofdman}} 以及{{cog|ang|hēafodmann}} 同源。等價於 {{prefix|de|haupt|Mann|t1=首領|t2=人}}。{{dbt|de|Hetman}}(來源於{{cog|pl|hetman}})。
===發音===
* {{IPA|de|/ˈhaʊp(t)ˌman/}}
* {{audio|de|De-Hauptmann.ogg|a=柏林}}
* {{hyphenation|de|Haupt|mann}}
===名詞===
{{de-noun|m,(e)s,Hauptleute:^er|f=Hauptfrau,^in}}
# {{lb|de|軍銜}} [[上尉]](男性〔也用於女性〕或未指定性別);比較 {{m|de|[[Herr]] / [[Frau]] Hauptmann}}
====用法說明====
正常的複數形式是 {{m|de|Hauptleute}},而複數形式 {{m|de|Hauptmänner}} 很少使用,至少在當代軍事術語中是如此。
====變格====
{{de-ndecl|m,(e)s,Hauptleute:^er}}
====派生詞彙====
{{col4|de
|Amtshauptmann
|Bezirkshauptmann
|Deichhauptmann
|Feuerwehrhauptmann
|Hauptmännin
|Landeshauptmann
|Oberstschlosshauptmann
|Räuberhauptmann
|Römerhauptmann
|Stabshauptmann
|Stadthauptmann
}}
====派生語彙====
* {{desc|nl|hopman|bor=1}}
* {{desc|dsb|hawptman|bor=1}}
* {{desc|pdc|Hauptman|Haaptman|bor=1}}
* {{desc|cs|hejtman|bor=1}}
* {{desctree|pl|hetman|bor=1}}
===延伸閱讀===
* {{R:de:DWDS}}
* {{R:de:Duden|Hauptmann_Anfuehrer_Befehlshaber|Hauptmann}}
* {{R:de:Duden|Hauptmann_Schriftsteller|Proper noun}}
92yevjjfkgcxhd54f3ove3lvgol1i2z
9739730
9739729
2026-04-21T08:41:32Z
TongcyDai
53191
9739730
wikitext
text/x-wiki
==英語==
{{wikipedia|en:+ (surname)}}
===其他形式===
* {{alter|en|Hauptman}}
===詞源===
{{bor+|en|de|Hauptmann}}。
===發音===
{{rfp|en}}
===專有名詞===
{{en-prop}}
# {{surname|en|from=德語}}。
====統計====
* {{U:en:2010 US Census|rank=47966|pop=441|race1=白人|pct1=91.61}}
==德語==
{{wikipedia|de:+ (Offizier)}}
===詞源===
{{inh+|de|gmh|houbetman||領導者;統帥;團體負責人}},{{inh+|de|goh|houbitman}},{{inh+|de|gmw-pro|*haubidamann}}。和{{cog|nds|Hööftmann}}、{{cog|nl|hoofdman}} 以及{{cog|ang|hēafodmann}} 同源。等價於 {{prefix|de|haupt|Mann|t1=首領|t2=人}}。{{dbt|de|Hetman}}(來源於{{cog|pl|hetman}})。
===發音===
* {{IPA|de|/ˈhaʊp(t)ˌman/}}
* {{audio|de|De-Hauptmann.ogg|a=柏林}}
* {{hyphenation|de|Haupt|mann}}
===名詞===
{{de-noun|m,(e)s,Hauptleute:^er|f=Hauptfrau,^in}}
# {{lb|de|軍銜}} [[上尉]](男性〔也用於女性〕或未指定性別);比較 {{m|de|[[Herr]] / [[Frau]] Hauptmann}}
====用法說明====
正常的複數形式是 {{m|de|Hauptleute}},而複數形式 {{m|de|Hauptmänner}} 很少使用,至少在當代軍事術語中是如此。
====變格====
{{de-ndecl|m,(e)s,Hauptleute:^er}}
====派生詞彙====
{{col4|de
|Amtshauptmann
|Bezirkshauptmann
|Deichhauptmann
|Feuerwehrhauptmann
|Hauptmännin
|Landeshauptmann
|Oberstschlosshauptmann
|Räuberhauptmann
|Römerhauptmann
|Stabshauptmann
|Stadthauptmann
}}
====派生語彙====
* {{desc|nl|hopman|bor=1}}
* {{desc|dsb|hawptman|bor=1}}
* {{desc|pdc|Hauptman|Haaptman|bor=1}}
* {{desc|cs|hejtman|bor=1}}
* {{desctree|pl|hetman|bor=1}}
===延伸閱讀===
* {{R:de:DWDS}}
* {{R:de:Duden|Hauptmann_Anfuehrer_Befehlshaber|Hauptmann}}
* {{R:de:Duden|Hauptmann_Schriftsteller|Proper noun}}
khkf964qy8n9qiwyy3c7s2ylguza6ln
結託
0
937425
9739419
7759182
2026-04-21T05:12:02Z
Chihayatomori
131398
9739419
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|けつ|k1=けっ|たく|yomi=o}}
===發音===
{{ja-pron|けったく|acc=0|acc_ref=DJR}}
===名詞===
{{ja-noun|けったく|hhira=けつたく}}
# [[勾結]],[[串通]]
===動詞===
{{ja-verb-suru|けったく|hhira=けつたく}}
# [[勾結]],[[串通]]
====活用====
{{ja-suru|けったく}}
===參考資料===
<references />
:* {{R:Kanjipedia Kotoba|0001874300}}
e2z40zxlcft73op6kpi9o3atgy8i1bc
9739566
9739419
2026-04-21T05:15:59Z
Sayonzei
40728
/* 動詞 */
9739566
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|けつ|k1=けっ|たく|yomi=o}}
===發音===
{{ja-pron|けったく|acc=0|acc_ref=DJR}}
===名詞===
{{ja-noun|けったく|hhira=けつたく}}
# [[勾結]],[[串通]]
===動詞===
{{ja-verb-suru|tr=intrans|けったく|hhira=けつたく}}
# [[勾結]],[[串通]]
====活用====
{{ja-suru|けったく}}
===參考資料===
<references />
:* {{R:Kanjipedia Kotoba|0001874300}}
buudz6cnx4v0laa2r85syath7hd9xrg
9739567
9739566
2026-04-21T05:17:01Z
Sayonzei
40728
/* 參考資料 */
9739567
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|けつ|k1=けっ|たく|yomi=o}}
===發音===
{{ja-pron|けったく|acc=0|acc_ref=DJR}}
===名詞===
{{ja-noun|けったく|hhira=けつたく}}
# [[勾結]],[[串通]]
===動詞===
{{ja-verb-suru|tr=intrans|けったく|hhira=けつたく}}
# [[勾結]],[[串通]]
====活用====
{{ja-suru|けったく}}
===參考資料===
<references />
* {{R:Kanjipedia Kotoba|0001874300}}
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=결탁}}
# {{hanja form of|결탁}}
hpks2svliwwb8g4jrp9a1pxqhoge96a
釣り合い
0
943932
9739568
7726307
2026-04-21T05:31:18Z
TongcyDai
53191
9739568
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|つ|あ|sort=つりあい|yomi=kun|alt=釣合い}}
===詞源===
{{ja-com|釣り|つり|合い|あい}}。
===發音===
{{ja-pron|つりあい|acc=0|acc_ref=SMK7,DJR,NHK,NKD2}}
===名詞===
{{ja-noun|つりあい|hhira=つりあひ}}
# [[平均]],[[均衡]]
#: {{ja-usex|収支の'''釣り合い'''が破れた。|しゅうし の '''つりあい''' が やぶれた。|收支不'''平衡'''。}}
#: {{ant|ja|不釣り合い}}
# [[协调]],[[适称]]
#: {{ja-usex|色の'''釣り合い'''がいい。|いろ の '''つりあい''' が いい。|颜色很协调。}}
#: {{ant|ja|不釣り合い}}
===參考資料===
<references/>
mg35z9vd4my3jq69rb8340rn3ek404w
9739576
9739568
2026-04-21T05:37:22Z
TongcyDai
53191
9739576
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|つ|あ|sort=つりあい|yomi=kun|alt=釣合い}}
===詞源===
{{ja-com|釣り|つり|合い|あい}}。
===發音===
{{ja-pron|つりあい|acc=0|acc_ref=SMK7,DJR,NHK,NKD2}}
===名詞===
{{ja-noun|つりあい|hhira=つりあひ}}
# [[平均]],[[均衡]]
#: {{ja-usex|収支の'''釣り合い'''が破れた。|しゅうし の '''つりあい''' が やぶれた。|收支不'''平衡'''。}}
#: {{ant|ja|不釣り合い}}
# [[协调]],[[适称]]
#: {{ja-usex|色の'''釣り合い'''がいい。|いろ の '''つりあい''' が い.い。|颜色很协调。}}
#: {{ant|ja|不釣り合い}}
===參考資料===
<references/>
hok5r5ek51ci6h1c6646c23f10r31rc
氷上
0
984872
9739145
9701421
2026-04-20T12:47:31Z
YeBoy371
43905
/* 發音2 */
9739145
wikitext
text/x-wiki
{{also|冰上}}
==日語==
===發音1===
{{ja-kanjitab|ひょう|じょう|yomi=on,goon}}
{{ja-pron|ひょうじょう|acc=0|acc_ref=DJR,NHK,SMK5}}
====名詞====
{{ja-noun|ひょうじょう|hhira=ひようじやう}}
# [[冰上]]
#: {{ja-x|[[w:ja:日本学生氷上競技選手権大会|日%本 学%生 '''氷%上''' 競%技 選%手%権 大%会]]|に%ほん がく%せい '''ひょう%じょう''' きょう%ぎ せん%しゅ%けん たい%かい|日本學生'''冰上'''競技錦標賽}}
#: {{ja-x|[[南%極]]%[[大%陸]]の'''氷%上'''に[[住む]]。|なん%きょく%たい%りく の '''ひょう%じょう''' に すむ。|生活在南極大陸的'''冰面上'''。}}
===發音2===
{{ja-kanjitab|ひ|かみ|yomi=k}}
{{swp|lang=ja|氷上町}}
{{ja-pron|ひかみ}}
{{rfp|ja|这个词的[[w:高低重音|高低重音]]是什么?}}
====專有名詞====
{{ja-pos|proper|ひかみ}}
# {{surname|ja|sort=ひかみ}}
# 地名,位於[[日本]][[兵庫縣]]東北部
===參考資料===
<references/>
==朝鲜语==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=빙상}}
# {{hanja form of|빙상}}
2gh73behuahiid2mhgan33tq5bqqqra
不釣り合い
0
985302
9739569
7695007
2026-04-21T05:35:41Z
TongcyDai
53191
9739569
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|ふ|つ|あ|sort=ふつりあい|yomi=o,k2}}
===發音===
{{ja-pron|ふつりあい|acc=2|acc2=3|acc_ref=SMK7,DJR,NHK,NKD2|acc2_ref=SMK7,DJR|dev=1}}
===名詞===
{{ja-noun|ふつりあい|hhira=ふつりあひ}}
# 不[[相配]],不[[相称]]
#: {{ant|ja|釣り合い}}
===形容詞===
{{ja-adj|infl=na|ふつりあい|hhira=ふつりあひ}}
# 不[[相配]]的,不[[相称]]的
#: {{ant|ja|釣り合い}}
#: {{ja-usex-inline|'''不%釣り合いな'''縁談|'''ふ%つりあい な''' えんだん|'''不般配'''的亲事}}
#* {{quote-book|ja|title=ja:ものの見方が変わる 座右の寓話|author=ja:戸田智弘|year=2022|url=https://books.google.com/books?id=VYtVEAAAQBAJ|page=75}}
#*: {{ja-usex|'''不%釣り合いな'''結%婚はケガのもとである。|'''ふ%つりあい な''' けっ%こん は けが の もと である。|'''不平衡的'''婚姻是問題的根源。}}
====活用====
{{ja-na|ふつりあい}}
===參考資料===
<references/>
7vkx5gg5pnpnd7vd06issfp7fcwvuca
esbofetear
0
1019523
9739199
4927301
2026-04-21T04:36:28Z
Sayonzei
40728
9739199
wikitext
text/x-wiki
==葡萄牙語==
===詞源===
源自 {{af|pt|es-|bofete|-ear}}。
===發音===
{{pt-IPA|esbofete^^ar}}
===動詞===
{{pt-verb}}
# [[掌摑]]
#: {{syn|pt|estapear|q1=巴西}}
====變位====
{{pt-conj}}
===延伸閱讀===
* {{R:pt:Aulete}}
* {{R:pt:Priberam}}
685k36i4j807waq0cfxo1v8tpaw1tun
蟛蜞
0
1039910
9739723
9738428
2026-04-21T07:43:11Z
TongcyDai
53191
9739723
wikitext
text/x-wiki
==漢語==
{{zh-forms|alt=蟛蚑,螃蜞}}
===發音===
{{zh-pron
|m=péngqí
|c=paang4 kei4-2,paang4 kei4
|md=pàng-kì
|w=sh:6ban ji
|oc=y
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# [[相手蟹]]屬({{taxlink|Sesarma|genus|ver=180208}})的[[物種]][[俗名]]
====同義詞====
{{zh-dial}}
inam5w5j5ubrzk2nqe9foyo47lusssh
身體
0
1057521
9739724
8378505
2026-04-21T08:05:36Z
明瑤
132921
9739724
wikitext
text/x-wiki
==漢語==
{{百科}}
{{zh-forms|s=身体}}
===讀音===
{{zh-pron
|m=shēntǐ
|ma=Zh-shēntǐ.ogg
|m-s=sen1ti3
|dg=шын1ти2
|c=san1 tai2
|h=pfs=sṳ̂n-thí;gd=sen1 ti3
|j=seng1 ti2
|md=sĭng-tā̤
|mn=sin-thé
|mn-t=sing1 ti2
|w=1sen thi
|cat=n,v}}
===釋義===
#[[人]]的[[軀體]]。
#[[親自]]。
===相關詞彙===
*近義詞:[[身軀]]|[[軀體]]|[[肉體]]
*反義詞:
*派生詞:
*同音詞(現代標準漢語):
*相關詞彙:[[身體力行]]
*常見詞語搭配:~[[健康]]|~[[素質]]|~[[情況]]|~[[語言]]|[[注意]]~
=== 同義詞 ===
{{Zh-dial|身體}}
===翻譯===
{{翻译-顶}}
*英语:[[body]], [[corporality]]
*俄语:1) [[тело]] ([[человека]]), [[корпус]]; [[туловище]]; [[телосложение]]; [[фигура]]; [[организм]]; [[телесный]], [[физический]]; ''[[биол.]]'' [[соматический]]; 2) [[личность]]; [[личный]]; 3) [[здоровье]]
*韩语:[[신체]](身體). [[몸]].
{{翻译-底}}
==日語==
{{ja-kanjitab|しん|たい|yomi=on}}
===名詞===
{{ja-noun|しんたい}}
# {{ja-kyujitai spelling of|身体||[[身體]]}}
==朝鮮語==
#{{Lang|ko|'''[[신체]]'''}}〈{{Lang|ko|身體}}〉的漢字表記。
==越南語==
#{{Lang|vi|'''[[thân thể]]'''}}[{{vi-nom|身體}}]的漢字表記。
[[Category:待分類的日語詞]]
[[Category:日語]]
[[Category:待分類的朝鮮語詞]]
[[分类:朝鲜语汉字词|신체]]
[[Category:待分類的越南語詞]]
[[分类:越南语汉字词|thân thể]]
7ybpaz5f22eqeqo0axg4vvafwwgpuyf
水母
0
1065100
9739147
9638831
2026-04-20T13:05:06Z
明瑤
132921
9739147
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{zh-wp}}
[[File:Sea Nettle Jelly 1.jpg|200px|thumb|水母 (1)]]
===詞源===
{{zh-q|水母 生 海 中,以 鹹水 之 渣滓 為{wéi} 母,故 名 水母。|水母棲息於海洋之中。牠們誕生於鹹水的浮渣之中,故得名「水之母所孕育之物」。|ref=《{{w|廣東新語}}》|collapsed=y|lzh}}
===發音===
{{zh-pron
|m=shuǐmǔ
|c=seoi2 mou5
|mn=xm,qz,twv:chúi-bú/zz,tw:chúi-bó
|cat=n
|mc=y
|h=pfs=s:súi mû
}}
===名詞===
{{head|zh|名詞}}
# [[刺胞]]動物,[[水生]][[無脊椎動物]]的[[通稱]],體呈[[膠質]][[透明]]狀,形如[[傘蓋]]{{zh-mw|隻|條}}
#* {{zh-q|《@^廣志》曰:水母,如 羊 胃,在 海中 常 浮,聞 人聲 沉 水底。可 生 切 食。|《廣志》記載:「'''水母'''形似山羊之胃,常浮於海面。聞人聲則沉入水底,可切片生食。」|CL|ref=北宋·李昉(編輯彙整)《{{w|太平御覽}}》}}
# [[水神]]
====同義詞====
{{zh-dial}}
====衍生詞====
{{col3|zh|僧帽水母|海月水母|海蛇水母|水母目蝦}}
====派生詞====
{{CJKV||j=水%母|すい%ぼ}}
====翻譯====
{{trans-top|刺胞動物}}
* 南非语:{{t|af|jellievis}}
* 阿尔巴尼亚语:{{t+|sq|kandil deti|m}}
* 阿拉伯语:{{t|ar|قِنْدِيل الْبَحْر|m}}、{{t+|ar|قِنْدِيل|m}}
*: 汉志阿拉伯语:{{t|acw|قَنْديل|m|tr=gandīl}}
* 亚美尼亚语:{{t+|hy|մեդուզա}}
* 阿萨姆语:{{t|as|সাগৰীয়া ছাতি}}、{{t|as|জেলীমাছ}}
* 阿斯图里亚斯语:{{t|ast|marmoca|f}}、{{t|ast|aguamala|f}}、{{t|ast|veleru|m}}、{{t|ast|celentereu|m}}
* 阿塞拜疆语:{{t+|az|meduza}}、{{t|az|dəniz anası}}、{{t|az|dəniz göbələyi}}
* 巴斯克语:{{t|eu|marmoka}}
* 白俄罗斯语:{{t|be|меду́за|f}}
* 孟加拉语:{{t|bn|জেলিফিশ}}
* 中比科尔语:{{t|bcl|palit}}、{{t|bcl|salabay}} {{qualifier|藍瓶僧帽水母}}
* 布列塔尼语:{{t+|br|morgaoulenn|f}}、{{t+|br|blonegenn-vor|f}}
* 文莱马来语:{{t|kxd|ubur-ubur}}
* 保加利亚语:{{t+|bg|меду́за|f}}
* 缅甸语:{{t+|my|ငါးဖန်ခွက်}}
* 加泰罗尼亚语:{{t+|ca|medusa|f}}、{{t|ca|borm|m}}
* 中马兰诺语:{{t|mel|buboh}}
* 切罗基语:{{t|chr|ᏩᏂᎨ ᎠᏣᏗ}}
* 科莫克斯语:{{t|coo|q̓ʊpɬanačaɬ}}
* 康沃尔语:{{t|kw|morgowlesen|f}}
* 捷克语:{{t+|cs|medúza|f}}
* 丹麦语:{{t|da|gople|c}}、{{t|da|vandmand|c}}、{{t+|da|brandmand|c}}
* 荷兰语:{{t+|nl|kwal|f}}
* 英语:{{t+|en|jellyfish}}
* 世界语:{{t|eo|meduzo}}
* 爱沙尼亚语:{{t|et|meduus}}、{{t|et|millimallikas}}
* 芬兰语:{{t+|fi|meduusa}}
* 法语:{{t+|fr|méduse|f}}
* 加利西亚语:{{t+|gl|augamar|f}}、{{t+|gl|medusa|f}}
* 格鲁吉亚语:{{t|ka|მედუზა}}
* 德语:{{t+|de|Qualle|f}}
* 希腊语:{{t+|el|μέδουσα|f}}、{{t+|el|τσούχτρα|f}}
*: 古希腊语:{{t|grc|ἁλιπλεύμων|m}}
* 夏威夷语:{{t|haw|pololia}}
* 希伯来语:{{t+|he|מֶדוּזָה|f|tr=meduzá}}
* 印地语:{{t|hi|जेलिफ़िश}}、{{t|hi|गिजगिजिया}}
* 匈牙利语:{{t+|hu|medúza}}
* 冰岛语:{{t+|is|marglytta|f}}
* 伊多语:{{t+|io|meduzo}}
* 伊洛卡诺语:{{t|ilo|karominas}}
* 印尼语:{{t|id|ubur-ubur}}、{{t|id|ampai-ampai}}
* 因特语:{{t|ia|medusa}}
* 爱尔兰语:{{t|ga|smugairle róin|m}}
* 意大利语:{{t+|it|medusa|f}}
* 日语:{{t+|ja|海月|tr=くらげ, kurage}}、{{t+|ja|水母|tr=くらげ, kurage}}、{{t|ja|クラゲ|tr=kurage}}、{{t|ja|すいぼ|tr=suibo}}
* 爪哇语:{{t+|jv|uwur-uwur}}
* 哈萨克语:{{t|kk|медуза}}
* 高棉语:{{t|km|ខ្ញែរសមុទ្រ}}、{{t|km|ជំពុលទឹក}}
* 基马拉冈语:{{t|kqr|bolung}}
* 朝鲜语:{{t+|ko|해파리}}
* 库尔德语:
*: 北库尔德语:{{t|kmr|bûka deryayê|f}}、{{t+|kmr|pişemasî}}、{{t+|kmr|medûsa}}
* 吉尔吉斯语:{{t+|ky|медуза}}
* 老挝语:{{t|lo|ແມງກະພົນ}}、{{t|lo|ກະພົນ}}
* 拉丁语:{{t|la|pulmo}}、{{t|la|halipleumon}}
* 拉脱维亚语:{{t|lv|medūza|f}}
* 立陶宛语:{{t|lt|medūza|f}}
* 卢绍锡德语:{{t|lut|kəlapχʷəlč}}
* 卢森堡语:{{t|lb|Jelliskapp|m}}
* 马其顿语:{{t|mk|медуза|f}}
* 马来语:{{t|ms|ampai-ampai}}、{{t|ms|ubur-ubur}}
* 马拉雅拉姆语:{{t|ml|കടല്ച്ചൊറി}}
* 马耳他语:{{t|mt|brama|f}}
* 曼岛语:{{t|gv|skeeah ny muc varrey|m}}、{{t|gv|skeeah rauney|m}}、{{t|gv|slouree|f}}、{{t|gv|slumm|m}}、{{t|gv|smug rauney|m}}
* 毛利语:{{t|mi|maremaretai}}、{{t|mi|tepetepe}}、{{t|mi|petipeti}}、{{t|mi|kūreperepe-ā-tai}}、{{t|mi|kakaru moana}}、{{t|mi|kūreperepe moana}}
* 密克马克语:{{t|mic|sasap|an}}
* 蒙古语:{{t+|mn|медуз}}
* 纳瓦霍语:{{t|nv|jélii łóóʼ}}
* 挪威语:{{t|no|manet}}
* 普什图语:{{t|ps|مېډوسا|f}}
* 波斯语:{{t|fa|عروس دریایی|tr=orus daryâyi}} 、{{t|fa|چتر دریایی|tr=čatr daryâyi}}
* 波兰语:{{t+|pl|meduza|f}}
* 葡萄牙语:{{t+|pt|medusa|f}}、{{t+|pt|água-viva|f}}、{{t+|pt|alforreca|f}}
* 克丘亚语:{{t|qu|kachu k'arachiq}}
* 罗马尼亚语:{{t+|ro|meduză|f}}
* 俄语:{{t+|ru|меду́за|f}}
* 萨尼奇语:{{t|str|słχʷəm'əy'qsən}}
* 苏格兰盖尔语:{{t|gd|sgeoldair|m}}、{{t|gd|sgoldrach|m}}
* 塞尔维亚-克罗地亚语:
*: 西里尔字母:{{t|sh|медуза|f}}
*: 罗马字母:{{t+|sh|meduza|f}}
* 僧伽罗语:{{t|si|ලොඩි}}、{{t|si|ජෙලිෆිෂ්}}
* 斯洛伐克语:{{t+|sk|medúza|f}}
* 斯洛文尼亚语:{{t+|sl|meduza|f}}
* 西班牙语:{{t+|es|medusa|f}}、{{t+|es|aguamala|m}} {{qualifier|哥伦比亚|哥斯达黎加|古巴|厄瓜多尔|墨西哥|尼加拉瓜|巴拿马|西班牙南部|委内瑞拉}}、{{t+|es|aguaviva|m}} {{qualifier|阿根廷|西班牙南部|加纳利群岛|乌拉圭}}、{{t|es|malagua|f}} {{qualifier|秘鲁}}
* 瑞典语:{{t+|sv|manet|c}}
* 他加禄语:{{t+|tl|dikya}}
* 塔吉克语:{{t|tg|медуза}}
* 泰米尔语:{{t+|ta|இழுது}}、{{t|ta|சொறிமுட்டை}}
* 泰语:{{t+|th|แมงกะพรุน}}、{{t+|th|กะพรุน}}
* 提格里尼亚语:{{t|ti|ዓሳ ለግለግ}}
* 土耳其语:{{t+|tr|denizanası}}
* 土库曼语:{{t|tk|meduza}}
* 乌克兰语:{{t|uk|меду́за|f}}
* 乌尔都语:{{t|ur|جیلیفش|tr=jelifiś}}
* 维吾尔语:{{t|ug|مېدۇزا}}
* 乌兹别克语:{{t+|uz|meduza}}
* 越南语:{{t+|vi|sứa}}
* 瓦瑞瓦瑞语:{{t|war|bantol}}
* 威尔士语:{{t+|cy|slefren fôr}}、{{t+|cy|cont fôr|f}}
* 西弗里斯兰语:{{t|fy|kwab|c}}
* 意第绪语:{{t|yi|מעדוזע|f}}
* 中阿拉斯加尤皮克语:{{t|esu|egaarniq}}、{{t|esu|itulek}}、{{t|esu|masaaq}}、{{t|esu|nuayaaq}}
{{trans-bottom}}
{{C|zh|刺胞動物}}
==日語==
===詞源1===
{{ja-kanjitab|yomi=juku|くらげ2|alt=海月}}
{{wiki|lang=ja|クラゲ}}
{{IPAfont|⟨kurage<sub>1</sub>⟩}} → *{{IPAchar|/kuraᵑɡʲe/}} → {{IPAchar|/kuraɡe/}}
來自{{inh|ja|ojp|sort=くらげ|-}}。漢字為{{juku|sort=くらげ}}。
====發音====
{{ja-pron|くらげ|acc=0|acc_ref=DJR,NHK}}
====名詞====
{{ja-noun|くらげ|クラゲ}}
# [[刺胞]]動物,[[水生]][[無脊椎動物]]的[[通稱]],體呈[[膠質]][[透明]]狀,形如[[傘蓋]]
=====使用說明=====
{{U:ja:biology|クラゲ}}
=====衍生詞=====
{{col|ja
|{{ja-r|行%灯 水母|アン%ドン クラゲ}}
|{{ja-r|瓜%水母|ウリ%クラゲ}}
|{{ja-r|帯%水母|オビ%クラゲ}}
|{{ja-r|銀%貨 水母|ギン%カ クラゲ}}
|{{ja-r|櫛%水母|クシ%クラゲ}}
|{{ja-r|象%水母|ゾウ%クラゲ}}
|{{ja-r|電%気 水母|デン%キ クラゲ}}
|{{ja-r|鉢%水母|ハチ%クラゲ}}
|{{ja-r|花%笠 水母|ハナ%ガサ クラゲ}}
|{{ja-r|備%前 水母|^ビ%ゼン クラゲ}}
|{{ja-r|水%水母|ミズ%クラゲ}}
}}
=====俗語=====
* {{ja-r|水母の骨|くらげ の ほね|水母骨頭 → 非常少見的東西;不應出現的東西}}
===詞源2===
{{ja-kanjitab|yomi=kanon|すい|ぼ}}
來自{{der|ja|ltc|sort=すいぼ|-}} {{ltc-l|水母}}。
====發音====
{{ja-pron|すいぼ|acc=1|acc_ref=DJR}}
====名詞====
{{ja-noun|すいぼ}}
# [[刺胞]]動物,[[水生]][[無脊椎動物]]的[[通稱]],體呈[[膠質]][[透明]]狀,形如[[傘蓋]]
===來源===
<references/>
:* {{R:Kanjipedia Kotoba|0003725500|〈水母〉}}
{{C|ja|刺胞動物|sort=くらげ}}
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hj|hangeul=수모}}
# {{hanja form of|수모}}
rclrej63b27hc9xxnkd4yn5q0qqic40
9739151
9739147
2026-04-20T13:45:57Z
TongcyDai
53191
9739151
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
{{zh-wp}}
[[File:Sea Nettle Jelly 1.jpg|200px|thumb|水母 (1)]]
===詞源===
{{zh-q|水母 生 海 中,以 鹹水 之 渣滓 為{wéi} 母,故 名 水母。|水母棲息於海洋之中。牠們誕生於鹹水的浮渣之中,故得名「水之母所孕育之物」。|ref=《{{w|廣東新語}}》|collapsed=y|lzh}}
===發音===
{{zh-pron
|m=shuǐmǔ
|c=seoi2 mou5
|h=pfs=s:súi-mû
|mn=xm,qz,twv:chúi-bú/zz,tw:chúi-bó
|cat=n
|mc=y
}}
===名詞===
{{head|zh|名詞}}
# [[刺胞]]動物,[[水生]][[無脊椎動物]]的[[通稱]],體呈[[膠質]][[透明]]狀,形如[[傘蓋]]{{zh-mw|隻|條}}
#* {{zh-q|《@^廣志》曰:水母,如 羊 胃,在 海中 常 浮,聞 人聲 沉 水底。可 生 切 食。|《廣志》記載:「'''水母'''形似山羊之胃,常浮於海面。聞人聲則沉入水底,可切片生食。」|CL|ref=北宋·李昉(編輯彙整)《{{w|太平御覽}}》}}
# [[水神]]
====同義詞====
{{zh-dial}}
====衍生詞====
{{col3|zh|僧帽水母|海月水母|海蛇水母|水母目蝦}}
====派生詞====
{{CJKV||j=水%母|すい%ぼ}}
====翻譯====
{{trans-top|刺胞動物}}
* 南非语:{{t|af|jellievis}}
* 阿尔巴尼亚语:{{t+|sq|kandil deti|m}}
* 阿拉伯语:{{t|ar|قِنْدِيل الْبَحْر|m}}、{{t+|ar|قِنْدِيل|m}}
*: 汉志阿拉伯语:{{t|acw|قَنْديل|m|tr=gandīl}}
* 亚美尼亚语:{{t+|hy|մեդուզա}}
* 阿萨姆语:{{t|as|সাগৰীয়া ছাতি}}、{{t|as|জেলীমাছ}}
* 阿斯图里亚斯语:{{t|ast|marmoca|f}}、{{t|ast|aguamala|f}}、{{t|ast|veleru|m}}、{{t|ast|celentereu|m}}
* 阿塞拜疆语:{{t+|az|meduza}}、{{t|az|dəniz anası}}、{{t|az|dəniz göbələyi}}
* 巴斯克语:{{t|eu|marmoka}}
* 白俄罗斯语:{{t|be|меду́за|f}}
* 孟加拉语:{{t|bn|জেলিফিশ}}
* 中比科尔语:{{t|bcl|palit}}、{{t|bcl|salabay}} {{qualifier|藍瓶僧帽水母}}
* 布列塔尼语:{{t+|br|morgaoulenn|f}}、{{t+|br|blonegenn-vor|f}}
* 文莱马来语:{{t|kxd|ubur-ubur}}
* 保加利亚语:{{t+|bg|меду́за|f}}
* 缅甸语:{{t+|my|ငါးဖန်ခွက်}}
* 加泰罗尼亚语:{{t+|ca|medusa|f}}、{{t|ca|borm|m}}
* 中马兰诺语:{{t|mel|buboh}}
* 切罗基语:{{t|chr|ᏩᏂᎨ ᎠᏣᏗ}}
* 科莫克斯语:{{t|coo|q̓ʊpɬanačaɬ}}
* 康沃尔语:{{t|kw|morgowlesen|f}}
* 捷克语:{{t+|cs|medúza|f}}
* 丹麦语:{{t|da|gople|c}}、{{t|da|vandmand|c}}、{{t+|da|brandmand|c}}
* 荷兰语:{{t+|nl|kwal|f}}
* 英语:{{t+|en|jellyfish}}
* 世界语:{{t|eo|meduzo}}
* 爱沙尼亚语:{{t|et|meduus}}、{{t|et|millimallikas}}
* 芬兰语:{{t+|fi|meduusa}}
* 法语:{{t+|fr|méduse|f}}
* 加利西亚语:{{t+|gl|augamar|f}}、{{t+|gl|medusa|f}}
* 格鲁吉亚语:{{t|ka|მედუზა}}
* 德语:{{t+|de|Qualle|f}}
* 希腊语:{{t+|el|μέδουσα|f}}、{{t+|el|τσούχτρα|f}}
*: 古希腊语:{{t|grc|ἁλιπλεύμων|m}}
* 夏威夷语:{{t|haw|pololia}}
* 希伯来语:{{t+|he|מֶדוּזָה|f|tr=meduzá}}
* 印地语:{{t|hi|जेलिफ़िश}}、{{t|hi|गिजगिजिया}}
* 匈牙利语:{{t+|hu|medúza}}
* 冰岛语:{{t+|is|marglytta|f}}
* 伊多语:{{t+|io|meduzo}}
* 伊洛卡诺语:{{t|ilo|karominas}}
* 印尼语:{{t|id|ubur-ubur}}、{{t|id|ampai-ampai}}
* 因特语:{{t|ia|medusa}}
* 爱尔兰语:{{t|ga|smugairle róin|m}}
* 意大利语:{{t+|it|medusa|f}}
* 日语:{{t+|ja|海月|tr=くらげ, kurage}}、{{t+|ja|水母|tr=くらげ, kurage}}、{{t|ja|クラゲ|tr=kurage}}、{{t|ja|すいぼ|tr=suibo}}
* 爪哇语:{{t+|jv|uwur-uwur}}
* 哈萨克语:{{t|kk|медуза}}
* 高棉语:{{t|km|ខ្ញែរសមុទ្រ}}、{{t|km|ជំពុលទឹក}}
* 基马拉冈语:{{t|kqr|bolung}}
* 朝鲜语:{{t+|ko|해파리}}
* 库尔德语:
*: 北库尔德语:{{t|kmr|bûka deryayê|f}}、{{t+|kmr|pişemasî}}、{{t+|kmr|medûsa}}
* 吉尔吉斯语:{{t+|ky|медуза}}
* 老挝语:{{t|lo|ແມງກະພົນ}}、{{t|lo|ກະພົນ}}
* 拉丁语:{{t|la|pulmo}}、{{t|la|halipleumon}}
* 拉脱维亚语:{{t|lv|medūza|f}}
* 立陶宛语:{{t|lt|medūza|f}}
* 卢绍锡德语:{{t|lut|kəlapχʷəlč}}
* 卢森堡语:{{t|lb|Jelliskapp|m}}
* 马其顿语:{{t|mk|медуза|f}}
* 马来语:{{t|ms|ampai-ampai}}、{{t|ms|ubur-ubur}}
* 马拉雅拉姆语:{{t|ml|കടല്ച്ചൊറി}}
* 马耳他语:{{t|mt|brama|f}}
* 曼岛语:{{t|gv|skeeah ny muc varrey|m}}、{{t|gv|skeeah rauney|m}}、{{t|gv|slouree|f}}、{{t|gv|slumm|m}}、{{t|gv|smug rauney|m}}
* 毛利语:{{t|mi|maremaretai}}、{{t|mi|tepetepe}}、{{t|mi|petipeti}}、{{t|mi|kūreperepe-ā-tai}}、{{t|mi|kakaru moana}}、{{t|mi|kūreperepe moana}}
* 密克马克语:{{t|mic|sasap|an}}
* 蒙古语:{{t+|mn|медуз}}
* 纳瓦霍语:{{t|nv|jélii łóóʼ}}
* 挪威语:{{t|no|manet}}
* 普什图语:{{t|ps|مېډوسا|f}}
* 波斯语:{{t|fa|عروس دریایی|tr=orus daryâyi}} 、{{t|fa|چتر دریایی|tr=čatr daryâyi}}
* 波兰语:{{t+|pl|meduza|f}}
* 葡萄牙语:{{t+|pt|medusa|f}}、{{t+|pt|água-viva|f}}、{{t+|pt|alforreca|f}}
* 克丘亚语:{{t|qu|kachu k'arachiq}}
* 罗马尼亚语:{{t+|ro|meduză|f}}
* 俄语:{{t+|ru|меду́за|f}}
* 萨尼奇语:{{t|str|słχʷəm'əy'qsən}}
* 苏格兰盖尔语:{{t|gd|sgeoldair|m}}、{{t|gd|sgoldrach|m}}
* 塞尔维亚-克罗地亚语:
*: 西里尔字母:{{t|sh|медуза|f}}
*: 罗马字母:{{t+|sh|meduza|f}}
* 僧伽罗语:{{t|si|ලොඩි}}、{{t|si|ජෙලිෆිෂ්}}
* 斯洛伐克语:{{t+|sk|medúza|f}}
* 斯洛文尼亚语:{{t+|sl|meduza|f}}
* 西班牙语:{{t+|es|medusa|f}}、{{t+|es|aguamala|m}} {{qualifier|哥伦比亚|哥斯达黎加|古巴|厄瓜多尔|墨西哥|尼加拉瓜|巴拿马|西班牙南部|委内瑞拉}}、{{t+|es|aguaviva|m}} {{qualifier|阿根廷|西班牙南部|加纳利群岛|乌拉圭}}、{{t|es|malagua|f}} {{qualifier|秘鲁}}
* 瑞典语:{{t+|sv|manet|c}}
* 他加禄语:{{t+|tl|dikya}}
* 塔吉克语:{{t|tg|медуза}}
* 泰米尔语:{{t+|ta|இழுது}}、{{t|ta|சொறிமுட்டை}}
* 泰语:{{t+|th|แมงกะพรุน}}、{{t+|th|กะพรุน}}
* 提格里尼亚语:{{t|ti|ዓሳ ለግለግ}}
* 土耳其语:{{t+|tr|denizanası}}
* 土库曼语:{{t|tk|meduza}}
* 乌克兰语:{{t|uk|меду́за|f}}
* 乌尔都语:{{t|ur|جیلیفش|tr=jelifiś}}
* 维吾尔语:{{t|ug|مېدۇزا}}
* 乌兹别克语:{{t+|uz|meduza}}
* 越南语:{{t+|vi|sứa}}
* 瓦瑞瓦瑞语:{{t|war|bantol}}
* 威尔士语:{{t+|cy|slefren fôr}}、{{t+|cy|cont fôr|f}}
* 西弗里斯兰语:{{t|fy|kwab|c}}
* 意第绪语:{{t|yi|מעדוזע|f}}
* 中阿拉斯加尤皮克语:{{t|esu|egaarniq}}、{{t|esu|itulek}}、{{t|esu|masaaq}}、{{t|esu|nuayaaq}}
{{trans-bottom}}
{{C|zh|刺胞動物}}
==日語==
===詞源1===
{{ja-kanjitab|yomi=juku|くらげ2|alt=海月}}
{{wiki|lang=ja|クラゲ}}
{{IPAfont|⟨kurage<sub>1</sub>⟩}} → *{{IPAchar|/kuraᵑɡʲe/}} → {{IPAchar|/kuraɡe/}}
來自{{inh|ja|ojp|sort=くらげ|-}}。漢字為{{juku|sort=くらげ}}。
====發音====
{{ja-pron|くらげ|acc=0|acc_ref=DJR,NHK}}
====名詞====
{{ja-noun|くらげ|クラゲ}}
# [[刺胞]]動物,[[水生]][[無脊椎動物]]的[[通稱]],體呈[[膠質]][[透明]]狀,形如[[傘蓋]]
=====使用說明=====
{{U:ja:biology|クラゲ}}
=====衍生詞=====
{{col|ja
|{{ja-r|行%灯 水母|アン%ドン クラゲ}}
|{{ja-r|瓜%水母|ウリ%クラゲ}}
|{{ja-r|帯%水母|オビ%クラゲ}}
|{{ja-r|銀%貨 水母|ギン%カ クラゲ}}
|{{ja-r|櫛%水母|クシ%クラゲ}}
|{{ja-r|象%水母|ゾウ%クラゲ}}
|{{ja-r|電%気 水母|デン%キ クラゲ}}
|{{ja-r|鉢%水母|ハチ%クラゲ}}
|{{ja-r|花%笠 水母|ハナ%ガサ クラゲ}}
|{{ja-r|備%前 水母|^ビ%ゼン クラゲ}}
|{{ja-r|水%水母|ミズ%クラゲ}}
}}
=====俗語=====
* {{ja-r|水母の骨|くらげ の ほね|水母骨頭 → 非常少見的東西;不應出現的東西}}
===詞源2===
{{ja-kanjitab|yomi=kanon|すい|ぼ}}
來自{{der|ja|ltc|sort=すいぼ|-}} {{ltc-l|水母}}。
====發音====
{{ja-pron|すいぼ|acc=1|acc_ref=DJR}}
====名詞====
{{ja-noun|すいぼ}}
# [[刺胞]]動物,[[水生]][[無脊椎動物]]的[[通稱]],體呈[[膠質]][[透明]]狀,形如[[傘蓋]]
===來源===
<references/>
:* {{R:Kanjipedia Kotoba|0003725500|〈水母〉}}
{{C|ja|刺胞動物|sort=くらげ}}
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hj|hangeul=수모}}
# {{hanja form of|수모}}
qp4rbeow9kfbnyu4vcy1z1v6y4s2w3d
四體
0
1066982
9739186
7504000
2026-04-20T16:25:14Z
TongcyDai
53191
9739186
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=四体}}
===發音===
{{zh-pron
|m=sìtǐ
|c=sei3 tai2
|mn=qz:sìr-thé/xm,zz:sù-thé
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|正式}} [[四肢]]
#* {{zh-x|次日 僧 來,設 壇 作法。鄰人 共 觀 之,^乙 亦 雜處{chǔ} 其中。忽 變色 急 奔,狀 如 被 捉;至 門外,踣地 化為{wéi} 狐,四體 猶 著[着]{zhuó} 人 衣。||ref=Liaozhai}}
====派生詞彙====
{{col3|zh|四體不勤,五穀不分}}
{{C|zh|四}}
6s29dtsut8vjy578cfs8ps9rt8xvfs6
推排
0
1086489
9739737
6916974
2026-04-21T09:12:43Z
Fglffer
55252
9739737
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
===發音===
{{zh-pron
|m=tuīpái
|mn=sài-pháu
|cat=n,v
}}
===動詞===
{{zh-verb}}
# [[排斥]],[[排擠]]
# {{lb|zh|泉漳話}} [[處置]][[安排]]
====衍生詞====
{{col3|zh|通檢推排}}
===來源===
* {{thcwd|29259}}
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=추배}}
# {{hanja form of|추배}}
r492ugz53d1rnnrjxzwetl33baik875
9739738
9739737
2026-04-21T09:13:34Z
Fglffer
55252
9739738
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
===發音===
{{zh-pron
|m=tuīpái
|mn=thui-pâi/chhui-pâi
|cat=n,v
}}
===動詞===
{{zh-verb}}
# [[排斥]],[[排擠]]
# {{lb|zh|泉漳話}} [[處置]][[安排]]
====衍生詞====
{{col3|zh|通檢推排}}
===來源===
* {{thcwd|29259}}
==朝鮮語==
{{ko-hanjatab}}
===名詞===
{{ko-noun|hangeul=추배}}
# {{hanja form of|추배}}
4l07rgnhmng6ge2de1bifowfr6mwe3z
蕹菜
0
1100477
9739156
9739128
2026-04-20T13:49:00Z
TongcyDai
53191
9739156
wikitext
text/x-wiki
==漢語==
{{zh-forms|alt=應菜-閩南語}}
===發音===
{{zh-pron
|m=蕹cài
|m-s=ong4cai4
|c=ung3 coi3,ong3 coi3
|c-t=uung1 toi1
|g=ng4 cai
|h=pfs=vung-chhoi/s:fung-chhoi;hrs=h:vungˇ coiˇ;gd=vung4 coi4;ct=vong4 cue4
|md=óng-chái
|mn=ml,ta,tw,pn,sg,ph:èng-chhài
|mn-t=êng3 cai3
|px=pt,xy:orng4 cai4
|w=sh:1on tshe
|x=ngong4 cai4
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# [[空心菜]] {{gloss|''[[Ipomoea aquatica]]''}}
====同義詞====
{{zh-dial|空心菜}}
====派生詞====
* {{desc|ckv|ingsay|bor=1}}
ngphvbsx0339rbvn55kcgeqx3m3qgdu
莧菜
0
1116766
9739152
9739144
2026-04-20T13:46:55Z
TongcyDai
53191
9739152
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=苋菜}}
{{zh-wp}}
===發音===
{{zh-pron
|m=xiàncài
|c=jin6 coi3
|h=pfs=han-chhoi;hrs=h:han˖ coiˇ;gd=han4 coi4
|mb=hāing-cha̤̿
|md=háing-chái
|mn=xm,tp,kh,hc,sx,tc,tn,yl:hēng-chhài/tp,km,mg:hāng-chhài/qz:hūiⁿ-chhài/lk:hěng-chhài
|mn-t=hoin7 cai3/hain7 cai3
|mn-t_note=hain7 cai3 - Jieyang, Chaoyang
|px=pt,jk:he5 cai4/jk:hae5 cai4/xy,ft:hinn5 cai4/yy:henn5 cai4
|w=sz:3shie 5tshe <!--or sz:3shie5 5tshe-->
|x=han5 cai4
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# [[植物]]名。莧科莧屬,一年生[[草本]]植物。{{gloss|''[[Amaranthus tricolor]]''}}
====同義詞====
* {{qualifier|吳語}} {{zh-l|米莧}}
0yhc6qeqxynefoqhn7o43o9jc4rbxwh
9739153
9739152
2026-04-20T13:47:11Z
TongcyDai
53191
9739153
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=苋菜}}
{{zh-wp}}
===發音===
{{zh-pron
|m=xiàncài
|c=jin6 coi3
|h=pfs=han-chhoi;hrs=h:han˖ coiˇ;gd=han4 coi4
|mb=hāing-cha̤̿
|md=háing-chái
|mn=xm,tp,kh,hc,sx,tc,tn,yl:hēng-chhài/tp,km,mg:hāng-chhài/qz:hūiⁿ-chhài/lk:hěng-chhài
|mn-t=hoin7 cai3/hain7 cai3
|mn-t_note=hain7 cai3 - 揭揚、潮陽
|px=pt,jk:he5 cai4/jk:hae5 cai4/xy,ft:hinn5 cai4/yy:henn5 cai4
|w=sz:3shie 5tshe <!--or sz:3shie5 5tshe-->
|x=han5 cai4
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# [[植物]]名。莧科莧屬,一年生[[草本]]植物。{{gloss|''[[Amaranthus tricolor]]''}}
====同義詞====
* {{qualifier|吳語}} {{zh-l|米莧}}
jq6hrffjc1gmgze35sj4noqoglw81m5
무스
0
1128717
9739728
7442297
2026-04-21T08:33:59Z
YeBoy371
43905
9739728
wikitext
text/x-wiki
==朝鲜语==
===發音===
{{ko-IPA}}
===詞源1===
{{bor+|ko|en|moose}}。
====名詞====
{{ko-noun}}
# [[駝鹿]]
===詞源2===
{{bor+|ko|fr|mousse}}。
====名詞====
{{ko-noun}}
# [[慕斯]]
# [[摩絲]]
{{c|ko|鹿科動物|甜品|毛髮}}
0rq06xao6rq5cgxalc3xhc4ni74tb8u
གོང
0
1207077
9739745
7572476
2026-04-21T09:52:55Z
Apisite
85347
/* 藏語 */
9739745
wikitext
text/x-wiki
==藏語==
===發音===
{{bo-pron|kongv}}
===名詞===
{{bo-noun}}
# [[價錢]]
====派生詞彙====
* {{l|bo|གོང་ཆེན་པོ}}
* {{l|bo|གོང་བཅག}}
mzup5zn729shbfri5qa6mk65ctxr3nu
接二連三
0
1216057
9739743
6986436
2026-04-21T09:21:16Z
Fglffer
55252
9739743
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=接二连三}}
===發音===
{{zh-pron
|m=jiē'èrliánsān
|c=zip3 ji6 lin4 saam1
|mn=chiap-lī-liân-saⁿ
|cat=id
}}
===俗語===
{{head|zh|俗語}}
# [[連續]][[不斷]]
{{zh-cat|Advanced}}
n6scglrbva4yvh5dbzq4xbvilacqd66
暨大
0
1244019
9739184
8021009
2026-04-20T16:00:08Z
~2026-24384-87
132938
臺灣的國立暨南國際大學的簡稱。
9739184
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
===發音===
{{zh-pron
|m=Jìdà
|c=kei3 daai6
|cat=pn
}}
===專有名詞===
{{zh-proper noun}}
# {{zh-short|中共中央統戰部{{w|暨南大學}}}}
# {{zh-short|臺灣的{{w|國立暨南國際大學}}}}
{{C|zh|大學}}
98tpo9zvwonp6ivjpft0mupxw4xwec0
9739190
9739184
2026-04-20T19:54:50Z
Fglffer
55252
/* 漢語 */
9739190
wikitext
text/x-wiki
==漢語==
{{zh-forms}}
===發音===
{{zh-pron
|m=Jìdà
|c=kei3 daai6
|cat=pn
}}
===專有名詞===
{{zh-proper noun}}
# {{zh-short|{{w|暨南大學}}}}
# {{zh-short|{{w|國立暨南國際大學}}}}
{{C|zh|大學}}
j7q2h56m10a3y7gwr6xoqo844lf0lzf
Module:Form of
828
1365350
9739581
9394078
2026-04-21T05:42:41Z
TongcyDai
53191
9739581
Scribunto
text/plain
local export = {}
export.force_cat = false -- for testing; set to true to display categories even on non-mainspace pages
local debug_track_module = "Module:debug/track"
local form_of_cats_module = "Module:form of/cats"
local form_of_data_module = "Module:form of/data"
local form_of_data1_module = "Module:form of/data/1"
local form_of_data2_module = "Module:form of/data/2"
local form_of_functions_module = "Module:form of/functions"
local form_of_lang_data_module_prefix = "Module:form of/lang-data/"
local form_of_pos_module = "Module:form of/pos"
local function_module = "Module:fun"
local headword_data_module = "Module:headword/data"
local json_module = "Module:JSON"
local labels_module = "Module:labels"
local links_module = "Module:links"
local load_module = "Module:load"
local parse_utilities_module = "Module:parse utilities"
local string_utilities_module = "Module:string utilities"
local table_module = "Module:table"
local utilities_module = "Module:utilities"
local anchor_encode = mw.uri.anchorEncode
local concat = table.concat
local dump = mw.dumpObject
local fetch_categories_and_labels -- Defined below.
local format_form_of -- Defined below.
local get_tag_display_form -- Defined below.
local get_tag_set_display_form -- Defined below.
local insert = table.insert
local ipairs = ipairs
local is_link_or_html -- Defined below.
local list_to_text = mw.text.listToText
local lookup_shortcut -- Defined below.
local lookup_tag -- Defined below.
local normalize_tag_set -- Defined below.
local parse_tag_set_properties -- Defined below.
local require = require
local sort = table.sort
local split_tag_set -- Defined below.
local tagged_inflections -- Defined below.
local type = type
--[==[
Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==]
local function append(...)
append = require(table_module).append
return append(...)
end
local function contains(...)
contains = require(table_module).contains
return contains(...)
end
local function debug_track(...)
debug_track = require(debug_track_module)
return debug_track(...)
end
local function deep_copy(...)
deep_copy = require(table_module).deepCopy
return deep_copy(...)
end
local function deep_equals(...)
deep_equals = require(table_module).deepEquals
return deep_equals(...)
end
local function extend(...)
extend = require(table_module).extend
return extend(...)
end
local function format_categories(...)
format_categories = require(utilities_module).format_categories
return format_categories(...)
end
local function full_link(...)
full_link = require(links_module).full_link
return full_link(...)
end
local function insert_if_not(...)
insert_if_not = require(table_module).insertIfNot
return insert_if_not(...)
end
local function is_subset_list(...)
is_subset_list = require(table_module).isSubsetList
return is_subset_list(...)
end
local function iterate_from(...)
iterate_from = require(function_module).iterateFrom
return iterate_from(...)
end
local function join_multiparts(...)
join_multiparts = require(form_of_functions_module).join_multiparts
return join_multiparts(...)
end
local function load_data(...)
load_data = require(load_module).load_data
return load_data(...)
end
local function parse_inline_modifiers(...)
parse_inline_modifiers = require(parse_utilities_module).parse_inline_modifiers
return parse_inline_modifiers(...)
end
local function safe_load_data(...)
safe_load_data = require(load_module).safe_load_data
return safe_load_data(...)
end
local function safe_require(...)
safe_require = require(load_module).safe_require
return safe_require(...)
end
local function serial_comma_join(...)
serial_comma_join = require(table_module).serialCommaJoin
return serial_comma_join(...)
end
local function shallow_copy(...)
shallow_copy = require(table_module).shallowCopy
return shallow_copy(...)
end
local function show_labels(...)
show_labels = require(labels_module).show_labels
return show_labels(...)
end
local function slice(...)
slice = require(table_module).slice
return slice(...)
end
local function split(...)
split = require(string_utilities_module).split
return split(...)
end
local function ucfirst(...)
ucfirst = require(string_utilities_module).ucfirst
return ucfirst(...)
end
--[==[
Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==]
local cat_functions
local function get_cat_functions()
cat_functions, get_cat_functions = require(form_of_functions_module).cat_functions, nil
return cat_functions
end
local default_pagename
local function get_default_pagename()
default_pagename, get_default_pagename = load_data(headword_data_module).pagename, nil
return default_pagename
end
local display_handlers
local function get_display_handlers()
display_handlers, get_display_handlers = require(form_of_functions_module).display_handlers, nil
return display_handlers
end
local m_cats_data
local function get_m_cats_data()
m_cats_data, get_m_cats_data = load_data(form_of_cats_module), nil
return m_cats_data
end
local m_data
local function get_m_data()
-- Needs require.
m_data, get_m_data = require(form_of_data_module), nil
return m_data
end
local m_data1
local function get_m_data1()
m_data1, get_m_data1 = load_data(form_of_data1_module), nil
return m_data1
end
local m_data2
local function get_m_data2()
m_data2, get_m_data2 = load_data(form_of_data2_module), nil
return m_data2
end
local m_pos_data
local function get_m_pos_data()
m_pos_data, get_m_pos_data = load_data(form_of_pos_module), nil
return m_pos_data
end
--[==[ intro:
This module implements the underlying processing of {{tl|form of}}, {{tl|inflection of}} and specific variants such as
{{tl|past participle of}} and {{tl|alternative spelling of}}. Most of the logic in this file is to handle tags in
{{tl|inflection of}}. Other related files:
* [[Module:form of/templates]] contains the majority of the logic that implements the templates themselves.
* [[Module:form of/data/1]] is a data-only file containing information on the more common inflection tags, listing the
tags, their shortcuts, the category they belong to (tense-aspect, case, gender, voice-valence, etc.), the appropriate
glossary link and the wikidata ID.
* [[Module:form of/data/2]] is a data-only file containing information on the less common inflection tags, in the same
format as [[Module:form of/data/1]].
* [[Module:form of/lang-data/LANGCODE]] is a data-only file containing information on the language-specific inflection
tags for the language with code LANGCODE, in the same format as [[Module:form of/data/1]]. Language-specific tags
override general tags.
* [[Module:form of/cats]] is a data-only file listing the language-specific categories that are added when the
appropriate combinations of tags are seen for a given language.
* [[Module:form of/pos]] is a data-only file listing the recognized parts of speech and their abbreviations, used for
categorization. FIXME: This should be unified with the parts of speech listed in [[Module:links]].
* [[Module:form of/functions]] contains functions for use with [[Module:form of/data/1]] and [[Module:form of/cats]].
They are contained in this module because data-only modules can't contain code. The functions in this file are of two
types:
*# Display handlers allow for customization of the display of multipart tags (see below). Currently there is only
one such handler, for handling multipart person tags such as `1//2//3`.
*# Cat functions allow for more complex categorization logic, and are referred to by name in [[Module:form of/cats]].
Currently no such functions exist.
The following terminology is used in conjunction with {{tl|inflection of}}:
* A ''tag'' is a single grammatical item, as specified in a single numbered parameter of {{tl|inflection of}}. Examples
are `masculine`, `nominative`, or `first-person`. Tags may be abbreviated, e.g. `m` for `masculine`, `nom` for
`nominative`, or `1` for `first-person`. Such abbreviations are called ''aliases'', and some tags have multiple
equivalent aliases (e.g. `p` or `pl` for `plural`). The full, non-abbreviated form of a tag is called its
''canonical form''.
* The ''display form'' of a tag is the way it's displayed to the user. Usually the displayed text of the tag is the same
as its canonical form, and it normally functions as a link to a glossary entry explaining the tag. Usually the link is
to an entry in [[Appendix:Glossary]], but sometimes the tag is linked to an individual dictionary entry or to a
Wikipedia entry. Occasionally, the display text differs from the canonical form of the tag. An example is the tag
`comparative case`, which has the display text read as simply `comparative`. Normally, tags referring to cases don't
have the word "case" in them, but in this case the tag `comparative` was already used as an alias for the tag
`comparative degree`, so the tag was named `comparative case` to avoid clashing. A similar situation occurs with
`adverbial case` vs. the grammar tag `adverbial` (as in `adverbial participle`).
* A ''tag set'' is an ordered list of tags, which together express a single inflection, for example, `1|s|pres|ind`,
which can be expanded to canonical-form tags as `first-person|singular|present|indicative`.
* A ''conjoined tag set'' is a tag set that consists of multiple individual tag sets separated by a semicolon, e.g.
`1|s|pres|ind|;|2|s|imp`, which specifies two tag sets, `1|s|pres|ind` as above and `2|s|imp` (in canonical form,
`second-person|singular|imperative`). Multiple tag sets specified in a single call to {{tl|inflection of}} are
specified in this fashion. Conjoined tag sets can also occur in list-tag shortcuts.
* A ''multipart tag'' is a tag that embeds multiple tags within it, such as `f//n` or `nom//acc//voc`. These are used in
the case of [[syncretism]], when the same form applies to multiple inflections. Examples are the Spanish present
subjunctive, where the first-person and third-person singular have the same form (e.g. {{m|es|siga}} from
{{m|es|seguir|t=to follow}}), or Latin third-declension adjectives, where the dative and ablative plural of all
genders have the same form (e.g. {{m|la|omnibus}} from {{m|la|omnis|t=all}}). These would be expressed respectively as
`1//3|s|pres|sub` and `dat//abl|m//f//n|p`, where the use of the multipart tag compactly encodes the syncretism and
avoids the need to individually list out all of the inflections. Multipart tags currently display as a list separated
by a slash, e.g. ''dative/ablative'' or ''masculine/feminine/neuter'' where each individual word is linked
appropriately. As a special case, multipart tags involving persons display specially; for example, the multipart tag
`1//2//3` displays as ''first-, second- and third-person'', with the word "person" occurring only once.
* A ''two-level multipart tag'' is a special type of multipart tag that joins two or more tag sets instead of joining
individual tags. The tags within the tag set are joined by a colon, e.g. `1:s//3:p`, which is displayed as
''first-person singular and third-person plural'', e.g. for use with the form {{m|grc|μέλλον}} of the verb
{{m|grc|μέλλω|t=to intend}}, which uses the tag set `1:s//3:p|impf|actv|indc|unaugmented` to express the syncretism
between the first singular and third plural forms of the imperfect active indicative unaugmented conjugation.
Two-level multipart tags should be used sparingly; if in doubt, list out the inflections separately. [FIXME: Make
two-level multipart tags obsolete.]
* A ''shortcut'' is a tag that expands to any type of tag described above, or to any type of tag set described above.
Aliases are a particular type of shortcut whose expansion is a single non-multipart tag.
* A ''multipart shortcut'' is a shortcut that expands into a multipart tag, for example `123`, which expands to the
multipart tag `1//2//3`. Only the most common such combinations exist as shortcuts.
* A ''list shortcut'' is a special type of shortcut that expands to a list of tags instead of a single tag. For example,
the shortcut `1s` expands to `1|s` (first-person singular). Only the most common such combinations exist as shortcuts.
* A ''conjoined shortcut'' is a special type of list shortcut that consists of a conjoined tag set (multiple logical tag
sets). For example, the English language-specific shortcut `ed-form` expands to `spast|;|past|part`, expressing the
common syncretism between simple past and past participle in English (and in this case, `spast` is itself a list
shortcut that expands to `simple|past`).]==]
-- Add tracking category for PAGE when called from {{inflection of}} or
-- similar TEMPLATE. The tracking category linked to is
-- [[Wiktionary:Tracking/inflection of/PAGE]].
local function track(page)
debug_track("inflection of/" ..
-- avoid including links in pages (may cause error)
page:gsub("%[", "("):gsub("%]", ")"):gsub("|", "!")
)
end
local function wrap_in_span(text, classes)
return ("<span class='%s'>%s</span>"):format(classes, text)
end
--[==[
Lowest-level implementation of form-of templates, including the general {{tl|form of}} as well as those that deal with
inflection tags, such as the general {{tl|inflection of}}, semi-specific variants such as {{tl|participle of}}, and
specific variants such as {{tl|past participle of}}. `data` contains all the information controlling the display, with
the following fields:
* `.text`: Text to insert before the lemmas. Wrapped in the value of `.text_classes`, or its default; see below.
* `.lemmas`: List of objects describing the lemma(s) of which the term in question is a non-lemma form. These are passed
directly to {full_link()} in [[Module:links]]. Each object should have at minimum a `.lang` field containing the
language of the lemma and a `.term` field containing the lemma itself. Each object is formatted using {full_link()}
and then if there are more than one, they are joined using {serialCommaJoin()} in [[Module:table]]. Alternatively,
`.lemmas` can be a string, which is displayed directly, or omitted, to show no lemma links and omit the connecting
text.
* `.lemma_face`: "Face" to use when displaying the lemma objects. Usually should be set to {"term"}.
* `.enclitics`: List of enclitics to display after the lemmas, in parens.
* `.base_lemmas`: List of base lemmas to display after the lemmas, in the case where the lemmas in `.lemmas` are
themselves forms of another lemma (the base lemma), e.g. a comparative, superlative or participle. Each object is of
the form { { paramobj = PARAM_OBJ, lemmas = {LEMMA_OBJ, LEMMA_OBJ, ...} }} where PARAM_OBJ describes the properties
of the base lemma parameter (i.e. the relationship between the intermediate and base lemmas) and LEMMA_OBJ is an
object suitable to be passed to {full_link()} in [[Module:links]]. PARAM_OBJ is of the format
{ { param = "PARAM", tags = {"TAG", "TAG", ...} } where PARAM is the name of the parameter to {{tl|inflection of}}
etc. that holds the base lemma(s) of the specified relationship and the tags describe the relationship, such as
{ {"comd"}} or { {"past", "part"}}.
* `.text_classes`: CSS classes used to wrap the tag text and lemma links. Default is {"form-of-definition use-with-mention"}
for the tag text and lemma links, and additionally {"form-of-definition-link"} specifically for the lemma links.
(FIXME: Should separate out the lemma links into their own field.)
* `.posttext`: Additional text to display after the lemma links.]==]
function export.format_form_of(data)
if type(data) ~= "table" then
error("Internal error: First argument must now be a table of arguments")
end
local text_classes = data.text_classes or "form-of-definition use-with-mention"
local lemma_classes = data.text_classes or "form-of-definition-link"
local parts = {}
insert(parts, "<span class='" .. text_classes .. "'>")
if data.lemmas then
if type(data.lemmas) == "string" then
insert(parts, wrap_in_span(data.lemmas, lemma_classes))
else
local formatted_terms = {}
for _, lemma in ipairs(data.lemmas) do
insert(formatted_terms, wrap_in_span(
full_link(lemma, data.lemma_face), lemma_classes
))
end
insert(parts, serial_comma_join(formatted_terms), {conj = " 和 ", separator = "、", skip_serial_comma = true})
end
end
if data.of_text then
insert(parts, data.of_text)
end
if data.text ~= "" then
insert(parts, data.text)
end
if data.enclitics and #data.enclitics > 0 then
-- The outer parens need to be outside of the text_classes span so they show in upright instead of italic, or
-- they will clash with upright parens generated by link annotations such as transliterations and pos=.
insert(parts, "</span>")
local formatted_terms = {}
for _, enclitic in ipairs(data.enclitics) do
-- FIXME, should we have separate clitic face and/or classes?
insert(formatted_terms, wrap_in_span(
full_link(enclitic, data.lemma_face, nil, "show qualifiers"), lemma_classes
))
end
insert(parts, " (")
insert(parts, wrap_in_span("帶附著語素" .. (#data.enclitics > 1 and "s" or "") .. "", text_classes))
insert(parts, serial_comma_join(formatted_terms))
insert(parts, ")")
insert(parts, "<span class='" .. text_classes .. "'>")
end
if data.base_lemmas and #data.base_lemmas > 0 then
for _, base_lemma in ipairs(data.base_lemmas) do
insert(parts, ",</span>")
insert(parts, (tagged_inflections{
lang = base_lemma.lemmas[1].lang,
tags = base_lemma.paramobj.tags,
lemmas = base_lemma.lemmas,
lemma_face = data.lemma_face,
no_format_categories = true,
nocat = true,
text_classes = data.text_classes,
}))
insert(parts, "<span class='" .. text_classes .. "'>")
end
end
-- FIXME, should posttext go before enclitics? If so we need to have separate handling for the
-- final colon when there are multiple tag sets in tagged_inflections().
if data.posttext then
insert(parts, data.posttext)
end
insert(parts, "</span>")
return concat(parts)
end
format_form_of = export.format_form_of
--[==[
Return true if `tag` contains an internal link or HTML.]==]
function export.is_link_or_html(tag)
return tag:find("[[", nil, true) or tag:find("|", nil, true) or tag:find("<", nil, true)
end
is_link_or_html = export.is_link_or_html
--[==[
Look up a tag (either a shortcut of any sort of a canonical long-form tag) and return its expansion. The expansion
will be a string unless the shortcut is a list-tag shortcut such as `1s`; in that case, the expansion will be a
list. The caller must handle both cases. Only one level of expansion happens; hence, `acc` expands to {"accusative"},
`1s` expands to { {"1", "s"}} (not to { {"first", "singular"}}) and `123` expands to {"1//2//3"}. The expansion will be
the same as the passed-in tag in the following circumstances:
# The tag is `;` (this is special-cased, and no lookup is done).
# The tag is a multipart tag such as `nom//acc` (this is special-cased, and no lookup is done).
# The tag contains a raw link (this is special-cased, and no lookup is done).
# The tag contains HTML (this is special-cased, and no lookup is done).
# The tag is already a canonical long-form tag.
# The tag is unrecognized.
This function first looks up in the lang-specific data module [[Module:form of/lang-data/LANGCODE]], then in
[[Module:form of/data/1]] (which includes more common non-lang-specific tags) and finally (only if the tag is not
recognized as a shortcut or canonical tag, and is not of types 1-4 above) in [[Module:form of/data/2]].
If the expansion is a string and is different from the tag, track it if `do_track` is true.]==]
function export.lookup_shortcut(tag, lang, do_track)
-- If there is HTML or a link in the tag, return it directly; don't try
-- to look it up, which will fail.
if tag == ";" or tag:find("//", nil, true) or is_link_or_html(tag) then
return tag
end
local expansion
while lang do
local langdata = safe_load_data(form_of_lang_data_module_prefix .. lang:getCode())
-- If this is a canonical long-form tag, just return it, and don't check for shortcuts. This is an
-- optimization; see below.
if langdata then
if langdata.tags[tag] then
return tag
end
expansion = langdata.shortcuts[tag]
if expansion then
break
end
end
-- If the language has a parent (i.e. a superordinate variety), try again with that.
lang = lang:getParent()
end
if not expansion then
-- If this is a canonical long-form tag, just return it, and don't check for shortcuts (which will cause
-- [[Module:form of/data/2]] to be loaded, because there won't be a shortcut entry in [[Module:form of/data/1]] --
-- or, for that matter, in [[Module:form of/data/2]]). This is an optimization; the code will still work without
-- it, but will use up more memory.
if (m_data1 or get_m_data1()).tags[tag] then
return tag
end
expansion = m_data1.shortcuts[tag]
end
if not expansion then
expansion = (m_data2 or get_m_data2()).shortcuts[tag]
end
if not expansion then
return tag
end
-- Maybe track the expansion if it's not the same as the raw tag.
if do_track and expansion ~= tag and type(expansion) == "string" then
track("tag/" .. tag)
end
return expansion
end
lookup_shortcut = export.lookup_shortcut
--[==[
Look up a normalized/canonicalized tag and return the data object associated with it. If the tag isn't found, return
nil. This first looks up in the lang-specific data module [[Module:form of/lang-data/LANGCODE]], then in
[[Module:form of/data/1]] (which includes more common non-lang-specific tags) and then finally in
[[Module:form of/data/2]].]==]
function export.lookup_tag(tag, lang)
while lang do
local langdata = safe_load_data(form_of_lang_data_module_prefix .. lang:getCode())
local tag = langdata and langdata.tags[tag]
if tag then
return tag
end
-- If the language has a parent (i.e. a superordinate variety), try again with that.
lang = lang:getParent()
end
local tagobj = (m_data1 or get_m_data1()).tags[tag]
if tagobj then
return tagobj
end
local tagobj2 = (m_data2 or get_m_data2()).tags[tag]
if tagobj2 then
return tagobj2
end
return nil
end
lookup_tag = export.lookup_tag
-- Normalize a single tag, which may be a shortcut but should not be a multipart tag, a multipart shortcut or a list
-- shortcut.
local function normalize_single_tag(tag, lang, do_track)
local expansion = lookup_shortcut(tag, lang, do_track)
if type(expansion) ~= "string" then
error("Tag '" .. tag .. "' is a list shortcut, which is not allowed here")
end
tag = expansion
if not lookup_tag(tag, lang) and do_track then
-- If after all expansions and normalizations we don't recognize the canonical tag, track it.
track("unknown")
track("unknown/" .. tag)
end
return tag
end
--[=[
Normalize a component of a multipart tag. This should not have any // in it, but may join multiple individual tags with
a colon, and may be a single list-tag shortcut, which is treated as if colon-separated. The return value may be a list
of tags.
]=]
local function normalize_multipart_component(tag, lang, do_track)
-- If there is HTML or a link in the tag, don't try to split on colon. A colon may legitimately occur in either one,
-- and we don't want these things parsed. Note that we don't do this check before splitting on //, which we don't
-- expect to occur in links or HTML; see comment in normalize_tag().
if is_link_or_html(tag) then
return tag
end
local components = split(tag, ":", true)
if #components == 1 then
-- We allow list-tag shortcuts inside of multipart tags, e.g.
-- '1s//3p'. Check for this now.
tag = lookup_shortcut(tag, lang, do_track)
if type(tag) == "table" then
-- Temporary tracking as we will disallow this.
track("list-tag-inside-of-multipart")
-- We found a list-tag shortcut; treat as if colon-separated.
components = tag
else
return normalize_single_tag(tag, lang, do_track)
end
end
local normtags = {}
-- Temporary tracking as we will disallow this.
track("two-level-multipart")
for _, component in ipairs(components) do
if do_track then
-- There are multiple components; track each of the individual
-- raw tags.
track("tag/" .. component)
end
insert(normtags, normalize_single_tag(component, lang, do_track))
end
return normtags
end
--[=[
Normalize a single tag. The return value may be a list (in the case of multipart tags), which will contain nested lists
in the case of two-level multipart tags.
]=]
local function normalize_tag(tag, lang, do_track)
-- We don't check for links or HTML before splitting on //, which we don't expect to occur in links or HTML. Doing
-- it this way allows for a tag like '{{lb|grc|Epic}}//{{lb|grc|Ionic}}' to function correctly (the template calls
-- will be expanded before we process the tag, and will contain links and HTML). The only check we do is for a URL,
-- which shouldn't normally occur, but might if the user tries to put an external link into the tag. URL's with //
-- normally have the sequence ://, which should never normally occur when // and : are used in their normal ways.
if tag:find("://", nil, true) then
return tag
end
local split_tags = split(tag, "//", true)
if #split_tags == 1 then
local retval = normalize_multipart_component(tag, lang, do_track)
if type(retval) == "table" then
-- The user gave a tag like '1:s', i.e. with colon but without //. Allow this, but we need to return a
-- nested list.
return {retval}
end
return retval
end
local normtags = {}
for _, single_tag in ipairs(split_tags) do
if do_track then
-- If the tag was a multipart tag, track each of individual raw tags.
track("tag/" .. single_tag)
end
insert(normtags, normalize_multipart_component(single_tag, lang, do_track))
end
return normtags
end
--[==[
Normalize a tag set (a list of tags) into its canonical-form tags. The return value is a list of normalized tag sets
(a list because of there may be conjoined shortcuts among the input tags). A normalized tag set is a list of tag
elements, where each element is either a string (the canonical form of a tag), a list of such strings (in the case of
multipart tags) or a list of lists of such strings (in the case of two-level multipart tags). For example, the multipart
tag `nom//acc//voc` will be represented in canonical form as { {"nominative", "accusative", "vocative"}}, and the
two-level multipart tag `1:s//3:p` will be represented as { {{"first-person", "singular"}, {"third-person", "plural"}}}.
Example 1:
{normalize_tag_set({"nom//acc//voc", "n", "p"})} = { {{{"nominative", "accusative", "vocative"}, "masculine", "plural"}}}
Example 2:
{normalize_tag_set({"ed-form"}, ENGLISH)} = { {{"simple", "past"}, {"past", "participle"}}}
Example 3:
{normalize_tag_set({"archaic", "ed-form"}, ENGLISH)} = { {{"archaic", "simple", "past"}, {"archaic", "past", "participle"}}}]==]
function export.normalize_tag_set(tag_set, lang, do_track)
-- We track usage of shortcuts, normalized forms and (in the case of multipart tags or list tags) intermediate
-- forms. For example, if the tags 1s|mn|gen|indefinite are passed in, we track the following:
-- [[Wiktionary:Tracking/inflection of/tag/1s]]
-- [[Wiktionary:Tracking/inflection of/tag/1]]
-- [[Wiktionary:Tracking/inflection of/tag/s]]
-- [[Wiktionary:Tracking/inflection of/tag/first-person]]
-- [[Wiktionary:Tracking/inflection of/tag/singular]]
-- [[Wiktionary:Tracking/inflection of/tag/mn]]
-- [[Wiktionary:Tracking/inflection of/tag/m//n]]
-- [[Wiktionary:Tracking/inflection of/tag/m]]
-- [[Wiktionary:Tracking/inflection of/tag/n]]
-- [[Wiktionary:Tracking/inflection of/tag/masculine]]
-- [[Wiktionary:Tracking/inflection of/tag/neuter]]
-- [[Wiktionary:Tracking/inflection of/tag/gen]]
-- [[Wiktionary:Tracking/inflection of/tag/genitive]]
-- [[Wiktionary:Tracking/inflection of/tag/indefinite]]
local output_tag_set = {}
local saw_semicolon = false
for _, tag in ipairs(tag_set) do
if do_track then
-- Track the raw tag.
track("tag/" .. tag)
end
-- Expand the tag, which may generate a new tag (either a fully canonicalized tag, a multipart tag, or a list
-- of tags).
tag = lookup_shortcut(tag, lang, do_track)
if type(tag) == "table" then
saw_semicolon = contains(tag, ";")
if saw_semicolon then
-- If we saw a conjoined shortcut, we need to use a more general algorithm that can expand a single
-- tag set into multiple.
break
end
for _, t in ipairs(tag) do
if do_track then
-- If the tag expands to a list of raw tags, track each of those.
track("tag/" .. t)
end
insert(output_tag_set, normalize_tag(t, lang, do_track))
end
else
insert(output_tag_set, normalize_tag(tag, lang, do_track))
end
end
if not saw_semicolon then
return {output_tag_set}
end
-- Use a more general algorithm that handles conjoined shortcuts.
output_tag_set = {}
for i, tag in ipairs(tag_set) do
if do_track then
-- Track the raw tag.
track("tag/" .. tag)
end
-- Expand the tag, which may generate a new tag (either a fully canonicalized tag, a multipart tag, or a list
-- of tags).
tag = lookup_shortcut(tag, lang, do_track)
if type(tag) == "table" then
local output_tag_sets = {}
local shortcut_tag_sets = split_tag_set(tag)
local normalized_shortcut_tag_sets = {}
for _, shortcut_tag_set in ipairs(shortcut_tag_sets) do
extend(normalized_shortcut_tag_sets,
normalize_tag_set(shortcut_tag_set, lang, do_track))
end
local after_tags = slice(tag_set, i + 1)
local normalized_after_tags_sets = normalize_tag_set(after_tags, lang, do_track)
for _, normalized_shortcut_tag_set in ipairs(normalized_shortcut_tag_sets) do
for _, normalized_after_tags_set in ipairs(normalized_after_tags_sets) do
insert(output_tag_sets, append(output_tag_set, normalized_shortcut_tag_set,
normalized_after_tags_set))
end
end
return output_tag_sets
else
insert(output_tag_set, normalize_tag(tag, lang, do_track))
end
end
error("Internal error: Should not get here")
end
normalize_tag_set = export.normalize_tag_set
--[==[
Split a tag set that may consist of multiple semicolon-separated tag sets into the component tag sets.]==]
function export.split_tag_set(tag_set)
local split_tag_sets = {}
local cur_tag_set = {}
for _, tag in ipairs(tag_set) do
if tag == ";" then
if #cur_tag_set > 0 then
insert(split_tag_sets, cur_tag_set)
end
cur_tag_set = {}
else
insert(cur_tag_set, tag)
end
end
if #cur_tag_set > 0 then
insert(split_tag_sets, cur_tag_set)
end
return split_tag_sets
end
split_tag_set = export.split_tag_set
local tag_set_param_mods = {
lb = {
item_dest = "labels",
convert = function(arg, parse_err)
return split(arg, "//", true)
end,
}
}
--[==[
Parse tag set properties from a tag set (list of tags). Currently no per-tag properties are recognized, and the only
per-tag-set property recognized is `<lb:...>` for specifing label(s) for the tag set. Per-tag-set properties must be
attached to the last tag.]==]
function export.parse_tag_set_properties(tag_set)
local function generate_tag_set_obj(last_tag)
tag_set[#tag_set] = last_tag
return {tags = tag_set}
end
local last_tag = tag_set[#tag_set]
-- Check for inline modifier, e.g. מרים<tr:Miryem>. But exclude HTML entry with <span ...>, <i ...>, <br/> or
-- similar in it, caused by wrapping an argument in {{l|...}}, {{af|...}} or similar. Basically, all tags of
-- the sort we parse here should consist of a less-than sign, plus letters, plus a colon, e.g. <lb:...>, so if
-- we see a tag on the outer level that isn't in this format, we don't try to parse it. The restriction to the
-- outer level is to allow generated HTML inside of e.g. qualifier tags, such as foo<q:similar to {{m|fr|bar}}>.
if last_tag:find("<", nil, true) and not last_tag:find("^[^<]*<%l*[^%l:]") then
return parse_inline_modifiers(last_tag, {
param_mods = tag_set_param_mods,
generate_obj = generate_tag_set_obj,
})
else
return generate_tag_set_obj(last_tag)
end
end
parse_tag_set_properties = export.parse_tag_set_properties
local function normalize_pos(pos)
if not pos then
return nil
end
return (m_pos_data or get_m_pos_data())[pos] or pos
end
-- Return the display form of a single canonical-form tag. The value
-- passed in must be a string (i.e. it cannot be a list describing a
-- multipart tag). To handle multipart tags, use get_tag_display_form().
local function get_single_tag_display_form(normtag, lang)
local data = lookup_tag(normtag, lang)
local display = normtag
-- If the tag has a special display form, use it
if data and data.display then
display = data.display
end
-- If there is a nonempty glossary index, then show a link to it
local glossary = data and data[(m_data or get_m_data()).GLOSSARY]
if glossary ~= nil then
if glossary == m_data.WIKT then
display = "[[" .. normtag .. "|" .. display .. "]]"
elseif glossary == m_data.WP then
display = "[[w:" .. normtag .. "|" .. display .. "]]"
elseif glossary == m_data.APPENDIX then
display = "[[Appendix:Glossary#" .. anchor_encode(normtag) .. "|" .. display .. "]]"
elseif type(glossary) ~= "string" then
error(("Internal error: Wrong type %s for glossary value %s for tag %s"):format(
type(glossary), dump(glossary), normtag))
else
local link = glossary:match("^wikt:(.*)")
if link then
display = "[[" .. link .. "|" .. display .. "]]"
end
if not link then
link = glossary:match("^w:(.*)")
if link then
display = "[[w:" .. link .. "|" .. display .. "]]"
end
end
if not link then
display = "[[Appendix:Glossary#" .. anchor_encode(glossary) .. "|" .. display .. "]]"
end
end
end
return display
end
--[==[
Turn a canonicalized tag spec (which describes a single, possibly multipart tag) into the displayed form. The tag spec
may be a string (a canonical-form tag); a list of canonical-form tags (in the case of a simple multipart tag); or a
list of mixed canonical-form tags and lists of such tags (in the case of a two-level multipart tag). `joiner` indicates
how to join the parts of a multipart tag, and can be either {"and"} ("foo and bar", or "foo, bar and baz" for 3 or
more), {"slash"} ("foo/bar"), {"en-dash"} ("foo–bar") or {nil}, which uses the global default found in
{multipart_join_strategy()} in [[Module:form of/functions]]. (NOTE: The global default is {"slash"} and this seems
unlikely to change.)]==]
function export.get_tag_display_form(tagspec, lang, joiner)
if type(tagspec) == "string" then
return get_single_tag_display_form(tagspec, lang)
end
-- We have a multipart tag. See if there's a display handler to display them specially.
for _, handler in ipairs(display_handlers or get_display_handlers()) do
local displayval = handler(tagspec, joiner)
if displayval then
return displayval
end
end
-- No display handler.
local displayed_tags = {}
for _, first_level_tag in ipairs(tagspec) do
if type(first_level_tag) == "string" then
insert(displayed_tags, get_single_tag_display_form(first_level_tag, lang))
else
-- A first-level element of a two-level multipart tag. Currently we just separate the individual components
-- with spaces, but other ways are possible, e.g. using an underscore, colon, parens or braces.
local components = {}
for _, component in ipairs(first_level_tag) do
insert(components, get_single_tag_display_form(component, lang))
end
insert(displayed_tags, concat(components, ""))
end
end
return join_multiparts(displayed_tags, joiner)
end
get_tag_display_form = export.get_tag_display_form
--[==[
Given a normalized tag set (i.e. as output by {normalize_tag_set()}; all tags are in canonical form, multipart tags are
represented as lists, and two-level multipart tags as lists of lists), convert to displayed form (a string). See
{get_tag_display_form()} for the meaning of `joiner`.]==]
function export.get_tag_set_display_form(normalized_tag_set, lang, joiner)
local parts = {}
for _, tagspec in ipairs(normalized_tag_set) do
local to_insert = get_tag_display_form(tagspec, lang, joiner)
-- Maybe insert a space before inserting the display form of the tag. We insert a space if
-- (a) we're not the first tag; and
-- (b) the tag we're about to insert doesn't have the "no_space_on_left" property; and
-- (c) the preceding tag doesn't have the "no_space_on_right" property.
-- NOTE: We depend here on the fact that
-- (1) all tags with either of the above properties set have the same display form as canonical form, and
-- (2) all tags with either of the above properties set are single-character tags.
-- The second property is an optimization to avoid looking up display forms resulting from multipart tags,
-- which won't be found and which will trigger loading of [[Module:form of/data/2]]. If multichar punctuation is
-- added in the future, it's ok to change the == 1 below to <= 2 or <= 3.
--
-- If the first property above fails to hold in the future, we need to track the canonical form of each tag
-- (including the previous one) as well as the display form. This would also avoid the need for the == 1 check.
if #parts > 0 then
local most_recent_tagobj = parts[#parts]:match("^.[\128-\191]*$") and lookup_tag(parts[#parts], lang)
local to_insert_tagobj = to_insert:match("^.[\128-\191]*$") and lookup_tag(to_insert, lang)
if (
(not most_recent_tagobj or not most_recent_tagobj.no_space_on_right) and
(not to_insert_tagobj or not to_insert_tagobj.no_space_on_left)
) then
insert(parts, "")
end
end
insert(parts, to_insert)
end
return concat(parts)
end
get_tag_set_display_form = export.get_tag_set_display_form
--[==[
Split a tag set containing two-level multipart tags into one or more tag sets not containing such tags.
Single-level multipart tags are left alone. (If we need to, a slight modification of the following code
will also split single-level multipart tags.) This assumes that multipart tags are represented as lists
and two-level multipart tags are represented as lists of lists, as is output by {normalize_tag_set()}.
NOTE: We have to be careful to properly handle imbalanced two-level multipart tags such as
`def:s//p` (or the reverse, `s//def:p`).]==]
local function split_two_level_multipart_tag_set(tag_set)
for i, tag in ipairs(tag_set) do
if type(tag) == "table" then
-- We saw a multipart tag. Check if any of the parts are two-level.
local saw_two_level_tag = false
for _, first_level_tag in ipairs(tag) do
if type(first_level_tag) == "table" then
saw_two_level_tag = true
break
end
end
if saw_two_level_tag then
-- We found a two-level multipart tag.
-- (1) Extract the preceding tags.
local pre_tags = slice(tag_set, 1, i - 1)
-- (2) Extract the following tags.
local post_tags = slice(tag_set, i + 1)
-- (3) Loop over each tag set alternant in the two-level multipart tag.
-- For each alternant, form the tag set consisting of pre_tags + alternant + post_tags,
-- and recursively split that tag set.
local resulting_tag_sets = {}
for _, first_level_tag_set in ipairs(tag) do
local expanded_tag_set = {}
extend(expanded_tag_set, pre_tags)
-- The second level may have a string or a list.
if type(first_level_tag_set) == "table" then
extend(expanded_tag_set, first_level_tag_set)
else
insert(expanded_tag_set, first_level_tag_set)
end
extend(expanded_tag_set, post_tags)
extend(resulting_tag_sets, split_two_level_multipart_tag_set(expanded_tag_set))
end
return resulting_tag_sets
end
end
end
return {tag_set}
end
local function try_lang_specific_module(langcode, modules_tried, name, data)
local lang_specific_module = form_of_lang_data_module_prefix .. langcode .. "/functions"
local langdata = safe_require(lang_specific_module)
if langdata then
insert(modules_tried, lang_specific_module)
if langdata.cat_functions then
local fn = langdata.cat_functions[name]
if fn then
return fn(data), true
end
end
end
return nil, false
end
-- Call a named function, either from the lang-specific data in
-- [[Module:form of/lang-specific/LANGCODE/functions]] or in [[Module:form of/functions]].
local function call_named_function(name, funtype, normalized_tag_set, lang, POS, pagename, lemmas)
local data = {
pagename = pagename or default_pagename or get_default_pagename(),
lemmas = lemmas,
tag_set = normalized_tag_set,
lang = lang,
POS = POS
}
local modules_tried = {}
-- First try lang-specific.
while lang do
local retval, found_it = try_lang_specific_module(lang:getCode(), modules_tried, name, data)
if found_it then
return retval
end
-- If the language has a parent (i.e. a superordinate variety), try again with that.
lang = lang:getParent()
end
-- Try lang-independent.
insert(modules_tried, form_of_functions_module)
local fn = (cat_functions or get_cat_functions())[name]
if fn then
return fn(data)
end
for i, modname in ipairs(modules_tried) do
modules_tried[i] = "[[" .. modname .. "]]"
end
error(("No %s function named '%s' in %s"):format(funtype, name, list_to_text(modules_tried, nil, " or ")))
end
-- Given a tag from the current tag set (which may be a list in case of a multipart tag),
-- and a tag from a categorization spec, check that the two match.
-- (1) If both are strings, we just check for equality.
-- (2) If the spec tag is a string and the tag set tag is a list (i.e. it originates from a
-- multipart tag), we check that the spec tag is in the list. This is because we want to treat
-- multipart tags in user-specified tag sets as if the user had specified multiple tag sets.
-- For example, if the user said "1//3|s|pres|ind" and the categorization spec says {"has", "1"},
-- we want this to match, because "1//3|s|pres|ind" should be treated equivalently to two tag
-- sets "1|s|pres|ind" and "3|s|pres|ind", and the former matches the categorization spec.
-- (3) If the spec tag is a list (i.e. it originates from a multipart tag), we check that the
-- tag set tag is also a list and is a superset of the spec tag. For example, if the categorization
-- spec says {"has", "1//3"}, then the tag set tag must be a multipart tag that has both "1" and "3"
-- in it. "1//3" works, as does "1//2//3".
local function tag_set_tag_matches_spec_tag(tag_set_tag, spec_tag)
if type(spec_tag) == "table" then
if type(tag_set_tag) == "table" and is_subset_list(spec_tag, tag_set_tag) then
return true
end
elseif type(tag_set_tag) == "table" then
if contains(tag_set_tag, spec_tag) then
return true
end
elseif tag_set_tag == spec_tag then
return true
end
return false
end
-- Check that the current tag set matches the given spec tag. This means that any of the tags
-- in the current tag set match, according to tag_set_tag_matches_spec_tag(); see above. If the
-- current tag set contains only string tags (i.e. no multipart tags), and the spec tag is a
-- string (i.e. not a multipart tag), this boils down to list containment, but it gets more
-- complex when multipart tags are present.
local function tag_set_matches_spec_tag(spec_tag, tag_set, lang)
spec_tag = normalize_tag(spec_tag, lang)
for _, tag_set_tag in ipairs(tag_set) do
if tag_set_tag_matches_spec_tag(tag_set_tag, spec_tag) then
return true
end
end
return false
end
-- Check whether the given spec matches the current tag set. Two values are returned:
-- (1) whether the spec matches the tag set; (2) the index of the category to add if
-- the spec matches.
local function check_condition(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas)
if type(spec) == "boolean" then
return spec
elseif type(spec) ~= "table" then
error("Wrong type of condition " .. spec .. ": " .. type(spec))
end
local predicate = spec[1]
if predicate == "has" then
return tag_set_matches_spec_tag(spec[2], tag_set, lang), 3
elseif predicate == "hasall" then
for _, tag in ipairs(spec[2]) do
if not tag_set_matches_spec_tag(tag, tag_set, lang) then
return false, 3
end
end
return true, 3
elseif predicate == "hasany" then
for _, tag in ipairs(spec[2]) do
if tag_set_matches_spec_tag(tag, tag_set, lang) then
return true, 3
end
end
return false, 3
elseif predicate == "tags=" then
local normalized_spec_tag_sets = normalize_tag_set(spec[2], lang)
if #normalized_spec_tag_sets > 1 then
error("Internal error: No support for conjoined shortcuts in category/label specs in "
.. "[[Module:form of/cats]] when processing spec tag set " .. concat(spec[2], "|"))
end
local normalized_spec_tag_set = normalized_spec_tag_sets[1]
-- Check for and disallow two-level multipart tags in the specs. FIXME: Remove this when we remove
-- support for two-level multipart tags.
for _, tag in ipairs(normalized_spec_tag_set) do
if type(tag) == "table" then
for _, subtag in ipairs(tag) do
if type(subtag) == "table" then
error("Internal error: No support for two-level multipart tags in category/label specs"
.. "[[Module:form of/cats]] when processing spec tag set "
.. concat(spec[2], "|"))
end
end
end
end
-- Allow tags to be in different orders, and multipart tags to be in different orders. To handle this,
-- we first check that both tag set tags and spec tags have the same length. If so, we sort the
-- multipart tags in the tag set tags and spec tags, and then check that all tags in the spec tags are
-- in the tag set tags.
if #tag_set ~= #normalized_spec_tag_set then
return false, 3
end
local tag_set_tags = deep_copy(tag_set)
for i=1,#tag_set_tags do
if type(tag_set_tags[i]) == "table" then
sort(tag_set_tags[i])
end
if type(normalized_spec_tag_set[i]) == "table" then
sort(normalized_spec_tag_set[i])
end
end
for i=1,#tag_set_tags do
if not contains(tag_set_tags, normalized_spec_tag_set[i]) then
return false, 3
end
end
return true, 3
elseif predicate == "p=" then
return POS == normalize_pos(spec[2]), 3
elseif predicate == "pany" then
for _, specpos in ipairs(spec[2]) do
if POS == normalize_pos(specpos) then
return true, 3
end
end
return false, 3
elseif predicate == "pexists" then
return POS ~= nil, 2
elseif predicate == "not" then
local condval = check_condition(spec[2], tag_set, normalized_tag_set, lang, POS, pagename, lemmas)
return not condval, 3
elseif predicate == "and" then
local condval = check_condition(spec[2], tag_set, normalized_tag_set, lang, POS, pagename, lemmas)
if condval then
condval = check_condition(spec[3], tag_set, normalized_tag_set, lang, POS, pagename, lemmas)
end
return condval, 4
elseif predicate == "or" then
local condval = check_condition(spec[2], tag_set, normalized_tag_set, lang, POS, pagename, lemmas)
if not condval then
condval = check_condition(spec[3], tag_set, normalized_tag_set, lang, POS, pagename, lemmas)
end
return condval, 4
elseif predicate == "call" then
return call_named_function(spec[2], "condition", normalized_tag_set, lang, POS, pagename, lemmas), 3
else
error("Unrecognized predicate: " .. predicate)
end
end
-- Process a given spec. This checks any conditions in the spec against the
-- tag set, and insert any resulting categories into `categories`. Return value
-- is true if the outermost condition evaluated to true and a category was inserted
-- (this is used in {"cond" ...} conditions, which stop when a subcondition evaluates
-- to true).
local function process_spec(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels)
if not spec then
return false
elseif type(spec) == "string" then
-- A category. Substitute POS request with user-specified part of speech or default.
spec = spec:gsub("<<p=(.-)>>", function(default)
return POS or normalize_pos(default)
end)
insert(categories, spec:find("的") and spec:gsub("的", "的" .. lang:getFullName()) or lang:getFullName() .. spec) -- L10N
return true
elseif type(spec) == "table" and spec.labels then
-- A label spec.
for _, label in ipairs(spec.labels) do
insert_if_not(labels, label)
end
return true
elseif type(spec) ~= "table" then
error("Wrong type of specification " .. spec .. ": " .. type(spec))
end
local predicate = spec[1]
if predicate == "multi" then
for _, sp in iterate_from(2, ipairs(spec)) do -- Iterate from 2.
process_spec(sp, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels)
end
return true
elseif predicate == "cond" then
for _, sp in iterate_from(2, ipairs(spec)) do -- Iterate from 2.
if process_spec(sp, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels) then
return true
end
end
return false
elseif predicate == "call" then
return process_spec(
call_named_function(spec[2], "spec", normalized_tag_set, lang, POS, pagename, lemmas),
tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels
)
else
local condval, ifspec = check_condition(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas)
if condval then
process_spec(spec[ifspec], tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels)
return true
else
process_spec(spec[ifspec + 1], tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels)
-- FIXME: Are we sure this is correct?
return false
end
end
end
--[==[
Given a normalized tag set (i.e. as output by {normalize_tag_set()}; all tags are in canonical form, multipart tags are
represented as lists, and two-level multipart tags as lists of lists), fetch the associated categories and labels.
Return two values, a list of categories and a list of labels. `lang` is the language of term represented by the tag set,
and `POS` is the user-provided part of speech (which may be {nil}).]==]
function export.fetch_categories_and_labels(normalized_tag_set, lang, POS, pagename, lemmas)
local categories, labels = {}, {}
POS = normalize_pos(POS)
-- First split any two-level multipart tags into multiple sets, to make our life easier.
for _, tag_set in ipairs(split_two_level_multipart_tag_set(normalized_tag_set)) do
local langcode = lang:getCode()
local langspecs = (m_cats_data or get_m_cats_data())[langcode]
if langspecs then
for _, spec in ipairs(langspecs) do
process_spec(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels)
end
end
local full_code = lang:getFullCode()
if full_code ~= langcode then
local langspecs = (m_cats_data or get_m_cats_data())[full_code]
if langspecs then
for _, spec in ipairs(langspecs) do
process_spec(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels)
end
end
end
if full_code ~= "und" then
local langspecs = (m_cats_data or get_m_cats_data())["und"]
if langspecs then
for _, spec in ipairs(langspecs) do
process_spec(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels)
end
end
end
end
return categories, labels
end
fetch_categories_and_labels = export.fetch_categories_and_labels
local function format_labels(labels, data, notext)
if labels and #labels > 0 then
return show_labels{
labels = labels,
lang = data.lang,
sort = data.sort,
nocat = data.nocat
} .. (notext and (data.pretext or "") == "" and "" or " ")
else
return ""
end
end
--[==[
Implementation of templates that display inflection tags, such as the general {{tl|inflection of}}, semi-specific
variants such as {{tl|participle of}}, and specific variants such as {{tl|past participle of}}. `data` contains all the
information controlling the display, with the following fields:
* `.lang`: ('''''required''''') Language to use when looking up language-specific inflection tags, categories and
labels, and for displaying categories and labels.
* `.tags`: ('''''required''' unless `.tag_sets` is given'') List of non-canonicalized inflection tags. Multiple tag sets
can be indicated by a {";"} as one of the tags, and tag-set properties may be attached to the last tag of a tag set.
The tags themselves may come directly from the user (as in {{tl|inflection of}}); come partly from the user (as in
{{tl|participle of}}, which adds the tag `part` to user-specified inflection tags); or be entirely specified by the
template (as in {{tl|past participle of}}).
* `.tag_sets`: ('''''required''' unless `.tags` is given'') List of non-canonicalized tag sets and associated
per-tag-set properties. Each element of the list is an object of the form
{ {tags = {"TAG", "TAG", ...}, labels = {"LABEL", "LABEL", ...}}. If `.tag_sets` is specified, `.tags` should not be
given and vice-versa. Specifying `.tag_sets` in place of tags allowed per-tag set labels to be specified; otherwise,
there is no advantage. [[Module:pt-gl-inflections]] uses this functionality to supply labels like {"Brazil"} and
{"Portugal"} associated with specific tag sets.
* `.lemmas`: ('''''recommended''''') List of objects describing the lemma(s) of which the term in question is a
non-lemma form. These are passed directly to {full_link()} in [[Module:links]]. Each object should have at minimum a
`.lang` field containing the language of the lemma and a `.term` field containing the lemma itself. Each object is
formatted using {full_link()} and then if there are more than one, they are joined using {serialCommaJoin()} in
[[Module:table]]. Alternatively, `.lemmas` can be a string, which is displayed directly. If omitted entirely, no lemma
links are shown and the connecting "of" is also omitted.
* `.lemma_face`: ('''''recommended''''') "Face" to use when displaying the lemma objects. Usually should be set to
{"term"}.
* `.POS`: ('''''recommended''''') Categorizing part-of-speech tag. Comes from the {{para|p}} or {{para|POS}} argument of
{{tl|inflection of}}.
* `.pagename`: Page name of "current" page or nil to use the actual page title; for testing purposes.
* `.enclitics`: List of enclitics to display after the lemmas, in parens.
* `.no_format_categories`: If true, don't format the categories derived from the inflection tags; just return them.
* `.sort`: Sort key for formatted categories. Ignored when `.no_format_categories` = {true}.
* `.nocat`: Suppress computation of categories (even if `.no_format_categories` is not given).
* `.notext`: Disable display of all tag text and `inflection of` text. (FIXME: Maybe not implemented correctly.)
* `.capfirst`: Capitalize the first word displayed.
* `.pretext`: Additional text to display before the inflection tags, but after any top-level labels.
* `.posttext`: Additional text to display after the lemma links.
* `.text_classes`: CSS classes used to wrap the tag text and lemma links. Default is
{"form-of-definition use-with-mention"} for the tag text, {"form-of-definition-link"} for the lemma links. (FIXME:
Should separate out the lemma links into their own field.)
`.joiner`: Override the joiner (normally a slash) used to join multipart tags. You should normally not specify this.
A typical call might look like this (for {{m+|es|amo}}): {
local lang = require("Module:languages").getByCode("es")
local lemma_obj = {
lang = lang,
term = "amar",
}
return m_form_of.tagged_inflections({
lang = lang, tags = {"1", "s", "pres", "ind"}, lemmas = {lemma_obj}, lemma_face = "term", POS = "verb"
})
}
Normally, one value is returned, the formatted text, which has appended to it the formatted categories derived from the
tag-set-related categories generated by the specs in [Module:form of/cats]]. To suppress this, set
`data.no_format_categories` = {true}, in which case two values are returned, the formatted text without any formatted
categories appended and a list of the categories to be formatted.
NOTE: There are two sets of categories that may be generated: (1) categories derived directly from the tag sets, as
specified in [[Module:form of/cats]]; (2) categories derived from tag-set labels, either (a) set explicitly by the
caller in `data.tag_sets`, (b) specified by the user using `<lb:...>` attached to the last tag in a tag set, or
(c) specified in [[Module:form of/cats]]. The second type (label-related categories) are currently not returned in
the second return value of {tagged_inflections()}, and are currently inserted into the output text even if
`data.no_format_categories` is set to {true}; but they can be suppressed by setting `data.nocat` = {true} (which also
suppresses the first type of categories, those derived directly from tag sets, even if `data.no_format_categories` is
set to {true}).]==]
function export.tagged_inflections(data)
if not data.tags and not data.tag_sets then
error("First argument must be a table of arguments, and `.tags` or `.tag_sets` must be specified")
end
if data.tags and data.tag_sets then
error("Both `.tags` and `.tag_sets` cannot be specified")
end
local tag_sets = data.tag_sets
if not tag_sets then
tag_sets = split_tag_set(data.tags)
for i, tag_set in ipairs(tag_sets) do
tag_sets[i] = parse_tag_set_properties(tag_set)
end
end
local inflections = {}
local categories = {}
for _, tag_set in ipairs(tag_sets) do
local normalized_tag_sets = normalize_tag_set(tag_set.tags, data.lang, "do-track")
for _, normalized_tag_set in ipairs(normalized_tag_sets) do
local this_categories, this_labels = fetch_categories_and_labels(normalized_tag_set, data.lang,
data.POS, data.pagename, type(data.lemmas) == "table" and data.lemmas or nil)
if not data.nocat then
extend(categories, this_categories)
end
local cur_infl = get_tag_set_display_form(normalized_tag_set, data.lang, data.joiner)
if #cur_infl > 0 then
if tag_set.labels then
this_labels = append(tag_set.labels, this_labels)
end
insert(inflections, {infl_text = cur_infl, labels = this_labels})
end
end
end
local overall_labels, need_per_tag_set_labels
for _, inflection in ipairs(inflections) do
if overall_labels == nil then
overall_labels = inflection.labels
elseif not deep_equals(overall_labels, inflection.labels) then
need_per_tag_set_labels = true
overall_labels = nil
break
end
end
if not need_per_tag_set_labels then
for _, inflection in ipairs(inflections) do
inflection.labels = nil
end
end
local format_data = shallow_copy(data)
local of_text = data.lemmas and " 的" or ""
local formatted_text
if #inflections == 1 then
if need_per_tag_set_labels then
error("Internal error: need_per_tag_set_labels should not be set with one inflection")
end
format_data.of_text = of_text
format_data.text = format_labels(overall_labels, data, data.notext) .. (data.pretext or "") .. (data.notext and "" or
(data.capfirst and ucfirst(inflections[1].infl_text) or inflections[1].infl_text))
formatted_text = format_form_of(format_data)
else
format_data.text = format_labels(overall_labels, data, data.notext) .. (data.pretext or "") .. (data.notext and "" or
(of_text .. (data.capfirst and "屈折" or "屈折")))
format_data.posttext = (data.posttext or "") .. ":"
local link = format_form_of(format_data)
local text_classes = data.text_classes or "form-of-definition use-with-mention"
for i, inflection in ipairs(inflections) do
inflections[i] = "\n## " .. format_labels(inflection.labels, data, false) ..
"<span class='" .. text_classes .. "'>" .. inflection.infl_text .. "</span>"
end
formatted_text = link .. concat(inflections)
end
if not data.no_format_categories then
if #categories > 0 then
formatted_text = formatted_text .. format_categories(categories, data.lang,
data.sort, nil, export.force_cat)
end
return formatted_text
end
return formatted_text, categories
end
tagged_inflections = export.tagged_inflections
function export.dump_form_of_data(frame)
local data = {
require(form_of_data1_module),
require(form_of_data2_module)
}
return require(json_module).toJSON(data)
end
export.form_of_cats_module = form_of_cats_module
export.form_of_data1_module = form_of_data1_module
export.form_of_data2_module = form_of_data2_module
export.form_of_functions_module = form_of_functions_module
export.form_of_lang_data_module_prefix = form_of_lang_data_module_prefix
export.form_of_pos_module = form_of_pos_module
return export
hezu6328ztsfxdujxfim08c8kti6rhe
9739582
9739581
2026-04-21T05:43:26Z
TongcyDai
53191
9739582
Scribunto
text/plain
local export = {}
export.force_cat = false -- for testing; set to true to display categories even on non-mainspace pages
local debug_track_module = "Module:debug/track"
local form_of_cats_module = "Module:form of/cats"
local form_of_data_module = "Module:form of/data"
local form_of_data1_module = "Module:form of/data/1"
local form_of_data2_module = "Module:form of/data/2"
local form_of_functions_module = "Module:form of/functions"
local form_of_lang_data_module_prefix = "Module:form of/lang-data/"
local form_of_pos_module = "Module:form of/pos"
local function_module = "Module:fun"
local headword_data_module = "Module:headword/data"
local json_module = "Module:JSON"
local labels_module = "Module:labels"
local links_module = "Module:links"
local load_module = "Module:load"
local parse_utilities_module = "Module:parse utilities"
local string_utilities_module = "Module:string utilities"
local table_module = "Module:table"
local utilities_module = "Module:utilities"
local anchor_encode = mw.uri.anchorEncode
local concat = table.concat
local dump = mw.dumpObject
local fetch_categories_and_labels -- Defined below.
local format_form_of -- Defined below.
local get_tag_display_form -- Defined below.
local get_tag_set_display_form -- Defined below.
local insert = table.insert
local ipairs = ipairs
local is_link_or_html -- Defined below.
local list_to_text = mw.text.listToText
local lookup_shortcut -- Defined below.
local lookup_tag -- Defined below.
local normalize_tag_set -- Defined below.
local parse_tag_set_properties -- Defined below.
local require = require
local sort = table.sort
local split_tag_set -- Defined below.
local tagged_inflections -- Defined below.
local type = type
--[==[
Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==]
local function append(...)
append = require(table_module).append
return append(...)
end
local function contains(...)
contains = require(table_module).contains
return contains(...)
end
local function debug_track(...)
debug_track = require(debug_track_module)
return debug_track(...)
end
local function deep_copy(...)
deep_copy = require(table_module).deepCopy
return deep_copy(...)
end
local function deep_equals(...)
deep_equals = require(table_module).deepEquals
return deep_equals(...)
end
local function extend(...)
extend = require(table_module).extend
return extend(...)
end
local function format_categories(...)
format_categories = require(utilities_module).format_categories
return format_categories(...)
end
local function full_link(...)
full_link = require(links_module).full_link
return full_link(...)
end
local function insert_if_not(...)
insert_if_not = require(table_module).insertIfNot
return insert_if_not(...)
end
local function is_subset_list(...)
is_subset_list = require(table_module).isSubsetList
return is_subset_list(...)
end
local function iterate_from(...)
iterate_from = require(function_module).iterateFrom
return iterate_from(...)
end
local function join_multiparts(...)
join_multiparts = require(form_of_functions_module).join_multiparts
return join_multiparts(...)
end
local function load_data(...)
load_data = require(load_module).load_data
return load_data(...)
end
local function parse_inline_modifiers(...)
parse_inline_modifiers = require(parse_utilities_module).parse_inline_modifiers
return parse_inline_modifiers(...)
end
local function safe_load_data(...)
safe_load_data = require(load_module).safe_load_data
return safe_load_data(...)
end
local function safe_require(...)
safe_require = require(load_module).safe_require
return safe_require(...)
end
local function serial_comma_join(...)
serial_comma_join = require(table_module).serialCommaJoin
return serial_comma_join(...)
end
local function shallow_copy(...)
shallow_copy = require(table_module).shallowCopy
return shallow_copy(...)
end
local function show_labels(...)
show_labels = require(labels_module).show_labels
return show_labels(...)
end
local function slice(...)
slice = require(table_module).slice
return slice(...)
end
local function split(...)
split = require(string_utilities_module).split
return split(...)
end
local function ucfirst(...)
ucfirst = require(string_utilities_module).ucfirst
return ucfirst(...)
end
--[==[
Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==]
local cat_functions
local function get_cat_functions()
cat_functions, get_cat_functions = require(form_of_functions_module).cat_functions, nil
return cat_functions
end
local default_pagename
local function get_default_pagename()
default_pagename, get_default_pagename = load_data(headword_data_module).pagename, nil
return default_pagename
end
local display_handlers
local function get_display_handlers()
display_handlers, get_display_handlers = require(form_of_functions_module).display_handlers, nil
return display_handlers
end
local m_cats_data
local function get_m_cats_data()
m_cats_data, get_m_cats_data = load_data(form_of_cats_module), nil
return m_cats_data
end
local m_data
local function get_m_data()
-- Needs require.
m_data, get_m_data = require(form_of_data_module), nil
return m_data
end
local m_data1
local function get_m_data1()
m_data1, get_m_data1 = load_data(form_of_data1_module), nil
return m_data1
end
local m_data2
local function get_m_data2()
m_data2, get_m_data2 = load_data(form_of_data2_module), nil
return m_data2
end
local m_pos_data
local function get_m_pos_data()
m_pos_data, get_m_pos_data = load_data(form_of_pos_module), nil
return m_pos_data
end
--[==[ intro:
This module implements the underlying processing of {{tl|form of}}, {{tl|inflection of}} and specific variants such as
{{tl|past participle of}} and {{tl|alternative spelling of}}. Most of the logic in this file is to handle tags in
{{tl|inflection of}}. Other related files:
* [[Module:form of/templates]] contains the majority of the logic that implements the templates themselves.
* [[Module:form of/data/1]] is a data-only file containing information on the more common inflection tags, listing the
tags, their shortcuts, the category they belong to (tense-aspect, case, gender, voice-valence, etc.), the appropriate
glossary link and the wikidata ID.
* [[Module:form of/data/2]] is a data-only file containing information on the less common inflection tags, in the same
format as [[Module:form of/data/1]].
* [[Module:form of/lang-data/LANGCODE]] is a data-only file containing information on the language-specific inflection
tags for the language with code LANGCODE, in the same format as [[Module:form of/data/1]]. Language-specific tags
override general tags.
* [[Module:form of/cats]] is a data-only file listing the language-specific categories that are added when the
appropriate combinations of tags are seen for a given language.
* [[Module:form of/pos]] is a data-only file listing the recognized parts of speech and their abbreviations, used for
categorization. FIXME: This should be unified with the parts of speech listed in [[Module:links]].
* [[Module:form of/functions]] contains functions for use with [[Module:form of/data/1]] and [[Module:form of/cats]].
They are contained in this module because data-only modules can't contain code. The functions in this file are of two
types:
*# Display handlers allow for customization of the display of multipart tags (see below). Currently there is only
one such handler, for handling multipart person tags such as `1//2//3`.
*# Cat functions allow for more complex categorization logic, and are referred to by name in [[Module:form of/cats]].
Currently no such functions exist.
The following terminology is used in conjunction with {{tl|inflection of}}:
* A ''tag'' is a single grammatical item, as specified in a single numbered parameter of {{tl|inflection of}}. Examples
are `masculine`, `nominative`, or `first-person`. Tags may be abbreviated, e.g. `m` for `masculine`, `nom` for
`nominative`, or `1` for `first-person`. Such abbreviations are called ''aliases'', and some tags have multiple
equivalent aliases (e.g. `p` or `pl` for `plural`). The full, non-abbreviated form of a tag is called its
''canonical form''.
* The ''display form'' of a tag is the way it's displayed to the user. Usually the displayed text of the tag is the same
as its canonical form, and it normally functions as a link to a glossary entry explaining the tag. Usually the link is
to an entry in [[Appendix:Glossary]], but sometimes the tag is linked to an individual dictionary entry or to a
Wikipedia entry. Occasionally, the display text differs from the canonical form of the tag. An example is the tag
`comparative case`, which has the display text read as simply `comparative`. Normally, tags referring to cases don't
have the word "case" in them, but in this case the tag `comparative` was already used as an alias for the tag
`comparative degree`, so the tag was named `comparative case` to avoid clashing. A similar situation occurs with
`adverbial case` vs. the grammar tag `adverbial` (as in `adverbial participle`).
* A ''tag set'' is an ordered list of tags, which together express a single inflection, for example, `1|s|pres|ind`,
which can be expanded to canonical-form tags as `first-person|singular|present|indicative`.
* A ''conjoined tag set'' is a tag set that consists of multiple individual tag sets separated by a semicolon, e.g.
`1|s|pres|ind|;|2|s|imp`, which specifies two tag sets, `1|s|pres|ind` as above and `2|s|imp` (in canonical form,
`second-person|singular|imperative`). Multiple tag sets specified in a single call to {{tl|inflection of}} are
specified in this fashion. Conjoined tag sets can also occur in list-tag shortcuts.
* A ''multipart tag'' is a tag that embeds multiple tags within it, such as `f//n` or `nom//acc//voc`. These are used in
the case of [[syncretism]], when the same form applies to multiple inflections. Examples are the Spanish present
subjunctive, where the first-person and third-person singular have the same form (e.g. {{m|es|siga}} from
{{m|es|seguir|t=to follow}}), or Latin third-declension adjectives, where the dative and ablative plural of all
genders have the same form (e.g. {{m|la|omnibus}} from {{m|la|omnis|t=all}}). These would be expressed respectively as
`1//3|s|pres|sub` and `dat//abl|m//f//n|p`, where the use of the multipart tag compactly encodes the syncretism and
avoids the need to individually list out all of the inflections. Multipart tags currently display as a list separated
by a slash, e.g. ''dative/ablative'' or ''masculine/feminine/neuter'' where each individual word is linked
appropriately. As a special case, multipart tags involving persons display specially; for example, the multipart tag
`1//2//3` displays as ''first-, second- and third-person'', with the word "person" occurring only once.
* A ''two-level multipart tag'' is a special type of multipart tag that joins two or more tag sets instead of joining
individual tags. The tags within the tag set are joined by a colon, e.g. `1:s//3:p`, which is displayed as
''first-person singular and third-person plural'', e.g. for use with the form {{m|grc|μέλλον}} of the verb
{{m|grc|μέλλω|t=to intend}}, which uses the tag set `1:s//3:p|impf|actv|indc|unaugmented` to express the syncretism
between the first singular and third plural forms of the imperfect active indicative unaugmented conjugation.
Two-level multipart tags should be used sparingly; if in doubt, list out the inflections separately. [FIXME: Make
two-level multipart tags obsolete.]
* A ''shortcut'' is a tag that expands to any type of tag described above, or to any type of tag set described above.
Aliases are a particular type of shortcut whose expansion is a single non-multipart tag.
* A ''multipart shortcut'' is a shortcut that expands into a multipart tag, for example `123`, which expands to the
multipart tag `1//2//3`. Only the most common such combinations exist as shortcuts.
* A ''list shortcut'' is a special type of shortcut that expands to a list of tags instead of a single tag. For example,
the shortcut `1s` expands to `1|s` (first-person singular). Only the most common such combinations exist as shortcuts.
* A ''conjoined shortcut'' is a special type of list shortcut that consists of a conjoined tag set (multiple logical tag
sets). For example, the English language-specific shortcut `ed-form` expands to `spast|;|past|part`, expressing the
common syncretism between simple past and past participle in English (and in this case, `spast` is itself a list
shortcut that expands to `simple|past`).]==]
-- Add tracking category for PAGE when called from {{inflection of}} or
-- similar TEMPLATE. The tracking category linked to is
-- [[Wiktionary:Tracking/inflection of/PAGE]].
local function track(page)
debug_track("inflection of/" ..
-- avoid including links in pages (may cause error)
page:gsub("%[", "("):gsub("%]", ")"):gsub("|", "!")
)
end
local function wrap_in_span(text, classes)
return ("<span class='%s'>%s</span>"):format(classes, text)
end
--[==[
Lowest-level implementation of form-of templates, including the general {{tl|form of}} as well as those that deal with
inflection tags, such as the general {{tl|inflection of}}, semi-specific variants such as {{tl|participle of}}, and
specific variants such as {{tl|past participle of}}. `data` contains all the information controlling the display, with
the following fields:
* `.text`: Text to insert before the lemmas. Wrapped in the value of `.text_classes`, or its default; see below.
* `.lemmas`: List of objects describing the lemma(s) of which the term in question is a non-lemma form. These are passed
directly to {full_link()} in [[Module:links]]. Each object should have at minimum a `.lang` field containing the
language of the lemma and a `.term` field containing the lemma itself. Each object is formatted using {full_link()}
and then if there are more than one, they are joined using {serialCommaJoin()} in [[Module:table]]. Alternatively,
`.lemmas` can be a string, which is displayed directly, or omitted, to show no lemma links and omit the connecting
text.
* `.lemma_face`: "Face" to use when displaying the lemma objects. Usually should be set to {"term"}.
* `.enclitics`: List of enclitics to display after the lemmas, in parens.
* `.base_lemmas`: List of base lemmas to display after the lemmas, in the case where the lemmas in `.lemmas` are
themselves forms of another lemma (the base lemma), e.g. a comparative, superlative or participle. Each object is of
the form { { paramobj = PARAM_OBJ, lemmas = {LEMMA_OBJ, LEMMA_OBJ, ...} }} where PARAM_OBJ describes the properties
of the base lemma parameter (i.e. the relationship between the intermediate and base lemmas) and LEMMA_OBJ is an
object suitable to be passed to {full_link()} in [[Module:links]]. PARAM_OBJ is of the format
{ { param = "PARAM", tags = {"TAG", "TAG", ...} } where PARAM is the name of the parameter to {{tl|inflection of}}
etc. that holds the base lemma(s) of the specified relationship and the tags describe the relationship, such as
{ {"comd"}} or { {"past", "part"}}.
* `.text_classes`: CSS classes used to wrap the tag text and lemma links. Default is {"form-of-definition use-with-mention"}
for the tag text and lemma links, and additionally {"form-of-definition-link"} specifically for the lemma links.
(FIXME: Should separate out the lemma links into their own field.)
* `.posttext`: Additional text to display after the lemma links.]==]
function export.format_form_of(data)
if type(data) ~= "table" then
error("Internal error: First argument must now be a table of arguments")
end
local text_classes = data.text_classes or "form-of-definition use-with-mention"
local lemma_classes = data.text_classes or "form-of-definition-link"
local parts = {}
insert(parts, "<span class='" .. text_classes .. "'>")
if data.lemmas then
if type(data.lemmas) == "string" then
insert(parts, wrap_in_span(data.lemmas, lemma_classes))
else
local formatted_terms = {}
for _, lemma in ipairs(data.lemmas) do
insert(formatted_terms, wrap_in_span(
full_link(lemma, data.lemma_face), lemma_classes
))
end
insert(parts, serial_comma_join(formatted_terms, {conj = " 和 ", separator = "、", skip_serial_comma = true}))
end
end
if data.of_text then
insert(parts, data.of_text)
end
if data.text ~= "" then
insert(parts, data.text)
end
if data.enclitics and #data.enclitics > 0 then
-- The outer parens need to be outside of the text_classes span so they show in upright instead of italic, or
-- they will clash with upright parens generated by link annotations such as transliterations and pos=.
insert(parts, "</span>")
local formatted_terms = {}
for _, enclitic in ipairs(data.enclitics) do
-- FIXME, should we have separate clitic face and/or classes?
insert(formatted_terms, wrap_in_span(
full_link(enclitic, data.lemma_face, nil, "show qualifiers"), lemma_classes
))
end
insert(parts, " (")
insert(parts, wrap_in_span("帶附著語素" .. (#data.enclitics > 1 and "s" or "") .. "", text_classes))
insert(parts, serial_comma_join(formatted_terms))
insert(parts, ")")
insert(parts, "<span class='" .. text_classes .. "'>")
end
if data.base_lemmas and #data.base_lemmas > 0 then
for _, base_lemma in ipairs(data.base_lemmas) do
insert(parts, ",</span>")
insert(parts, (tagged_inflections{
lang = base_lemma.lemmas[1].lang,
tags = base_lemma.paramobj.tags,
lemmas = base_lemma.lemmas,
lemma_face = data.lemma_face,
no_format_categories = true,
nocat = true,
text_classes = data.text_classes,
}))
insert(parts, "<span class='" .. text_classes .. "'>")
end
end
-- FIXME, should posttext go before enclitics? If so we need to have separate handling for the
-- final colon when there are multiple tag sets in tagged_inflections().
if data.posttext then
insert(parts, data.posttext)
end
insert(parts, "</span>")
return concat(parts)
end
format_form_of = export.format_form_of
--[==[
Return true if `tag` contains an internal link or HTML.]==]
function export.is_link_or_html(tag)
return tag:find("[[", nil, true) or tag:find("|", nil, true) or tag:find("<", nil, true)
end
is_link_or_html = export.is_link_or_html
--[==[
Look up a tag (either a shortcut of any sort of a canonical long-form tag) and return its expansion. The expansion
will be a string unless the shortcut is a list-tag shortcut such as `1s`; in that case, the expansion will be a
list. The caller must handle both cases. Only one level of expansion happens; hence, `acc` expands to {"accusative"},
`1s` expands to { {"1", "s"}} (not to { {"first", "singular"}}) and `123` expands to {"1//2//3"}. The expansion will be
the same as the passed-in tag in the following circumstances:
# The tag is `;` (this is special-cased, and no lookup is done).
# The tag is a multipart tag such as `nom//acc` (this is special-cased, and no lookup is done).
# The tag contains a raw link (this is special-cased, and no lookup is done).
# The tag contains HTML (this is special-cased, and no lookup is done).
# The tag is already a canonical long-form tag.
# The tag is unrecognized.
This function first looks up in the lang-specific data module [[Module:form of/lang-data/LANGCODE]], then in
[[Module:form of/data/1]] (which includes more common non-lang-specific tags) and finally (only if the tag is not
recognized as a shortcut or canonical tag, and is not of types 1-4 above) in [[Module:form of/data/2]].
If the expansion is a string and is different from the tag, track it if `do_track` is true.]==]
function export.lookup_shortcut(tag, lang, do_track)
-- If there is HTML or a link in the tag, return it directly; don't try
-- to look it up, which will fail.
if tag == ";" or tag:find("//", nil, true) or is_link_or_html(tag) then
return tag
end
local expansion
while lang do
local langdata = safe_load_data(form_of_lang_data_module_prefix .. lang:getCode())
-- If this is a canonical long-form tag, just return it, and don't check for shortcuts. This is an
-- optimization; see below.
if langdata then
if langdata.tags[tag] then
return tag
end
expansion = langdata.shortcuts[tag]
if expansion then
break
end
end
-- If the language has a parent (i.e. a superordinate variety), try again with that.
lang = lang:getParent()
end
if not expansion then
-- If this is a canonical long-form tag, just return it, and don't check for shortcuts (which will cause
-- [[Module:form of/data/2]] to be loaded, because there won't be a shortcut entry in [[Module:form of/data/1]] --
-- or, for that matter, in [[Module:form of/data/2]]). This is an optimization; the code will still work without
-- it, but will use up more memory.
if (m_data1 or get_m_data1()).tags[tag] then
return tag
end
expansion = m_data1.shortcuts[tag]
end
if not expansion then
expansion = (m_data2 or get_m_data2()).shortcuts[tag]
end
if not expansion then
return tag
end
-- Maybe track the expansion if it's not the same as the raw tag.
if do_track and expansion ~= tag and type(expansion) == "string" then
track("tag/" .. tag)
end
return expansion
end
lookup_shortcut = export.lookup_shortcut
--[==[
Look up a normalized/canonicalized tag and return the data object associated with it. If the tag isn't found, return
nil. This first looks up in the lang-specific data module [[Module:form of/lang-data/LANGCODE]], then in
[[Module:form of/data/1]] (which includes more common non-lang-specific tags) and then finally in
[[Module:form of/data/2]].]==]
function export.lookup_tag(tag, lang)
while lang do
local langdata = safe_load_data(form_of_lang_data_module_prefix .. lang:getCode())
local tag = langdata and langdata.tags[tag]
if tag then
return tag
end
-- If the language has a parent (i.e. a superordinate variety), try again with that.
lang = lang:getParent()
end
local tagobj = (m_data1 or get_m_data1()).tags[tag]
if tagobj then
return tagobj
end
local tagobj2 = (m_data2 or get_m_data2()).tags[tag]
if tagobj2 then
return tagobj2
end
return nil
end
lookup_tag = export.lookup_tag
-- Normalize a single tag, which may be a shortcut but should not be a multipart tag, a multipart shortcut or a list
-- shortcut.
local function normalize_single_tag(tag, lang, do_track)
local expansion = lookup_shortcut(tag, lang, do_track)
if type(expansion) ~= "string" then
error("Tag '" .. tag .. "' is a list shortcut, which is not allowed here")
end
tag = expansion
if not lookup_tag(tag, lang) and do_track then
-- If after all expansions and normalizations we don't recognize the canonical tag, track it.
track("unknown")
track("unknown/" .. tag)
end
return tag
end
--[=[
Normalize a component of a multipart tag. This should not have any // in it, but may join multiple individual tags with
a colon, and may be a single list-tag shortcut, which is treated as if colon-separated. The return value may be a list
of tags.
]=]
local function normalize_multipart_component(tag, lang, do_track)
-- If there is HTML or a link in the tag, don't try to split on colon. A colon may legitimately occur in either one,
-- and we don't want these things parsed. Note that we don't do this check before splitting on //, which we don't
-- expect to occur in links or HTML; see comment in normalize_tag().
if is_link_or_html(tag) then
return tag
end
local components = split(tag, ":", true)
if #components == 1 then
-- We allow list-tag shortcuts inside of multipart tags, e.g.
-- '1s//3p'. Check for this now.
tag = lookup_shortcut(tag, lang, do_track)
if type(tag) == "table" then
-- Temporary tracking as we will disallow this.
track("list-tag-inside-of-multipart")
-- We found a list-tag shortcut; treat as if colon-separated.
components = tag
else
return normalize_single_tag(tag, lang, do_track)
end
end
local normtags = {}
-- Temporary tracking as we will disallow this.
track("two-level-multipart")
for _, component in ipairs(components) do
if do_track then
-- There are multiple components; track each of the individual
-- raw tags.
track("tag/" .. component)
end
insert(normtags, normalize_single_tag(component, lang, do_track))
end
return normtags
end
--[=[
Normalize a single tag. The return value may be a list (in the case of multipart tags), which will contain nested lists
in the case of two-level multipart tags.
]=]
local function normalize_tag(tag, lang, do_track)
-- We don't check for links or HTML before splitting on //, which we don't expect to occur in links or HTML. Doing
-- it this way allows for a tag like '{{lb|grc|Epic}}//{{lb|grc|Ionic}}' to function correctly (the template calls
-- will be expanded before we process the tag, and will contain links and HTML). The only check we do is for a URL,
-- which shouldn't normally occur, but might if the user tries to put an external link into the tag. URL's with //
-- normally have the sequence ://, which should never normally occur when // and : are used in their normal ways.
if tag:find("://", nil, true) then
return tag
end
local split_tags = split(tag, "//", true)
if #split_tags == 1 then
local retval = normalize_multipart_component(tag, lang, do_track)
if type(retval) == "table" then
-- The user gave a tag like '1:s', i.e. with colon but without //. Allow this, but we need to return a
-- nested list.
return {retval}
end
return retval
end
local normtags = {}
for _, single_tag in ipairs(split_tags) do
if do_track then
-- If the tag was a multipart tag, track each of individual raw tags.
track("tag/" .. single_tag)
end
insert(normtags, normalize_multipart_component(single_tag, lang, do_track))
end
return normtags
end
--[==[
Normalize a tag set (a list of tags) into its canonical-form tags. The return value is a list of normalized tag sets
(a list because of there may be conjoined shortcuts among the input tags). A normalized tag set is a list of tag
elements, where each element is either a string (the canonical form of a tag), a list of such strings (in the case of
multipart tags) or a list of lists of such strings (in the case of two-level multipart tags). For example, the multipart
tag `nom//acc//voc` will be represented in canonical form as { {"nominative", "accusative", "vocative"}}, and the
two-level multipart tag `1:s//3:p` will be represented as { {{"first-person", "singular"}, {"third-person", "plural"}}}.
Example 1:
{normalize_tag_set({"nom//acc//voc", "n", "p"})} = { {{{"nominative", "accusative", "vocative"}, "masculine", "plural"}}}
Example 2:
{normalize_tag_set({"ed-form"}, ENGLISH)} = { {{"simple", "past"}, {"past", "participle"}}}
Example 3:
{normalize_tag_set({"archaic", "ed-form"}, ENGLISH)} = { {{"archaic", "simple", "past"}, {"archaic", "past", "participle"}}}]==]
function export.normalize_tag_set(tag_set, lang, do_track)
-- We track usage of shortcuts, normalized forms and (in the case of multipart tags or list tags) intermediate
-- forms. For example, if the tags 1s|mn|gen|indefinite are passed in, we track the following:
-- [[Wiktionary:Tracking/inflection of/tag/1s]]
-- [[Wiktionary:Tracking/inflection of/tag/1]]
-- [[Wiktionary:Tracking/inflection of/tag/s]]
-- [[Wiktionary:Tracking/inflection of/tag/first-person]]
-- [[Wiktionary:Tracking/inflection of/tag/singular]]
-- [[Wiktionary:Tracking/inflection of/tag/mn]]
-- [[Wiktionary:Tracking/inflection of/tag/m//n]]
-- [[Wiktionary:Tracking/inflection of/tag/m]]
-- [[Wiktionary:Tracking/inflection of/tag/n]]
-- [[Wiktionary:Tracking/inflection of/tag/masculine]]
-- [[Wiktionary:Tracking/inflection of/tag/neuter]]
-- [[Wiktionary:Tracking/inflection of/tag/gen]]
-- [[Wiktionary:Tracking/inflection of/tag/genitive]]
-- [[Wiktionary:Tracking/inflection of/tag/indefinite]]
local output_tag_set = {}
local saw_semicolon = false
for _, tag in ipairs(tag_set) do
if do_track then
-- Track the raw tag.
track("tag/" .. tag)
end
-- Expand the tag, which may generate a new tag (either a fully canonicalized tag, a multipart tag, or a list
-- of tags).
tag = lookup_shortcut(tag, lang, do_track)
if type(tag) == "table" then
saw_semicolon = contains(tag, ";")
if saw_semicolon then
-- If we saw a conjoined shortcut, we need to use a more general algorithm that can expand a single
-- tag set into multiple.
break
end
for _, t in ipairs(tag) do
if do_track then
-- If the tag expands to a list of raw tags, track each of those.
track("tag/" .. t)
end
insert(output_tag_set, normalize_tag(t, lang, do_track))
end
else
insert(output_tag_set, normalize_tag(tag, lang, do_track))
end
end
if not saw_semicolon then
return {output_tag_set}
end
-- Use a more general algorithm that handles conjoined shortcuts.
output_tag_set = {}
for i, tag in ipairs(tag_set) do
if do_track then
-- Track the raw tag.
track("tag/" .. tag)
end
-- Expand the tag, which may generate a new tag (either a fully canonicalized tag, a multipart tag, or a list
-- of tags).
tag = lookup_shortcut(tag, lang, do_track)
if type(tag) == "table" then
local output_tag_sets = {}
local shortcut_tag_sets = split_tag_set(tag)
local normalized_shortcut_tag_sets = {}
for _, shortcut_tag_set in ipairs(shortcut_tag_sets) do
extend(normalized_shortcut_tag_sets,
normalize_tag_set(shortcut_tag_set, lang, do_track))
end
local after_tags = slice(tag_set, i + 1)
local normalized_after_tags_sets = normalize_tag_set(after_tags, lang, do_track)
for _, normalized_shortcut_tag_set in ipairs(normalized_shortcut_tag_sets) do
for _, normalized_after_tags_set in ipairs(normalized_after_tags_sets) do
insert(output_tag_sets, append(output_tag_set, normalized_shortcut_tag_set,
normalized_after_tags_set))
end
end
return output_tag_sets
else
insert(output_tag_set, normalize_tag(tag, lang, do_track))
end
end
error("Internal error: Should not get here")
end
normalize_tag_set = export.normalize_tag_set
--[==[
Split a tag set that may consist of multiple semicolon-separated tag sets into the component tag sets.]==]
function export.split_tag_set(tag_set)
local split_tag_sets = {}
local cur_tag_set = {}
for _, tag in ipairs(tag_set) do
if tag == ";" then
if #cur_tag_set > 0 then
insert(split_tag_sets, cur_tag_set)
end
cur_tag_set = {}
else
insert(cur_tag_set, tag)
end
end
if #cur_tag_set > 0 then
insert(split_tag_sets, cur_tag_set)
end
return split_tag_sets
end
split_tag_set = export.split_tag_set
local tag_set_param_mods = {
lb = {
item_dest = "labels",
convert = function(arg, parse_err)
return split(arg, "//", true)
end,
}
}
--[==[
Parse tag set properties from a tag set (list of tags). Currently no per-tag properties are recognized, and the only
per-tag-set property recognized is `<lb:...>` for specifing label(s) for the tag set. Per-tag-set properties must be
attached to the last tag.]==]
function export.parse_tag_set_properties(tag_set)
local function generate_tag_set_obj(last_tag)
tag_set[#tag_set] = last_tag
return {tags = tag_set}
end
local last_tag = tag_set[#tag_set]
-- Check for inline modifier, e.g. מרים<tr:Miryem>. But exclude HTML entry with <span ...>, <i ...>, <br/> or
-- similar in it, caused by wrapping an argument in {{l|...}}, {{af|...}} or similar. Basically, all tags of
-- the sort we parse here should consist of a less-than sign, plus letters, plus a colon, e.g. <lb:...>, so if
-- we see a tag on the outer level that isn't in this format, we don't try to parse it. The restriction to the
-- outer level is to allow generated HTML inside of e.g. qualifier tags, such as foo<q:similar to {{m|fr|bar}}>.
if last_tag:find("<", nil, true) and not last_tag:find("^[^<]*<%l*[^%l:]") then
return parse_inline_modifiers(last_tag, {
param_mods = tag_set_param_mods,
generate_obj = generate_tag_set_obj,
})
else
return generate_tag_set_obj(last_tag)
end
end
parse_tag_set_properties = export.parse_tag_set_properties
local function normalize_pos(pos)
if not pos then
return nil
end
return (m_pos_data or get_m_pos_data())[pos] or pos
end
-- Return the display form of a single canonical-form tag. The value
-- passed in must be a string (i.e. it cannot be a list describing a
-- multipart tag). To handle multipart tags, use get_tag_display_form().
local function get_single_tag_display_form(normtag, lang)
local data = lookup_tag(normtag, lang)
local display = normtag
-- If the tag has a special display form, use it
if data and data.display then
display = data.display
end
-- If there is a nonempty glossary index, then show a link to it
local glossary = data and data[(m_data or get_m_data()).GLOSSARY]
if glossary ~= nil then
if glossary == m_data.WIKT then
display = "[[" .. normtag .. "|" .. display .. "]]"
elseif glossary == m_data.WP then
display = "[[w:" .. normtag .. "|" .. display .. "]]"
elseif glossary == m_data.APPENDIX then
display = "[[Appendix:Glossary#" .. anchor_encode(normtag) .. "|" .. display .. "]]"
elseif type(glossary) ~= "string" then
error(("Internal error: Wrong type %s for glossary value %s for tag %s"):format(
type(glossary), dump(glossary), normtag))
else
local link = glossary:match("^wikt:(.*)")
if link then
display = "[[" .. link .. "|" .. display .. "]]"
end
if not link then
link = glossary:match("^w:(.*)")
if link then
display = "[[w:" .. link .. "|" .. display .. "]]"
end
end
if not link then
display = "[[Appendix:Glossary#" .. anchor_encode(glossary) .. "|" .. display .. "]]"
end
end
end
return display
end
--[==[
Turn a canonicalized tag spec (which describes a single, possibly multipart tag) into the displayed form. The tag spec
may be a string (a canonical-form tag); a list of canonical-form tags (in the case of a simple multipart tag); or a
list of mixed canonical-form tags and lists of such tags (in the case of a two-level multipart tag). `joiner` indicates
how to join the parts of a multipart tag, and can be either {"and"} ("foo and bar", or "foo, bar and baz" for 3 or
more), {"slash"} ("foo/bar"), {"en-dash"} ("foo–bar") or {nil}, which uses the global default found in
{multipart_join_strategy()} in [[Module:form of/functions]]. (NOTE: The global default is {"slash"} and this seems
unlikely to change.)]==]
function export.get_tag_display_form(tagspec, lang, joiner)
if type(tagspec) == "string" then
return get_single_tag_display_form(tagspec, lang)
end
-- We have a multipart tag. See if there's a display handler to display them specially.
for _, handler in ipairs(display_handlers or get_display_handlers()) do
local displayval = handler(tagspec, joiner)
if displayval then
return displayval
end
end
-- No display handler.
local displayed_tags = {}
for _, first_level_tag in ipairs(tagspec) do
if type(first_level_tag) == "string" then
insert(displayed_tags, get_single_tag_display_form(first_level_tag, lang))
else
-- A first-level element of a two-level multipart tag. Currently we just separate the individual components
-- with spaces, but other ways are possible, e.g. using an underscore, colon, parens or braces.
local components = {}
for _, component in ipairs(first_level_tag) do
insert(components, get_single_tag_display_form(component, lang))
end
insert(displayed_tags, concat(components, ""))
end
end
return join_multiparts(displayed_tags, joiner)
end
get_tag_display_form = export.get_tag_display_form
--[==[
Given a normalized tag set (i.e. as output by {normalize_tag_set()}; all tags are in canonical form, multipart tags are
represented as lists, and two-level multipart tags as lists of lists), convert to displayed form (a string). See
{get_tag_display_form()} for the meaning of `joiner`.]==]
function export.get_tag_set_display_form(normalized_tag_set, lang, joiner)
local parts = {}
for _, tagspec in ipairs(normalized_tag_set) do
local to_insert = get_tag_display_form(tagspec, lang, joiner)
-- Maybe insert a space before inserting the display form of the tag. We insert a space if
-- (a) we're not the first tag; and
-- (b) the tag we're about to insert doesn't have the "no_space_on_left" property; and
-- (c) the preceding tag doesn't have the "no_space_on_right" property.
-- NOTE: We depend here on the fact that
-- (1) all tags with either of the above properties set have the same display form as canonical form, and
-- (2) all tags with either of the above properties set are single-character tags.
-- The second property is an optimization to avoid looking up display forms resulting from multipart tags,
-- which won't be found and which will trigger loading of [[Module:form of/data/2]]. If multichar punctuation is
-- added in the future, it's ok to change the == 1 below to <= 2 or <= 3.
--
-- If the first property above fails to hold in the future, we need to track the canonical form of each tag
-- (including the previous one) as well as the display form. This would also avoid the need for the == 1 check.
if #parts > 0 then
local most_recent_tagobj = parts[#parts]:match("^.[\128-\191]*$") and lookup_tag(parts[#parts], lang)
local to_insert_tagobj = to_insert:match("^.[\128-\191]*$") and lookup_tag(to_insert, lang)
if (
(not most_recent_tagobj or not most_recent_tagobj.no_space_on_right) and
(not to_insert_tagobj or not to_insert_tagobj.no_space_on_left)
) then
insert(parts, "")
end
end
insert(parts, to_insert)
end
return concat(parts)
end
get_tag_set_display_form = export.get_tag_set_display_form
--[==[
Split a tag set containing two-level multipart tags into one or more tag sets not containing such tags.
Single-level multipart tags are left alone. (If we need to, a slight modification of the following code
will also split single-level multipart tags.) This assumes that multipart tags are represented as lists
and two-level multipart tags are represented as lists of lists, as is output by {normalize_tag_set()}.
NOTE: We have to be careful to properly handle imbalanced two-level multipart tags such as
`def:s//p` (or the reverse, `s//def:p`).]==]
local function split_two_level_multipart_tag_set(tag_set)
for i, tag in ipairs(tag_set) do
if type(tag) == "table" then
-- We saw a multipart tag. Check if any of the parts are two-level.
local saw_two_level_tag = false
for _, first_level_tag in ipairs(tag) do
if type(first_level_tag) == "table" then
saw_two_level_tag = true
break
end
end
if saw_two_level_tag then
-- We found a two-level multipart tag.
-- (1) Extract the preceding tags.
local pre_tags = slice(tag_set, 1, i - 1)
-- (2) Extract the following tags.
local post_tags = slice(tag_set, i + 1)
-- (3) Loop over each tag set alternant in the two-level multipart tag.
-- For each alternant, form the tag set consisting of pre_tags + alternant + post_tags,
-- and recursively split that tag set.
local resulting_tag_sets = {}
for _, first_level_tag_set in ipairs(tag) do
local expanded_tag_set = {}
extend(expanded_tag_set, pre_tags)
-- The second level may have a string or a list.
if type(first_level_tag_set) == "table" then
extend(expanded_tag_set, first_level_tag_set)
else
insert(expanded_tag_set, first_level_tag_set)
end
extend(expanded_tag_set, post_tags)
extend(resulting_tag_sets, split_two_level_multipart_tag_set(expanded_tag_set))
end
return resulting_tag_sets
end
end
end
return {tag_set}
end
local function try_lang_specific_module(langcode, modules_tried, name, data)
local lang_specific_module = form_of_lang_data_module_prefix .. langcode .. "/functions"
local langdata = safe_require(lang_specific_module)
if langdata then
insert(modules_tried, lang_specific_module)
if langdata.cat_functions then
local fn = langdata.cat_functions[name]
if fn then
return fn(data), true
end
end
end
return nil, false
end
-- Call a named function, either from the lang-specific data in
-- [[Module:form of/lang-specific/LANGCODE/functions]] or in [[Module:form of/functions]].
local function call_named_function(name, funtype, normalized_tag_set, lang, POS, pagename, lemmas)
local data = {
pagename = pagename or default_pagename or get_default_pagename(),
lemmas = lemmas,
tag_set = normalized_tag_set,
lang = lang,
POS = POS
}
local modules_tried = {}
-- First try lang-specific.
while lang do
local retval, found_it = try_lang_specific_module(lang:getCode(), modules_tried, name, data)
if found_it then
return retval
end
-- If the language has a parent (i.e. a superordinate variety), try again with that.
lang = lang:getParent()
end
-- Try lang-independent.
insert(modules_tried, form_of_functions_module)
local fn = (cat_functions or get_cat_functions())[name]
if fn then
return fn(data)
end
for i, modname in ipairs(modules_tried) do
modules_tried[i] = "[[" .. modname .. "]]"
end
error(("No %s function named '%s' in %s"):format(funtype, name, list_to_text(modules_tried, nil, " or ")))
end
-- Given a tag from the current tag set (which may be a list in case of a multipart tag),
-- and a tag from a categorization spec, check that the two match.
-- (1) If both are strings, we just check for equality.
-- (2) If the spec tag is a string and the tag set tag is a list (i.e. it originates from a
-- multipart tag), we check that the spec tag is in the list. This is because we want to treat
-- multipart tags in user-specified tag sets as if the user had specified multiple tag sets.
-- For example, if the user said "1//3|s|pres|ind" and the categorization spec says {"has", "1"},
-- we want this to match, because "1//3|s|pres|ind" should be treated equivalently to two tag
-- sets "1|s|pres|ind" and "3|s|pres|ind", and the former matches the categorization spec.
-- (3) If the spec tag is a list (i.e. it originates from a multipart tag), we check that the
-- tag set tag is also a list and is a superset of the spec tag. For example, if the categorization
-- spec says {"has", "1//3"}, then the tag set tag must be a multipart tag that has both "1" and "3"
-- in it. "1//3" works, as does "1//2//3".
local function tag_set_tag_matches_spec_tag(tag_set_tag, spec_tag)
if type(spec_tag) == "table" then
if type(tag_set_tag) == "table" and is_subset_list(spec_tag, tag_set_tag) then
return true
end
elseif type(tag_set_tag) == "table" then
if contains(tag_set_tag, spec_tag) then
return true
end
elseif tag_set_tag == spec_tag then
return true
end
return false
end
-- Check that the current tag set matches the given spec tag. This means that any of the tags
-- in the current tag set match, according to tag_set_tag_matches_spec_tag(); see above. If the
-- current tag set contains only string tags (i.e. no multipart tags), and the spec tag is a
-- string (i.e. not a multipart tag), this boils down to list containment, but it gets more
-- complex when multipart tags are present.
local function tag_set_matches_spec_tag(spec_tag, tag_set, lang)
spec_tag = normalize_tag(spec_tag, lang)
for _, tag_set_tag in ipairs(tag_set) do
if tag_set_tag_matches_spec_tag(tag_set_tag, spec_tag) then
return true
end
end
return false
end
-- Check whether the given spec matches the current tag set. Two values are returned:
-- (1) whether the spec matches the tag set; (2) the index of the category to add if
-- the spec matches.
local function check_condition(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas)
if type(spec) == "boolean" then
return spec
elseif type(spec) ~= "table" then
error("Wrong type of condition " .. spec .. ": " .. type(spec))
end
local predicate = spec[1]
if predicate == "has" then
return tag_set_matches_spec_tag(spec[2], tag_set, lang), 3
elseif predicate == "hasall" then
for _, tag in ipairs(spec[2]) do
if not tag_set_matches_spec_tag(tag, tag_set, lang) then
return false, 3
end
end
return true, 3
elseif predicate == "hasany" then
for _, tag in ipairs(spec[2]) do
if tag_set_matches_spec_tag(tag, tag_set, lang) then
return true, 3
end
end
return false, 3
elseif predicate == "tags=" then
local normalized_spec_tag_sets = normalize_tag_set(spec[2], lang)
if #normalized_spec_tag_sets > 1 then
error("Internal error: No support for conjoined shortcuts in category/label specs in "
.. "[[Module:form of/cats]] when processing spec tag set " .. concat(spec[2], "|"))
end
local normalized_spec_tag_set = normalized_spec_tag_sets[1]
-- Check for and disallow two-level multipart tags in the specs. FIXME: Remove this when we remove
-- support for two-level multipart tags.
for _, tag in ipairs(normalized_spec_tag_set) do
if type(tag) == "table" then
for _, subtag in ipairs(tag) do
if type(subtag) == "table" then
error("Internal error: No support for two-level multipart tags in category/label specs"
.. "[[Module:form of/cats]] when processing spec tag set "
.. concat(spec[2], "|"))
end
end
end
end
-- Allow tags to be in different orders, and multipart tags to be in different orders. To handle this,
-- we first check that both tag set tags and spec tags have the same length. If so, we sort the
-- multipart tags in the tag set tags and spec tags, and then check that all tags in the spec tags are
-- in the tag set tags.
if #tag_set ~= #normalized_spec_tag_set then
return false, 3
end
local tag_set_tags = deep_copy(tag_set)
for i=1,#tag_set_tags do
if type(tag_set_tags[i]) == "table" then
sort(tag_set_tags[i])
end
if type(normalized_spec_tag_set[i]) == "table" then
sort(normalized_spec_tag_set[i])
end
end
for i=1,#tag_set_tags do
if not contains(tag_set_tags, normalized_spec_tag_set[i]) then
return false, 3
end
end
return true, 3
elseif predicate == "p=" then
return POS == normalize_pos(spec[2]), 3
elseif predicate == "pany" then
for _, specpos in ipairs(spec[2]) do
if POS == normalize_pos(specpos) then
return true, 3
end
end
return false, 3
elseif predicate == "pexists" then
return POS ~= nil, 2
elseif predicate == "not" then
local condval = check_condition(spec[2], tag_set, normalized_tag_set, lang, POS, pagename, lemmas)
return not condval, 3
elseif predicate == "and" then
local condval = check_condition(spec[2], tag_set, normalized_tag_set, lang, POS, pagename, lemmas)
if condval then
condval = check_condition(spec[3], tag_set, normalized_tag_set, lang, POS, pagename, lemmas)
end
return condval, 4
elseif predicate == "or" then
local condval = check_condition(spec[2], tag_set, normalized_tag_set, lang, POS, pagename, lemmas)
if not condval then
condval = check_condition(spec[3], tag_set, normalized_tag_set, lang, POS, pagename, lemmas)
end
return condval, 4
elseif predicate == "call" then
return call_named_function(spec[2], "condition", normalized_tag_set, lang, POS, pagename, lemmas), 3
else
error("Unrecognized predicate: " .. predicate)
end
end
-- Process a given spec. This checks any conditions in the spec against the
-- tag set, and insert any resulting categories into `categories`. Return value
-- is true if the outermost condition evaluated to true and a category was inserted
-- (this is used in {"cond" ...} conditions, which stop when a subcondition evaluates
-- to true).
local function process_spec(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels)
if not spec then
return false
elseif type(spec) == "string" then
-- A category. Substitute POS request with user-specified part of speech or default.
spec = spec:gsub("<<p=(.-)>>", function(default)
return POS or normalize_pos(default)
end)
insert(categories, spec:find("的") and spec:gsub("的", "的" .. lang:getFullName()) or lang:getFullName() .. spec) -- L10N
return true
elseif type(spec) == "table" and spec.labels then
-- A label spec.
for _, label in ipairs(spec.labels) do
insert_if_not(labels, label)
end
return true
elseif type(spec) ~= "table" then
error("Wrong type of specification " .. spec .. ": " .. type(spec))
end
local predicate = spec[1]
if predicate == "multi" then
for _, sp in iterate_from(2, ipairs(spec)) do -- Iterate from 2.
process_spec(sp, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels)
end
return true
elseif predicate == "cond" then
for _, sp in iterate_from(2, ipairs(spec)) do -- Iterate from 2.
if process_spec(sp, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels) then
return true
end
end
return false
elseif predicate == "call" then
return process_spec(
call_named_function(spec[2], "spec", normalized_tag_set, lang, POS, pagename, lemmas),
tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels
)
else
local condval, ifspec = check_condition(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas)
if condval then
process_spec(spec[ifspec], tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels)
return true
else
process_spec(spec[ifspec + 1], tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels)
-- FIXME: Are we sure this is correct?
return false
end
end
end
--[==[
Given a normalized tag set (i.e. as output by {normalize_tag_set()}; all tags are in canonical form, multipart tags are
represented as lists, and two-level multipart tags as lists of lists), fetch the associated categories and labels.
Return two values, a list of categories and a list of labels. `lang` is the language of term represented by the tag set,
and `POS` is the user-provided part of speech (which may be {nil}).]==]
function export.fetch_categories_and_labels(normalized_tag_set, lang, POS, pagename, lemmas)
local categories, labels = {}, {}
POS = normalize_pos(POS)
-- First split any two-level multipart tags into multiple sets, to make our life easier.
for _, tag_set in ipairs(split_two_level_multipart_tag_set(normalized_tag_set)) do
local langcode = lang:getCode()
local langspecs = (m_cats_data or get_m_cats_data())[langcode]
if langspecs then
for _, spec in ipairs(langspecs) do
process_spec(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels)
end
end
local full_code = lang:getFullCode()
if full_code ~= langcode then
local langspecs = (m_cats_data or get_m_cats_data())[full_code]
if langspecs then
for _, spec in ipairs(langspecs) do
process_spec(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels)
end
end
end
if full_code ~= "und" then
local langspecs = (m_cats_data or get_m_cats_data())["und"]
if langspecs then
for _, spec in ipairs(langspecs) do
process_spec(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels)
end
end
end
end
return categories, labels
end
fetch_categories_and_labels = export.fetch_categories_and_labels
local function format_labels(labels, data, notext)
if labels and #labels > 0 then
return show_labels{
labels = labels,
lang = data.lang,
sort = data.sort,
nocat = data.nocat
} .. (notext and (data.pretext or "") == "" and "" or " ")
else
return ""
end
end
--[==[
Implementation of templates that display inflection tags, such as the general {{tl|inflection of}}, semi-specific
variants such as {{tl|participle of}}, and specific variants such as {{tl|past participle of}}. `data` contains all the
information controlling the display, with the following fields:
* `.lang`: ('''''required''''') Language to use when looking up language-specific inflection tags, categories and
labels, and for displaying categories and labels.
* `.tags`: ('''''required''' unless `.tag_sets` is given'') List of non-canonicalized inflection tags. Multiple tag sets
can be indicated by a {";"} as one of the tags, and tag-set properties may be attached to the last tag of a tag set.
The tags themselves may come directly from the user (as in {{tl|inflection of}}); come partly from the user (as in
{{tl|participle of}}, which adds the tag `part` to user-specified inflection tags); or be entirely specified by the
template (as in {{tl|past participle of}}).
* `.tag_sets`: ('''''required''' unless `.tags` is given'') List of non-canonicalized tag sets and associated
per-tag-set properties. Each element of the list is an object of the form
{ {tags = {"TAG", "TAG", ...}, labels = {"LABEL", "LABEL", ...}}. If `.tag_sets` is specified, `.tags` should not be
given and vice-versa. Specifying `.tag_sets` in place of tags allowed per-tag set labels to be specified; otherwise,
there is no advantage. [[Module:pt-gl-inflections]] uses this functionality to supply labels like {"Brazil"} and
{"Portugal"} associated with specific tag sets.
* `.lemmas`: ('''''recommended''''') List of objects describing the lemma(s) of which the term in question is a
non-lemma form. These are passed directly to {full_link()} in [[Module:links]]. Each object should have at minimum a
`.lang` field containing the language of the lemma and a `.term` field containing the lemma itself. Each object is
formatted using {full_link()} and then if there are more than one, they are joined using {serialCommaJoin()} in
[[Module:table]]. Alternatively, `.lemmas` can be a string, which is displayed directly. If omitted entirely, no lemma
links are shown and the connecting "of" is also omitted.
* `.lemma_face`: ('''''recommended''''') "Face" to use when displaying the lemma objects. Usually should be set to
{"term"}.
* `.POS`: ('''''recommended''''') Categorizing part-of-speech tag. Comes from the {{para|p}} or {{para|POS}} argument of
{{tl|inflection of}}.
* `.pagename`: Page name of "current" page or nil to use the actual page title; for testing purposes.
* `.enclitics`: List of enclitics to display after the lemmas, in parens.
* `.no_format_categories`: If true, don't format the categories derived from the inflection tags; just return them.
* `.sort`: Sort key for formatted categories. Ignored when `.no_format_categories` = {true}.
* `.nocat`: Suppress computation of categories (even if `.no_format_categories` is not given).
* `.notext`: Disable display of all tag text and `inflection of` text. (FIXME: Maybe not implemented correctly.)
* `.capfirst`: Capitalize the first word displayed.
* `.pretext`: Additional text to display before the inflection tags, but after any top-level labels.
* `.posttext`: Additional text to display after the lemma links.
* `.text_classes`: CSS classes used to wrap the tag text and lemma links. Default is
{"form-of-definition use-with-mention"} for the tag text, {"form-of-definition-link"} for the lemma links. (FIXME:
Should separate out the lemma links into their own field.)
`.joiner`: Override the joiner (normally a slash) used to join multipart tags. You should normally not specify this.
A typical call might look like this (for {{m+|es|amo}}): {
local lang = require("Module:languages").getByCode("es")
local lemma_obj = {
lang = lang,
term = "amar",
}
return m_form_of.tagged_inflections({
lang = lang, tags = {"1", "s", "pres", "ind"}, lemmas = {lemma_obj}, lemma_face = "term", POS = "verb"
})
}
Normally, one value is returned, the formatted text, which has appended to it the formatted categories derived from the
tag-set-related categories generated by the specs in [Module:form of/cats]]. To suppress this, set
`data.no_format_categories` = {true}, in which case two values are returned, the formatted text without any formatted
categories appended and a list of the categories to be formatted.
NOTE: There are two sets of categories that may be generated: (1) categories derived directly from the tag sets, as
specified in [[Module:form of/cats]]; (2) categories derived from tag-set labels, either (a) set explicitly by the
caller in `data.tag_sets`, (b) specified by the user using `<lb:...>` attached to the last tag in a tag set, or
(c) specified in [[Module:form of/cats]]. The second type (label-related categories) are currently not returned in
the second return value of {tagged_inflections()}, and are currently inserted into the output text even if
`data.no_format_categories` is set to {true}; but they can be suppressed by setting `data.nocat` = {true} (which also
suppresses the first type of categories, those derived directly from tag sets, even if `data.no_format_categories` is
set to {true}).]==]
function export.tagged_inflections(data)
if not data.tags and not data.tag_sets then
error("First argument must be a table of arguments, and `.tags` or `.tag_sets` must be specified")
end
if data.tags and data.tag_sets then
error("Both `.tags` and `.tag_sets` cannot be specified")
end
local tag_sets = data.tag_sets
if not tag_sets then
tag_sets = split_tag_set(data.tags)
for i, tag_set in ipairs(tag_sets) do
tag_sets[i] = parse_tag_set_properties(tag_set)
end
end
local inflections = {}
local categories = {}
for _, tag_set in ipairs(tag_sets) do
local normalized_tag_sets = normalize_tag_set(tag_set.tags, data.lang, "do-track")
for _, normalized_tag_set in ipairs(normalized_tag_sets) do
local this_categories, this_labels = fetch_categories_and_labels(normalized_tag_set, data.lang,
data.POS, data.pagename, type(data.lemmas) == "table" and data.lemmas or nil)
if not data.nocat then
extend(categories, this_categories)
end
local cur_infl = get_tag_set_display_form(normalized_tag_set, data.lang, data.joiner)
if #cur_infl > 0 then
if tag_set.labels then
this_labels = append(tag_set.labels, this_labels)
end
insert(inflections, {infl_text = cur_infl, labels = this_labels})
end
end
end
local overall_labels, need_per_tag_set_labels
for _, inflection in ipairs(inflections) do
if overall_labels == nil then
overall_labels = inflection.labels
elseif not deep_equals(overall_labels, inflection.labels) then
need_per_tag_set_labels = true
overall_labels = nil
break
end
end
if not need_per_tag_set_labels then
for _, inflection in ipairs(inflections) do
inflection.labels = nil
end
end
local format_data = shallow_copy(data)
local of_text = data.lemmas and " 的" or ""
local formatted_text
if #inflections == 1 then
if need_per_tag_set_labels then
error("Internal error: need_per_tag_set_labels should not be set with one inflection")
end
format_data.of_text = of_text
format_data.text = format_labels(overall_labels, data, data.notext) .. (data.pretext or "") .. (data.notext and "" or
(data.capfirst and ucfirst(inflections[1].infl_text) or inflections[1].infl_text))
formatted_text = format_form_of(format_data)
else
format_data.text = format_labels(overall_labels, data, data.notext) .. (data.pretext or "") .. (data.notext and "" or
(of_text .. (data.capfirst and "屈折" or "屈折")))
format_data.posttext = (data.posttext or "") .. ":"
local link = format_form_of(format_data)
local text_classes = data.text_classes or "form-of-definition use-with-mention"
for i, inflection in ipairs(inflections) do
inflections[i] = "\n## " .. format_labels(inflection.labels, data, false) ..
"<span class='" .. text_classes .. "'>" .. inflection.infl_text .. "</span>"
end
formatted_text = link .. concat(inflections)
end
if not data.no_format_categories then
if #categories > 0 then
formatted_text = formatted_text .. format_categories(categories, data.lang,
data.sort, nil, export.force_cat)
end
return formatted_text
end
return formatted_text, categories
end
tagged_inflections = export.tagged_inflections
function export.dump_form_of_data(frame)
local data = {
require(form_of_data1_module),
require(form_of_data2_module)
}
return require(json_module).toJSON(data)
end
export.form_of_cats_module = form_of_cats_module
export.form_of_data1_module = form_of_data1_module
export.form_of_data2_module = form_of_data2_module
export.form_of_functions_module = form_of_functions_module
export.form_of_lang_data_module_prefix = form_of_lang_data_module_prefix
export.form_of_pos_module = form_of_pos_module
return export
c4jfaov69m4ro0oyhwik79k0v6g1rt2
9739602
9739582
2026-04-21T06:19:02Z
TongcyDai
53191
9739602
Scribunto
text/plain
local export = {}
export.force_cat = false -- for testing; set to true to display categories even on non-mainspace pages
local debug_track_module = "Module:debug/track"
local etymology_module = "Module:etymology"
local form_of_cats_module = "Module:form of/cats"
local form_of_data_module = "Module:form of/data"
local form_of_data1_module = "Module:form of/data/1"
local form_of_data2_module = "Module:form of/data/2"
local form_of_functions_module = "Module:form of/functions"
local form_of_lang_data_module_prefix = "Module:form of/lang-data/"
local function_module = "Module:fun"
local headword_data_module = "Module:headword/data"
local json_module = "Module:JSON"
local labels_module = "Module:labels"
local links_module = "Module:links"
local load_module = "Module:load"
local parse_utilities_module = "Module:parse utilities"
local string_utilities_module = "Module:string utilities"
local table_module = "Module:table"
local table_deep_equals_module = "Module:table/deepEquals"
local utilities_module = "Module:utilities"
local anchor_encode = mw.uri.anchorEncode
local concat = table.concat
local dump = mw.dumpObject
local fetch_categories_and_labels -- Defined below.
local format_form_of -- Defined below.
local get_tag_display_form -- Defined below.
local get_tag_set_display_form -- Defined below.
local insert = table.insert
local ipairs = ipairs
local is_link_or_html -- Defined below.
local list_to_text = mw.text.listToText
local lookup_shortcut -- Defined below.
local lookup_tag -- Defined below.
local normalize_tag_set -- Defined below.
local parse_tag_set_properties -- Defined below.
local require = require
local sort = table.sort
local split_tag_set -- Defined below.
local type = type
--[==[
Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==]
local function append(...)
append = require(table_module).append
return append(...)
end
local function contains(...)
contains = require(table_module).contains
return contains(...)
end
local function debug_track(...)
debug_track = require(debug_track_module)
return debug_track(...)
end
local function deep_copy(...)
deep_copy = require(table_module).deepCopy
return deep_copy(...)
end
local function deep_equals(...)
deep_equals = require(table_deep_equals_module)
return deep_equals(...)
end
local function extend(...)
extend = require(table_module).extend
return extend(...)
end
local function format_categories(...)
format_categories = require(utilities_module).format_categories
return format_categories(...)
end
local function full_link(...)
full_link = require(links_module).full_link
return full_link(...)
end
local function insert_if_not(...)
insert_if_not = require(table_module).insertIfNot
return insert_if_not(...)
end
local function is_subset_list(...)
is_subset_list = require(table_module).isSubsetList
return is_subset_list(...)
end
local function iterate_from(...)
iterate_from = require(function_module).iterateFrom
return iterate_from(...)
end
local function join_multiparts(...)
join_multiparts = require(form_of_functions_module).join_multiparts
return join_multiparts(...)
end
local function load_data(...)
load_data = require(load_module).load_data
return load_data(...)
end
local function parse_inline_modifiers(...)
parse_inline_modifiers = require(parse_utilities_module).parse_inline_modifiers
return parse_inline_modifiers(...)
end
local function remove_links(...)
remove_links = require(links_module).remove_links
return remove_links(...)
end
local function safe_load_data(...)
safe_load_data = require(load_module).safe_load_data
return safe_load_data(...)
end
local function safe_require(...)
safe_require = require(load_module).safe_require
return safe_require(...)
end
local function serial_comma_join(...)
serial_comma_join = require(table_module).serialCommaJoin
return serial_comma_join(...)
end
local function shallow_copy(...)
shallow_copy = require(table_module).shallowCopy
return shallow_copy(...)
end
local function show_labels(...)
show_labels = require(labels_module).show_labels
return show_labels(...)
end
local function slice(...)
slice = require(table_module).slice
return slice(...)
end
local function split(...)
split = require(string_utilities_module).split
return split(...)
end
local function ucfirst(...)
ucfirst = require(string_utilities_module).ucfirst
return ucfirst(...)
end
--[==[
Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==]
local cat_functions
local function get_cat_functions()
cat_functions, get_cat_functions = require(form_of_functions_module).cat_functions, nil
return cat_functions
end
local default_pagename
local function get_default_pagename()
default_pagename, get_default_pagename = load_data(headword_data_module).pagename, nil
return default_pagename
end
local display_handlers
local function get_display_handlers()
display_handlers, get_display_handlers = require(form_of_functions_module).display_handlers, nil
return display_handlers
end
local m_cats_data
local function get_m_cats_data()
m_cats_data, get_m_cats_data = load_data(form_of_cats_module), nil
return m_cats_data
end
local m_data
local function get_m_data()
-- Needs require.
m_data, get_m_data = require(form_of_data_module), nil
return m_data
end
local m_data1
local function get_m_data1()
m_data1, get_m_data1 = load_data(form_of_data1_module), nil
return m_data1
end
local m_data2
local function get_m_data2()
m_data2, get_m_data2 = load_data(form_of_data2_module), nil
return m_data2
end
local m_pos_data
local function get_m_pos_data()
m_pos_data, get_m_pos_data = load_data(headword_data_module).pos_aliases, nil
return m_pos_data
end
--[==[ intro:
This module implements the underlying processing of {{tl|form of}}, {{tl|inflection of}} and specific variants such as
{{tl|past participle of}} and {{tl|alternative spelling of}}. Most of the logic in this file is to handle tags in
{{tl|inflection of}}. Other related files:
* [[Module:form of/templates]] contains the majority of the logic that implements the templates themselves.
* [[Module:form of/data/1]] is a data-only file containing information on the more common inflection tags, listing the
tags, their shortcuts, the category they belong to (tense-aspect, case, gender, voice-valence, etc.), the appropriate
glossary link and the wikidata ID.
* [[Module:form of/data/2]] is a data-only file containing information on the less common inflection tags, in the same
format as [[Module:form of/data/1]].
* [[Module:form of/lang-data/LANGCODE]] is a data-only file containing information on the language-specific inflection
tags for the language with code LANGCODE, in the same format as [[Module:form of/data/1]]. Language-specific tags
override general tags.
* [[Module:form of/cats]] is a data-only file listing the language-specific categories that are added when the
appropriate combinations of tags are seen for a given language.
* [[Module:form of/functions]] contains functions for use with [[Module:form of/data/1]] and [[Module:form of/cats]].
They are contained in this module because data-only modules can't contain code. The functions in this file are of two
types:
*# Display handlers allow for customization of the display of multipart tags (see below). Currently there is only
one such handler, for handling multipart person tags such as `1//2//3`.
*# Cat functions allow for more complex categorization logic, and are referred to by name in [[Module:form of/cats]].
Currently no such functions exist.
The following terminology is used in conjunction with {{tl|inflection of}}:
* A ''tag'' is a single grammatical item, as specified in a single numbered parameter of {{tl|inflection of}}. Examples
are `masculine`, `nominative`, or `first-person`. Tags may be abbreviated, e.g. `m` for `masculine`, `nom` for
`nominative`, or `1` for `first-person`. Such abbreviations are called ''aliases'', and some tags have multiple
equivalent aliases (e.g. `p` or `pl` for `plural`). The full, non-abbreviated form of a tag is called its
''canonical form''.
* The ''display form'' of a tag is the way it's displayed to the user. Usually the displayed text of the tag is the same
as its canonical form, and it normally functions as a link to a glossary entry explaining the tag. Usually the link is
to an entry in [[Appendix:Glossary]], but sometimes the tag is linked to an individual dictionary entry or to a
Wikipedia entry. Occasionally, the display text differs from the canonical form of the tag. An example is the tag
`comparative case`, which has the display text read as simply `comparative`. Normally, tags referring to cases don't
have the word "case" in them, but in this case the tag `comparative` was already used as an alias for the tag
`comparative degree`, so the tag was named `comparative case` to avoid clashing. A similar situation occurs with
`adverbial case` vs. the grammar tag `adverbial` (as in `adverbial participle`).
* A ''tag set'' is an ordered list of tags, which together express a single inflection, for example, `1|s|pres|ind`,
which can be expanded to canonical-form tags as `first-person|singular|present|indicative`.
* A ''conjoined tag set'' is a tag set that consists of multiple individual tag sets separated by a semicolon, e.g.
`1|s|pres|ind|;|2|s|imp`, which specifies two tag sets, `1|s|pres|ind` as above and `2|s|imp` (in canonical form,
`second-person|singular|imperative`). Multiple tag sets specified in a single call to {{tl|inflection of}} are
specified in this fashion. Conjoined tag sets can also occur in list-tag shortcuts.
* A ''multipart tag'' is a tag that embeds multiple tags within it, such as `f//n` or `nom//acc//voc`. These are used in
the case of [[syncretism]], when the same form applies to multiple inflections. Examples are the Spanish present
subjunctive, where the first-person and third-person singular have the same form (e.g. {{m|es|siga}} from
{{m|es|seguir|t=to follow}}), or Latin third-declension adjectives, where the dative and ablative plural of all
genders have the same form (e.g. {{m|la|omnibus}} from {{m|la|omnis|t=all}}). These would be expressed respectively as
`1//3|s|pres|sub` and `dat//abl|m//f//n|p`, where the use of the multipart tag compactly encodes the syncretism and
avoids the need to individually list out all of the inflections. Multipart tags currently display as a list separated
by a slash, e.g. ''dative/ablative'' or ''masculine/feminine/neuter'' where each individual word is linked
appropriately. As a special case, multipart tags involving persons display specially; for example, the multipart tag
`1//2//3` displays as ''first-, second- and third-person'', with the word "person" occurring only once.
* A ''two-level multipart tag'' is a special type of multipart tag that joins two or more tag sets instead of joining
individual tags. The tags within the tag set are joined by a colon, e.g. `1:s//3:p`, which is displayed as
''first-person singular and third-person plural'', e.g. for use with the form {{m|grc|μέλλον}} of the verb
{{m|grc|μέλλω|t=to intend}}, which uses the tag set `1:s//3:p|impf|actv|indc|unaugmented` to express the syncretism
between the first singular and third plural forms of the imperfect active indicative unaugmented conjugation.
Two-level multipart tags should be used sparingly; if in doubt, list out the inflections separately. [FIXME: Make
two-level multipart tags obsolete.]
* A ''shortcut'' is a tag that expands to any type of tag described above, or to any type of tag set described above.
Aliases are a particular type of shortcut whose expansion is a single non-multipart tag.
* A ''multipart shortcut'' is a shortcut that expands into a multipart tag, for example `123`, which expands to the
multipart tag `1//2//3`. Only the most common such combinations exist as shortcuts.
* A ''list shortcut'' is a special type of shortcut that expands to a list of tags instead of a single tag. For example,
the shortcut `1s` expands to `1|s` (first-person singular). Only the most common such combinations exist as shortcuts.
* A ''conjoined shortcut'' is a special type of list shortcut that consists of a conjoined tag set (multiple logical tag
sets). For example, the English language-specific shortcut `ed-form` expands to `spast|;|past|part`, expressing the
common syncretism between simple past and past participle in English (and in this case, `spast` is itself a list
shortcut that expands to `simple|past`).]==]
-- Add tracking category for PAGE when called from {{inflection of}} or
-- similar TEMPLATE. The tracking category linked to is
-- [[Wiktionary:Tracking/inflection of/PAGE]].
local function track(page)
debug_track("inflection of/" ..
-- avoid including links in pages (may cause error)
page:gsub("%[", "("):gsub("%]", ")"):gsub("|", "!")
)
end
local function wrap_in_span(text, classes)
if classes then
return ("<span class='%s'>%s</span>"):format(classes, text)
else
return text
end
end
local function show_linked_term(data)
local termobj, face, span_classes, ok_to_destructively_modify, overall_lang, text_classes =
data.termobj, data.face, data.span_classes, data.ok_to_destructively_modify, data.overall_lang,
data.text_classes
local need_to_copy, pretext_lang
local categories = {}
if overall_lang and overall_lang:getCode() ~= termobj.lang:getCode() then
local lang_display
lang_display, categories = require(etymology_module).insert_source_cat_get_display {
lang = data.overall_lang,
source = termobj.lang,
}
pretext_lang = wrap_in_span(lang_display, text_classes)
end
local need_to_show_qualifiers = termobj.q or termobj.qq or termobj.a or termobj.aa or termobj.l or termobj.ll or
termobj.refs
need_to_copy = not ok_to_destructively_modify and (pretext_lang or need_to_show_qualifiers)
if need_to_copy then
termobj = shallow_copy(termobj)
end
if pretext_lang then
termobj.pretext = pretext_lang
end
if need_to_show_qualifiers then
termobj.show_qualifiers = true
end
return wrap_in_span(full_link(termobj, face), span_classes), categories
end
--[==[
Lowest-level implementation of form-of templates, including the general {{tl|form of}} as well as those that deal with
inflection tags, such as the general {{tl|inflection of}}, semi-specific variants such as {{tl|participle of}}, and
specific variants such as {{tl|past participle of}}. `data` contains all the information controlling the display, with
the following fields:
* `.lang`: Overall language of the form-of template. If specified, any lemmas, enclitics or base lemmas that are of a
different language will have that language displayed before the term in question.
* `.text`: Text to insert before the lemmas. Wrapped in the value of `.text_classes`, or its default; see below.
* `.lemmas`: List of objects describing the lemma(s) of which the term in question is a non-lemma form. These are passed
directly to {full_link()} in [[Module:links]]. Each object should have at minimum a `.lang` field containing the
language of the lemma and a `.term` field containing the lemma itself. Each object is formatted using {full_link()}
and then if there are more than one, they are joined using {serialCommaJoin()} in [[Module:table]]. Alternatively,
`.lemmas` can be a string, which is displayed directly, or omitted, to show no lemma links and omit the connecting
text.
* `.lemma_face`: "Face" to use when displaying the lemma objects. Usually should be set to {"term"}.
* `.conj`: Conjunction or separator to use when joining multiple lemma objects. If {nil}, defaults to {"and"}. If this
has the value {false}, the lemmas are preceded with the `.separator` field in each lemma.
* `.enclitics`: List of enclitics to display after the lemmas, in parens.
* `.enclitic_conj`: Conjunction or separator to use when joining multiple enclitics. Defaults to {"and"}.
* `.base_lemmas`: List of base lemmas to display after the lemmas, in the case where the lemmas in `.lemmas` are
themselves forms of another lemma (the base lemma), e.g. a comparative, superlative or participle. Each object is of
the form { { paramobj = PARAM_OBJ, lemmas = {LEMMA_OBJ, LEMMA_OBJ, ...}, conj = "CONJ" }} where PARAM_OBJ describes
the properties of the base lemma parameter (i.e. the relationship between the intermediate and base lemmas);
LEMMA_OBJ is an object suitable to be passed to {full_link()} in [[Module:links]]; and CONJ is the conjunction to
join multiple lemmas with, defaulting to {"and"}. PARAM_OBJ is of the format
{ { param = "PARAM", tags = {"TAG", "TAG", ...} } where PARAM is the name of the parameter to {{tl|inflection of}}
etc. that holds the base lemma(s) of the specified relationship and the tags describe the relationship, such as
{ {"comd"}} or { {"past", "part"}}.
* `.text_classes`: CSS classes used to wrap the tag text and lemma links. Default is
{"form-of-definition use-with-mention"}. Use `false` for no wrapping.
* `.lemma_classes`: Additional CSS classes used to wrap the lemma links. Default is {"form-of-definition-link"}.
Use `false` for no wrapping.
* `.posttext`: Additional text to display after the lemma links.
* `.ok_to_destructively_modify`: If set, data structures (including the nested lemma structures) can be modified
in-place to save memory; otherwise they will be copied before modifying.
Returns two values, the formatted string and any categories to add the page to (which will arise if `.lang` is
specified and a language other than `.lang` is given in one of the lemmas in `.lemmas` or enclitics in `.enclitics`).
]==]
function export.format_form_of(data)
if type(data) ~= "table" then
error("Internal error: First argument must now be a table of arguments")
end
local text_classes = data.text_classes
if text_classes == nil and not data.nowrap then
text_classes = "form-of-definition use-with-mention"
end
local lemma_classes = data.lemma_classes
if lemma_classes == nil then
lemma_classes = "form-of-definition-link"
end
local parts = {}
if text_classes then
insert(parts, "<span class='" .. text_classes .. "'>")
end
local categories = {}
if data.lemmas then
if type(data.lemmas) == "string" then
insert(parts, wrap_in_span(data.lemmas, lemma_classes))
else
local formatted_terms = {}
for _, lemma in ipairs(data.lemmas) do
local linked_term, this_categories = show_linked_term {
termobj = lemma,
face = data.lemma_face,
span_classes = lemma_classes,
ok_to_destructively_modify = data.ok_to_destructively_modify,
overall_lang = data.lang,
text_classes = text_classes
}
if this_categories[1] then
extend(categories, this_categories)
end
if data.conj == false and lemma.separator then
insert(formatted_terms, lemma.separator)
end
insert(formatted_terms, linked_term)
end
if data.conj == false then
insert(parts, concat(formatted_terms))
else
insert(parts, serial_comma_join(formatted_terms, {conj = data.conj or " 和 ", separator = "、", skip_serial_comma = true}))
end
end
if data.lit then
insert(parts, ",字面意思是" .. require(links_module).mark(data.lit, "gloss"))
end
end
-- 中文語序:先輸出 lemma,再加上 " 的 ",最後才是 text (形式)
if data.of_text then
insert(parts, data.of_text)
end
if data.text ~= "" then
insert(parts, data.text)
end
if data.enclitics and #data.enclitics > 0 then
if text_classes then
insert(parts, "</span>")
end
local formatted_terms = {}
for _, enclitic in ipairs(data.enclitics) do
local linked_term, this_categories = show_linked_term {
termobj = enclitic,
face = data.lemma_face,
span_classes = lemma_classes,
ok_to_destructively_modify = data.ok_to_destructively_modify,
overall_lang = data.lang,
text_classes = text_classes
}
if this_categories[1] then
extend(categories, this_categories)
end
insert(formatted_terms, linked_term)
end
insert(parts, " (")
insert(parts, wrap_in_span("帶附著語素", text_classes))
insert(parts, serial_comma_join(formatted_terms, {conj = data.enclitic_conj or " 和 ", separator = "、", skip_serial_comma = true}))
insert(parts, ")")
if text_classes then
insert(parts, "<span class='" .. text_classes .. "'>")
end
end
if data.base_lemmas and #data.base_lemmas > 0 then
for _, base_lemma in ipairs(data.base_lemmas) do
insert(parts, ",")
if text_classes then
insert(parts, "</span>")
end
insert(parts, (export.tagged_inflections {
lang = data.lang or base_lemma.lemmas[1].lang,
tags = base_lemma.paramobj.tags,
lemmas = base_lemma.lemmas,
conj = base_lemma.conj or " 和 ",
lemma_face = data.lemma_face,
no_format_categories = true,
nocat = true,
text_classes = data.text_classes,
ok_to_destructively_modify = data.ok_to_destructively_modify,
}))
if text_classes then
insert(parts, "<span class='" .. text_classes .. "'>")
end
end
end
if data.base_lemmas and #data.base_lemmas > 0 then
for _, base_lemma in ipairs(data.base_lemmas) do
insert(parts, ", the ")
if text_classes then
insert(parts, "</span>")
end
insert(parts, (export.tagged_inflections {
lang = data.lang or base_lemma.lemmas[1].lang,
tags = base_lemma.paramobj.tags,
lemmas = base_lemma.lemmas,
conj = base_lemma.conj or "and",
lemma_face = data.lemma_face,
no_format_categories = true,
nocat = true,
text_classes = data.text_classes,
ok_to_destructively_modify = ok_to_destructively_modify,
}))
if text_classes then
insert(parts, "<span class='" .. text_classes .. "'>")
end
end
end
-- FIXME, should posttext go before enclitics? If so we need to have separate handling for the
-- final colon when there are multiple tag sets in tagged_inflections().
if data.posttext then
insert(parts, data.posttext)
end
if text_classes then
insert(parts, "</span>")
end
return concat(parts), categories
end
format_form_of = export.format_form_of
--[==[
Return true if `tag` contains an internal link or HTML.]==]
function export.is_link_or_html(tag)
return tag:find("[[", nil, true) or tag:find("|", nil, true) or tag:find("<", nil, true)
end
is_link_or_html = export.is_link_or_html
--[==[
Look up a tag (either a shortcut of any sort of a canonical long-form tag) and return its expansion. The expansion
will be a string unless the shortcut is a list-tag shortcut such as `1s`; in that case, the expansion will be a
list. The caller must handle both cases. Only one level of expansion happens; hence, `acc` expands to {"accusative"},
`1s` expands to { {"1", "s"}} (not to { {"first", "singular"}}) and `123` expands to {"1//2//3"}. The expansion will be
the same as the passed-in tag in the following circumstances:
# The tag is `;` (this is special-cased, and no lookup is done).
# The tag is a multipart tag such as `nom//acc` (this is special-cased, and no lookup is done).
# The tag contains a raw link (this is special-cased, and no lookup is done).
# The tag contains HTML (this is special-cased, and no lookup is done).
# The tag is already a canonical long-form tag.
# The tag is unrecognized.
This function first looks up in the lang-specific data module [[Module:form of/lang-data/LANGCODE]], then in
[[Module:form of/data/1]] (which includes more common non-lang-specific tags) and finally (only if the tag is not
recognized as a shortcut or canonical tag, and is not of types 1-4 above) in [[Module:form of/data/2]].
If the expansion is a string and is different from the tag, track it if `do_track` is true.]==]
function export.lookup_shortcut(tag, lang, do_track)
-- If there is HTML or a link in the tag, return it directly; don't try
-- to look it up, which will fail.
if tag == ";" or tag:find("//", nil, true) or is_link_or_html(tag) then
return tag
end
local expansion
while lang do
local langdata = safe_load_data(form_of_lang_data_module_prefix .. lang:getCode())
-- If this is a canonical long-form tag, just return it, and don't check for shortcuts. This is an
-- optimization; see below.
if langdata then
if langdata.tags[tag] then
return tag
end
expansion = langdata.shortcuts[tag]
if expansion then
break
end
end
-- If the language has a parent (i.e. a superordinate variety), try again with that.
lang = lang:getParent()
end
if not expansion then
-- If this is a canonical long-form tag, just return it, and don't check for shortcuts (which will cause
-- [[Module:form of/data/2]] to be loaded, because there won't be a shortcut entry in [[Module:form of/data/1]] --
-- or, for that matter, in [[Module:form of/data/2]]). This is an optimization; the code will still work without
-- it, but will use up more memory.
if (m_data1 or get_m_data1()).tags[tag] then
return tag
end
expansion = m_data1.shortcuts[tag]
end
if not expansion then
expansion = (m_data2 or get_m_data2()).shortcuts[tag]
end
if not expansion then
return tag
end
-- Maybe track the expansion if it's not the same as the raw tag.
if do_track and expansion ~= tag and type(expansion) == "string" then
track("tag/" .. tag)
end
return expansion
end
lookup_shortcut = export.lookup_shortcut
--[==[
Look up a normalized/canonicalized tag and return the data object associated with it. If the tag isn't found, return
nil. This first looks up in the lang-specific data module [[Module:form of/lang-data/LANGCODE]], then in
[[Module:form of/data/1]] (which includes more common non-lang-specific tags) and then finally in
[[Module:form of/data/2]].]==]
function export.lookup_tag(tag, lang)
while lang do
local langdata = safe_load_data(form_of_lang_data_module_prefix .. lang:getCode())
local tag = langdata and langdata.tags[tag]
if tag then
return tag
end
-- If the language has a parent (i.e. a superordinate variety), try again with that.
lang = lang:getParent()
end
local tagobj = (m_data1 or get_m_data1()).tags[tag]
if tagobj then
return tagobj
end
local tagobj2 = (m_data2 or get_m_data2()).tags[tag]
if tagobj2 then
return tagobj2
end
return nil
end
lookup_tag = export.lookup_tag
-- Normalize a single tag, which may be a shortcut but should not be a multipart tag, a multipart shortcut or a list
-- shortcut.
local function normalize_single_tag(tag, lang, do_track)
local expansion = lookup_shortcut(tag, lang, do_track)
if type(expansion) ~= "string" then
error("Tag '" .. tag .. "' is a list shortcut, which is not allowed here")
end
tag = expansion
if not lookup_tag(tag, lang) and do_track then
-- If after all expansions and normalizations we don't recognize the canonical tag, track it.
track("unknown")
track("unknown/" .. tag)
end
return tag
end
--[=[
Normalize a component of a multipart tag. This should not have any // in it, but may join multiple individual tags with
a colon, and may be a single list-tag shortcut, which is treated as if colon-separated. The return value may be a list
of tags.
]=]
local function normalize_multipart_component(tag, lang, do_track)
-- If there is HTML or a link in the tag, don't try to split on colon. A colon may legitimately occur in either one,
-- and we don't want these things parsed. Note that we don't do this check before splitting on //, which we don't
-- expect to occur in links or HTML; see comment in normalize_tag().
if is_link_or_html(tag) then
return tag
end
local components = split(tag, ":", true)
if #components == 1 then
-- We allow list-tag shortcuts inside of multipart tags, e.g.
-- '1s//3p'. Check for this now.
tag = lookup_shortcut(tag, lang, do_track)
if type(tag) == "table" then
-- Temporary tracking as we will disallow this.
track("list-tag-inside-of-multipart")
-- We found a list-tag shortcut; treat as if colon-separated.
components = tag
else
return normalize_single_tag(tag, lang, do_track)
end
end
local normtags = {}
-- Temporary tracking as we will disallow this.
track("two-level-multipart")
for _, component in ipairs(components) do
if do_track then
-- There are multiple components; track each of the individual
-- raw tags.
track("tag/" .. component)
end
insert(normtags, normalize_single_tag(component, lang, do_track))
end
return normtags
end
--[=[
Normalize a single tag. The return value may be a list (in the case of multipart tags), which will contain nested lists
in the case of two-level multipart tags.
]=]
local function normalize_tag(tag, lang, do_track)
-- We don't check for links or HTML before splitting on //, which we don't expect to occur in links or HTML. Doing
-- it this way allows for a tag like '{{lb|grc|Epic}}//{{lb|grc|Ionic}}' to function correctly (the template calls
-- will be expanded before we process the tag, and will contain links and HTML). The only check we do is for a URL,
-- which shouldn't normally occur, but might if the user tries to put an external link into the tag. URL's with //
-- normally have the sequence ://, which should never normally occur when // and : are used in their normal ways.
if tag:find("://", nil, true) then
return tag
end
local split_tags = split(tag, "//", true)
if #split_tags == 1 then
local retval = normalize_multipart_component(tag, lang, do_track)
if type(retval) == "table" then
-- The user gave a tag like '1:s', i.e. with colon but without //. Allow this, but we need to return a
-- nested list.
return {retval}
end
return retval
end
local normtags = {}
for _, single_tag in ipairs(split_tags) do
if do_track then
-- If the tag was a multipart tag, track each of individual raw tags.
track("tag/" .. single_tag)
end
insert(normtags, normalize_multipart_component(single_tag, lang, do_track))
end
return normtags
end
--[==[
Normalize a tag set (a list of tags) into its canonical-form tags. The return value is a list of normalized tag sets
(a list because of there may be conjoined shortcuts among the input tags). A normalized tag set is a list of tag
elements, where each element is either a string (the canonical form of a tag), a list of such strings (in the case of
multipart tags) or a list of lists of such strings (in the case of two-level multipart tags). For example, the multipart
tag `nom//acc//voc` will be represented in canonical form as { {"nominative", "accusative", "vocative"}}, and the
two-level multipart tag `1:s//3:p` will be represented as { {{"first-person", "singular"}, {"third-person", "plural"}}}.
Example 1:
{normalize_tag_set({"nom//acc//voc", "n", "p"})} = { {{{"nominative", "accusative", "vocative"}, "masculine", "plural"}}}
Example 2:
{normalize_tag_set({"ed-form"}, ENGLISH)} = { {{"simple", "past"}, {"past", "participle"}}}
Example 3:
{normalize_tag_set({"archaic", "ed-form"}, ENGLISH)} = { {{"archaic", "simple", "past"}, {"archaic", "past", "participle"}}}]==]
function export.normalize_tag_set(tag_set, lang, do_track)
-- We track usage of shortcuts, normalized forms and (in the case of multipart tags or list tags) intermediate
-- forms. For example, if the tags 1s|mn|gen|indefinite are passed in, we track the following:
-- [[Wiktionary:Tracking/inflection of/tag/1s]]
-- [[Wiktionary:Tracking/inflection of/tag/1]]
-- [[Wiktionary:Tracking/inflection of/tag/s]]
-- [[Wiktionary:Tracking/inflection of/tag/first-person]]
-- [[Wiktionary:Tracking/inflection of/tag/singular]]
-- [[Wiktionary:Tracking/inflection of/tag/mn]]
-- [[Wiktionary:Tracking/inflection of/tag/m//n]]
-- [[Wiktionary:Tracking/inflection of/tag/m]]
-- [[Wiktionary:Tracking/inflection of/tag/n]]
-- [[Wiktionary:Tracking/inflection of/tag/masculine]]
-- [[Wiktionary:Tracking/inflection of/tag/neuter]]
-- [[Wiktionary:Tracking/inflection of/tag/gen]]
-- [[Wiktionary:Tracking/inflection of/tag/genitive]]
-- [[Wiktionary:Tracking/inflection of/tag/indefinite]]
local output_tag_set = {}
local saw_semicolon = false
for _, tag in ipairs(tag_set) do
if do_track then
-- Track the raw tag.
track("tag/" .. tag)
end
-- Expand the tag, which may generate a new tag (either a fully canonicalized tag, a multipart tag, or a list
-- of tags).
tag = lookup_shortcut(tag, lang, do_track)
if type(tag) == "table" then
if contains(tag, ";") then
-- If we saw a conjoined shortcut, we need to use a more general algorithm that can expand a single
-- tag set into multiple.
saw_semicolon = true
break
end
for _, t in ipairs(tag) do
if do_track then
-- If the tag expands to a list of raw tags, track each of those.
track("tag/" .. t)
end
insert(output_tag_set, normalize_tag(t, lang, do_track))
end
else
insert(output_tag_set, normalize_tag(tag, lang, do_track))
end
end
if not saw_semicolon then
return {output_tag_set}
end
-- Use a more general algorithm that handles conjoined shortcuts.
output_tag_set = {}
for i, tag in ipairs(tag_set) do
if do_track then
-- Track the raw tag.
track("tag/" .. tag)
end
-- Expand the tag, which may generate a new tag (either a fully canonicalized tag, a multipart tag, or a list
-- of tags).
tag = lookup_shortcut(tag, lang, do_track)
if type(tag) == "table" then
local output_tag_sets = {}
local shortcut_tag_sets = split_tag_set(tag)
local normalized_shortcut_tag_sets = {}
for _, shortcut_tag_set in ipairs(shortcut_tag_sets) do
extend(normalized_shortcut_tag_sets,
normalize_tag_set(shortcut_tag_set, lang, do_track))
end
local after_tags = slice(tag_set, i + 1)
local normalized_after_tags_sets = normalize_tag_set(after_tags, lang, do_track)
for _, normalized_shortcut_tag_set in ipairs(normalized_shortcut_tag_sets) do
for _, normalized_after_tags_set in ipairs(normalized_after_tags_sets) do
insert(output_tag_sets, append(output_tag_set, normalized_shortcut_tag_set,
normalized_after_tags_set))
end
end
return output_tag_sets
else
insert(output_tag_set, normalize_tag(tag, lang, do_track))
end
end
error("Internal error: Should not get here")
end
normalize_tag_set = export.normalize_tag_set
--[==[
Split a tag set that may consist of multiple semicolon-separated tag sets into the component tag sets.]==]
function export.split_tag_set(tag_set)
local split_tag_sets = {}
local cur_tag_set = {}
for _, tag in ipairs(tag_set) do
if tag == ";" then
if #cur_tag_set > 0 then
insert(split_tag_sets, cur_tag_set)
end
cur_tag_set = {}
else
insert(cur_tag_set, tag)
end
end
if #cur_tag_set > 0 then
insert(split_tag_sets, cur_tag_set)
end
return split_tag_sets
end
split_tag_set = export.split_tag_set
local tag_set_param_mods = {
lb = {
item_dest = "labels",
convert = function(arg, parse_err)
return split(arg, "//", true)
end,
}
}
--[==[
Parse tag set properties from a tag set (list of tags). Currently no per-tag properties are recognized, and the only
per-tag-set property recognized is `<lb:...>` for specifing label(s) for the tag set. Per-tag-set properties must be
attached to the last tag.]==]
function export.parse_tag_set_properties(tag_set)
local function generate_tag_set_obj(last_tag)
tag_set[#tag_set] = last_tag
return {tags = tag_set}
end
local last_tag = tag_set[#tag_set]
-- Check for inline modifier, e.g. מרים<tr:Miryem>. But exclude HTML entry with <span ...>, <i ...>, <br/> or
-- similar in it, caused by wrapping an argument in {{l|...}}, {{af|...}} or similar. Basically, all tags of
-- the sort we parse here should consist of a less-than sign, plus letters, plus a colon, e.g. <lb:...>, so if
-- we see a tag on the outer level that isn't in this format, we don't try to parse it. The restriction to the
-- outer level is to allow generated HTML inside of e.g. qualifier tags, such as foo<q:similar to {{m|fr|bar}}>.
if last_tag:find("<", nil, true) and not last_tag:find("^[^<]*<%l*[^%l:]") then
return parse_inline_modifiers(last_tag, {
param_mods = tag_set_param_mods,
generate_obj = generate_tag_set_obj,
})
else
return generate_tag_set_obj(last_tag)
end
end
parse_tag_set_properties = export.parse_tag_set_properties
local function normalize_pos(pos)
if not pos then
return nil
end
return (m_pos_data or get_m_pos_data())[pos] or pos
end
-- Return the display form of a single canonical-form tag. The value
-- passed in must be a string (i.e. it cannot be a list describing a
-- multipart tag). To handle multipart tags, use get_tag_display_form().
-- A truthy `nolink` suppresses linking.
local function get_single_tag_display_form(normtag, lang, nolink)
local data = lookup_tag(normtag, lang)
local display = normtag
-- If the tag has a special display form, use it
if data and data.display then
display = data.display
if nolink then
display = remove_links(display)
end
end
-- If there is a nonempty glossary index, then show a link to it
if not nolink then
local glossary = data and data[(m_data or get_m_data()).GLOSSARY]
if glossary ~= nil then
if glossary == m_data.WIKT then
display = "[[" .. normtag .. "|" .. display .. "]]"
elseif glossary == m_data.WP then
display = "[[w:" .. normtag .. "|" .. display .. "]]"
elseif glossary == m_data.APPENDIX then
display = "[[Appendix:Glossary#" .. anchor_encode(normtag) .. "|" .. display .. "]]"
elseif type(glossary) ~= "string" then
error(("Internal error: Wrong type %s for glossary value %s for tag %s"):format(
type(glossary), dump(glossary), normtag))
else
local link = glossary:match("^wikt:(.*)")
if link then
display = "[[" .. link .. "|" .. display .. "]]"
end
if not link then
link = glossary:match("^w:(.*)")
if link then
display = "[[w:" .. link .. "|" .. display .. "]]"
end
end
if not link then
display = "[[Appendix:Glossary#" .. anchor_encode(glossary) .. "|" .. display .. "]]"
end
end
end
end
return display
end
--[==[
Turn a canonicalized tag spec (which describes a single, possibly multipart tag) into the displayed form. The tag spec
may be a string (a canonical-form tag); a list of canonical-form tags (in the case of a simple multipart tag); or a
list of mixed canonical-form tags and lists of such tags (in the case of a two-level multipart tag). `joiner` indicates
how to join the parts of a multipart tag, and can be either {"and"} ("foo and bar", or "foo, bar and baz" for 3 or
more), {"slash"} ("foo/bar"), {"en-dash"} ("foo–bar") or {nil}, which uses the global default found in
{multipart_join_strategy()} in [[Module:form of/functions]]. (NOTE: The global default is {"slash"} and this seems
unlikely to change.) A truthy `nolink` suppresses linking.]==]
function export.get_tag_display_form(tagspec, lang, joiner, nolink)
if type(tagspec) == "string" then
return get_single_tag_display_form(tagspec, lang, nolink)
end
-- We have a multipart tag. See if there's a display handler to display them specially.
for _, handler in ipairs(display_handlers or get_display_handlers()) do
local displayval = handler(tagspec, joiner)
if displayval then
if nolink then
displayval = remove_links(displayval)
end
return displayval
end
end
-- No display handler.
local displayed_tags = {}
for _, first_level_tag in ipairs(tagspec) do
if type(first_level_tag) == "string" then
insert(displayed_tags, get_single_tag_display_form(first_level_tag, lang, nolink))
else
-- A first-level element of a two-level multipart tag. Currently we just separate the individual components
-- with spaces, but other ways are possible, e.g. using an underscore, colon, parens or braces.
local components = {}
for _, component in ipairs(first_level_tag) do
insert(components, get_single_tag_display_form(component, lang, nolink))
end
insert(displayed_tags, concat(components, ""))
end
end
return join_multiparts(displayed_tags, joiner)
end
get_tag_display_form = export.get_tag_display_form
--[==[
Given a normalized tag set (i.e. as output by {normalize_tag_set()}; all tags are in canonical form, multipart tags are
represented as lists, and two-level multipart tags as lists of lists), convert to displayed form (a string). See
{get_tag_display_form()} for the meaning of `joiner`. A truthy `nolink` suppresses linking.]==]
function export.get_tag_set_display_form(normalized_tag_set, lang, joiner, nolink)
local parts = {}
for _, tagspec in ipairs(normalized_tag_set) do
local to_insert = get_tag_display_form(tagspec, lang, joiner, nolink)
-- Maybe insert a space before inserting the display form of the tag. We insert a space if
-- (a) we're not the first tag; and
-- (b) the tag we're about to insert doesn't have the "no_space_on_left" property; and
-- (c) the preceding tag doesn't have the "no_space_on_right" property.
-- NOTE: We depend here on the fact that
-- (1) all tags with either of the above properties set have the same display form as canonical form, and
-- (2) all tags with either of the above properties set are single-character tags.
-- The second property is an optimization to avoid looking up display forms resulting from multipart tags,
-- which won't be found and which will trigger loading of [[Module:form of/data/2]]. If multichar punctuation is
-- added in the future, it's ok to change the == 1 below to <= 2 or <= 3.
--
-- If the first property above fails to hold in the future, we need to track the canonical form of each tag
-- (including the previous one) as well as the display form. This would also avoid the need for the == 1 check.
if #parts > 0 then
local most_recent_tagobj = parts[#parts]:match("^.[\128-\191]*$") and lookup_tag(parts[#parts], lang)
local to_insert_tagobj = to_insert:match("^.[\128-\191]*$") and lookup_tag(to_insert, lang)
if (
(not most_recent_tagobj or not most_recent_tagobj.no_space_on_right) and
(not to_insert_tagobj or not to_insert_tagobj.no_space_on_left)
) then
insert(parts, "")
end
end
insert(parts, to_insert)
end
return concat(parts)
end
get_tag_set_display_form = export.get_tag_set_display_form
--[==[
Split a tag set containing two-level multipart tags into one or more tag sets not containing such tags.
Single-level multipart tags are left alone. (If we need to, a slight modification of the following code
will also split single-level multipart tags.) This assumes that multipart tags are represented as lists
and two-level multipart tags are represented as lists of lists, as is output by {normalize_tag_set()}.
NOTE: We have to be careful to properly handle imbalanced two-level multipart tags such as
`def:s//p` (or the reverse, `s//def:p`).]==]
local function split_two_level_multipart_tag_set(tag_set)
for i, tag in ipairs(tag_set) do
if type(tag) == "table" then
-- We saw a multipart tag. Check if any of the parts are two-level.
local saw_two_level_tag = false
for _, first_level_tag in ipairs(tag) do
if type(first_level_tag) == "table" then
saw_two_level_tag = true
break
end
end
if saw_two_level_tag then
-- We found a two-level multipart tag.
-- (1) Extract the preceding tags.
local pre_tags = slice(tag_set, 1, i - 1)
-- (2) Extract the following tags.
local post_tags = slice(tag_set, i + 1)
-- (3) Loop over each tag set alternant in the two-level multipart tag.
-- For each alternant, form the tag set consisting of pre_tags + alternant + post_tags,
-- and recursively split that tag set.
local resulting_tag_sets = {}
for _, first_level_tag_set in ipairs(tag) do
local expanded_tag_set = {}
extend(expanded_tag_set, pre_tags)
-- The second level may have a string or a list.
if type(first_level_tag_set) == "table" then
extend(expanded_tag_set, first_level_tag_set)
else
insert(expanded_tag_set, first_level_tag_set)
end
extend(expanded_tag_set, post_tags)
extend(resulting_tag_sets, split_two_level_multipart_tag_set(expanded_tag_set))
end
return resulting_tag_sets
end
end
end
return {tag_set}
end
local function try_lang_specific_module(langcode, modules_tried, name, data)
local lang_specific_module = form_of_lang_data_module_prefix .. langcode .. "/functions"
local langdata = safe_require(lang_specific_module)
if langdata then
insert(modules_tried, lang_specific_module)
if langdata.cat_functions then
local fn = langdata.cat_functions[name]
if fn then
return fn(data), true
end
end
end
return nil, false
end
-- Call a named function, either from the lang-specific data in
-- [[Module:form of/lang-specific/LANGCODE/functions]] or in [[Module:form of/functions]].
local function call_named_function(name, funtype, normalized_tag_set, lang, POS, pagename, lemmas)
local data = {
pagename = pagename or default_pagename or get_default_pagename(),
lemmas = lemmas,
tag_set = normalized_tag_set,
lang = lang,
POS = POS
}
local modules_tried = {}
-- First try lang-specific.
while lang do
local retval, found_it = try_lang_specific_module(lang:getCode(), modules_tried, name, data)
if found_it then
return retval
end
-- If the language has a parent (i.e. a superordinate variety), try again with that.
lang = lang:getParent()
end
-- Try lang-independent.
insert(modules_tried, form_of_functions_module)
local fn = (cat_functions or get_cat_functions())[name]
if fn then
return fn(data)
end
for i, modname in ipairs(modules_tried) do
modules_tried[i] = "[[" .. modname .. "]]"
end
error(("No %s function named '%s' in %s"):format(funtype, name, list_to_text(modules_tried, nil, " or ")))
end
-- Given a tag from the current tag set (which may be a list in case of a multipart tag),
-- and a tag from a categorization spec, check that the two match.
-- (1) If both are strings, we just check for equality.
-- (2) If the spec tag is a string and the tag set tag is a list (i.e. it originates from a
-- multipart tag), we check that the spec tag is in the list. This is because we want to treat
-- multipart tags in user-specified tag sets as if the user had specified multiple tag sets.
-- For example, if the user said "1//3|s|pres|ind" and the categorization spec says {"has", "1"},
-- we want this to match, because "1//3|s|pres|ind" should be treated equivalently to two tag
-- sets "1|s|pres|ind" and "3|s|pres|ind", and the former matches the categorization spec.
-- (3) If the spec tag is a list (i.e. it originates from a multipart tag), we check that the
-- tag set tag is also a list and is a superset of the spec tag. For example, if the categorization
-- spec says {"has", "1//3"}, then the tag set tag must be a multipart tag that has both "1" and "3"
-- in it. "1//3" works, as does "1//2//3".
local function tag_set_tag_matches_spec_tag(tag_set_tag, spec_tag)
if type(spec_tag) == "table" then
if type(tag_set_tag) == "table" and is_subset_list(spec_tag, tag_set_tag) then
return true
end
elseif type(tag_set_tag) == "table" then
if contains(tag_set_tag, spec_tag) then
return true
end
elseif tag_set_tag == spec_tag then
return true
end
return false
end
-- Check that the current tag set matches the given spec tag. This means that any of the tags
-- in the current tag set match, according to tag_set_tag_matches_spec_tag(); see above. If the
-- current tag set contains only string tags (i.e. no multipart tags), and the spec tag is a
-- string (i.e. not a multipart tag), this boils down to list containment, but it gets more
-- complex when multipart tags are present.
local function tag_set_matches_spec_tag(spec_tag, tag_set, lang)
spec_tag = normalize_tag(spec_tag, lang)
for _, tag_set_tag in ipairs(tag_set) do
if tag_set_tag_matches_spec_tag(tag_set_tag, spec_tag) then
return true
end
end
return false
end
-- Check whether the given spec matches the current tag set. Two values are returned:
-- (1) whether the spec matches the tag set; (2) the index of the category to add if
-- the spec matches.
local function check_condition(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas)
if type(spec) == "boolean" then
return spec
elseif type(spec) ~= "table" then
error("Wrong type of condition " .. spec .. ": " .. type(spec))
end
local predicate = spec[1]
if predicate == "has" then
return tag_set_matches_spec_tag(spec[2], tag_set, lang), 3
elseif predicate == "hasall" then
for _, tag in ipairs(spec[2]) do
if not tag_set_matches_spec_tag(tag, tag_set, lang) then
return false, 3
end
end
return true, 3
elseif predicate == "hasany" then
for _, tag in ipairs(spec[2]) do
if tag_set_matches_spec_tag(tag, tag_set, lang) then
return true, 3
end
end
return false, 3
elseif predicate == "tags=" then
local normalized_spec_tag_sets = normalize_tag_set(spec[2], lang)
if #normalized_spec_tag_sets > 1 then
error("Internal error: No support for conjoined shortcuts in category/label specs in "
.. "[[Module:form of/cats]] when processing spec tag set " .. concat(spec[2], "|"))
end
local normalized_spec_tag_set = normalized_spec_tag_sets[1]
-- Check for and disallow two-level multipart tags in the specs. FIXME: Remove this when we remove
-- support for two-level multipart tags.
for _, tag in ipairs(normalized_spec_tag_set) do
if type(tag) == "table" then
for _, subtag in ipairs(tag) do
if type(subtag) == "table" then
error("Internal error: No support for two-level multipart tags in category/label specs"
.. "[[Module:form of/cats]] when processing spec tag set "
.. concat(spec[2], "|"))
end
end
end
end
-- Allow tags to be in different orders, and multipart tags to be in different orders. To handle this,
-- we first check that both tag set tags and spec tags have the same length. If so, we sort the
-- multipart tags in the tag set tags and spec tags, and then check that all tags in the spec tags are
-- in the tag set tags.
if #tag_set ~= #normalized_spec_tag_set then
return false, 3
end
local tag_set_tags = deep_copy(tag_set)
for i=1,#tag_set_tags do
if type(tag_set_tags[i]) == "table" then
sort(tag_set_tags[i])
end
if type(normalized_spec_tag_set[i]) == "table" then
sort(normalized_spec_tag_set[i])
end
end
for i=1,#tag_set_tags do
if not contains(tag_set_tags, normalized_spec_tag_set[i]) then
return false, 3
end
end
return true, 3
elseif predicate == "p=" then
return POS == normalize_pos(spec[2]), 3
elseif predicate == "pany" then
for _, specpos in ipairs(spec[2]) do
if POS == normalize_pos(specpos) then
return true, 3
end
end
return false, 3
elseif predicate == "pexists" then
return POS ~= nil, 2
elseif predicate == "not" then
local condval = check_condition(spec[2], tag_set, normalized_tag_set, lang, POS, pagename, lemmas)
return not condval, 3
elseif predicate == "and" then
local condval = check_condition(spec[2], tag_set, normalized_tag_set, lang, POS, pagename, lemmas)
if condval then
condval = check_condition(spec[3], tag_set, normalized_tag_set, lang, POS, pagename, lemmas)
end
return condval, 4
elseif predicate == "or" then
local condval = check_condition(spec[2], tag_set, normalized_tag_set, lang, POS, pagename, lemmas)
if not condval then
condval = check_condition(spec[3], tag_set, normalized_tag_set, lang, POS, pagename, lemmas)
end
return condval, 4
elseif predicate == "call" then
return call_named_function(spec[2], "condition", normalized_tag_set, lang, POS, pagename, lemmas), 3
else
error("Unrecognized predicate: " .. predicate)
end
end
-- Process a given spec. This checks any conditions in the spec against the
-- tag set, and insert any resulting categories into `categories`. Return value
-- is true if the outermost condition evaluated to true and a category was inserted
-- (this is used in {"cond" ...} conditions, which stop when a subcondition evaluates
-- to true).
local function process_spec(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels)
if not spec then
return false
elseif type(spec) == "string" then
-- A category. Substitute POS request with user-specified part of speech or default.
spec = spec:gsub("<<p=(.-)>>", function(default)
return POS or normalize_pos(default)
end)
insert(categories, spec:find("的") and spec:gsub("的", "的" .. lang:getFullName()) or lang:getFullName() .. spec) -- L10N
return true
elseif type(spec) == "table" and spec.labels then
-- A label spec.
for _, label in ipairs(spec.labels) do
insert_if_not(labels, label)
end
return true
elseif type(spec) ~= "table" then
error("Wrong type of specification " .. spec .. ": " .. type(spec))
end
local predicate = spec[1]
if predicate == "multi" then
for _, sp in iterate_from(2, ipairs(spec)) do -- Iterate from 2.
process_spec(sp, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels)
end
return true
elseif predicate == "cond" then
for _, sp in iterate_from(2, ipairs(spec)) do -- Iterate from 2.
if process_spec(sp, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels) then
return true
end
end
return false
elseif predicate == "call" then
return process_spec(
call_named_function(spec[2], "spec", normalized_tag_set, lang, POS, pagename, lemmas),
tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels
)
else
local condval, ifspec = check_condition(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas)
if condval then
process_spec(spec[ifspec], tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels)
return true
else
process_spec(spec[ifspec + 1], tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels)
-- FIXME: Are we sure this is correct?
return false
end
end
end
--[==[
Given a normalized tag set (i.e. as output by {normalize_tag_set()}; all tags are in canonical form, multipart tags are
represented as lists, and two-level multipart tags as lists of lists), fetch the associated categories and labels.
Return two values, a list of categories and a list of labels. `lang` is the language of term represented by the tag set,
and `POS` is the user-provided part of speech (which may be {nil}).]==]
function export.fetch_categories_and_labels(normalized_tag_set, lang, POS, pagename, lemmas)
local categories, labels = {}, {}
POS = normalize_pos(POS)
-- First split any two-level multipart tags into multiple sets, to make our life easier.
for _, tag_set in ipairs(split_two_level_multipart_tag_set(normalized_tag_set)) do
local langcode = lang:getCode()
local langspecs = (m_cats_data or get_m_cats_data())[langcode]
if langspecs then
for _, spec in ipairs(langspecs) do
process_spec(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels)
end
end
local full_code = lang:getFullCode()
if full_code ~= langcode then
local langspecs = (m_cats_data or get_m_cats_data())[full_code]
if langspecs then
for _, spec in ipairs(langspecs) do
process_spec(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels)
end
end
end
if full_code ~= "und" then
local langspecs = (m_cats_data or get_m_cats_data())["und"]
if langspecs then
for _, spec in ipairs(langspecs) do
process_spec(spec, tag_set, normalized_tag_set, lang, POS, pagename, lemmas, categories, labels)
end
end
end
end
return categories, labels
end
fetch_categories_and_labels = export.fetch_categories_and_labels
local function format_labels(labels, data, notext)
if labels and #labels > 0 then
return show_labels{
labels = labels,
lang = data.lang,
sort = data.sort,
nocat = data.nocat
} .. (notext and (data.pretext or "") == "" and "" or " ")
else
return ""
end
end
--[==[
Implementation of templates that display inflection tags, such as the general {{tl|inflection of}}, semi-specific
variants such as {{tl|participle of}}, and specific variants such as {{tl|past participle of}}. `data` contains all the
information controlling the display, with the following fields:
* `.lang`: ('''''required''''') Language to use when looking up language-specific inflection tags, categories and
labels, and for displaying categories and labels.
* `.tags`: ('''''required''' unless `.tag_sets` is given'') List of non-canonicalized inflection tags. Multiple tag sets
can be indicated by a {";"} as one of the tags, and tag-set properties may be attached to the last tag of a tag set.
The tags themselves may come directly from the user (as in {{tl|inflection of}}); come partly from the user (as in
{{tl|participle of}}, which adds the tag `part` to user-specified inflection tags); or be entirely specified by the
template (as in {{tl|past participle of}}).
* `.tag_sets`: ('''''required''' unless `.tags` is given'') List of non-canonicalized tag sets and associated
per-tag-set properties. Each element of the list is an object of the form
{ {tags = {"TAG", "TAG", ...}, labels = {"LABEL", "LABEL", ...}}. If `.tag_sets` is specified, `.tags` should not be
given and vice-versa. Specifying `.tag_sets` in place of tags allowed per-tag set labels to be specified; otherwise,
there is no advantage. [[Module:pt-gl-inflections]] uses this functionality to supply labels like {"Brazil"} and
{"Portugal"} associated with specific tag sets.
* `.lemmas`: ('''''recommended''''') List of objects describing the lemma(s) of which the term in question is a
non-lemma form. These are passed directly to {full_link()} in [[Module:links]]. Each object should have at minimum a
`.lang` field containing the language of the lemma and a `.term` field containing the lemma itself. Each object is
formatted using {full_link()} and then if there are more than one, they are joined using {serialCommaJoin()} in
[[Module:table]]. Alternatively, `.lemmas` can be a string, which is displayed directly. If omitted entirely, no lemma
links are shown and the connecting "of" is also omitted.
* `.lemma_face`: ('''''recommended''''') "Face" to use when displaying the lemma objects. Usually should be set to
{"term"}.
* `.POS`: ('''''recommended''''') Categorizing part-of-speech tag. Comes from the {{para|p}} or {{para|POS}} argument of
{{tl|inflection of}}.
* `.pagename`: Page name of "current" page or nil to use the actual page title; for testing purposes.
* `.conj`: Conjunction or separator to use when joining multiple lemma objects. Defaults to {"and"}.
* `.enclitics`: List of enclitics to display after the lemmas, in parens.
* `.enclitic_conj`: Conjunction or separator to use when joining multiple enclitics. Defaults to {"and"}.
* `.no_format_categories`: If true, don't format the categories derived from the inflection tags; just return them.
* `.sort`: Sort key for formatted categories. Ignored when `.no_format_categories` = {true}.
* `.nocat`: Suppress computation of categories (even if `.no_format_categories` is not given).
* `.notext`: Disable display of all tag text and `inflection of` text. (FIXME: Maybe not implemented correctly.)
* `.nolink`: Suppress linking of terms in inflection tags.
* `.capfirst`: Capitalize the first word displayed.
* `.pretext`: Additional text to display before the inflection tags, but after any top-level labels.
* `.posttext`: Additional text to display after the lemma links.
* `.text_classes`: CSS classes used to wrap the tag text and lemma links. Default is
{"form-of-definition use-with-mention"}.
* `.lemma_classes`: Additional CSS classes used to wrap the lemma links. Default is {"form-of-definition-link"}.
* `.joiner`: Override the joiner (normally a slash) used to join multipart tags. You should normally not specify this.
* `.nowrap`: Do not wrap the form-of definitions in a span, unless `.text_classes` is specified.
* `.ok_to_destructively_modify`: If set, data structures (including the nested lemma structures) can be modified
in-place to save memory; otherwise they will be copied before modifying.
A typical call might look like this (for {{m+|es|amo}}): {
local lang = require("Module:languages").getByCode("es")
local lemma_obj = {
lang = lang,
term = "amar",
}
return m_form_of.tagged_inflections({
lang = lang, tags = {"1", "s", "pres", "ind"}, lemmas = {lemma_obj}, lemma_face = "term", POS = "verb"
})
}
Normally, one value is returned, the formatted text, which has appended to it the formatted categories derived from the
tag-set-related categories generated by the specs in [Module:form of/cats]]. To suppress this, set
`data.no_format_categories` = {true}, in which case two values are returned, the formatted text without any formatted
categories appended and a list of the categories to be formatted.
NOTE: There are two sets of categories that may be generated: (1) categories derived directly from the tag sets, as
specified in [[Module:form of/cats]]; (2) categories derived from tag-set labels, either (a) set explicitly by the
caller in `data.tag_sets`, (b) specified by the user using `<lb:...>` attached to the last tag in a tag set, or
(c) specified in [[Module:form of/cats]]. The second type (label-related categories) are currently not returned in
the second return value of {tagged_inflections()}, and are currently inserted into the output text even if
`data.no_format_categories` is set to {true}; but they can be suppressed by setting `data.nocat` = {true} (which also
suppresses the first type of categories, those derived directly from tag sets, even if `data.no_format_categories` is
set to {true}).]==]
function export.tagged_inflections(data)
if not data.tags and not data.tag_sets then
error("First argument must be a table of arguments, and `.tags` or `.tag_sets` must be specified")
end
if data.tags and data.tag_sets then
error("Both `.tags` and `.tag_sets` cannot be specified")
end
local tag_sets = data.tag_sets
if not tag_sets then
tag_sets = split_tag_set(data.tags)
for i, tag_set in ipairs(tag_sets) do
tag_sets[i] = parse_tag_set_properties(tag_set)
end
end
local inflections = {}
local categories = {}
for _, tag_set in ipairs(tag_sets) do
local normalized_tag_sets = normalize_tag_set(tag_set.tags, data.lang, "do-track")
for _, normalized_tag_set in ipairs(normalized_tag_sets) do
local this_categories, this_labels = fetch_categories_and_labels(normalized_tag_set, data.lang,
data.POS, data.pagename, type(data.lemmas) == "table" and data.lemmas or nil)
if not data.nocat then
extend(categories, this_categories)
end
local cur_infl = get_tag_set_display_form(normalized_tag_set, data.lang, data.joiner, data.nolink)
if #cur_infl > 0 then
if tag_set.labels then
this_labels = append(tag_set.labels, this_labels)
end
insert(inflections, {infl_text = cur_infl, labels = this_labels})
end
end
end
local overall_labels, need_per_tag_set_labels
for _, inflection in ipairs(inflections) do
if overall_labels == nil then
overall_labels = inflection.labels
elseif not deep_equals(overall_labels, inflection.labels) then
need_per_tag_set_labels = true
overall_labels = nil
break
end
end
if not need_per_tag_set_labels then
for _, inflection in ipairs(inflections) do
inflection.labels = nil
end
end
local format_data = shallow_copy(data)
local of_text = data.lemmas and " 的" or ""
local formatted_text, this_categories
if #inflections == 1 then
if need_per_tag_set_labels then
error("Internal error: need_per_tag_set_labels should not be set with one inflection")
end
format_data.of_text = of_text
format_data.text = format_labels(overall_labels, data, data.notext) .. (data.pretext or "") .. (data.notext and "" or
(data.capfirst and ucfirst(inflections[1].infl_text) or inflections[1].infl_text))
formatted_text, this_categories = format_form_of(format_data)
else
format_data.of_text = of_text
format_data.text = format_labels(overall_labels, data, data.notext) .. (data.pretext or "") .. (data.notext and "" or
(data.capfirst and "屈折" or "屈折"))
format_data.posttext = (data.posttext or "") .. ":"
local link
link, this_categories = format_form_of(format_data)
local text_classes = data.text_classes
if text_classes == nil and not data.nowrap then
text_classes = "form-of-definition use-with-mention"
end
for i, inflection in ipairs(inflections) do
inflections[i] = "\n## " .. format_labels(inflection.labels, data, false) ..
wrap_in_span(inflection.infl_text, text_classes)
end
formatted_text = link .. concat(inflections)
end
if this_categories[1] then
extend(categories, this_categories)
end
if not data.no_format_categories then
if categories[1] then
formatted_text = formatted_text .. format_categories(categories, data.lang,
data.sort, nil, export.force_cat)
end
return formatted_text
end
return formatted_text, categories
end
function export.dump_form_of_data(frame)
local data = {
require(form_of_data1_module),
require(form_of_data2_module)
}
return require(json_module).toJSON(data)
end
export.form_of_cats_module = form_of_cats_module
export.form_of_data1_module = form_of_data1_module
export.form_of_data2_module = form_of_data2_module
export.form_of_functions_module = form_of_functions_module
export.form_of_lang_data_module_prefix = form_of_lang_data_module_prefix
export.headword_data_module = headword_data_module -- so all form-of modules stay in sync
return export
q3ii7ilmph1d5gp4g8n2yerz780bvtb
Module:Table
828
1369847
9739579
9637230
2026-04-21T05:40:05Z
TongcyDai
53191
9739579
Scribunto
text/plain
local export = {}
--[==[ intro:
This module provides functions for dealing with Lua tables. All of them, except for two helper functions, take a table
as their first argument.
Some functions are available as methods in the arrays created by [[Module:array]].
Functions by what they do:
* Create a new table:
** `shallowCopy`, `deepCopy`, `removeDuplicates`, `numKeys`, `compressSparseArray`, `keysToList`, `reverse`, `invert`, `listToSet`
* Create an array:
** `removeDuplicates`, `numKeys`, `compressSparseArray`, `keysToList`, `reverse`
* Return information about the table:
** `size`, `length`, `contains`, `isArray`, `deepEquals`
* Treat the table as an array (that is, operate on the values in the array portion of the table: values indexed by
consecutive integers starting at {1}):
** `removeDuplicates`, `length`, `contains`, `serialCommaJoin`, `reverseIpairs`, `reverse`, `invert`, `listToSet`, `isArray`
* Treat a table as a sparse array (that is, operate on values indexed by non-consecutive integers):
** `numKeys`, `maxIndex`, `compressSparseArray`, `sparseConcat`, `sparseIpairs`
* Generate an iterator:
** `sparseIpairs`, `sortedPairs`, `reverseIpairs`
* Other functions:
** `sparseConcat`, `serialCommaJoin`, `reverseConcat`
The original version was a copy of {{w|Module:TableTools}} on Wikipedia via [[c:Module:TableTools|Module:TableTools]] on
Commons, but in the course of time this module has been almost completely rewritten, with many new functions added. The
main legacy of this is the use of camelCase for function names rather than snake_case, as is normal in the English
Wiktionary.
]==]
local load_module = "Module:load"
local math_module = "Module:math"
local table = table
local concat = table.concat
local dump = mw.dumpObject
local ipairs = ipairs
local ipairs_default_iter = ipairs{export}
local next = next
local pairs = pairs
local require = require
local select = select
local signed_index -- defined as export.signedIndex
local table_len -- defined as export.length
local type = type
--[==[
Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==]
local function is_integer(...)
is_integer = require(math_module).is_integer
return is_integer(...)
end
local function safe_require(...)
safe_require = require(load_module).safe_require
return safe_require(...)
end
--[==[
Given an array and a signed index, returns the true table index. If the signed index is negative, the array will be counted from the end, where {-1} is the highest index in the array; otherwise, the returned index will be the same. To aid optimization, the first argument may be a number representing the array length instead of the array itself; this is useful when the array length is already known, as it avoids recalculating it each time this function is called.]==]
function export.signedIndex(t, k)
if not is_integer(k) then
error("index must be an integer")
end
return k < 0 and (type(t) == "table" and table_len(t) or t) + k + 1 or k
end
signed_index = export.signedIndex
--[==[
An iterator which works like `pairs`, but ignores any `__pairs` metamethod.]==]
function export.rawPairs(t)
return next, t, nil
end
--[==[
An iterator which works like `ipairs`, but ignores any `__ipairs` metamethod.]==]
function export.rawIpairs(t)
return ipairs_default_iter, t, 0
end
--[==[
This returns the length of a table, or the first integer key n counting from 1 such that t[n + 1] is nil. It is a more reliable form of the operator `#`, which can become unpredictable under certain circumstances due to the implementation of tables under the hood in Lua, and therefore should not be used when dealing with arbitrary tables. `#` also does not use metamethods, so will return the wrong value in cases where it is desirable to take these into account (e.g. data loaded via `mw.loadData`). If `raw` is set, then metamethods will be ignored, giving the true table length.
For arrays, this function is faster than `export.size`.]==]
function export.length(t, raw)
local n = 0
if raw then
for i in ipairs_default_iter, t, 0 do
n = i
end
return n
end
repeat
n = n + 1
until t[n] == nil
return n - 1
end
table_len = export.length
local function getIteratorValues(i, j , step, t_len)
i, j = i and signed_index(t_len, i), j and signed_index(t_len, j)
if step == nil then
i, j = i or 1, j or t_len
return i, j, j < i and -1 or 1
elseif step == 0 or not is_integer(step) then
error("step must be a non-zero integer")
elseif step < 0 then
return i or t_len, j or 1, step
end
return i or 1, j or t_len, step
end
--[==[
Given an array `list` and function `func`, iterate through the array applying {func(r, k, v)}, and returning the result,
where `r` is the value calculated so far, `k` is an index, and `v` is the value at index `k`. For example,
{reduce(array, function(a, _, v) return a + v end)} will return the sum of `array`.
Optional arguments:
* `i`: start index; negative values count from the end of the array
* `j`: end index; negative values count from the end of the array
* `step`: step increment
These must be non-zero integers. The function will determine where to iterate from, whether to iterate forwards or
backwards and by how much, based on these inputs (see examples below for default behaviours).
Examples:
# No values for i, j or step results in forward iteration from the start to the end in steps of 1 (the default).
# step=-1 results in backward iteration from the end to the start in steps of 1.
# i=7, j=3 results in backward iteration from indices 7 to 3 in steps of 1 (i.e. step=-1).
# j=-3 results in forward iteration from the start to the 3rd last index.
# j=-3, step=-1 results in backward iteration from the end to the 3rd last index.]==]
function export.reduce(t, func, i, j, step)
i, j, step = getIteratorValues(i, j, step, table_len(t))
local ret = t[i]
for k = i + step, j, step do
ret = func(ret, k, t[k])
end
return ret
end
do
local function replace(t, func, i, j, step, generate)
local t_len = table_len(t)
-- Normalized i, j and step, based on the inputs.
local norm_i, norm_j, norm_step = getIteratorValues(i, j, step, t_len)
if norm_step > 0 then
i, j, step = 1, t_len, 1
else
i, j, step = t_len, 1, -1
end
-- "Signed" variables are multiplied by -1 if `step` is negative.
local t_new, signed_i, signed_j = generate and {} or t, norm_i * step, norm_j * step
for k = i, j, step do
-- Replace the values iff they're within the i to j range and `step` wouldn't skip the key.
-- Note: i > j if `step` is positive; i < j if `step` is negative. Otherwise, the range is empty.
local signed_k = k * step
if signed_k >= signed_i and signed_k <= signed_j and (k - norm_i) % norm_step == 0 then
t_new[k] = func(k, t[k])
-- Otherwise, add the existing value if `generate` is set.
elseif generate then
t_new[k] = t[k]
end
end
return t_new
end
--[==[
Given an array `list` and function `func`, iterate through the array applying {func(k, v)} (where `k` is an index, and
`v` is the value at index `k`), replacing the relevant values with the result. For example,
{apply(array, function(_, v) return 2 * v end)} will double each member of the array.
Optional arguments:
* `i`: start index; negative values count from the end of the array
* `j`: end index; negative values count from the end of the array
* `step`: step increment
These must be non-zero integers. The function will determine where to iterate from, whether to iterate forwards or
backwards and by how much, based on these inputs (see examples below for default behaviours).
Examples:
# No values for i, j or step results in forward iteration from the start to the end in steps of 1 (the default).
# step=-1 results in backward iteration from the end to the start in steps of 1.
# i=7, j=3 results in backward iteration from indices 7 to 3 in steps of 1 (i.e. step=-1).
# j=-3 results in forward iteration from the start to the 3rd last index.
# j=-3, step=-1 results in backward iteration from the end to the 3rd last index.]==]
function export.apply(t, func, i, j, step)
return replace(t, func, i, j, step, false)
end
--[==[
Given an array `list` and function `func`, iterate through the array applying {func(k, v)} (where `k` is an index, and
`v` is the value at index `k`), and return a shallow copy of the original array with the relevant values replaced. For example,
{generate(array, function(_, v) return 2 * v end)} will return a new array in which each value has been doubled.
Optional arguments:
* `i`: start index; negative values count from the end of the array
* `j`: end index; negative values count from the end of the array
* `step`: step increment
These must be non-zero integers. The function will determine where to iterate from, whether to iterate forwards or
backwards and by how much, based on these inputs (see examples below for default behaviours).
Examples:
# No values for i, j or step results in forward iteration from the start to the end in steps of 1 (the default).
# step=-1 results in backward iteration from the end to the start in steps of 1.
# i=7, j=3 results in backward iteration from indices 7 to 3 in steps of 1 (i.e. step=-1).
# j=-3 results in forward iteration from the start to the 3rd last index.
# j=-3, step=-1 results in backward iteration from the end to the 3rd last index.]==]
function export.generate(t, func, i, j, step)
return replace(t, func, i, j, step, true)
end
end
--[==[
Given an array `list` and function `func`, iterate through the array applying {func(k, v)} (where `k` is an index, and
`v` is the value at index `k`), and returning whether the function is true for all iterations.
Optional arguments:
* `i`: start index; negative values count from the end of the array
* `j`: end index; negative values count from the end of the array
* `step`: step increment
These must be non-zero integers. The function will determine where to iterate from, whether to iterate forwards or
backwards and by how much, based on these inputs (see examples below for default behaviours).
Examples:
# No values for i, j or step results in forward iteration from the start to the end in steps of 1 (the default).
# step=-1 results in backward iteration from the end to the start in steps of 1.
# i=7, j=3 results in backward iteration from indices 7 to 3 in steps of 1 (i.e. step=-1).
# j=-3 results in forward iteration from the start to the 3rd last index.
# j=-3, step=-1 results in backward iteration from the end to the 3rd last index.]==]
function export.all(t, func, i, j, step)
i, j, step = getIteratorValues(i, j, step, table_len(t))
for k = i, j, step do
if not func(k, t[k]) then
return false
end
end
return true
end
--[==[
Given an array `list` and function `func`, iterate through the array applying {func(k, v)} (where `k` is an index, and
`v` is the value at index `k`), and returning whether the function is true for at least one iteration.
Optional arguments:
* `i`: start index; negative values count from the end of the array
* `j`: end index; negative values count from the end of the array
* `step`: step increment
These must be non-zero integers. The function will determine where to iterate from, whether to iterate forwards or
backwards and by how much, based on these inputs (see examples below for default behaviours).
Examples:
# No values for i, j or step results in forward iteration from the start to the end in steps of 1 (the default).
# step=-1 results in backward iteration from the end to the start in steps of 1.
# i=7, j=3 results in backward iteration from indices 7 to 3 in steps of 1 (i.e. step=-1).
# j=-3 results in forward iteration from the start to the 3rd last index.
# j=-3, step=-1 results in backward iteration from the end to the 3rd last index.]==]
function export.any(t, func, i, j, step)
i, j, step = getIteratorValues(i, j, step, table_len(t))
for k = i, j, step do
if not not (func(k, t[k])) then
return true
end
end
return false
end
--[==[
Joins an array with serial comma and serial conjunction, normally {"and"}. An improvement on {mw.text.listToText},
which doesn't properly handle serial commas.
Options:
* `conj`: Conjunction to use; defaults to {"and"}.
* `punc`: Punctuation to use; default to {","}.
* `dontTag`: Don't tag the serial comma and serial {"and"}. For error messages, in which HTML cannot be used.
* `dump`: Each item will be serialized with {mw.dumpObject}. For warnings and error messages.]==]
function export.serialCommaJoin(seq, options) -- l10n
-- If the `dump` option is set, determine the table length as part of the
-- dump loop, instead of calling `table_len` separately.
local length
if options and options.dump then
local i, item = 1, seq[1]
if item ~= nil then
local dumped = {}
repeat
dumped[i] = dump(item)
i = i + 1
item = seq[i]
until item == nil
seq = dumped
end
length = i - 1
else
length = table_len(seq)
end
if length == 0 then
return ""
elseif length == 1 then
return seq[1]
end
local conj = options and options.conj
if conj == nil then
conj = "和"
end
local is_chinese = (conj == "和" or conj == "或")
local space = is_chinese and "" or " "
if length == 2 then
return seq[1] .. space .. conj .. space .. seq[2]
end
local punc, dont_tag
if options then
punc = options.punc
if punc == nil then
-- 預設用頓號 "、",其他預設用逗號 ","
punc = is_chinese and "、" or ","
end
dont_tag = options.dontTag
else
punc = is_chinese and "、" or ","
end
local comma
if dont_tag then
if is_chinese then
comma = "" -- 漢語通常不使用 Oxford comma
else
comma = ""
conj = " " .. conj .. " "
end
else
if is_chinese then
comma = "" -- 中文不顯示序列逗號
conj = "<span class=\"serial-and\">" .. conj .. "</span>"
else
comma = "<span class=\"serial-comma\">" .. punc .. "</span>"
conj = "<span class=\"serial-and\"> " .. conj .. "</span> "
end
end
local separator = punc .. space
return concat(seq, separator, 1, length - 1) .. comma .. conj .. seq[length]
end
--[==[
A function which works like `table.concat`, but respects any `__index` metamethod. This is useful for data loaded via `mw.loadData`.]==]
function export.concat(t, sep, i, j)
local list, k = {}, 0
while true do
k = k + 1
local v = t[k]
if v == nil then
return concat(list, sep, i, j)
end
list[k] = v
end
end
--[==[
Add a list of aliases for a given key to a table. The aliases must be given as a table.]==]
function export.alias(t, k, aliases)
for _, alias in pairs(aliases) do
t[alias] = t[k]
end
end
local mt = {}
function mt:__index(k)
local submodule = safe_require("Module:table/" .. k)
self[k] = submodule
return submodule
end
return setmetatable(export, mt)
98k2g8eu89426q24upt0z14lqszzz0x
9739580
9739579
2026-04-21T05:42:04Z
TongcyDai
53191
撤销[[Special:Contributions/TongcyDai|TongcyDai]]([[User talk:TongcyDai|讨论]])的修订版本[[Special:Diff/9739579|9739579]]
9739580
Scribunto
text/plain
local export = {}
--[==[ intro:
This module provides functions for dealing with Lua tables. All of them, except for two helper functions, take a table
as their first argument.
Some functions are available as methods in the arrays created by [[Module:array]].
Functions by what they do:
* Create a new table:
** `shallowCopy`, `deepCopy`, `removeDuplicates`, `numKeys`, `compressSparseArray`, `keysToList`, `reverse`, `invert`, `listToSet`
* Create an array:
** `removeDuplicates`, `numKeys`, `compressSparseArray`, `keysToList`, `reverse`
* Return information about the table:
** `size`, `length`, `contains`, `isArray`, `deepEquals`
* Treat the table as an array (that is, operate on the values in the array portion of the table: values indexed by
consecutive integers starting at {1}):
** `removeDuplicates`, `length`, `contains`, `serialCommaJoin`, `reverseIpairs`, `reverse`, `invert`, `listToSet`, `isArray`
* Treat a table as a sparse array (that is, operate on values indexed by non-consecutive integers):
** `numKeys`, `maxIndex`, `compressSparseArray`, `sparseConcat`, `sparseIpairs`
* Generate an iterator:
** `sparseIpairs`, `sortedPairs`, `reverseIpairs`
* Other functions:
** `sparseConcat`, `serialCommaJoin`, `reverseConcat`
The original version was a copy of {{w|Module:TableTools}} on Wikipedia via [[c:Module:TableTools|Module:TableTools]] on
Commons, but in the course of time this module has been almost completely rewritten, with many new functions added. The
main legacy of this is the use of camelCase for function names rather than snake_case, as is normal in the English
Wiktionary.
]==]
local load_module = "Module:load"
local math_module = "Module:math"
local table = table
local concat = table.concat
local dump = mw.dumpObject
local ipairs = ipairs
local ipairs_default_iter = ipairs{export}
local next = next
local pairs = pairs
local require = require
local select = select
local signed_index -- defined as export.signedIndex
local table_len -- defined as export.length
local type = type
--[==[
Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==]
local function is_integer(...)
is_integer = require(math_module).is_integer
return is_integer(...)
end
local function safe_require(...)
safe_require = require(load_module).safe_require
return safe_require(...)
end
--[==[
Given an array and a signed index, returns the true table index. If the signed index is negative, the array will be counted from the end, where {-1} is the highest index in the array; otherwise, the returned index will be the same. To aid optimization, the first argument may be a number representing the array length instead of the array itself; this is useful when the array length is already known, as it avoids recalculating it each time this function is called.]==]
function export.signedIndex(t, k)
if not is_integer(k) then
error("index must be an integer")
end
return k < 0 and (type(t) == "table" and table_len(t) or t) + k + 1 or k
end
signed_index = export.signedIndex
--[==[
An iterator which works like `pairs`, but ignores any `__pairs` metamethod.]==]
function export.rawPairs(t)
return next, t, nil
end
--[==[
An iterator which works like `ipairs`, but ignores any `__ipairs` metamethod.]==]
function export.rawIpairs(t)
return ipairs_default_iter, t, 0
end
--[==[
This returns the length of a table, or the first integer key n counting from 1 such that t[n + 1] is nil. It is a more reliable form of the operator `#`, which can become unpredictable under certain circumstances due to the implementation of tables under the hood in Lua, and therefore should not be used when dealing with arbitrary tables. `#` also does not use metamethods, so will return the wrong value in cases where it is desirable to take these into account (e.g. data loaded via `mw.loadData`). If `raw` is set, then metamethods will be ignored, giving the true table length.
For arrays, this function is faster than `export.size`.]==]
function export.length(t, raw)
local n = 0
if raw then
for i in ipairs_default_iter, t, 0 do
n = i
end
return n
end
repeat
n = n + 1
until t[n] == nil
return n - 1
end
table_len = export.length
local function getIteratorValues(i, j , step, t_len)
i, j = i and signed_index(t_len, i), j and signed_index(t_len, j)
if step == nil then
i, j = i or 1, j or t_len
return i, j, j < i and -1 or 1
elseif step == 0 or not is_integer(step) then
error("step must be a non-zero integer")
elseif step < 0 then
return i or t_len, j or 1, step
end
return i or 1, j or t_len, step
end
--[==[
Given an array `list` and function `func`, iterate through the array applying {func(r, k, v)}, and returning the result,
where `r` is the value calculated so far, `k` is an index, and `v` is the value at index `k`. For example,
{reduce(array, function(a, _, v) return a + v end)} will return the sum of `array`.
Optional arguments:
* `i`: start index; negative values count from the end of the array
* `j`: end index; negative values count from the end of the array
* `step`: step increment
These must be non-zero integers. The function will determine where to iterate from, whether to iterate forwards or
backwards and by how much, based on these inputs (see examples below for default behaviours).
Examples:
# No values for i, j or step results in forward iteration from the start to the end in steps of 1 (the default).
# step=-1 results in backward iteration from the end to the start in steps of 1.
# i=7, j=3 results in backward iteration from indices 7 to 3 in steps of 1 (i.e. step=-1).
# j=-3 results in forward iteration from the start to the 3rd last index.
# j=-3, step=-1 results in backward iteration from the end to the 3rd last index.]==]
function export.reduce(t, func, i, j, step)
i, j, step = getIteratorValues(i, j, step, table_len(t))
local ret = t[i]
for k = i + step, j, step do
ret = func(ret, k, t[k])
end
return ret
end
do
local function replace(t, func, i, j, step, generate)
local t_len = table_len(t)
-- Normalized i, j and step, based on the inputs.
local norm_i, norm_j, norm_step = getIteratorValues(i, j, step, t_len)
if norm_step > 0 then
i, j, step = 1, t_len, 1
else
i, j, step = t_len, 1, -1
end
-- "Signed" variables are multiplied by -1 if `step` is negative.
local t_new, signed_i, signed_j = generate and {} or t, norm_i * step, norm_j * step
for k = i, j, step do
-- Replace the values iff they're within the i to j range and `step` wouldn't skip the key.
-- Note: i > j if `step` is positive; i < j if `step` is negative. Otherwise, the range is empty.
local signed_k = k * step
if signed_k >= signed_i and signed_k <= signed_j and (k - norm_i) % norm_step == 0 then
t_new[k] = func(k, t[k])
-- Otherwise, add the existing value if `generate` is set.
elseif generate then
t_new[k] = t[k]
end
end
return t_new
end
--[==[
Given an array `list` and function `func`, iterate through the array applying {func(k, v)} (where `k` is an index, and
`v` is the value at index `k`), replacing the relevant values with the result. For example,
{apply(array, function(_, v) return 2 * v end)} will double each member of the array.
Optional arguments:
* `i`: start index; negative values count from the end of the array
* `j`: end index; negative values count from the end of the array
* `step`: step increment
These must be non-zero integers. The function will determine where to iterate from, whether to iterate forwards or
backwards and by how much, based on these inputs (see examples below for default behaviours).
Examples:
# No values for i, j or step results in forward iteration from the start to the end in steps of 1 (the default).
# step=-1 results in backward iteration from the end to the start in steps of 1.
# i=7, j=3 results in backward iteration from indices 7 to 3 in steps of 1 (i.e. step=-1).
# j=-3 results in forward iteration from the start to the 3rd last index.
# j=-3, step=-1 results in backward iteration from the end to the 3rd last index.]==]
function export.apply(t, func, i, j, step)
return replace(t, func, i, j, step, false)
end
--[==[
Given an array `list` and function `func`, iterate through the array applying {func(k, v)} (where `k` is an index, and
`v` is the value at index `k`), and return a shallow copy of the original array with the relevant values replaced. For example,
{generate(array, function(_, v) return 2 * v end)} will return a new array in which each value has been doubled.
Optional arguments:
* `i`: start index; negative values count from the end of the array
* `j`: end index; negative values count from the end of the array
* `step`: step increment
These must be non-zero integers. The function will determine where to iterate from, whether to iterate forwards or
backwards and by how much, based on these inputs (see examples below for default behaviours).
Examples:
# No values for i, j or step results in forward iteration from the start to the end in steps of 1 (the default).
# step=-1 results in backward iteration from the end to the start in steps of 1.
# i=7, j=3 results in backward iteration from indices 7 to 3 in steps of 1 (i.e. step=-1).
# j=-3 results in forward iteration from the start to the 3rd last index.
# j=-3, step=-1 results in backward iteration from the end to the 3rd last index.]==]
function export.generate(t, func, i, j, step)
return replace(t, func, i, j, step, true)
end
end
--[==[
Given an array `list` and function `func`, iterate through the array applying {func(k, v)} (where `k` is an index, and
`v` is the value at index `k`), and returning whether the function is true for all iterations.
Optional arguments:
* `i`: start index; negative values count from the end of the array
* `j`: end index; negative values count from the end of the array
* `step`: step increment
These must be non-zero integers. The function will determine where to iterate from, whether to iterate forwards or
backwards and by how much, based on these inputs (see examples below for default behaviours).
Examples:
# No values for i, j or step results in forward iteration from the start to the end in steps of 1 (the default).
# step=-1 results in backward iteration from the end to the start in steps of 1.
# i=7, j=3 results in backward iteration from indices 7 to 3 in steps of 1 (i.e. step=-1).
# j=-3 results in forward iteration from the start to the 3rd last index.
# j=-3, step=-1 results in backward iteration from the end to the 3rd last index.]==]
function export.all(t, func, i, j, step)
i, j, step = getIteratorValues(i, j, step, table_len(t))
for k = i, j, step do
if not func(k, t[k]) then
return false
end
end
return true
end
--[==[
Given an array `list` and function `func`, iterate through the array applying {func(k, v)} (where `k` is an index, and
`v` is the value at index `k`), and returning whether the function is true for at least one iteration.
Optional arguments:
* `i`: start index; negative values count from the end of the array
* `j`: end index; negative values count from the end of the array
* `step`: step increment
These must be non-zero integers. The function will determine where to iterate from, whether to iterate forwards or
backwards and by how much, based on these inputs (see examples below for default behaviours).
Examples:
# No values for i, j or step results in forward iteration from the start to the end in steps of 1 (the default).
# step=-1 results in backward iteration from the end to the start in steps of 1.
# i=7, j=3 results in backward iteration from indices 7 to 3 in steps of 1 (i.e. step=-1).
# j=-3 results in forward iteration from the start to the 3rd last index.
# j=-3, step=-1 results in backward iteration from the end to the 3rd last index.]==]
function export.any(t, func, i, j, step)
i, j, step = getIteratorValues(i, j, step, table_len(t))
for k = i, j, step do
if not not (func(k, t[k])) then
return true
end
end
return false
end
--[==[
Joins an array with serial comma and serial conjunction, normally {"and"}. An improvement on {mw.text.listToText},
which doesn't properly handle serial commas.
Options:
* `conj`: Conjunction to use; defaults to {"and"}.
* `punc`: Punctuation to use; default to {","}.
* `dontTag`: Don't tag the serial comma and serial {"and"}. For error messages, in which HTML cannot be used.
* `dump`: Each item will be serialized with {mw.dumpObject}. For warnings and error messages.]==]
function export.serialCommaJoin(seq, options) -- l10n
-- If the `dump` option is set, determine the table length as part of the
-- dump loop, instead of calling `table_len` separately.
local length
if options and options.dump then
local i, item = 1, seq[1]
if item ~= nil then
local dumped = {}
repeat
dumped[i] = dump(item)
i = i + 1
item = seq[i]
until item == nil
seq = dumped
end
length = i - 1
else
length = table_len(seq)
end
if length == 0 then
return ""
elseif length == 1 then
return seq[1]
end
local conj = options and options.conj
if conj == nil then
conj = "and"
end
local is_chinese = (conj == "和" or conj == "或")
local space = is_chinese and "" or " "
if length == 2 then
return seq[1] .. space .. conj .. space .. seq[2]
end
local punc, dont_tag
if options then
punc = options.punc
if punc == nil then
-- 預設用頓號 "、",其他預設用逗號 ","
punc = is_chinese and "、" or ","
end
dont_tag = options.dontTag
else
punc = is_chinese and "、" or ","
end
local comma
if dont_tag then
if is_chinese then
comma = "" -- 漢語通常不使用 Oxford comma
else
comma = ""
conj = " " .. conj .. " "
end
else
if is_chinese then
comma = "" -- 中文不顯示序列逗號
conj = "<span class=\"serial-and\">" .. conj .. "</span>"
else
comma = "<span class=\"serial-comma\">" .. punc .. "</span>"
conj = "<span class=\"serial-and\"> " .. conj .. "</span> "
end
end
local separator = punc .. space
return concat(seq, separator, 1, length - 1) .. comma .. conj .. seq[length]
end
--[==[
A function which works like `table.concat`, but respects any `__index` metamethod. This is useful for data loaded via `mw.loadData`.]==]
function export.concat(t, sep, i, j)
local list, k = {}, 0
while true do
k = k + 1
local v = t[k]
if v == nil then
return concat(list, sep, i, j)
end
list[k] = v
end
end
--[==[
Add a list of aliases for a given key to a table. The aliases must be given as a table.]==]
function export.alias(t, k, aliases)
for _, alias in pairs(aliases) do
t[alias] = t[k]
end
end
local mt = {}
function mt:__index(k)
local submodule = safe_require("Module:table/" .. k)
self[k] = submodule
return submodule
end
return setmetatable(export, mt)
msyzqhhiap2y3kdb1gq2p2cdmhdgg49
Module:Form of/templates
828
1382238
9739589
9350859
2026-04-21T06:04:43Z
TongcyDai
53191
9739589
Scribunto
text/plain
local export = {}
local debug_track_module = "Module:debug/track"
local form_of_module = "Module:form of"
local functions_module = "Module:fun"
local headword_data_module = "Module:headword/data"
local languages_module = "Module:languages"
local load_module = "Module:load"
local parameters_module = "Module:parameters"
local parameter_utilities_module = "Module:parameter utilities"
local parse_interface_module = "Module:parse interface"
local string_utilities_module = "Module:string utilities"
local table_module = "Module:table"
local utilities_module = "Module:utilities"
local insert = table.insert
local ipairs = ipairs
local pairs = pairs
local require = require
local boolean_param = {type = "boolean"}
-- FIXME: Finish [[Module:format utilities]].
-- local allowed_conj_set = require(format_utilities_module).allowed_conj_set_for_join_segments
local allowed_conj_set = {["and"] = true, ["or"] = true, ["and/or"] = true}
--[==[
Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==]
local function debug_track(...)
debug_track = require(debug_track_module)
return debug_track(...)
end
local function decode_entities(...)
decode_entities = require(string_utilities_module).decode_entities
return decode_entities(...)
end
local function extend(...)
extend = require(table_module).extend
return extend(...)
end
local function format_categories(...)
format_categories = require(utilities_module).format_categories
return format_categories(...)
end
local function format_form_of(...)
format_form_of = require(form_of_module).format_form_of
return format_form_of(...)
end
local function get_lang(...)
get_lang = require(languages_module).getByCode
return get_lang(...)
end
local function gsplit(...)
gsplit = require(string_utilities_module).gsplit
return gsplit(...)
end
local function is_callable(...)
is_callable = require(functions_module).is_callable
return is_callable(...)
end
local function load_data(...)
load_data = require(load_module).load_data
return load_data(...)
end
local function parse_inline_modifiers(...)
parse_inline_modifiers = require(parse_interface_module).parse_inline_modifiers
return parse_inline_modifiers(...)
end
local function pattern_escape(...)
pattern_escape = require(string_utilities_module).pattern_escape
return pattern_escape(...)
end
local function process_params(...)
process_params = require(parameters_module).process
return process_params(...)
end
local function safe_load_data(...)
safe_load_data = require(load_module).safe_load_data
return safe_load_data(...)
end
local function split(...)
split = require(string_utilities_module).split
return split(...)
end
local function split_tag_set(...)
split_tag_set = require(form_of_module).split_tag_set
return split_tag_set(...)
end
local function tagged_inflections(...)
tagged_inflections = require(form_of_module).tagged_inflections
return tagged_inflections(...)
end
local function trim(...)
trim = require(string_utilities_module).trim
return trim(...)
end
local function ucfirst(...)
ucfirst = require(string_utilities_module).ucfirst
return ucfirst(...)
end
--[==[
Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==]
local force_cat
local function get_force_cat()
force_cat, get_force_cat = require(form_of_module).force_cat, nil
return force_cat
end
local m_form_of_pos
local function get_m_form_of_pos()
m_form_of_pos, get_m_form_of_pos = load_data(headword_data_module).pos_aliases, nil
return m_form_of_pos
end
local module_prefix
local function get_module_prefix()
module_prefix, get_module_prefix = require(form_of_module).form_of_lang_data_module_prefix, nil
return module_prefix
end
--[==[ intro:
This module contains code that directly implements {{tl|form of}}, {{tl|inflection of}}, and the various other
[[:Category:Form-of templates|form-of templates]]. It is meant to be called directly from templates. See also
[[Module:form of]], which contains the underlying implementing code and is meant to be called from other modules.
]==]
-- Add tracking category for PAGE when called from TEMPLATE. The tracking category linked to is
-- [[Wiktionary:Tracking/form of/TEMPLATE/PAGE]]. If TEMPLATE is omitted, the tracking category is of the form
-- [[Wiktionary:Tracking/form of/PAGE]].
local function track(page, template)
debug_track("form of/" .. (template and template .. "/" or "") .. page)
end
local function get_common_template_params()
return {
-- Named params not controlling link display
["cat"] = {list = true, sublist = "comma without whitespace", flatten = true},
["notext"] = boolean_param,
["sort"] = true,
["enclitic"] = true,
-- FIXME! The following should only be available when withcap=1 in invocation args or when withencap=1 and the
-- language is "en". Before doing that, need to remove all uses of nocap= in other circumstances.
["nocap"] = boolean_param,
["addl"] = true, -- additional text to display at the end, before the closing </span>
["pagename"] = true, -- for testing, etc.
}
end
-- Split TAGSPECS (inflection tag specifications) on SPLIT_REGEX, which
-- may be nil for no splitting.
local function split_inflection_tags(tagspecs, split_regex)
if not split_regex then
return tagspecs
end
local inflection_tags = {}
for _, tagspec in ipairs(tagspecs) do
for tag in gsplit(tagspec, split_regex) do
insert(inflection_tags, tag)
end
end
return inflection_tags
end
local function parse_terms_with_inline_modifiers(paramname, val, param_mods, lang)
local function generate_obj(term)
return {lang = lang, term = decode_entities(term)}
end
return parse_inline_modifiers(val, {
paramname = paramname,
param_mods = param_mods,
generate_obj = generate_obj,
splitchar = ",",
outer_container = {},
})
end
-- Need to do what [[Module:parameters]] does to string arguments from parent_args as we're running this
-- before calling [[Module:parameters]] on parent_args.
local function ine(arg)
if not arg then
return nil
end
arg = trim(arg)
return arg ~= "" and arg or nil
end
local function add_base_lemma_params(parent_args, iargs, params, compat)
-- Check the language-specific data for additional base lemma params. But if there's no language-specific data,
-- attempt any parent varieties as well (i.e. superordinate varieties).
local lang = get_lang(ine(parent_args[compat and "lang" or 1]) or ine(iargs.lang) or "und", nil, true)
while lang do
local langdata = safe_load_data((module_prefix or get_module_prefix()) .. lang:getCode())
if langdata then
local base_lemma_params = langdata.base_lemma_params
if base_lemma_params then
for _, param in ipairs(base_lemma_params) do
params[param.param] = true
end
return base_lemma_params
end
end
lang = lang:getParent()
end
end
--[=[
Modify `params` in-place by adding parameters that control the link to the main entry and any base lemmas. `term_param`
is the number of the param specifying the main entry itself; `term_param` + 1 will be the display text, and `term_param`
+ 2 will be the gloss, unless `no_numbered_gloss` is given. The base lemma parameters are determined by attempting to
load language-specific data for the language of the page; this comes from |lang= if `compat` is given, else from |1=.
]=]
local function add_link_and_base_lemma_params(iargs, parent_args, params, term_param, compat, no_numbered_gloss)
local base_lemma_params
if not iargs.nolink and not iargs.linktext then
-- Numbered params controlling link display
if iargs.with_multiple_parts then
params[term_param] = {list = true, allow_holes = true}
else
params[term_param + 1] = {alias_of = "alt"}
if not no_numbered_gloss then
params[term_param + 2] = {alias_of = "t"}
end
params[term_param] = true
end
base_lemma_params = add_base_lemma_params(parent_args, iargs, params, compat)
end
return base_lemma_params
end
local function handle_withdot_withcap(iargs, params)
local ignored_tracked_params = {}
if iargs.withdot then
params.dot = true
params.nodot = boolean_param
end
if iargs.withcap and iargs.withencap then
error("Internal error: Can specify only one of withcap= and withencap=")
end
if not iargs.withcap then
params.cap = boolean_param
ignored_tracked_params.nocap = iargs.withencap and "non-english" or "always"
end
return ignored_tracked_params
end
--[=[
Construct and return the full definition line for a form-of-type template invocation. `data` is an object with the
following fields:
* `template`: Approximate template name, for debug tracking;
* `iargs`: processed invocation arguments;
* `parent_args`: raw parent args from `frame:getParent().args`;
* `params`: partially constructed params structure of the sort passed to `process()` in [[Module:parameters]], but
without any link params;
* `ignored_tracked_params`: params that are ignored but should be tracked, to be eventually removed;
* `term_param`: the parent argument specifying the main entry;
* `compat`: true if the language code is found in args.lang instead of args[1];
* `base_lemma_params`: if non-nil, a list of base lemma param objects of the sort stored in the language-specific data;
* `do_form_of`: a function of one argument, `lemma_data`, that returns the actual definition-line text and any
language-specific categories. See below.
This function does several things:
# If link parameters are called for (neither `iargs.nolink` nor `iargs.linktext` are given), augment the `params`
structure with separate link parameters.
# Modify the parent args as appropriate if invocation arguments def= or ignore= are given.
# Parse the parent args, both for separate parameter properties and inline modifiers on the term parameter (which may
consist of multiple comma-separated terms).
# Compute categories to add to the page, including language-specific categories and any categories requested by the
invocation or parent args.
# Parse enclitic and extra base lemma parameters.
# Construct the actual text using `do_form_of`.
# Add a terminating period/dot as appropriate, along with the formatted categories.
`do_form_of` takes one argument, `lemma_data`, which looks like this:
{
lang = LANG,
args = {ARG = VALUE, ARG = VALUE, ...},
lemmas = {LEMMA_OBJ, LEMMA_OBJ, ...},
enclitics = {ENCLITIC_OBJ, ENCLITIC_OBJ, ...},
base_lemmas = {BASE_LEMMA_OBJ, BASE_LEMMA_OBJ, ...},
categories = {"CATEGORY", "CATEGORY", ...},
posttext = "POSTTEXT" or nil,
}
where
* LANG is the language code;
* ARGS is the parsed arguments, based on what the user specified;
* LEMMAS is a sequence of objects specifying the main entries/lemmas, as passed to full_link in [[Module:links]];
however, if the invocation argument linktext= is given, it will be a string consisting of that text, and if the
invocation argument nolink= is given, it will be nil;
* ENCLITICS is nil or a sequence of objects specifying the enclitics, as passed to full_link in [[Module:links]];
* BASE_LEMMA_OBJ is a sequence of objects specifying the base lemma(s), which are used when the lemma is itself a
form of another lemma (the base lemma), e.g. a comparative, superlative or participle; each object is of the form
{ paramobj = PARAM_OBJ, lemmas = {LEMMA_OBJ, LEMMA_OBJ, ...} } where PARAM_OBJ describes the properties of the
base lemma parameter (i.e. the relationship between the intermediate and base lemmas) and LEMMA_OBJ is of the same
format of ENCLITIC_OBJ, i.e. an object suitable to be passed to full_link in [[Module:links]]; PARAM_OBJ is of the
format { param = "PARAM", tags = {"TAG", "TAG", ...} } where PARAM is the name of the parameter to
{{inflection of}} etc. that holds the base lemma(s) of the specified relationship and the tags describe the
relationship, such as {"comd"} or {"past", "part"};
* CATEGORIES is the categories to add the page to (consisting of any categories specified in the invocation or
parent args and any tracking categories, but not any additional lang-specific categories that may be added by
{{inflection of}} or similar templates);
* POSTTEXT is text to display at the end of the form-of text, before the final </span> (or at the end of the first
line, before the colon, in a multiline {{infl of}} call).
`do_form_of` should return two arguments:
(1) The actual definition-line text, marked up appropriately with <span>...</span> but without any terminating
period/dot.
(2) Any extra categories to add the page to (other than those that can be derived from parameters specified to the
invocation or parent arguments, which will automatically be added to the page).
]=]
local function construct_form_of_text(data)
local template, iargs, parent_args, params, no_numbered_gloss, do_form_of =
data.template, data.iargs, data.parent_args, data.params, data.no_numbered_gloss, data.do_form_of
local term_param = iargs.term_param
local compat = iargs.lang or parent_args.lang
term_param = term_param or compat and 1 or 2
-- Numbered params
params[compat and "lang" or 1] = {
required = not iargs.lang,
type = "language",
default = iargs.lang or "und"
}
-- Error to catch most uses of old-style parameters for {{contraction of}}. (FIXME: Remove eventually.)
if iargs.with_multiple_parts then
if ine(parent_args[term_param + 2]) and not ine(parent_args[term_param + 1]) and not ine(parent_args.tr2) and not ine(parent_args.ts2)
and not ine(parent_args.t2) and not ine(parent_args.gloss2) and not ine(parent_args.g2)
and not ine(parent_args.alt2) then
error(("You specified a term in %s= and not one in %s=. You probably meant to use t= to specify a gloss instead. "
.. "If you intended to specify two terms, put the second term in %s=."):format(term_param + 2, term_param + 1,
term_param + 1))
end
if not ine(parent_args[term_param + 1]) and not ine(parent_args.alt2) and not ine(parent_args.tr2) and not ine(parent_args.ts2)
and ine(parent_args.g2) then
error(("You specified a gender in g2= but no term in %s=. You were probably trying to specify two genders for "
.. "a single term. To do that, put both genders in g=, comma-separated."):format(term_param + 1))
end
end
local base_lemma_params = add_link_and_base_lemma_params(iargs, parent_args, params, term_param, compat,
no_numbered_gloss)
local ignored_tracked_params = handle_withdot_withcap(iargs, params)
--[=[
Process parent arguments. This is similar to the following:
require("Module:parameters").process(parent_args, params)
but in addition it does the following:
(1) Supplies default values for unspecified parent arguments as specified in DEFAULTS, which consist of specs of the
form "ARG=VALUE". These are added to the parent arguments prior to processing, so boolean and number parameters
will process the value appropriately.
(2) Removes parent arguments specified in IGNORESPECS, which consist either of bare argument names to remove, or
list-argument names to remove of the form "ARG:list".
(3) Tracks the use of any parent arguments specified in TRACKED_PARAMS, which is a set where the keys are arguments
as they exist after processing (hence numeric arguments should be numbers, not strings) and the values should be
boolean true.
]=]--
local defaults = iargs.def
local ignorespecs = iargs.ignore
if defaults[1] or ignorespecs[1] then
local new_parent_args = {}
for _, default in ipairs(defaults) do
local defparam, defval = default:match("^(.-)=(.*)$")
if not defparam then
error("Bad default spec " .. default)
end
new_parent_args[defparam] = defval
end
local params_to_ignore = {}
local numbered_list_params_to_ignore = {}
local named_list_params_to_ignore = {}
for _, ignorespec in ipairs(ignorespecs) do
for ignore in gsplit(ignorespec, ",") do
local param = ignore:match("^(.*):list$")
if param then
if param:match("^%d+$") then
insert(numbered_list_params_to_ignore, tonumber(param))
else
insert(named_list_params_to_ignore, "^" .. pattern_escape(param) .. "%d*$")
end
else
if ignore:match("^%d+$") then
ignore = tonumber(ignore)
end
params_to_ignore[ignore] = true
end
end
end
for k, v in pairs(parent_args) do
if not params_to_ignore[k] then
local ignore_me = false
if type(k) == "number" then
for _, lparam in ipairs(numbered_list_params_to_ignore) do
if k >= lparam then
ignore_me = true
break
end
end
else
for _, lparam in ipairs(named_list_params_to_ignore) do
if k:match(lparam) then
ignore_me = true
break
end
end
end
if not ignore_me then
new_parent_args[k] = v
end
end
end
parent_args = new_parent_args
end
local param_mods_with_conj, param_mods_without_conj
local function get_param_mods(with_conj)
if with_conj then
if not param_mods_with_conj then
param_mods_with_conj = require(parameter_utilities_module).construct_param_mods {
{group = {"link", "q", "l", "ref"}},
{param = "conj", set = allowed_conj_set, overall = true},
}
end
return param_mods_with_conj
else
if not param_mods_without_conj then
param_mods_without_conj = require(parameter_utilities_module).construct_param_mods {
{group = {"link", "q", "l", "ref"}},
-- Override lit= to have a separate overall value
{param = "lit", separate_no_index = true},
}
end
return param_mods_without_conj
end
end
local terms, args
if iargs.nolink or iargs.linktext then
args = process_params(parent_args, params)
else
local m_param_utils = require(parameter_utilities_module)
if iargs.with_multiple_parts then
terms, args = m_param_utils.parse_list_with_inline_modifiers_and_separate_params {
params = params,
param_mods = get_param_mods(false),
raw_args = parent_args,
termarg = term_param,
track_module = "form of" .. (template and "/" .. template or ""),
lang = compat and "lang" or 1,
sc = "sc.default",
parse_lang_prefix = true,
default_separator = " +‎ ",
special_separators = {[";"] = " or "},
}
else
terms, args = m_param_utils.parse_term_with_inline_modifiers_and_separate_params {
params = params,
param_mods = get_param_mods("with conj"),
raw_args = parent_args,
termarg = term_param,
track_module = "form of" .. (template and "/" .. template or ""),
lang = compat and "lang" or 1,
sc = "sc",
parse_lang_prefix = true,
make_separate_g_into_list = true,
splitchar = ",",
subitem_param_handling = "last",
}
end
end
local lang = args[compat and "lang" or 1]
-- Tracking for certain user-specified params. This is generally used for
-- parameters that we accept but ignore, so that we can eventually remove
-- all uses of these params and stop accepting them.
if ignored_tracked_params then
for ignored_tracked_param, condition in pairs(ignored_tracked_params) do
if parent_args[ignored_tracked_param] and (condition ~= "non-english" or lang:getCode() ~= "en") then
track("arg/" .. ignored_tracked_param, template)
track("arg/" .. ignored_tracked_param)
end
end
end
-- Determine categories for the page, including tracking categories
local categories = {}
-- l10n
local function add_lang_cat(cat)
if cat ~= "" then
local prefix = lang:getCanonicalName()
local rindex_de = mw.ustring.find(cat, '的[^的]*$')
if rindex_de then
insert(categories, mw.ustring.sub(cat, 1, rindex_de) .. prefix .. mw.ustring.sub(cat, rindex_de + 1))
else
insert(categories, prefix .. cat)
end
end
end
if not args.nocat then
for _, cat in ipairs(iargs.cat) do
add_lang_cat(cat)
end
end
for _, cat in ipairs(args.cat) do
add_lang_cat(cat)
end
-- Format the link, preceding text and categories
local function add_term_tracking_categories(term)
-- add tracking category if term is same as page title
if term and mw.loadData("Module:headword/data").pagename == lang:stripDiacritics(term) then
insert(categories, "鏈接至自身的形式")
end
-- maybe add tracking category if primary entry doesn't exist (this is an
-- expensive call so we don't do it by default)
if iargs.noprimaryentrycat and term and mw.title.getCurrentTitle().nsText == ""
and not mw.title.new(term):getContent() then
local cat_name = iargs.noprimaryentrycat
local prefix = lang:getFullName()
if cat_name:find("的") then
insert(categories, cat_name:gsub("的", "的" .. prefix))
else
insert(categories, prefix .. cat_name)
end
end
end
local lemmas
if iargs.nolink then
lemmas = nil
elseif iargs.linktext then
lemmas = iargs.linktext
else
if iargs.with_multiple_parts then
lemmas = terms
else
lemmas = terms.terms
end
if not lemmas[1] then
if mw.title.getCurrentTitle().nsText == "Template" then
lemmas[1] = {
lang = lang,
term = "term"
}
else
error("No linked-to term specified")
end
end
for _, termobj in ipairs(lemmas) do
if termobj.term then
add_term_tracking_categories(termobj.term)
end
-- NOTE: Formerly, template arg sc= overrode inline modifier <sc:...>, which seems backwards, so I've
-- changed it. Hopefully nothing depended on the old behavior.
end
end
local enclitics, enclitic_conj
if args.enclitic then
local enclitics_obj = parse_terms_with_inline_modifiers("enclitic", args.enclitic, get_param_mods("with conj"),
lang)
enclitics = enclitics_obj.terms
enclitic_conj = enclitics_obj.conj
end
local base_lemmas = {}
if base_lemma_params then
for _, base_lemma_param_obj in ipairs(base_lemma_params) do
local param = base_lemma_param_obj.param
if args[param] then
local base_lemmas_obj = parse_terms_with_inline_modifiers(param, args[param],
get_param_mods("with conj"), lang)
insert(base_lemmas, {
paramobj = base_lemma_param_obj,
lemmas = base_lemmas_obj.terms,
conj = base_lemmas_obj.conj,
})
end
end
end
local posttext = iargs.posttext
local addl = args.addl
if addl then
posttext = posttext or ""
if addl:find("^[;:]") then
posttext = posttext .. addl
elseif addl:find("^_") then
posttext = posttext .. " " .. addl:sub(2)
else
posttext = posttext .. ", " .. addl
end
end
local conj
if iargs.with_multiple_parts then
conj = false -- signals to use 'separator' field
else
conj = terms and terms.conj or iargs.conj
end
local lemma_data = {
lang = lang,
args = args,
lemmas = lemmas,
conj = conj,
enclitics = enclitics,
enclitic_conj = enclitic_conj,
base_lemmas = base_lemmas,
categories = categories,
posttext = posttext,
lit = iargs.with_multiple_parts and args.lit.default or nil,
}
local form_of_text, lang_cats = do_form_of(lemma_data)
extend(lemma_data.categories, lang_cats)
local text = form_of_text .. (
args.nodot and "" or args.dot or iargs.withdot and "。" or ""
)
if not lemma_data.categories[1] then
return text
end
return text .. format_categories(lemma_data.categories, lemma_data.lang, args.sort,
-- If lemma_is_sort_key is given, supply the first lemma term as the sort base if possible. If sort= is given,
-- it will override the base; otherwise, the base will be converted appropriately to a sort key using the
-- same algorithm applied to pagenames.
iargs.lemma_is_sort_key and type(lemma_data.lemmas) == "table" and lemma_data.lemmas[1].term,
-- Supply the first lemma's script for sort key computation.
force_cat or get_force_cat(), type(lemma_data.lemmas) == "table" and lemma_data.lemmas[1].sc)
end
-- Invocation parameters shared between form_of_t(), tagged_form_of_t() and inflection_of_t(). `calling_func` is the
-- invoking function ("form_of_t", "tagged_form_of_t" or "inflection_of_t"), for handling parameters shared by two but
-- not all three invoking functions.
local function get_common_invocation_params(calling_func)
local iparams = {
["term_param"] = {type = "number"},
["lang"] = true, -- To be used as the default code in params.
["sc"] = {type = "script"},
["cat"] = {list = true, sublist = "comma without whitespace", flatten = true},
["ignore"] = {list = true},
["def"] = {list = true},
["conj"] = {set = allowed_conj_set, default = "and"},
["withcap"] = boolean_param,
["withencap"] = boolean_param,
["withdot"] = boolean_param,
["nolink"] = boolean_param,
["linktext"] = true,
["posttext"] = true,
["noprimaryentrycat"] = true,
["lemma_is_sort_key"] = true,
}
if calling_func ~= "inflection_of_t" then
iparams.with_multiple_parts = boolean_param
end
return iparams
end
local function should_ucfirst_text(args, iargs, lang)
local code = lang:getCode()
return args.cap or (iargs.withcap or iargs.withencap and code == "en" or code == "mul") and not args.nocap
end
--[==[
Function that implements {{tl|form of}} and the various more specific form-of templates (but not {{tl|inflection of}}
or templates that take tagged inflection parameters).
Invocation params:
; {{para|1|req=1}}
: Text to display before the link.
; {{para|term_param}}
: Numbered param holding the term linked to. Other numbered params come after. Defaults to 1 if invocation or template
param {{para|lang}} is present, otherwise 2.
; {{para|with_multiple_parts|1}}
: If specified, higher numbered parameters above the numbered param in {{para|term_param}} specify additional parts out
of which the term was constructed, for use by templates like {{tl|contraction of}}. (If not specified, the parameter
at <code><var>term_param</var> + 1</code> is the display form, same as {{para|alt}}, and the parameter at
at <code><var>term_param</var> + 2</code> is the gloss, same as {{para|t}}.)
; {{para|lang}}
: Default language code for language-specific templates. If specified, no language code needs to be specified, and if
specified it needs to be set using {{para|lang}}, not {{para|1}}.
; {{para|sc}}
: Default script code for language-specific templates. The script code can still be overridden using template param
{{para|sc}}.
; {{para|cat}}, {{para|cat2}}, ...:
: Categories to place the page into. The language name will automatically be prepended. Note that there is also a
template param {{para|cat}} to specify categories at the template level. Use of {{para|nocat}} disables categorization
of categories specified using invocation param {{para|cat}}, but not using template param {{para|cat}}. A single param
can specify multiple comma-separated categories if no space follows the comma.
; {{para|ignore}}, {{para|ignore2}}, ...:
: One or more template params to silently accept and ignore. Useful e.g. when the template takes additional parameters
such as {{para|from}} or {{para|POS}}. Each value is a comma-separated list of either bare parameter names or
specifications of the form `PARAM:list` to specify that the parameter is a list parameter.
; {{para|def}}, {{para|def2}}, ...:
: One or more default values to supply for template args. For example, specifying {{para|def|2=tr=-}} causes the default
for template param {{para|tr}} to be `-`. Actual template params override these defaults.
; {{para|withcap|1}}
: Capitalize the first character of the text preceding the link, unless template param {{para|nocap}} is given.
; {{para|withencap|1}}
: Capitalize the first character of the text preceding the link if the language is English and template param
{{para|nocap}} is not given.
; {{para|withdot|1}}
: Add a final period after the link, unless template param {{para|nodot}} is given to suppress the period, or
{{para|dot}} is given to specify an alternative punctuation character.
; {{para|nolink|1}}
: Suppress the display of the link. If specified, none of the template params that control the link
({{para|<var>term_param</var>}}, {{para|<var>term_param</var> + 1}}, {{para|<var>term_param</var> + 2}}, {{para|t}},
{{para|gloss}}, {{para|sc}}, {{para|tr}}, {{para|ts}}, {{para|pos}}, {{para|g}}, {{para|id}}, {{para|lit}}) will be
available. If the calling template uses any of these parameters, they must be ignored using {{para|ignore}}.
{{para|linktext}}
: Override the display of the link with the specified text. This is useful if a custom template is available to format
the link (e.g. in Hebrew, Chinese and Japanese). If specified, none of the template params that control the link
({{para|<var>term_param</var>}}, {{para|<var>term_param</var> + 1}}, {{para|<var>term_param</var> + 2}}, {{para|t}},
{{para|gloss}}, {{para|sc}}, {{para|tr}}, {{para|ts}}, {{para|pos}}, {{para|g}}, {{para|id}}, {{para|lit}}) will be
available. If the calling template uses any of these parameters, they must be ignored using {{para|ignore}}.
; {{para|posttext}}
: Additional text to display directly after the formatted link, before any terminating period/dot and inside of
`<span class='use-with-mention'>`.
; {{para|noprimaryentrycat}}
: Category to add the page to if the primary entry linked to doesn't exist. The language name will automatically be
prepended.
; {{para|lemma_is_sort_key|1}}
: If the user didn't specify a sort key, use the lemma as the sort key (instead of the page itself).
]==]
function export.form_of_t(frame)
local iparams = get_common_invocation_params("form_of_t")
iparams[1] = {required = true}
local iargs = process_params(frame.args, iparams)
local parent_args = frame:getParent().args
local params = get_common_template_params()
if next(iargs.cat) then
params.nocat = boolean_param
end
return construct_form_of_text {
template = "form-of-t",
iargs = iargs,
parent_args = parent_args,
params = params,
do_form_of = function(lemma_data)
local args = lemma_data.args
local text
if args.notext then
text = ""
else
text = iargs[1]
if should_ucfirst_text(args, iargs, lemma_data.lang) then
text = ucfirst(text)
end
end
-- This returns two values, which we pass up to the caller.
return format_form_of {
lang = lemma_data.lang, text = text, lemmas = lemma_data.lemmas, conj = lemma_data.conj,
enclitics = lemma_data.enclitics, base_lemmas = lemma_data.base_lemmas, lemma_face = "term",
lit = lemma_data.lit, posttext = lemma_data.posttext
}
end
}
end
--[=[
Construct and return the full definition line for a form-of-type template invocation that is based on inflection tags.
This is a wrapper around construct_form_of_text() and takes the following arguments: processed invocation arguments
IARGS, processed parent arguments ARGS, TERM_PARAM (the parent argument specifying the main entry), COMPAT (true if the
language code is found in args.lang instead of args[1]), and TAGS, the list of (non-canonicalized) inflection tags.
It returns that actual definition-line text including terminating period/full-stop, formatted categories, etc. and
should be directly returned as the template function's return value.
]=]
local function construct_tagged_form_of_text(data)
local template, iargs, parent_args, params, no_numbered_gloss, tags =
data.template, data.iargs, data.parent_args, data.params, data.no_numbered_gloss, data.tags
-- Named params not controlling link display
-- Always included because lang-specific categories may be added
params.nocat = boolean_param
params.p = true
params.POS = {alias_of = "p"}
return construct_form_of_text {
template = template,
iargs = iargs,
parent_args = parent_args,
params = params,
no_numbered_gloss = no_numbered_gloss,
do_form_of = function(lemma_data)
local args = lemma_data.args
if is_callable(tags) then
tags = tags(args)
end
-- NOTE: tagged_inflections returns two values, so we do too.
return tagged_inflections {
lang = lemma_data.lang,
tags = tags,
lemmas = lemma_data.lemmas,
conj = lemma_data.conj,
enclitics = lemma_data.enclitics,
enclitic_conj = lemma_data.enclitic_conj,
base_lemmas = lemma_data.base_lemmas,
lemma_face = "term",
POS = args.p,
pagename = args.pagename,
-- Set no_format_categories because we do it ourselves in construct_form_of_text().
no_format_categories = true,
nocat = args.nocat,
notext = args.notext,
capfirst = should_ucfirst_text(args, iargs, lemma_data.lang),
posttext = lemma_data.posttext,
}
end
}
end
--[==[
Function that implements form-of templates that are defined by specific tagged inflections (typically a template
referring to a non-lemma inflection, such as {{tl|plural of}}). This works exactly like {form_of_t()} except that the
"form of" text displayed before the link is based off of a pre-specified set of inflection tags (which will be
appropriately linked to the glossary) instead of arbitrary text. From the user's perspective, there is no difference
between templates implemented using {form_of_t()} and {tagged_form_of_t()}; they accept exactly the same parameters and
work the same. See also {inflection_of_t()} below, which is intended for templates with user-specified inflection tags.
Invocation params:
; {{para|1|req=1}}, {{para|2}}, ...
: One or more inflection tags describing the inflection in question.
; {{para|split_tags}}
: If specified, character to split specified inflection tags on. This allows multiple tags to be included in a single
argument, simplifying template code.
; {{para|term_param}}
; {{para|with_multiple_parts|1}}
; {{para|lang}}
; {{para|sc}}
; {{para|cat}}, {{para|cat2}}, ...
; {{para|ignore}}, {{para|ignore2}}, ...
; {{para|def}}, {{para|def2}}, ...
; {{para|withcap|1}}
; {{para|withencap|1}}
; {{para|withdot|1}}
; {{para|nolink|1}}
; {{para|linktext}}
; {{para|posttext}}
; {{para|noprimaryentrycat}}
; {{para|lemma_is_sort_key|1}}
: All of these are the same as in {form_of_t()}.
]==]
function export.tagged_form_of_t(frame)
local iparams = get_common_invocation_params("tagged_form_of_t")
iparams[1] = {list = true, required = true}
iparams.split_tags = true
local iargs = process_params(frame.args, iparams)
local parent_args = frame:getParent().args
local params = get_common_template_params()
return construct_tagged_form_of_text {
template = "tagged-form-of-t",
iargs = iargs,
parent_args = parent_args,
params = params,
tags = split_inflection_tags(iargs[1], iargs.split_tags),
}
end
--[==[
Function that implements {{tl|inflection of}} and certain semi-specific variants, such as {{tl|participle of}} and
{{tl|past participle form of}}. This function is intended for templates that allow the user to specify a set of
inflection tags.
It works similarly to {form_of_t()} and {tagged_form_of_t()} except that the calling convention for the calling
template is
: { {{TEMPLATE|LANG|MAIN_ENTRY_LINK|MAIN_ENTRY_DISPLAY_TEXT|TAG|TAG|...}}}
instead of
: { {{TEMPLATE|LANG|MAIN_ENTRY_LINK|MAIN_ENTRY_DISPLAY_TEXT|GLOSS}}}
Note that there isn't a numbered parameter for the gloss, but it can still be specified using {{para|t}} or
{{para|gloss}}.
Invocation params:
; {{para|preinfl}}, {{para|preinfl2}}, ...
: Extra inflection tags to automatically prepend to the tags specified by the template.
; {{para|postinfl}}, {{para|postinfl2}}, ...
: Extra inflection tags to automatically append to the tags specified by the template. Used for example by
{{tl|past participle form of}} to add the tags `of the|past|p` onto the user-specified tags, which indicate which
past participle form the page refers to.
; {{para|split_tags}}
: If specified, character to split specified inflection tags on. This allows multiple tags to be included in a single
argument, simplifying template code. Note that this applies *ONLY* to inflection tags specified in the invocation
arguments using {{para|preinfl}} or {{para|postinfl}}, not to user-specified inflection tags.
; {{para|term_param}}
; {{para|lang}}
; {{para|sc}}
; {{para|cat}}, {{para|cat2}}, ...
; {{para|ignore}}, {{para|ignore2}}, ...
; {{para|def}}, {{para|def2}}, ...
; {{para|withcap|1}}
; {{para|withencap|1}}
; {{para|withdot|1}}
; {{para|nolink|1}}
; {{para|linktext}}
; {{para|posttext}}
; {{para|noprimaryentrycat}}
; {{para|lemma_is_sort_key|1}}
: All of these are the same as in {form_of_t()}.
]==]
function export.inflection_of_t(frame)
local iparams = get_common_invocation_params("inflection_of_t")
iparams.preinfl = {list = true}
iparams.postinfl = {list = true}
iparams.split_tags = true
local iargs = process_params(frame.args, iparams)
local parent_args = frame:getParent().args
local params = get_common_template_params()
local compat = iargs.lang or parent_args.lang
local tagsind = (iargs.term_param or compat and 1 or 2) + 2
params[tagsind] = {list = true,
-- at least one inflection tag is required unless preinfl or postinfl tags are given
required = #iargs.preinfl == 0 and #iargs.postinfl == 0}
return construct_tagged_form_of_text {
template = "inflection-of-t",
iargs = iargs,
parent_args = parent_args,
params = params,
no_numbered_gloss = true,
tags = function(args)
local infls
if not next(iargs.preinfl) and not next(iargs.postinfl) then
-- If no preinfl or postinfl tags, just use the user-specified tags directly.
infls = args[tagsind]
else
-- Otherwise, we need to prepend the preinfl tags and postpend the postinfl tags. If there's only one tag set
-- (no semicolon), it's easier. Since this is common, we optimize for it.
infls = {}
local saw_semicolon = false
for _, infl in ipairs(args[tagsind]) do
if infl == ";" then
saw_semicolon = true
break
end
end
local split_preinfl = split_inflection_tags(iargs.preinfl, iargs.split_tags)
local split_postinfl = split_inflection_tags(iargs.postinfl, iargs.split_tags)
if not saw_semicolon then
extend(infls, split_preinfl)
extend(infls, args[tagsind])
extend(infls, split_postinfl)
else
local groups = split_tag_set(args[tagsind])
for _, group in ipairs(groups) do
if #infls > 0 then
insert(infls, ";")
end
extend(infls, split_preinfl)
extend(infls, group)
extend(infls, split_postinfl)
end
end
end
return infls
end,
}
end
--[==[
Normalize a part-of-speech tag given a possible abbreviation (passed in as {{para|1}} of the invocation args). If the
abbreviation isn't recognized, the original POS tag is returned. If no POS tag is passed in, return the value of
invocation arg {{para|default}}.
]==]
function export.normalize_pos(frame)
local iparams = {
[1] = true,
["default"] = true,
}
local iargs = process_params(frame.args, iparams)
if not iargs[1] and not iargs.default then
error("Either 1= or default= must be given in the invocation args")
end
if not iargs[1] then
return iargs.default
end
return (m_form_of_pos or get_m_form_of_pos())[iargs[1]] or iargs[1]
end
return export
rjmy9xi6e52havcynum8vhyxtcrdxrc
9739591
9739589
2026-04-21T06:05:33Z
TongcyDai
53191
9739591
Scribunto
text/plain
local export = {}
local debug_track_module = "Module:debug/track"
local form_of_module = "Module:form of"
local functions_module = "Module:fun"
local headword_data_module = "Module:headword/data"
local languages_module = "Module:languages"
local load_module = "Module:load"
local parameters_module = "Module:parameters"
local parameter_utilities_module = "Module:parameter utilities"
local parse_interface_module = "Module:parse interface"
local string_utilities_module = "Module:string utilities"
local table_module = "Module:table"
local utilities_module = "Module:utilities"
local insert = table.insert
local ipairs = ipairs
local pairs = pairs
local require = require
local boolean_param = {type = "boolean"}
-- FIXME: Finish [[Module:format utilities]].
-- local allowed_conj_set = require(format_utilities_module).allowed_conj_set_for_join_segments
local allowed_conj_set = {["和"] = true, ["或"] = true, ["和/或"] = true, ["and"] = true, ["or"] = true, ["and/or"] = true}
--[==[
Loaders for functions in other modules, which overwrite themselves with the target function when called. This ensures modules are only loaded when needed, retains the speed/convenience of locally-declared pre-loaded functions, and has no overhead after the first call, since the target functions are called directly in any subsequent calls.]==]
local function debug_track(...)
debug_track = require(debug_track_module)
return debug_track(...)
end
local function decode_entities(...)
decode_entities = require(string_utilities_module).decode_entities
return decode_entities(...)
end
local function extend(...)
extend = require(table_module).extend
return extend(...)
end
local function format_categories(...)
format_categories = require(utilities_module).format_categories
return format_categories(...)
end
local function format_form_of(...)
format_form_of = require(form_of_module).format_form_of
return format_form_of(...)
end
local function get_lang(...)
get_lang = require(languages_module).getByCode
return get_lang(...)
end
local function gsplit(...)
gsplit = require(string_utilities_module).gsplit
return gsplit(...)
end
local function is_callable(...)
is_callable = require(functions_module).is_callable
return is_callable(...)
end
local function load_data(...)
load_data = require(load_module).load_data
return load_data(...)
end
local function parse_inline_modifiers(...)
parse_inline_modifiers = require(parse_interface_module).parse_inline_modifiers
return parse_inline_modifiers(...)
end
local function pattern_escape(...)
pattern_escape = require(string_utilities_module).pattern_escape
return pattern_escape(...)
end
local function process_params(...)
process_params = require(parameters_module).process
return process_params(...)
end
local function safe_load_data(...)
safe_load_data = require(load_module).safe_load_data
return safe_load_data(...)
end
local function split(...)
split = require(string_utilities_module).split
return split(...)
end
local function split_tag_set(...)
split_tag_set = require(form_of_module).split_tag_set
return split_tag_set(...)
end
local function tagged_inflections(...)
tagged_inflections = require(form_of_module).tagged_inflections
return tagged_inflections(...)
end
local function trim(...)
trim = require(string_utilities_module).trim
return trim(...)
end
local function ucfirst(...)
ucfirst = require(string_utilities_module).ucfirst
return ucfirst(...)
end
--[==[
Loaders for objects, which load data (or some other object) into some variable, which can then be accessed as "foo or get_foo()", where the function get_foo sets the object to "foo" and then returns it. This ensures they are only loaded when needed, and avoids the need to check for the existence of the object each time, since once "foo" has been set, "get_foo" will not be called again.]==]
local force_cat
local function get_force_cat()
force_cat, get_force_cat = require(form_of_module).force_cat, nil
return force_cat
end
local m_form_of_pos
local function get_m_form_of_pos()
m_form_of_pos, get_m_form_of_pos = load_data(headword_data_module).pos_aliases, nil
return m_form_of_pos
end
local module_prefix
local function get_module_prefix()
module_prefix, get_module_prefix = require(form_of_module).form_of_lang_data_module_prefix, nil
return module_prefix
end
--[==[ intro:
This module contains code that directly implements {{tl|form of}}, {{tl|inflection of}}, and the various other
[[:Category:Form-of templates|form-of templates]]. It is meant to be called directly from templates. See also
[[Module:form of]], which contains the underlying implementing code and is meant to be called from other modules.
]==]
-- Add tracking category for PAGE when called from TEMPLATE. The tracking category linked to is
-- [[Wiktionary:Tracking/form of/TEMPLATE/PAGE]]. If TEMPLATE is omitted, the tracking category is of the form
-- [[Wiktionary:Tracking/form of/PAGE]].
local function track(page, template)
debug_track("form of/" .. (template and template .. "/" or "") .. page)
end
local function get_common_template_params()
return {
-- Named params not controlling link display
["cat"] = {list = true, sublist = "comma without whitespace", flatten = true},
["notext"] = boolean_param,
["sort"] = true,
["enclitic"] = true,
-- FIXME! The following should only be available when withcap=1 in invocation args or when withencap=1 and the
-- language is "en". Before doing that, need to remove all uses of nocap= in other circumstances.
["nocap"] = boolean_param,
["addl"] = true, -- additional text to display at the end, before the closing </span>
["pagename"] = true, -- for testing, etc.
}
end
-- Split TAGSPECS (inflection tag specifications) on SPLIT_REGEX, which
-- may be nil for no splitting.
local function split_inflection_tags(tagspecs, split_regex)
if not split_regex then
return tagspecs
end
local inflection_tags = {}
for _, tagspec in ipairs(tagspecs) do
for tag in gsplit(tagspec, split_regex) do
insert(inflection_tags, tag)
end
end
return inflection_tags
end
local function parse_terms_with_inline_modifiers(paramname, val, param_mods, lang)
local function generate_obj(term)
return {lang = lang, term = decode_entities(term)}
end
return parse_inline_modifiers(val, {
paramname = paramname,
param_mods = param_mods,
generate_obj = generate_obj,
splitchar = ",",
outer_container = {},
})
end
-- Need to do what [[Module:parameters]] does to string arguments from parent_args as we're running this
-- before calling [[Module:parameters]] on parent_args.
local function ine(arg)
if not arg then
return nil
end
arg = trim(arg)
return arg ~= "" and arg or nil
end
local function add_base_lemma_params(parent_args, iargs, params, compat)
-- Check the language-specific data for additional base lemma params. But if there's no language-specific data,
-- attempt any parent varieties as well (i.e. superordinate varieties).
local lang = get_lang(ine(parent_args[compat and "lang" or 1]) or ine(iargs.lang) or "und", nil, true)
while lang do
local langdata = safe_load_data((module_prefix or get_module_prefix()) .. lang:getCode())
if langdata then
local base_lemma_params = langdata.base_lemma_params
if base_lemma_params then
for _, param in ipairs(base_lemma_params) do
params[param.param] = true
end
return base_lemma_params
end
end
lang = lang:getParent()
end
end
--[=[
Modify `params` in-place by adding parameters that control the link to the main entry and any base lemmas. `term_param`
is the number of the param specifying the main entry itself; `term_param` + 1 will be the display text, and `term_param`
+ 2 will be the gloss, unless `no_numbered_gloss` is given. The base lemma parameters are determined by attempting to
load language-specific data for the language of the page; this comes from |lang= if `compat` is given, else from |1=.
]=]
local function add_link_and_base_lemma_params(iargs, parent_args, params, term_param, compat, no_numbered_gloss)
local base_lemma_params
if not iargs.nolink and not iargs.linktext then
-- Numbered params controlling link display
if iargs.with_multiple_parts then
params[term_param] = {list = true, allow_holes = true}
else
params[term_param + 1] = {alias_of = "alt"}
if not no_numbered_gloss then
params[term_param + 2] = {alias_of = "t"}
end
params[term_param] = true
end
base_lemma_params = add_base_lemma_params(parent_args, iargs, params, compat)
end
return base_lemma_params
end
local function handle_withdot_withcap(iargs, params)
local ignored_tracked_params = {}
if iargs.withdot then
params.dot = true
params.nodot = boolean_param
end
if iargs.withcap and iargs.withencap then
error("Internal error: Can specify only one of withcap= and withencap=")
end
if not iargs.withcap then
params.cap = boolean_param
ignored_tracked_params.nocap = iargs.withencap and "non-english" or "always"
end
return ignored_tracked_params
end
--[=[
Construct and return the full definition line for a form-of-type template invocation. `data` is an object with the
following fields:
* `template`: Approximate template name, for debug tracking;
* `iargs`: processed invocation arguments;
* `parent_args`: raw parent args from `frame:getParent().args`;
* `params`: partially constructed params structure of the sort passed to `process()` in [[Module:parameters]], but
without any link params;
* `ignored_tracked_params`: params that are ignored but should be tracked, to be eventually removed;
* `term_param`: the parent argument specifying the main entry;
* `compat`: true if the language code is found in args.lang instead of args[1];
* `base_lemma_params`: if non-nil, a list of base lemma param objects of the sort stored in the language-specific data;
* `do_form_of`: a function of one argument, `lemma_data`, that returns the actual definition-line text and any
language-specific categories. See below.
This function does several things:
# If link parameters are called for (neither `iargs.nolink` nor `iargs.linktext` are given), augment the `params`
structure with separate link parameters.
# Modify the parent args as appropriate if invocation arguments def= or ignore= are given.
# Parse the parent args, both for separate parameter properties and inline modifiers on the term parameter (which may
consist of multiple comma-separated terms).
# Compute categories to add to the page, including language-specific categories and any categories requested by the
invocation or parent args.
# Parse enclitic and extra base lemma parameters.
# Construct the actual text using `do_form_of`.
# Add a terminating period/dot as appropriate, along with the formatted categories.
`do_form_of` takes one argument, `lemma_data`, which looks like this:
{
lang = LANG,
args = {ARG = VALUE, ARG = VALUE, ...},
lemmas = {LEMMA_OBJ, LEMMA_OBJ, ...},
enclitics = {ENCLITIC_OBJ, ENCLITIC_OBJ, ...},
base_lemmas = {BASE_LEMMA_OBJ, BASE_LEMMA_OBJ, ...},
categories = {"CATEGORY", "CATEGORY", ...},
posttext = "POSTTEXT" or nil,
}
where
* LANG is the language code;
* ARGS is the parsed arguments, based on what the user specified;
* LEMMAS is a sequence of objects specifying the main entries/lemmas, as passed to full_link in [[Module:links]];
however, if the invocation argument linktext= is given, it will be a string consisting of that text, and if the
invocation argument nolink= is given, it will be nil;
* ENCLITICS is nil or a sequence of objects specifying the enclitics, as passed to full_link in [[Module:links]];
* BASE_LEMMA_OBJ is a sequence of objects specifying the base lemma(s), which are used when the lemma is itself a
form of another lemma (the base lemma), e.g. a comparative, superlative or participle; each object is of the form
{ paramobj = PARAM_OBJ, lemmas = {LEMMA_OBJ, LEMMA_OBJ, ...} } where PARAM_OBJ describes the properties of the
base lemma parameter (i.e. the relationship between the intermediate and base lemmas) and LEMMA_OBJ is of the same
format of ENCLITIC_OBJ, i.e. an object suitable to be passed to full_link in [[Module:links]]; PARAM_OBJ is of the
format { param = "PARAM", tags = {"TAG", "TAG", ...} } where PARAM is the name of the parameter to
{{inflection of}} etc. that holds the base lemma(s) of the specified relationship and the tags describe the
relationship, such as {"comd"} or {"past", "part"};
* CATEGORIES is the categories to add the page to (consisting of any categories specified in the invocation or
parent args and any tracking categories, but not any additional lang-specific categories that may be added by
{{inflection of}} or similar templates);
* POSTTEXT is text to display at the end of the form-of text, before the final </span> (or at the end of the first
line, before the colon, in a multiline {{infl of}} call).
`do_form_of` should return two arguments:
(1) The actual definition-line text, marked up appropriately with <span>...</span> but without any terminating
period/dot.
(2) Any extra categories to add the page to (other than those that can be derived from parameters specified to the
invocation or parent arguments, which will automatically be added to the page).
]=]
local function construct_form_of_text(data)
local template, iargs, parent_args, params, no_numbered_gloss, do_form_of =
data.template, data.iargs, data.parent_args, data.params, data.no_numbered_gloss, data.do_form_of
local term_param = iargs.term_param
local compat = iargs.lang or parent_args.lang
term_param = term_param or compat and 1 or 2
-- Numbered params
params[compat and "lang" or 1] = {
required = not iargs.lang,
type = "language",
default = iargs.lang or "und"
}
-- Error to catch most uses of old-style parameters for {{contraction of}}. (FIXME: Remove eventually.)
if iargs.with_multiple_parts then
if ine(parent_args[term_param + 2]) and not ine(parent_args[term_param + 1]) and not ine(parent_args.tr2) and not ine(parent_args.ts2)
and not ine(parent_args.t2) and not ine(parent_args.gloss2) and not ine(parent_args.g2)
and not ine(parent_args.alt2) then
error(("You specified a term in %s= and not one in %s=. You probably meant to use t= to specify a gloss instead. "
.. "If you intended to specify two terms, put the second term in %s=."):format(term_param + 2, term_param + 1,
term_param + 1))
end
if not ine(parent_args[term_param + 1]) and not ine(parent_args.alt2) and not ine(parent_args.tr2) and not ine(parent_args.ts2)
and ine(parent_args.g2) then
error(("You specified a gender in g2= but no term in %s=. You were probably trying to specify two genders for "
.. "a single term. To do that, put both genders in g=, comma-separated."):format(term_param + 1))
end
end
local base_lemma_params = add_link_and_base_lemma_params(iargs, parent_args, params, term_param, compat,
no_numbered_gloss)
local ignored_tracked_params = handle_withdot_withcap(iargs, params)
--[=[
Process parent arguments. This is similar to the following:
require("Module:parameters").process(parent_args, params)
but in addition it does the following:
(1) Supplies default values for unspecified parent arguments as specified in DEFAULTS, which consist of specs of the
form "ARG=VALUE". These are added to the parent arguments prior to processing, so boolean and number parameters
will process the value appropriately.
(2) Removes parent arguments specified in IGNORESPECS, which consist either of bare argument names to remove, or
list-argument names to remove of the form "ARG:list".
(3) Tracks the use of any parent arguments specified in TRACKED_PARAMS, which is a set where the keys are arguments
as they exist after processing (hence numeric arguments should be numbers, not strings) and the values should be
boolean true.
]=]--
local defaults = iargs.def
local ignorespecs = iargs.ignore
if defaults[1] or ignorespecs[1] then
local new_parent_args = {}
for _, default in ipairs(defaults) do
local defparam, defval = default:match("^(.-)=(.*)$")
if not defparam then
error("Bad default spec " .. default)
end
new_parent_args[defparam] = defval
end
local params_to_ignore = {}
local numbered_list_params_to_ignore = {}
local named_list_params_to_ignore = {}
for _, ignorespec in ipairs(ignorespecs) do
for ignore in gsplit(ignorespec, ",") do
local param = ignore:match("^(.*):list$")
if param then
if param:match("^%d+$") then
insert(numbered_list_params_to_ignore, tonumber(param))
else
insert(named_list_params_to_ignore, "^" .. pattern_escape(param) .. "%d*$")
end
else
if ignore:match("^%d+$") then
ignore = tonumber(ignore)
end
params_to_ignore[ignore] = true
end
end
end
for k, v in pairs(parent_args) do
if not params_to_ignore[k] then
local ignore_me = false
if type(k) == "number" then
for _, lparam in ipairs(numbered_list_params_to_ignore) do
if k >= lparam then
ignore_me = true
break
end
end
else
for _, lparam in ipairs(named_list_params_to_ignore) do
if k:match(lparam) then
ignore_me = true
break
end
end
end
if not ignore_me then
new_parent_args[k] = v
end
end
end
parent_args = new_parent_args
end
local param_mods_with_conj, param_mods_without_conj
local function get_param_mods(with_conj)
if with_conj then
if not param_mods_with_conj then
param_mods_with_conj = require(parameter_utilities_module).construct_param_mods {
{group = {"link", "q", "l", "ref"}},
{param = "conj", set = allowed_conj_set, overall = true},
}
end
return param_mods_with_conj
else
if not param_mods_without_conj then
param_mods_without_conj = require(parameter_utilities_module).construct_param_mods {
{group = {"link", "q", "l", "ref"}},
-- Override lit= to have a separate overall value
{param = "lit", separate_no_index = true},
}
end
return param_mods_without_conj
end
end
local terms, args
if iargs.nolink or iargs.linktext then
args = process_params(parent_args, params)
else
local m_param_utils = require(parameter_utilities_module)
if iargs.with_multiple_parts then
terms, args = m_param_utils.parse_list_with_inline_modifiers_and_separate_params {
params = params,
param_mods = get_param_mods(false),
raw_args = parent_args,
termarg = term_param,
track_module = "form of" .. (template and "/" .. template or ""),
lang = compat and "lang" or 1,
sc = "sc.default",
parse_lang_prefix = true,
default_separator = " +‎ ",
special_separators = {[";"] = " or "},
}
else
terms, args = m_param_utils.parse_term_with_inline_modifiers_and_separate_params {
params = params,
param_mods = get_param_mods("with conj"),
raw_args = parent_args,
termarg = term_param,
track_module = "form of" .. (template and "/" .. template or ""),
lang = compat and "lang" or 1,
sc = "sc",
parse_lang_prefix = true,
make_separate_g_into_list = true,
splitchar = ",",
subitem_param_handling = "last",
}
end
end
local lang = args[compat and "lang" or 1]
-- Tracking for certain user-specified params. This is generally used for
-- parameters that we accept but ignore, so that we can eventually remove
-- all uses of these params and stop accepting them.
if ignored_tracked_params then
for ignored_tracked_param, condition in pairs(ignored_tracked_params) do
if parent_args[ignored_tracked_param] and (condition ~= "non-english" or lang:getCode() ~= "en") then
track("arg/" .. ignored_tracked_param, template)
track("arg/" .. ignored_tracked_param)
end
end
end
-- Determine categories for the page, including tracking categories
local categories = {}
-- l10n
local function add_lang_cat(cat)
if cat ~= "" then
local prefix = lang:getCanonicalName()
local rindex_de = mw.ustring.find(cat, '的[^的]*$')
if rindex_de then
insert(categories, mw.ustring.sub(cat, 1, rindex_de) .. prefix .. mw.ustring.sub(cat, rindex_de + 1))
else
insert(categories, prefix .. cat)
end
end
end
if not args.nocat then
for _, cat in ipairs(iargs.cat) do
add_lang_cat(cat)
end
end
for _, cat in ipairs(args.cat) do
add_lang_cat(cat)
end
-- Format the link, preceding text and categories
local function add_term_tracking_categories(term)
-- add tracking category if term is same as page title
if term and mw.loadData("Module:headword/data").pagename == lang:stripDiacritics(term) then
insert(categories, "鏈接至自身的形式")
end
-- maybe add tracking category if primary entry doesn't exist (this is an
-- expensive call so we don't do it by default)
if iargs.noprimaryentrycat and term and mw.title.getCurrentTitle().nsText == ""
and not mw.title.new(term):getContent() then
local cat_name = iargs.noprimaryentrycat
local prefix = lang:getFullName()
if cat_name:find("的") then
insert(categories, cat_name:gsub("的", "的" .. prefix))
else
insert(categories, prefix .. cat_name)
end
end
end
local lemmas
if iargs.nolink then
lemmas = nil
elseif iargs.linktext then
lemmas = iargs.linktext
else
if iargs.with_multiple_parts then
lemmas = terms
else
lemmas = terms.terms
end
if not lemmas[1] then
if mw.title.getCurrentTitle().nsText == "Template" then
lemmas[1] = {
lang = lang,
term = "term"
}
else
error("No linked-to term specified")
end
end
for _, termobj in ipairs(lemmas) do
if termobj.term then
add_term_tracking_categories(termobj.term)
end
-- NOTE: Formerly, template arg sc= overrode inline modifier <sc:...>, which seems backwards, so I've
-- changed it. Hopefully nothing depended on the old behavior.
end
end
local enclitics, enclitic_conj
if args.enclitic then
local enclitics_obj = parse_terms_with_inline_modifiers("enclitic", args.enclitic, get_param_mods("with conj"),
lang)
enclitics = enclitics_obj.terms
enclitic_conj = enclitics_obj.conj
end
local base_lemmas = {}
if base_lemma_params then
for _, base_lemma_param_obj in ipairs(base_lemma_params) do
local param = base_lemma_param_obj.param
if args[param] then
local base_lemmas_obj = parse_terms_with_inline_modifiers(param, args[param],
get_param_mods("with conj"), lang)
insert(base_lemmas, {
paramobj = base_lemma_param_obj,
lemmas = base_lemmas_obj.terms,
conj = base_lemmas_obj.conj,
})
end
end
end
local posttext = iargs.posttext
local addl = args.addl
if addl then
posttext = posttext or ""
if addl:find("^[;:]") then
posttext = posttext .. addl
elseif addl:find("^_") then
posttext = posttext .. " " .. addl:sub(2)
else
posttext = posttext .. ", " .. addl
end
end
local conj
if iargs.with_multiple_parts then
conj = false -- signals to use 'separator' field
else
conj = terms and terms.conj or iargs.conj
end
local lemma_data = {
lang = lang,
args = args,
lemmas = lemmas,
conj = conj,
enclitics = enclitics,
enclitic_conj = enclitic_conj,
base_lemmas = base_lemmas,
categories = categories,
posttext = posttext,
lit = iargs.with_multiple_parts and args.lit.default or nil,
}
local form_of_text, lang_cats = do_form_of(lemma_data)
extend(lemma_data.categories, lang_cats)
local text = form_of_text .. (
args.nodot and "" or args.dot or iargs.withdot and "。" or ""
)
if not lemma_data.categories[1] then
return text
end
return text .. format_categories(lemma_data.categories, lemma_data.lang, args.sort,
-- If lemma_is_sort_key is given, supply the first lemma term as the sort base if possible. If sort= is given,
-- it will override the base; otherwise, the base will be converted appropriately to a sort key using the
-- same algorithm applied to pagenames.
iargs.lemma_is_sort_key and type(lemma_data.lemmas) == "table" and lemma_data.lemmas[1].term,
-- Supply the first lemma's script for sort key computation.
force_cat or get_force_cat(), type(lemma_data.lemmas) == "table" and lemma_data.lemmas[1].sc)
end
-- Invocation parameters shared between form_of_t(), tagged_form_of_t() and inflection_of_t(). `calling_func` is the
-- invoking function ("form_of_t", "tagged_form_of_t" or "inflection_of_t"), for handling parameters shared by two but
-- not all three invoking functions.
local function get_common_invocation_params(calling_func)
local iparams = {
["term_param"] = {type = "number"},
["lang"] = true, -- To be used as the default code in params.
["sc"] = {type = "script"},
["cat"] = {list = true, sublist = "comma without whitespace", flatten = true},
["ignore"] = {list = true},
["def"] = {list = true},
["conj"] = {set = allowed_conj_set, default = "and"},
["withcap"] = boolean_param,
["withencap"] = boolean_param,
["withdot"] = boolean_param,
["nolink"] = boolean_param,
["linktext"] = true,
["posttext"] = true,
["noprimaryentrycat"] = true,
["lemma_is_sort_key"] = true,
}
if calling_func ~= "inflection_of_t" then
iparams.with_multiple_parts = boolean_param
end
return iparams
end
local function should_ucfirst_text(args, iargs, lang)
local code = lang:getCode()
return args.cap or (iargs.withcap or iargs.withencap and code == "en" or code == "mul") and not args.nocap
end
--[==[
Function that implements {{tl|form of}} and the various more specific form-of templates (but not {{tl|inflection of}}
or templates that take tagged inflection parameters).
Invocation params:
; {{para|1|req=1}}
: Text to display before the link.
; {{para|term_param}}
: Numbered param holding the term linked to. Other numbered params come after. Defaults to 1 if invocation or template
param {{para|lang}} is present, otherwise 2.
; {{para|with_multiple_parts|1}}
: If specified, higher numbered parameters above the numbered param in {{para|term_param}} specify additional parts out
of which the term was constructed, for use by templates like {{tl|contraction of}}. (If not specified, the parameter
at <code><var>term_param</var> + 1</code> is the display form, same as {{para|alt}}, and the parameter at
at <code><var>term_param</var> + 2</code> is the gloss, same as {{para|t}}.)
; {{para|lang}}
: Default language code for language-specific templates. If specified, no language code needs to be specified, and if
specified it needs to be set using {{para|lang}}, not {{para|1}}.
; {{para|sc}}
: Default script code for language-specific templates. The script code can still be overridden using template param
{{para|sc}}.
; {{para|cat}}, {{para|cat2}}, ...:
: Categories to place the page into. The language name will automatically be prepended. Note that there is also a
template param {{para|cat}} to specify categories at the template level. Use of {{para|nocat}} disables categorization
of categories specified using invocation param {{para|cat}}, but not using template param {{para|cat}}. A single param
can specify multiple comma-separated categories if no space follows the comma.
; {{para|ignore}}, {{para|ignore2}}, ...:
: One or more template params to silently accept and ignore. Useful e.g. when the template takes additional parameters
such as {{para|from}} or {{para|POS}}. Each value is a comma-separated list of either bare parameter names or
specifications of the form `PARAM:list` to specify that the parameter is a list parameter.
; {{para|def}}, {{para|def2}}, ...:
: One or more default values to supply for template args. For example, specifying {{para|def|2=tr=-}} causes the default
for template param {{para|tr}} to be `-`. Actual template params override these defaults.
; {{para|withcap|1}}
: Capitalize the first character of the text preceding the link, unless template param {{para|nocap}} is given.
; {{para|withencap|1}}
: Capitalize the first character of the text preceding the link if the language is English and template param
{{para|nocap}} is not given.
; {{para|withdot|1}}
: Add a final period after the link, unless template param {{para|nodot}} is given to suppress the period, or
{{para|dot}} is given to specify an alternative punctuation character.
; {{para|nolink|1}}
: Suppress the display of the link. If specified, none of the template params that control the link
({{para|<var>term_param</var>}}, {{para|<var>term_param</var> + 1}}, {{para|<var>term_param</var> + 2}}, {{para|t}},
{{para|gloss}}, {{para|sc}}, {{para|tr}}, {{para|ts}}, {{para|pos}}, {{para|g}}, {{para|id}}, {{para|lit}}) will be
available. If the calling template uses any of these parameters, they must be ignored using {{para|ignore}}.
{{para|linktext}}
: Override the display of the link with the specified text. This is useful if a custom template is available to format
the link (e.g. in Hebrew, Chinese and Japanese). If specified, none of the template params that control the link
({{para|<var>term_param</var>}}, {{para|<var>term_param</var> + 1}}, {{para|<var>term_param</var> + 2}}, {{para|t}},
{{para|gloss}}, {{para|sc}}, {{para|tr}}, {{para|ts}}, {{para|pos}}, {{para|g}}, {{para|id}}, {{para|lit}}) will be
available. If the calling template uses any of these parameters, they must be ignored using {{para|ignore}}.
; {{para|posttext}}
: Additional text to display directly after the formatted link, before any terminating period/dot and inside of
`<span class='use-with-mention'>`.
; {{para|noprimaryentrycat}}
: Category to add the page to if the primary entry linked to doesn't exist. The language name will automatically be
prepended.
; {{para|lemma_is_sort_key|1}}
: If the user didn't specify a sort key, use the lemma as the sort key (instead of the page itself).
]==]
function export.form_of_t(frame)
local iparams = get_common_invocation_params("form_of_t")
iparams[1] = {required = true}
local iargs = process_params(frame.args, iparams)
local parent_args = frame:getParent().args
local params = get_common_template_params()
if next(iargs.cat) then
params.nocat = boolean_param
end
return construct_form_of_text {
template = "form-of-t",
iargs = iargs,
parent_args = parent_args,
params = params,
do_form_of = function(lemma_data)
local args = lemma_data.args
local text
if args.notext then
text = ""
else
text = iargs[1]
if should_ucfirst_text(args, iargs, lemma_data.lang) then
text = ucfirst(text)
end
end
-- This returns two values, which we pass up to the caller.
return format_form_of {
lang = lemma_data.lang, text = text, lemmas = lemma_data.lemmas, conj = lemma_data.conj,
enclitics = lemma_data.enclitics, base_lemmas = lemma_data.base_lemmas, lemma_face = "term",
lit = lemma_data.lit, posttext = lemma_data.posttext
}
end
}
end
--[=[
Construct and return the full definition line for a form-of-type template invocation that is based on inflection tags.
This is a wrapper around construct_form_of_text() and takes the following arguments: processed invocation arguments
IARGS, processed parent arguments ARGS, TERM_PARAM (the parent argument specifying the main entry), COMPAT (true if the
language code is found in args.lang instead of args[1]), and TAGS, the list of (non-canonicalized) inflection tags.
It returns that actual definition-line text including terminating period/full-stop, formatted categories, etc. and
should be directly returned as the template function's return value.
]=]
local function construct_tagged_form_of_text(data)
local template, iargs, parent_args, params, no_numbered_gloss, tags =
data.template, data.iargs, data.parent_args, data.params, data.no_numbered_gloss, data.tags
-- Named params not controlling link display
-- Always included because lang-specific categories may be added
params.nocat = boolean_param
params.p = true
params.POS = {alias_of = "p"}
return construct_form_of_text {
template = template,
iargs = iargs,
parent_args = parent_args,
params = params,
no_numbered_gloss = no_numbered_gloss,
do_form_of = function(lemma_data)
local args = lemma_data.args
if is_callable(tags) then
tags = tags(args)
end
-- NOTE: tagged_inflections returns two values, so we do too.
return tagged_inflections {
lang = lemma_data.lang,
tags = tags,
lemmas = lemma_data.lemmas,
conj = lemma_data.conj,
enclitics = lemma_data.enclitics,
enclitic_conj = lemma_data.enclitic_conj,
base_lemmas = lemma_data.base_lemmas,
lemma_face = "term",
POS = args.p,
pagename = args.pagename,
-- Set no_format_categories because we do it ourselves in construct_form_of_text().
no_format_categories = true,
nocat = args.nocat,
notext = args.notext,
capfirst = should_ucfirst_text(args, iargs, lemma_data.lang),
posttext = lemma_data.posttext,
}
end
}
end
--[==[
Function that implements form-of templates that are defined by specific tagged inflections (typically a template
referring to a non-lemma inflection, such as {{tl|plural of}}). This works exactly like {form_of_t()} except that the
"form of" text displayed before the link is based off of a pre-specified set of inflection tags (which will be
appropriately linked to the glossary) instead of arbitrary text. From the user's perspective, there is no difference
between templates implemented using {form_of_t()} and {tagged_form_of_t()}; they accept exactly the same parameters and
work the same. See also {inflection_of_t()} below, which is intended for templates with user-specified inflection tags.
Invocation params:
; {{para|1|req=1}}, {{para|2}}, ...
: One or more inflection tags describing the inflection in question.
; {{para|split_tags}}
: If specified, character to split specified inflection tags on. This allows multiple tags to be included in a single
argument, simplifying template code.
; {{para|term_param}}
; {{para|with_multiple_parts|1}}
; {{para|lang}}
; {{para|sc}}
; {{para|cat}}, {{para|cat2}}, ...
; {{para|ignore}}, {{para|ignore2}}, ...
; {{para|def}}, {{para|def2}}, ...
; {{para|withcap|1}}
; {{para|withencap|1}}
; {{para|withdot|1}}
; {{para|nolink|1}}
; {{para|linktext}}
; {{para|posttext}}
; {{para|noprimaryentrycat}}
; {{para|lemma_is_sort_key|1}}
: All of these are the same as in {form_of_t()}.
]==]
function export.tagged_form_of_t(frame)
local iparams = get_common_invocation_params("tagged_form_of_t")
iparams[1] = {list = true, required = true}
iparams.split_tags = true
local iargs = process_params(frame.args, iparams)
local parent_args = frame:getParent().args
local params = get_common_template_params()
return construct_tagged_form_of_text {
template = "tagged-form-of-t",
iargs = iargs,
parent_args = parent_args,
params = params,
tags = split_inflection_tags(iargs[1], iargs.split_tags),
}
end
--[==[
Function that implements {{tl|inflection of}} and certain semi-specific variants, such as {{tl|participle of}} and
{{tl|past participle form of}}. This function is intended for templates that allow the user to specify a set of
inflection tags.
It works similarly to {form_of_t()} and {tagged_form_of_t()} except that the calling convention for the calling
template is
: { {{TEMPLATE|LANG|MAIN_ENTRY_LINK|MAIN_ENTRY_DISPLAY_TEXT|TAG|TAG|...}}}
instead of
: { {{TEMPLATE|LANG|MAIN_ENTRY_LINK|MAIN_ENTRY_DISPLAY_TEXT|GLOSS}}}
Note that there isn't a numbered parameter for the gloss, but it can still be specified using {{para|t}} or
{{para|gloss}}.
Invocation params:
; {{para|preinfl}}, {{para|preinfl2}}, ...
: Extra inflection tags to automatically prepend to the tags specified by the template.
; {{para|postinfl}}, {{para|postinfl2}}, ...
: Extra inflection tags to automatically append to the tags specified by the template. Used for example by
{{tl|past participle form of}} to add the tags `of the|past|p` onto the user-specified tags, which indicate which
past participle form the page refers to.
; {{para|split_tags}}
: If specified, character to split specified inflection tags on. This allows multiple tags to be included in a single
argument, simplifying template code. Note that this applies *ONLY* to inflection tags specified in the invocation
arguments using {{para|preinfl}} or {{para|postinfl}}, not to user-specified inflection tags.
; {{para|term_param}}
; {{para|lang}}
; {{para|sc}}
; {{para|cat}}, {{para|cat2}}, ...
; {{para|ignore}}, {{para|ignore2}}, ...
; {{para|def}}, {{para|def2}}, ...
; {{para|withcap|1}}
; {{para|withencap|1}}
; {{para|withdot|1}}
; {{para|nolink|1}}
; {{para|linktext}}
; {{para|posttext}}
; {{para|noprimaryentrycat}}
; {{para|lemma_is_sort_key|1}}
: All of these are the same as in {form_of_t()}.
]==]
function export.inflection_of_t(frame)
local iparams = get_common_invocation_params("inflection_of_t")
iparams.preinfl = {list = true}
iparams.postinfl = {list = true}
iparams.split_tags = true
local iargs = process_params(frame.args, iparams)
local parent_args = frame:getParent().args
local params = get_common_template_params()
local compat = iargs.lang or parent_args.lang
local tagsind = (iargs.term_param or compat and 1 or 2) + 2
params[tagsind] = {list = true,
-- at least one inflection tag is required unless preinfl or postinfl tags are given
required = #iargs.preinfl == 0 and #iargs.postinfl == 0}
return construct_tagged_form_of_text {
template = "inflection-of-t",
iargs = iargs,
parent_args = parent_args,
params = params,
no_numbered_gloss = true,
tags = function(args)
local infls
if not next(iargs.preinfl) and not next(iargs.postinfl) then
-- If no preinfl or postinfl tags, just use the user-specified tags directly.
infls = args[tagsind]
else
-- Otherwise, we need to prepend the preinfl tags and postpend the postinfl tags. If there's only one tag set
-- (no semicolon), it's easier. Since this is common, we optimize for it.
infls = {}
local saw_semicolon = false
for _, infl in ipairs(args[tagsind]) do
if infl == ";" then
saw_semicolon = true
break
end
end
local split_preinfl = split_inflection_tags(iargs.preinfl, iargs.split_tags)
local split_postinfl = split_inflection_tags(iargs.postinfl, iargs.split_tags)
if not saw_semicolon then
extend(infls, split_preinfl)
extend(infls, args[tagsind])
extend(infls, split_postinfl)
else
local groups = split_tag_set(args[tagsind])
for _, group in ipairs(groups) do
if #infls > 0 then
insert(infls, ";")
end
extend(infls, split_preinfl)
extend(infls, group)
extend(infls, split_postinfl)
end
end
end
return infls
end,
}
end
--[==[
Normalize a part-of-speech tag given a possible abbreviation (passed in as {{para|1}} of the invocation args). If the
abbreviation isn't recognized, the original POS tag is returned. If no POS tag is passed in, return the value of
invocation arg {{para|default}}.
]==]
function export.normalize_pos(frame)
local iparams = {
[1] = true,
["default"] = true,
}
local iargs = process_params(frame.args, iparams)
if not iargs[1] and not iargs.default then
error("Either 1= or default= must be given in the invocation args")
end
if not iargs[1] then
return iargs.default
end
return (m_form_of_pos or get_m_form_of_pos())[iargs[1]] or iargs[1]
end
return export
qrif0dnz6bda4dhh7hkzk8i6q78l5c5
蕳砃
0
1388811
9739183
9257225
2026-04-20T15:38:01Z
明瑤
132921
9739183
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=𫈉砃|gloss=-|alt=工茼-潮州,江冬-新加坡,干冬-新加坡,工冬-新加坡}}
===詞源===
源自{{bor|nan-hbl|ms|kentang||馬鈴薯}}。
===發音===
{{zh-pron
|mn=km:kan-tan/sg:kan-tang/sg:kang-tang/sg:kang-tāng
|mn-t=gang1 dang1
|cat=n
|h=hrs=h:ganˋ dangˋ
}}
===名詞===
{{head|zh|名詞}}
# [[土豆]],[[馬鈴薯]]
====近義詞====
{{zh-dial|馬鈴薯}}
{{zh-cat|根菜}}
euutzk2l5jfczh4rr4f7ll6r4m2n3ep
sausis
0
1396834
9739607
9532512
2026-04-21T06:28:19Z
TongcyDai
53191
9739607
wikitext
text/x-wiki
==立陶宛語==
{{wikipedia|lt:}}
===其他形式===
* {{alt|lt|saus.||縮寫}}
===詞源===
派生自 {{m|lt|saũsas|t=乾的}}。<ref>{{R:lt:SEJL|saũsis|537}}</ref>
===發音===
* {{IPA|lt|[ˈs̪ɐʊ̯ˑs̪ʲɪs̪]}}
===名詞===
{{lt-noun|head=saũsis|m|saũsiai|2}}
# [[一月]]<ref>{{R:lt:Martsinkyavitshute2012|sausis}}</ref>
====變格====
{{lt-noun-m-is-1-2|saus|saũs}}
====相關詞彙====
{{qualifier|名詞}}
* {{l|lt|sausra|g=f}}
====參見====
{{list:Gregorian calendar months/lt}}
===參考資料===
<references />
{{C|lt|月份}}
kxmlkg6bid51psl20p5oj1b44bc1cl1
balandis
0
1404036
9739604
9531907
2026-04-21T06:23:29Z
TongcyDai
53191
9739604
wikitext
text/x-wiki
==立陶宛語==
===其他形式===
* {{alt|lt|bal.||縮寫}}
===詞源===
傳統上認為派生自 {{der|lt|ine-pro|*bʰel-|t=白色}},可能經由一個未經證實的構詞 {{m|lt||*balandis galambis|t=有白色標記的鴿子}}(關於後者,參見 {{ncog|la|columbus|t=雄鴿}})。「四月」之義顯然源於「具有白色或光禿斑塊」的意思(這指的究竟是動物的毛色、田野還是其他事物尚不明確)。與{{cog|lv|balodis|t=鴿子}}、{{cog|os|бæлон|t=家鴿}} 同源;另見{{cog|lt|báltas|t=白色}}。<ref>{{R:bat:EDBIL|78|balandis}}</ref>
===發音===
* {{IPA|lt|[bɐˈɫ̪ɐn̪ʲˑ.d̪ʲɪs̪]}}
===名詞===
{{lt-noun|m|balañdžiai|2|head=balañdis}}
# [[四月]]
# [[鴿子]]
====變格====
{{lt-noun-m-dis-1-2|balan|balañ}}
====參見====
* {{l|lt|karvelis|g=m}}
====參見====
{{list:Gregorian calendar months/lt}}
===參考資料===
<references />
{{C|lt|月份|鳥}}
psw1a5r7aq6xwq23c66yu2rop55pj7k
birželis
0
1404600
9739601
9531934
2026-04-21T06:15:43Z
TongcyDai
53191
9739601
wikitext
text/x-wiki
==立陶宛語==
===其他形式===
* {{alt|lt|birž.||縮寫}}
===詞源===
源自 {{m|lt|béržas|t=樺樹}}。<ref>{{R:lt:LEW|head=biržẽlis|page=44}}</ref>
===發音===
* {{IPA|lt|/bʲɪɾʲˈʒʲæːlʲɪs/}}
===名詞===
{{lt-noun|m|biržẽliai|2|head=biržẽlis}}
# [[六月]]
====變格====
{{lt-noun-m-is-1-2|biržel|biržẽl}}
====參見====
{{list:Gregorian calendar months/lt}}
===參考資料===
<references />
{{C|lt|月份}}
tqnxm3lpm13oana59u02n3u3eykr527
Template:Form of/fulldoc
10
1405314
9739611
5757503
2026-04-21T06:36:20Z
TongcyDai
53191
9739611
wikitext
text/x-wiki
<div style="border: 2px dashed #666666;"><div style="margin: 3em;">
<onlyinclude>{{#invoke:form of doc/templates|fulldoc_t}}</onlyinclude>
</div></div><!--
--><noinclude>{{documentation}}</noinclude>
ae34s8gzcwx5ubf7oes0ljmacl43ocs
Module:Form of doc/templates
828
1405315
9739612
9287600
2026-04-21T06:36:53Z
TongcyDai
53191
9739612
Scribunto
text/plain
--[=[
This module contains functions to implement {{form of/*doc}} templates.
The module contains the wrappers meant to be called directly from templates.
The actual implementations are in [[Module:form of doc]].
Author: Benwing2
]=]
local export = {}
local m_parameters = require("Module:parameters")
local m_form_of_doc = require("Module:form of doc")
local function create_introdoc_params()
local boolean = {type = "boolean"}
local plain = {}
return {
["lang"] = plain,
["exlang"] = {list = true, sublist = "comma without whitespace", flatten = true},
["usedwithlimitedlangs"] = boolean,
["pldesc"] = plain,
["primaryentrytext"] = plain,
["cat"] = {list = true, sublist = "comma without whitespace", flatten = true},
["addlintrotext"] = plain,
["etymtemp"] = plain,
["withdot"] = boolean,
["withcap"] = boolean,
["withencap"] = boolean,
}
end
local function preprocess(frame, txt)
if txt:find("{{") then
txt = frame:preprocess(txt)
end
return txt
end
function export.introdoc_t(frame)
local params = create_introdoc_params()
local args = m_parameters.process(frame:getParent().args, params)
return preprocess(frame, m_form_of_doc.introdoc(args))
end
local function create_paramdoc_params()
local boolean = {type = "boolean"}
local plain = {}
return {
["lang"] = plain,
["sgdescof"] = plain,
["art"] = plain,
["cat"] = {list = true, sublist = "comma without whitespace", flatten = true},
["withfrom"] = boolean,
["withdot"] = boolean,
["withcap"] = boolean,
["withencap"] = boolean,
["addlparamtext"] = plain,
}
end
function export.paramdoc_t(frame)
local params = create_paramdoc_params()
local args = m_parameters.process(frame:getParent().args, params)
return preprocess(frame, m_form_of_doc.paramdoc(args))
end
local function create_usagedoc_params()
local params = create_paramdoc_params()
params["exlang"] = {list = true, sublist = "comma without whitespace", flatten = true}
params["usedwithlimitedlangs"] = {type = "boolean"}
return params
end
function export.usagedoc_t(frame)
local params = create_usagedoc_params()
local args = m_parameters.process(frame:getParent().args, params)
return preprocess(frame, m_form_of_doc.usagedoc(args))
end
local function create_fulldoc_params()
local params = create_introdoc_params()
local usageparams = create_usagedoc_params()
for k, v in pairs(usageparams) do
params[k] = v
end
-- We allow sublists but this is handled by {{shortcut|...}} when we preprocess.
params["shortcut"] = {list = true}
return params
end
function export.fulldoc_t(frame)
local params = create_fulldoc_params()
local args = m_parameters.process(frame:getParent().args, params)
return preprocess(frame, m_form_of_doc.fulldoc(args))
end
local function create_infldoc_params()
local params = create_fulldoc_params()
params["pldesc"] = nil
local plain = {}
params["sgdesc"] = plain
params["form"] = plain
return params
end
function export.infldoc_t(frame)
local params = create_infldoc_params()
local args = m_parameters.process(frame:getParent().args, params)
return preprocess(frame, m_form_of_doc.infldoc(args))
end
function export.tagtable_t(frame)
return m_form_of_doc.tagtable()
end
function export.non_alias_shortcut_table_t(frame)
return m_form_of_doc.non_alias_shortcut_table()
end
function export.lang_specific_tables_t(frame)
return m_form_of_doc.lang_specific_tables()
end
function export.postable_t(frame)
return m_form_of_doc.postable()
end
function export.lang_independent_category_table_t(frame)
return m_form_of_doc.lang_independent_category_table()
end
function export.lang_independent_label_table_t(frame)
return m_form_of_doc.lang_independent_label_table()
end
return export
1nb5amy2guk4l9vizy1lfys6qmvyah4
Module:Form of doc
828
1405316
9739613
9287621
2026-04-21T06:51:09Z
TongcyDai
53191
9739613
Scribunto
text/plain
local export = {}
-- Author: Benwing2
--[==[ intro:
This module contains functions to implement {{form of/*doc}} templates.
The module contains the actual implementation, meant to be called from other
Lua code. See [[Module:form of doc/templates]] for the functions meant to be
called directly from templates.
]==]
local en_utilities_module = "Module:en-utilities"
local form_of_module = "Module:form of"
local form_of_data_module = "Module:form of/data"
local function_module = "Module:fun"
local labels_module = "Module:labels"
local languages_module = "Module:languages"
local load_module = "Module:load"
local parse_interface_module = "Module:parse interface"
local string_utilities_module = "Module:string utilities"
local table_module = "Module:table"
local template_parser_module = "Module:template parser"
local require = require
local m_form_of = require(form_of_module)
local m_form_of_data = require(form_of_data_module)
local m_cats = require(m_form_of.form_of_cats_module)
local m_str_utils = require(string_utilities_module)
local m_table = require(table_module)
local concat = table.concat
local get_indefinite_article = require(en_utilities_module).get_indefinite_article
local get_label_info = require(labels_module).get_label_info
local get_lang = require(languages_module).getByCode
local get_tag_display_form = m_form_of.get_tag_display_form
local get_tag_set_display_form = m_form_of.get_tag_set_display_form
local insert = table.insert
local ipairs = ipairs
local is_link_or_html = m_form_of.is_link_or_html
local iterate_from = require(function_module).iterateFrom
local list_to_set = m_table.listToSet
local normalize_tag_set = m_form_of.normalize_tag_set
local pairs = pairs
local remove_duplicates = m_table.removeDuplicates
local safe_require = require(load_module).safe_require
local serial_comma_join = m_table.serialCommaJoin
local shallow_copy = m_table.shallowCopy
local sort = table.sort
local table_extend = m_table.extend
local tostring = tostring
local ucfirst = m_str_utils.ucfirst
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local form_of_lang_data_module_prefix = m_form_of.form_of_lang_data_module_prefix
local form_of_data1 = require(m_form_of.form_of_data1_module)
local form_of_data2 = require(m_form_of.form_of_data2_module)
local form_of_pos = mw.loadData(m_form_of.headword_data_module).pos_aliases
local SHORTCUTS = m_form_of_data.SHORTCUTS
local TAG_TYPE = m_form_of_data.TAG_TYPE
local function lang_name(langcode, param)
return get_lang(langcode, param):getCanonicalName()
end
local function link_box(content)
return "<div class=\"noprint plainlinks\" style=\"float: right; clear: both; margin: 0 0 .5em 1em; background: var(--wikt-palette-paleblue, #f9f9f9); border: 1px var(--border-color-base,#aaaaaa) solid; margin-top: -1px; padding: 5px; font-weight: bold; font-size: small;\">"
.. content .. "</div>"
end
local function raw_editpage(page)
return tostring(mw.uri.fullUrl(page, "action=edit"))
end
local function show_editlink(page)
return link_box("[" .. raw_editpage(page) .. " 編輯]")
end
local function template_name(preserve_lang_code)
-- Fetch the template name, minus the '/documentation' suffix that may follow
-- and without any language-specific prefixes (e.g. 'el-' or 'ine-bsl-pro-')
-- (unless `preserve_lang_code` is given).
local PAGENAME = mw.title.getCurrentTitle().text -- DO NOT replace with mw.loadData("Module:headword/data").pagename; we want the whole template name
local tempname = PAGENAME:gsub("/documentation$", "")
if not preserve_lang_code then
while true do
-- Repeatedly strip off language code prefixes, in case there are multiple.
local newname = tempname:gsub("^%l%l%l?%-", "")
if newname == tempname then
break
end
tempname = newname
end
end
return tempname
end
function export.introdoc(args)
local lang = args.lang
local langname = lang and lang_name(lang, "lang")
local exlangnames = {}
for _, exlang in ipairs(args.exlang) do
insert(exlangnames, lang_name(exlang, "exlang"))
end
local parts = {}
local function ins(txt)
insert(parts, txt)
end
if args.etymtemp then
ins("{{hatnote|This template is for definition sections. For the template used in etymology sections, see [[Template:" .. args.etymtemp .. "]].}}\n")
end
ins(("{{uses lua|%s/templates}}"):format(form_of_module))
ins("This template creates a definition line for ")
ins(args.pldesc or template_name():gsub(" of$", "") .. "s")
ins(" ")
ins(args.primaryentrytext or "of primary entries")
if lang then
ins(" in " .. langname)
elseif args.exlang[1] then
ins(", e.g. in " .. serial_comma_join(exlangnames, {conj = "or"}))
end
ins("。")
local cats = args.cat
if cats[1] then
ins(" It also categorizes the page into ")
local catparts = {}
if lang then
for _, cat in ipairs(cats) do
insert(catparts, "[[:Category:" .. langname .. " " .. cat .. "]]")
end
else
for _, cat in ipairs(cats) do
insert(catparts, "the proper language-specific subcategory of [[:Category:" .. ucfirst(cat) ..
" by language]] (e.g. [[:Category:" .. (exlangnames[1] or "English") .. " " .. cat .. "]])")
end
end
ins(serial_comma_join(catparts))
ins("。")
end
if args.addlintrotext then
ins(" ")
ins(args.addlintrotext)
end
ins("\n")
if args.withcap and args.withdot then
ins([===[
預設情況下,此模板會將輸出顯示為一個完整的句子,首字母大寫,句末帶句號。可以使用 {{para|nocap|1}} 和/或 {{para|nodot|1}} 來覆寫此設定(見下文)。
]===])
elseif args.withcap or args.withencap and lang == "en" then
ins([===[
By default, this template displays its output with an initial capital letter. This can be overridden using
{{para|nocap|1}} (see below).
]===])
elseif args.withencap then
ins([===[
By default, this template displays its output with an initial capital letter if the term's language in {{para|1}} is
English (but not otherwise]===])
if args.usedwithlimitedlangs then
ins([==[, and there are likely no English examples for this template).]==])
else
ins([==[). This can be overridden by using {{para|nocap|1}} to make the initial letter lowercase for
English. This does not auto-add a final period; if (and only if) the term's language is English, you should manually
include it after the template unless other text follows, since English definitions should be formatted like full
sentences.]==])
end
ins("\n")
else
ins([===[
By default, this template displays its output with an initial lowercase letter. This can be overridden by using
{{para|cap|1}} to make the initial letter capitalized]===] .. (lang == "en" and ".\n" or " (but this is not " ..
"generally recommended for non-English languages, as non-English definitions should be lowercase).\n"))
end
ins([===[
此模板'''不是'''用於詞源章節的。]===])
if args.etymtemp then
ins(" 對於這些章節,請使用{{tl|" .. args.etymtemp .. "}}。\n")
else
ins("\n")
end
ins([===[
'''Note:''' This is a “form of” template. The full list of such templates, including their distinctive properties and
how to customize the output of this template, can be found at [[:Category:Form-of templates]].
''The documentation for this page is auto-generated by [[Module:form of doc]].<sup>[<span class="plainlinks">[]===] .. raw_editpage("Module:form of doc") ..
" edit]</span>]</sup> As a result, the edit buttons on most section links do not work.''\n")
return concat(parts)
end
local function param(params, list, required)
local paramparts = {}
if type(params) ~= "table" then
params = {params}
end
for _, p in ipairs(params) do
local listparts = {}
insert(listparts, "{{para|" .. p .. "}}")
if list then
insert(listparts, ", {{para|" .. p .. "2}}")
insert(listparts, ", {{para|" .. p .. "3}}")
insert(listparts, ", etc.")
end
insert(paramparts, concat(listparts))
end
local reqtext = required and "'''(required)'''" or "''(optional)''"
return concat(paramparts, " or ") .. " " .. reqtext
end
function export.paramdoc(args)
local parts = {}
local function ins(txt)
insert(parts, txt)
end
local function param_and_doc(params, list, required, doc)
ins("; ")
ins(param(params, list, required))
ins("\n")
ins(": ")
ins(doc)
ins("\n")
end
local tempname = template_name()
local art = args.art or get_indefinite_article(tempname)
local sgdescof = args.sgdescof or art .. " " .. tempname
ins("''Positional (unnamed) parameters:''\n")
local lang = args.lang
if args.lang then
param_and_doc("1", false, true,
"The term to link to (which this page is " .. sgdescof .. "). This should include any needed diacritics as " ..
"appropriate to " .. lang_name(lang, "lang") .. ". These diacritics will automatically be stripped out in " ..
"the appropriate fashion in order to create the link to the page. This parameter can also include multiple " ..
"terms separated by a comma, as long as there is no space after the comma, and each such term can have " ..
"inline modifiers specifying transliterations, display forms, qualifiers, labels, genders and other " ..
"properties. See below.")
param_and_doc("2", false, false,
"The text to be shown in the link to the term. If empty or omitted, the term specified by the first " ..
"parameter will be used. This parameter is normally not necessary, and should not be used solely to " ..
"indicate diacritics; instead, put the diacritics in the first parameter.")
else
param_and_doc("1", false, true,
"The [[WT:LANGCODE|language code]] of the term linked to (which this page is " .. sgdescof .. "). See " ..
"[[Wiktionary:List of languages]]. <small>The parameter {{para|lang}} is a deprecated synonym; please do " ..
"not use. If this is used, all numbered parameters move down by one.</small>")
param_and_doc("2", false, true,
"The term to link to (which this page is " .. sgdescof .. "). This should include diacritics as appropriate " ..
"to the language (e.g. accents in Russian to mark the stress, vowel diacritics in Arabic, macrons in Latin " ..
"to indicate vowel length, etc.). These diacritics will automatically be stripped out in a " ..
"language-specific fashion in order to create the link to the page. This parameter can also include " ..
"multiple terms separated by a comma, as long as there is no space after the comma, and each such term can " ..
"have inline modifiers specifying transliterations, display forms, qualifiers, labels, genders and other " ..
"properties. See below.")
param_and_doc("3", false, false,
"The text to be shown in the link to the term. If empty or omitted, the term specified by the second " ..
"parameter will be used. This parameter is normally not necessary, and should not be used solely to " ..
"indicate diacritics; instead, put the diacritics in the second parameter.")
end
ins("命名參數:\n")
param_and_doc({"t", lang and "3" or "4"}, false, false, "A gloss or short translation of the term linked " ..
"to. <small>The parameter {{para|gloss}} is a deprecated synonym; please do not use.</small>")
param_and_doc("tr", false, false,
"Transliteration for non-Latin-script terms, if different from the automatically-generated one.")
param_and_doc("ts", false, false, "Transcription for non-Latin-script terms whose transliteration is " ..
"markedly different from the actual pronunciation. Should not be used for IPA pronunciations.")
param_and_doc("cat", true, false, "Additional categories to place the page into. They are automatically " ..
"prepended with the language name. A single parameter can contain multiple comma-separated categories as long " ..
"as there is no space after the comma.")
param_and_doc("addl", false, false, "Additional text to display at the end, before the final closing " ..
"<code></span></code> tag. It is normally joined to the preceding text by a comma followed by a space. However, if the " ..
"value of {{para|addl}} begins with a colon or semicolon, it is appended directly with no joining punctuation, " ..
"and if the value begins with an underscore, the remainder is joined to the preceding text with a space.")
if args.withfrom then
param_and_doc("from", true, false, "A label (see {{tl|label}}) that gives additional information on " ..
"the language variety that the term belongs to, the place that it originates from, or something similar.")
end
if args.withdot then
param_and_doc("dot", false, false,
"A character to replace the final dot that is normally shown automatically.")
param_and_doc("nodot", false, false, "If {{para|nodot|1}}, then no automatic dot will be shown.")
end
if (args.withcap or args.withencap) and not args.usedwithlimitedlangs then
-- Don't even mention if usedwithlimitedlangs=1, because there are unlikely to be English examples.
param_and_doc("nocap", false, false, "If {{para|nocap|1}}, then the first letter will be in lowercase." ..
(args.withencap and " Only useful for English, because other languages already begin with a lowercase letter."
or ""))
end
if not args.withcap then
param_and_doc("cap", false, false, "If {{para|cap|1}}, then the first letter will be in capitalized. " ..
"Not generally recommended" .. (args.withencap and "" or ", except for English definitions") ..
", because non-English definitions should begin with a lowercase letter and be formatted like a phrase, " ..
"rather than a full sentence.")
end
if args.cat and args.cat[1] then
param_and_doc("nocat", false, false, "Disable categorization of categories built into the template. " ..
"For example, {{tl|ellipsis of|en|...}} normally categories into e.g. [[:Category:English ellipses]], but " ..
"this can be disabled using {{para|nocat|1}}. This does not affect categories explicitly specified in the " ..
"template call itself using {{para|cat}}.")
end
param_and_doc("notext", false, false, "If {{para|notext|1}}, don't display the initial text preceding the " ..
"term(s), but only the actual term or terms. The page is still categorized as normal, unless {{para|nocat|1}} " ..
"is given.")
param_and_doc("id", false, false, "A sense id for the term, which links to anchors on the page set by " ..
"the {{tl|senseid}} template.")
param_and_doc("sc", false, false, "Script code to use, if script detection does not work. See " ..
"[[Wiktionary:Scripts]]. Rarely needs to be given.")
param_and_doc("sort", false, false, "Sort key for sorting any categories the page is added to. Rarely needs " ..
"to be given except for Japanese, and even then, only when there are multiple possible pronunciations.")
if args.addlparamtext then
ins("\n")
ins(args.addlparamtext)
ins("\n")
end
ins([==[
===Inline modifiers===
Use a syntax like <code>Изабе́лла<tr:Izabɛ́lla><t:Isabelle></code> to specify modifiers such as transliterations, glosses, labels and qualifiers. In this example, for the Russian name {{m|ru|Изабе́лла|tr=Izabɛ́lla|t=Isabelle}}, the manual transliteration ''Izabɛ́lla'' and gloss "Isabelle" are given. The following modifiers are recognized; see [[WT:Inline modifiers]] for more detailed discussion of inline modifiers and the meanings of the modifiers given below.
* <code>t</code>: gloss
* <code>tr</code>: transliteration
* <code>ts</code>: transcription, for languages where the transliteration and pronunciation are markedly different
* <code>l</code>: comma-separated left labels, e.g. {{cd|<l:rare>}} or {{cd|<l:UK,Australia>}} or {{cd|<l:archaic,or,dialectal>}} or {{cd|<l:<<rare>>, <<archaic>> or <<dialectal>>>}}
*: As shown, in the syntax without {{cd|<<...>>}}, there must not be a space after the comma for it to be recognized as a delimiter.
*: The labels appear '''before''' the term, parenthesized, italicized and appropriately linked as if {{tl|lb}} were used (but without categorization).
* <code>ll</code>: comma-separated right labels; these appear '''after''' the term, parenthesized, italicized and appropriately linked as for left labels
* <code>q</code>: left qualifier; this appears '''before''' the term, parenthesized and italicized, but displayed as-is, without interpretation; useful for one-off explanatory notes
* <code>qq</code>: right qualifier; this appears '''after''' the term, parenthesized and italicized
* <code>ref</code>: reference or references, using the syntax documented in [[Template:IPA#References]]
* <code>g</code>: comma-separated list of gender/number specifications; see [[Module:gender and number]] for the complete list
* <code>alt</code>: alternative display text
* <code>pos</code>: part of speech
* <code>ng</code>: arbitrary non-gloss explanatory text
* <code>lit</code>: literal meaning
* <code>id</code>: sense ID; see {{temp|senseid}}
* <code>sc</code>: script code]==])
return concat(parts)
end
function export.usagedoc(args)
local exlangs = {}
for _, exlang in ipairs(args.exlang) do
insert(exlangs, exlang)
end
if not args.usedwithlimitedlangs then
insert(exlangs, 'en')
insert(exlangs, 'de')
insert(exlangs, 'ja')
end
exlangs = remove_duplicates(exlangs)
local sub = {}
local langparts = {}
for _, langcode in ipairs(exlangs) do
insert(langparts, '<code>' .. langcode .. '</code> for ' .. lang_name(langcode, "exlang"))
end
local exlangs = serial_comma_join(langparts, {conj = "or"})
local tempname = template_name("preserve lang code")
if args.lang then
return ([===[
==使用==
在定義行中使用,最常見的用法如下所示:
# <code><nowiki>{{%s</nowiki>|<var><主要詞條在此></var>}}</code>
===參數===
]===]):format(tempname) .. export.paramdoc(args)
else
return ([===[
==使用==
在定義行中使用,最常見的用法如下所示:
# <code><nowiki>{{%s</nowiki>|<var><語言代碼></var>|<var><主要詞條在此></var>}}</code>
其中<code><var><語言代碼></var></code>是[[Wiktionary:語言|語言代碼]],例如%s。
===Parameters===
]===]):format(tempname, exlangs) .. export.paramdoc(args)
end
end
function export.fulldoc(args)
local shortcuts = args.shortcut[1] and ("{{shortcut|%s}}"):format(concat(args.shortcut, "|")) or ""
local introdoc = export.introdoc(args)
local usagedoc = export.usagedoc(args)
return "{{documentation subpage}}\n" .. shortcuts .. introdoc .. "\n" .. usagedoc
end
function export.infldoc(args)
args = shallow_copy(args)
args.sgdesc = args.sgdesc or (args.art or "the") .. " " ..
template_name():gsub(" of$", "") .. (args.form and " " .. args.form or "")
args.pldesc = args.sgdesc
args.sgdescof = args.sgdescof or args.sgdesc .. " of"
args.primaryentrytext = args.primaryentrytext or "of a primary entry"
return export.fulldoc(args)
end
local tag_type_to_description = {
-- If not listed, we just capitalize the first letter
["tense-aspect"] = "時態/體貌",
["voice-valence"] = "語態/配價",
["comparison"] = "比較等級",
["class"] = "變位類別",
["sound change"] = "語音變化",
["grammar"] = "其他語法",
["other"] = "其他標籤",
}
local tag_type_order = {
"person",
"number",
"gender",
"animacy",
"tense-aspect",
"mood",
"voice-valence",
"non-finite",
"case",
"state",
"comparison",
"register",
"deixis",
"clusivity",
"class",
"attitude",
"sound change",
"grammar",
"other",
}
local function tag_type_desc(tag_type)
return tag_type_to_description[tag_type] or ucfirst(tag_type)
end
local function sort_by_first(a, b)
return a[1] < b[1]
end
local function get_display_form(tag_set, lang)
local norm_tag_sets = normalize_tag_set(tag_set, lang)
if #norm_tag_sets == 1 then
return get_tag_set_display_form(norm_tag_sets[1], lang)
end
-- If we have a conjoined shortcut that expands to multiple tag sets, display them using a numbered list.
-- In order to do that inside a table we need a newline before the list.
local display_forms = {}
for _, norm_tag_set in ipairs(norm_tag_sets) do
insert(display_forms, "\n# " .. get_tag_set_display_form(norm_tag_set, lang))
end
return concat(display_forms)
end
local function organize_tag_data(data_module)
local tab = {}
for name, data in pairs(data_module.tags) do
local tag_type = data[TAG_TYPE]
if not tag_type then
-- Throw an error because hopefully it will get noticed and fixed. If we just skip it, it may never get
-- fixed.
error("Tag '" .. name .. "' has no tag_type")
end
if not tab[tag_type] then
tab[tag_type] = {}
end
insert(tab[tag_type], {name, data})
end
local tag_type_order_set = list_to_set(tag_type_order)
for tag_type, tags_of_type in pairs(tab) do
if not tag_type_order_set[tag_type] then
-- See justification above for throwing an error.
error("Tag type '" .. tag_type .. "' not listed in tag_type_order")
end
sort(tags_of_type, sort_by_first)
end
return tab
end
local function insert_group(parts, group)
for _, namedata in ipairs(group) do
local sparts = {}
local name, data = unpack(namedata)
insert(sparts, "| <code>" .. name .. "</code> || ")
local shortcuts = data[SHORTCUTS]
if shortcuts then
local ssparts = {}
if type(shortcuts) == "string" then
shortcuts = {shortcuts}
end
for _, shortcut in ipairs(shortcuts) do
insert(ssparts, "<code>" .. shortcut .. "</code>")
end
insert(sparts, concat(ssparts, ", ") .. " ")
end
insert(sparts, "|| " .. get_tag_display_form(name))
insert(parts, "|-")
insert(parts, concat(sparts))
end
end
function export.tagtable()
local data1_tab = organize_tag_data(form_of_data1)
local data2_tab = organize_tag_data(form_of_data2)
local parts = {}
insert(parts, '{|class="wikitable"')
insert(parts, "! 規範標籤 !! 縮寫 !! 顯示形式")
for _, tag_type in ipairs(tag_type_order) do
local group_tab = data1_tab[tag_type]
if group_tab then
insert(parts, "|-")
insert(parts, '! colspan="3" style="text-align: center; background: var(--wikt-palette-lightergrey);" | ' .. tag_type_desc(tag_type) ..
"(更常見)")
insert_group(parts, group_tab)
end
group_tab = data2_tab[tag_type]
if group_tab then
insert(parts, "|-")
insert(parts, '! colspan="3" style="text-align: center; background: var(--wikt-palette-lightergrey);" | ' .. tag_type_desc(tag_type) ..
"(較不常見)")
insert_group(parts, group_tab)
end
end
insert(parts, "|}")
return concat(parts, "\n")
end
local function organize_non_alias_shortcut_data(data_module, lang)
local non_alias_shortcuts = {}
for shortcut, full in pairs(data_module.shortcuts) do
if type(full) == "table" or is_link_or_html(full) or full:find("//") or full:find(":") then
insert(non_alias_shortcuts, {shortcut, full, get_display_form({shortcut}, lang)})
end
end
sort(non_alias_shortcuts, sort_by_first)
return non_alias_shortcuts
end
local function insert_shortcut_group(parts, shortcuts)
for _, spec in ipairs(shortcuts) do
local shortcut, full, display = unpack(spec)
insert(parts, "|-")
if type(full) == "table" then
full = "{" .. concat(full, " ") .. "}"
end
insert(parts, ("| <code>%s</code> || <code>%s</code> || %s"):format(shortcut, full, display))
end
end
function export.non_alias_shortcut_table()
local non_alias_shortcuts1 = organize_non_alias_shortcut_data(form_of_data1)
local non_alias_shortcuts2 = organize_non_alias_shortcut_data(form_of_data2)
local parts = {}
insert(parts, '{|class="wikitable"')
insert(parts, "! Shortcut !! Expansion !! Display form")
if non_alias_shortcuts1[1] then
insert(parts, "|-")
insert(parts, '! colspan="3" style="text-align: center; background: var(--wikt-palette-grey-3, #dddddd);" | 更常見:')
insert_shortcut_group(parts, non_alias_shortcuts1)
end
if non_alias_shortcuts2[1] then
insert(parts, "|-")
insert(parts, '! colspan="3" style="text-align: center; background: var(--wikt-palette-grey-3, #dddddd);" | 較不常見:')
insert_shortcut_group(parts, non_alias_shortcuts2)
end
insert(parts, "|}")
return concat(parts, "\n")
end
local function process_spec(spec, cats, labels)
if type(spec) == "string" then
insert(cats, spec)
return
elseif not spec or spec == true then
-- Ignore labels, etc.
return
elseif type(spec) ~= "table" then
error("Wrong type of condition " .. spec .. ": " .. type(spec))
elseif spec.labels then
table_extend(labels, spec.labels)
return
end
local predicate = spec[1]
if predicate == "multi" or predicate == "cond" then
for _, sp in iterate_from(2, ipairs(spec)) do -- Iterate from 2.
process_spec(sp, cats, labels)
end
elseif predicate == "pexists" then
process_spec(spec[2], cats, labels)
process_spec(spec[3], cats, labels)
elseif predicate == "has" or predicate == "hasall" or predicate == "hasany" or
predicate == "tags=" or predicate == "p=" or predicate == "pany" or
predicate == "not" then
process_spec(spec[3], cats, labels)
process_spec(spec[4], cats, labels)
elseif predicate == "and" or predicate == "or" then
process_spec(spec[3], cats, labels)
process_spec(spec[4], cats, labels)
elseif predicate == "call" then
return
else
error("Unrecognized predicate: " .. predicate)
end
end
local function find_categories_and_labels(catstruct)
local cats, labels = {}, {}
for _, spec in ipairs(catstruct) do
process_spec(spec, cats, labels)
end
return cats, labels
end
local function construct_category_table(cats)
local category_parts = {}
insert(category_parts, '{|class="wikitable"')
insert(category_parts, "! Category")
for _, cat in ipairs(cats) do
insert(category_parts, "|-")
insert(category_parts, "| <code>" .. cat .. "</code>")
end
insert(category_parts, "|}")
return concat(category_parts, "\n")
end
local function construct_label_table(labels, lang, replace_und)
local label_parts = {}
insert(label_parts, '{|class="wikitable"')
insert(label_parts, "! 標籤 !! 顯示形式 !! 相關分類")
for _, label in ipairs(labels) do
insert(label_parts, "|-")
local label_data = get_label_info{
label = label,
lang = lang,
}
local coded_categories = {}
for _, cat in ipairs(label_data.categories) do
if replace_und then
cat = cat:gsub("^und:", "LANGCODE:")
cat = cat:gsub("^Undetermined ", "LANG ")
end
insert(coded_categories, "<code>" .. cat .. "</code>")
end
insert(label_parts, ("| <code>%s</code> || %s || %s"):format(label, label_data.label,
concat(coded_categories, ",")))
end
insert(label_parts, "|}")
return concat(label_parts, "\n")
end
local function iterate_languages(langcodes_module, data_by_lang)
for langcode in pairs(require(langcodes_module)) do
local data_module_name = form_of_lang_data_module_prefix .. langcode
local data_module = safe_require(data_module_name)
if data_module or m_cats[langcode] and langcode ~= "und" then
local lang = get_lang(langcode, nil, true)
-- First do base-lemma params.
local base_lemma_param_table
if data_module and data_module.base_lemma_params and data_module.base_lemma_params[1] then
local base_lemma_param_parts = {}
insert(base_lemma_param_parts, '{|class="wikitable"')
insert(base_lemma_param_parts, "! 參數 !! 顯示形式")
for _, base_lemma_param in ipairs(data_module.base_lemma_params) do
insert(base_lemma_param_parts, "|-")
insert(base_lemma_param_parts, ("| <code>%s</code> || %s"):format(base_lemma_param.param,
get_display_form(base_lemma_param.tags, lang)))
end
insert(base_lemma_param_parts, "|}")
base_lemma_param_table = concat(base_lemma_param_parts, "\n")
end
-- Then do inflection tags.
local data1_tab = data_module and organize_tag_data(data_module) or {}
local tag_parts = {}
insert(tag_parts, '{|class="wikitable"')
insert(tag_parts, "! 規範標籤 !! 縮寫 !! 標籤類型 !! 顯示形式")
local saw_any_tag = false
for _, tag_type in ipairs(tag_type_order) do
local group_tab = data1_tab[tag_type]
if group_tab then
for _, namedata in ipairs(group_tab) do
local sparts = {}
local name, data = unpack(namedata)
insert(sparts, "| <code>" .. name .. "</code> || ")
if data.shortcuts then
local ssparts = {}
for _, shortcut in ipairs(data.shortcuts) do
insert(ssparts, "<code>" .. shortcut .. "</code>")
end
insert(sparts, concat(ssparts, ", ") .. " ")
end
insert(sparts, "|| " .. tag_type_desc(tag_type) .. " || " ..
get_tag_display_form(name, lang))
insert(tag_parts, "|-")
insert(tag_parts, concat(sparts))
saw_any_tag = true
end
end
end
insert(tag_parts, "|}")
local tag_table = saw_any_tag and concat(tag_parts, "\n") or nil
-- Then do non-alias shortcuts.
local non_alias_shortcut_table
local non_alias_shortcuts = data_module and organize_non_alias_shortcut_data(data_module, lang) or {}
if non_alias_shortcuts[1] then
local non_alias_shortcut_parts = {}
insert(non_alias_shortcut_parts, '{|class="wikitable"')
insert(non_alias_shortcut_parts, "! 縮寫 !! 展開 !! 顯示形式")
for _, spec in ipairs(non_alias_shortcuts) do
local shortcut, full, display = unpack(spec)
insert(non_alias_shortcut_parts, "|-")
if type(full) == "table" then
full = "{" .. concat(full, " ") .. "}"
end
insert(non_alias_shortcut_parts, ("| <code>%s</code> || <code>%s</code> || %s"):format(shortcut, full, display))
end
insert(non_alias_shortcut_parts, "|}")
non_alias_shortcut_table = concat(non_alias_shortcut_parts, "\n")
end
-- Then do categories and labels.
local category_table, label_table
if m_cats[langcode] then
local cats, labels = find_categories_and_labels(m_cats[langcode])
if cats[1] then
category_table = construct_category_table(cats)
end
if labels[1] then
label_table = construct_label_table(labels, lang)
end
end
-- Concatenate all the tables together, with appropriate explanatory text.
if base_lemma_param_table or tag_table or non_alias_shortcut_table or category_table or label_table then
local langname, lang_parts = lang:getCanonicalName(), {}
insert(lang_parts, "===" .. langname .. "===")
insert(lang_parts, show_editlink(data_module_name))
if base_lemma_param_table then
insert(lang_parts, ("%s特定的基礎詞元參數:"):format(langname))
insert(lang_parts, base_lemma_param_table)
end
if tag_table then
insert(lang_parts, ("%s特定的變位標籤:"):format(langname))
insert(lang_parts, tag_table)
end
if non_alias_shortcut_table then
insert(lang_parts, ("%s特定的非別名縮寫:"):format(langname))
insert(lang_parts, non_alias_shortcut_table)
end
if category_table then
insert(lang_parts, ("%s特定的分類(添加這些分類的確切條件在[[Module:form of/cats]]中描述):"):
format(langname))
insert(lang_parts, category_table)
end
if label_table then
insert(lang_parts, ("%s特定的標籤(添加這些標籤的確切條件在[[Module:form of/cats]]中描述):"):
format(langname))
insert(lang_parts, label_table)
end
insert(data_by_lang, {langname, concat(lang_parts, "\n")})
end
end
end
end
local function sort_by_first_english_first(langdata1, langdata2)
if langdata1[1] == "English" then
-- English is "less than" (goes before) all other languages
return true
elseif langdata2[1] == "English" then
-- All other languages are not "less than" (do not go before) English
return false
end
return langdata1[1] < langdata2[1]
end
function export.lang_specific_tables()
local data_by_lang = {}
iterate_languages("Module:languages/code to canonical name", data_by_lang)
iterate_languages("Module:etymology languages/code to canonical name", data_by_lang)
sort(data_by_lang, sort_by_first_english_first)
local parts = {}
for _, lang_and_data in ipairs(data_by_lang) do
insert(parts, lang_and_data[2])
end
return concat(parts, "\n")
end
function export.postable()
local shortcut_tab = {}
for shortcut, full in pairs(form_of_pos) do
if not shortcut_tab[full] then
shortcut_tab[full] = {}
end
insert(shortcut_tab[full], shortcut)
end
local shorcut_list = {}
for full, shortcuts in pairs(shortcut_tab) do
sort(shortcuts)
insert(shorcut_list, {full, shortcuts})
end
sort(shorcut_list, sort_by_first)
local parts = {}
insert(parts, '{|class="wikitable"')
insert(parts, "! 規範詞性 !! 縮寫")
for _, full_shortcuts in ipairs(shorcut_list) do
local full = full_shortcuts[1]
local shortcuts = full_shortcuts[2]
insert(parts, "|-")
local sparts = {}
for _, shortcut in ipairs(shortcuts) do
insert(sparts, "<code>" .. shortcut .. "</code>")
end
insert(parts, "| <code>" .. full .. "</code> || " .. concat(sparts, ", "))
end
insert(parts, "|}")
return concat(parts, "\n")
end
function export.lang_independent_category_table()
if m_cats["und"] then
local cats = find_categories_and_labels(m_cats["und"])
if cats[1] then
return construct_category_table(cats)
end
end
return "(目前沒有語言無關分類)"
end
function export.lang_independent_label_table()
if m_cats["und"] then
local labels = select(2, find_categories_and_labels(m_cats["und"]))
if labels[1] then
return construct_label_table(labels, get_lang("und"), "replace und")
end
end
return "(目前沒有語言無關標籤)"
end
return export
ndbr6ogajdt2iqwi2yw3m5uifomk89w
9739615
9739613
2026-04-21T06:57:14Z
TongcyDai
53191
9739615
Scribunto
text/plain
local export = {}
-- Author: Benwing2
--[==[ intro:
This module contains functions to implement {{form of/*doc}} templates.
The module contains the actual implementation, meant to be called from other
Lua code. See [[Module:form of doc/templates]] for the functions meant to be
called directly from templates.
]==]
local en_utilities_module = "Module:en-utilities"
local form_of_module = "Module:form of"
local form_of_data_module = "Module:form of/data"
local function_module = "Module:fun"
local labels_module = "Module:labels"
local languages_module = "Module:languages"
local load_module = "Module:load"
local parse_interface_module = "Module:parse interface"
local string_utilities_module = "Module:string utilities"
local table_module = "Module:table"
local template_parser_module = "Module:template parser"
local require = require
local m_form_of = require(form_of_module)
local m_form_of_data = require(form_of_data_module)
local m_cats = require(m_form_of.form_of_cats_module)
local m_str_utils = require(string_utilities_module)
local m_table = require(table_module)
local concat = table.concat
local get_indefinite_article = require(en_utilities_module).get_indefinite_article
local get_label_info = require(labels_module).get_label_info
local get_lang = require(languages_module).getByCode
local get_tag_display_form = m_form_of.get_tag_display_form
local get_tag_set_display_form = m_form_of.get_tag_set_display_form
local insert = table.insert
local ipairs = ipairs
local is_link_or_html = m_form_of.is_link_or_html
local iterate_from = require(function_module).iterateFrom
local list_to_set = m_table.listToSet
local normalize_tag_set = m_form_of.normalize_tag_set
local pairs = pairs
local remove_duplicates = m_table.removeDuplicates
local safe_require = require(load_module).safe_require
local serial_comma_join = m_table.serialCommaJoin
local shallow_copy = m_table.shallowCopy
local sort = table.sort
local table_extend = m_table.extend
local tostring = tostring
local ucfirst = m_str_utils.ucfirst
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local form_of_lang_data_module_prefix = m_form_of.form_of_lang_data_module_prefix
local form_of_data1 = require(m_form_of.form_of_data1_module)
local form_of_data2 = require(m_form_of.form_of_data2_module)
local form_of_pos = mw.loadData(m_form_of.headword_data_module).pos_aliases
local SHORTCUTS = m_form_of_data.SHORTCUTS
local TAG_TYPE = m_form_of_data.TAG_TYPE
local function lang_name(langcode, param)
return get_lang(langcode, param):getCanonicalName()
end
local function link_box(content)
return "<div class=\"noprint plainlinks\" style=\"float: right; clear: both; margin: 0 0 .5em 1em; background: var(--wikt-palette-paleblue, #f9f9f9); border: 1px var(--border-color-base,#aaaaaa) solid; margin-top: -1px; padding: 5px; font-weight: bold; font-size: small;\">"
.. content .. "</div>"
end
local function raw_editpage(page)
return tostring(mw.uri.fullUrl(page, "action=edit"))
end
local function show_editlink(page)
return link_box("[" .. raw_editpage(page) .. " 編輯]")
end
local function template_name(preserve_lang_code)
-- Fetch the template name, minus the '/documentation' suffix that may follow
-- and without any language-specific prefixes (e.g. 'el-' or 'ine-bsl-pro-')
-- (unless `preserve_lang_code` is given).
local PAGENAME = mw.title.getCurrentTitle().text -- DO NOT replace with mw.loadData("Module:headword/data").pagename; we want the whole template name
local tempname = PAGENAME:gsub("/documentation$", "")
if not preserve_lang_code then
while true do
-- Repeatedly strip off language code prefixes, in case there are multiple.
local newname = tempname:gsub("^%l%l%l?%-", "")
if newname == tempname then
break
end
tempname = newname
end
end
return tempname
end
function export.introdoc(args)
local lang = args.lang
local langname = lang and lang_name(lang, "lang")
local exlangnames = {}
for _, exlang in ipairs(args.exlang) do
insert(exlangnames, lang_name(exlang, "exlang"))
end
local parts = {}
local function ins(txt)
insert(parts, txt)
end
if args.etymtemp then
ins("{{hatnote|This template is for definition sections. For the template used in etymology sections, see [[Template:" .. args.etymtemp .. "]].}}\n")
end
ins(("{{uses lua|%s/templates}}"):format(form_of_module))
ins("此模板為")
if lang then
ins(langname)
elseif args.exlang[1] then
ins("(如" .. serial_comma_join(exlangnames, {conj = "或"} .. ")"))
end
ins(args.primaryentrytext or "主要條目的")
ins(args.pldesc or template_name())
ins("建立定義行。")
local cats = args.cat
if cats[1] then
ins("模板還將頁面加進")
local catparts = {}
if lang then
for _, cat in ipairs(cats) do
insert(catparts, "[[:Category:" .. langname .. cat .. "]]")
end
else
for _, cat in ipairs(cats) do
insert(catparts, "[[:Category:" .. ucfirst(cat) ..
"]]之適當語言特定子類別(例如[[:Category:" .. (exlangnames[1] or "漢語") .. cat .. "]])")
end
end
ins(serial_comma_join(catparts))
ins("當中。")
end
if args.addlintrotext then
ins("")
ins(args.addlintrotext)
end
ins("\n")
if args.withcap and args.withdot then
ins([===[
預設情況下,此模板會將輸出顯示為一個完整的句子,首字母大寫,句末帶句號。可以使用 {{para|nocap|1}} 和/或 {{para|nodot|1}} 來覆寫此設定(見下文)。
]===])
elseif args.withcap or args.withencap and lang == "en" then
ins([===[
By default, this template displays its output with an initial capital letter. This can be overridden using
{{para|nocap|1}} (see below).
]===])
elseif args.withencap then
ins([===[
By default, this template displays its output with an initial capital letter if the term's language in {{para|1}} is
English (but not otherwise]===])
if args.usedwithlimitedlangs then
ins([==[, and there are likely no English examples for this template).]==])
else
ins([==[). This can be overridden by using {{para|nocap|1}} to make the initial letter lowercase for
English. This does not auto-add a final period; if (and only if) the term's language is English, you should manually
include it after the template unless other text follows, since English definitions should be formatted like full
sentences.]==])
end
ins("\n")
else
ins([===[
By default, this template displays its output with an initial lowercase letter. This can be overridden by using
{{para|cap|1}} to make the initial letter capitalized]===] .. (lang == "en" and ".\n" or " (but this is not " ..
"generally recommended for non-English languages, as non-English definitions should be lowercase).\n"))
end
ins([===[
此模板'''不用於'''詞源章節。]===])
if args.etymtemp then
ins(" 對於這些章節,請使用{{tl|" .. args.etymtemp .. "}}。\n")
else
ins("\n")
end
ins([===[
'''Note:''' This is a “form of” template. The full list of such templates, including their distinctive properties and
how to customize the output of this template, can be found at [[:Category:Form-of templates]].
''The documentation for this page is auto-generated by [[Module:form of doc]].<sup>[<span class="plainlinks">[]===] .. raw_editpage("Module:form of doc") ..
" edit]</span>]</sup> As a result, the edit buttons on most section links do not work.''\n")
return concat(parts)
end
local function param(params, list, required)
local paramparts = {}
if type(params) ~= "table" then
params = {params}
end
for _, p in ipairs(params) do
local listparts = {}
insert(listparts, "{{para|" .. p .. "}}")
if list then
insert(listparts, ", {{para|" .. p .. "2}}")
insert(listparts, ", {{para|" .. p .. "3}}")
insert(listparts, ", etc.")
end
insert(paramparts, concat(listparts))
end
local reqtext = required and "'''(required)'''" or "''(optional)''"
return concat(paramparts, " or ") .. " " .. reqtext
end
function export.paramdoc(args)
local parts = {}
local function ins(txt)
insert(parts, txt)
end
local function param_and_doc(params, list, required, doc)
ins("; ")
ins(param(params, list, required))
ins("\n")
ins(": ")
ins(doc)
ins("\n")
end
local tempname = template_name()
local art = args.art or get_indefinite_article(tempname)
local sgdescof = args.sgdescof or art .. " " .. tempname
ins("''Positional (unnamed) parameters:''\n")
local lang = args.lang
if args.lang then
param_and_doc("1", false, true,
"The term to link to (which this page is " .. sgdescof .. "). This should include any needed diacritics as " ..
"appropriate to " .. lang_name(lang, "lang") .. ". These diacritics will automatically be stripped out in " ..
"the appropriate fashion in order to create the link to the page. This parameter can also include multiple " ..
"terms separated by a comma, as long as there is no space after the comma, and each such term can have " ..
"inline modifiers specifying transliterations, display forms, qualifiers, labels, genders and other " ..
"properties. See below.")
param_and_doc("2", false, false,
"The text to be shown in the link to the term. If empty or omitted, the term specified by the first " ..
"parameter will be used. This parameter is normally not necessary, and should not be used solely to " ..
"indicate diacritics; instead, put the diacritics in the first parameter.")
else
param_and_doc("1", false, true,
"The [[WT:LANGCODE|language code]] of the term linked to (which this page is " .. sgdescof .. "). See " ..
"[[Wiktionary:List of languages]]. <small>The parameter {{para|lang}} is a deprecated synonym; please do " ..
"not use. If this is used, all numbered parameters move down by one.</small>")
param_and_doc("2", false, true,
"The term to link to (which this page is " .. sgdescof .. "). This should include diacritics as appropriate " ..
"to the language (e.g. accents in Russian to mark the stress, vowel diacritics in Arabic, macrons in Latin " ..
"to indicate vowel length, etc.). These diacritics will automatically be stripped out in a " ..
"language-specific fashion in order to create the link to the page. This parameter can also include " ..
"multiple terms separated by a comma, as long as there is no space after the comma, and each such term can " ..
"have inline modifiers specifying transliterations, display forms, qualifiers, labels, genders and other " ..
"properties. See below.")
param_and_doc("3", false, false,
"The text to be shown in the link to the term. If empty or omitted, the term specified by the second " ..
"parameter will be used. This parameter is normally not necessary, and should not be used solely to " ..
"indicate diacritics; instead, put the diacritics in the second parameter.")
end
ins("命名參數:\n")
param_and_doc({"t", lang and "3" or "4"}, false, false, "A gloss or short translation of the term linked " ..
"to. <small>The parameter {{para|gloss}} is a deprecated synonym; please do not use.</small>")
param_and_doc("tr", false, false,
"Transliteration for non-Latin-script terms, if different from the automatically-generated one.")
param_and_doc("ts", false, false, "Transcription for non-Latin-script terms whose transliteration is " ..
"markedly different from the actual pronunciation. Should not be used for IPA pronunciations.")
param_and_doc("cat", true, false, "Additional categories to place the page into. They are automatically " ..
"prepended with the language name. A single parameter can contain multiple comma-separated categories as long " ..
"as there is no space after the comma.")
param_and_doc("addl", false, false, "Additional text to display at the end, before the final closing " ..
"<code></span></code> tag. It is normally joined to the preceding text by a comma followed by a space. However, if the " ..
"value of {{para|addl}} begins with a colon or semicolon, it is appended directly with no joining punctuation, " ..
"and if the value begins with an underscore, the remainder is joined to the preceding text with a space.")
if args.withfrom then
param_and_doc("from", true, false, "A label (see {{tl|label}}) that gives additional information on " ..
"the language variety that the term belongs to, the place that it originates from, or something similar.")
end
if args.withdot then
param_and_doc("dot", false, false,
"A character to replace the final dot that is normally shown automatically.")
param_and_doc("nodot", false, false, "If {{para|nodot|1}}, then no automatic dot will be shown.")
end
if (args.withcap or args.withencap) and not args.usedwithlimitedlangs then
-- Don't even mention if usedwithlimitedlangs=1, because there are unlikely to be English examples.
param_and_doc("nocap", false, false, "If {{para|nocap|1}}, then the first letter will be in lowercase." ..
(args.withencap and " Only useful for English, because other languages already begin with a lowercase letter."
or ""))
end
if not args.withcap then
param_and_doc("cap", false, false, "If {{para|cap|1}}, then the first letter will be in capitalized. " ..
"Not generally recommended" .. (args.withencap and "" or ", except for English definitions") ..
", because non-English definitions should begin with a lowercase letter and be formatted like a phrase, " ..
"rather than a full sentence.")
end
if args.cat and args.cat[1] then
param_and_doc("nocat", false, false, "Disable categorization of categories built into the template. " ..
"For example, {{tl|ellipsis of|en|...}} normally categories into e.g. [[:Category:English ellipses]], but " ..
"this can be disabled using {{para|nocat|1}}. This does not affect categories explicitly specified in the " ..
"template call itself using {{para|cat}}.")
end
param_and_doc("notext", false, false, "If {{para|notext|1}}, don't display the initial text preceding the " ..
"term(s), but only the actual term or terms. The page is still categorized as normal, unless {{para|nocat|1}} " ..
"is given.")
param_and_doc("id", false, false, "A sense id for the term, which links to anchors on the page set by " ..
"the {{tl|senseid}} template.")
param_and_doc("sc", false, false, "Script code to use, if script detection does not work. See " ..
"[[Wiktionary:Scripts]]. Rarely needs to be given.")
param_and_doc("sort", false, false, "Sort key for sorting any categories the page is added to. Rarely needs " ..
"to be given except for Japanese, and even then, only when there are multiple possible pronunciations.")
if args.addlparamtext then
ins("\n")
ins(args.addlparamtext)
ins("\n")
end
ins([==[
===Inline modifiers===
Use a syntax like <code>Изабе́лла<tr:Izabɛ́lla><t:Isabelle></code> to specify modifiers such as transliterations, glosses, labels and qualifiers. In this example, for the Russian name {{m|ru|Изабе́лла|tr=Izabɛ́lla|t=Isabelle}}, the manual transliteration ''Izabɛ́lla'' and gloss "Isabelle" are given. The following modifiers are recognized; see [[WT:Inline modifiers]] for more detailed discussion of inline modifiers and the meanings of the modifiers given below.
* <code>t</code>: gloss
* <code>tr</code>: transliteration
* <code>ts</code>: transcription, for languages where the transliteration and pronunciation are markedly different
* <code>l</code>: comma-separated left labels, e.g. {{cd|<l:rare>}} or {{cd|<l:UK,Australia>}} or {{cd|<l:archaic,or,dialectal>}} or {{cd|<l:<<rare>>, <<archaic>> or <<dialectal>>>}}
*: As shown, in the syntax without {{cd|<<...>>}}, there must not be a space after the comma for it to be recognized as a delimiter.
*: The labels appear '''before''' the term, parenthesized, italicized and appropriately linked as if {{tl|lb}} were used (but without categorization).
* <code>ll</code>: comma-separated right labels; these appear '''after''' the term, parenthesized, italicized and appropriately linked as for left labels
* <code>q</code>: left qualifier; this appears '''before''' the term, parenthesized and italicized, but displayed as-is, without interpretation; useful for one-off explanatory notes
* <code>qq</code>: right qualifier; this appears '''after''' the term, parenthesized and italicized
* <code>ref</code>: reference or references, using the syntax documented in [[Template:IPA#References]]
* <code>g</code>: comma-separated list of gender/number specifications; see [[Module:gender and number]] for the complete list
* <code>alt</code>: alternative display text
* <code>pos</code>: part of speech
* <code>ng</code>: arbitrary non-gloss explanatory text
* <code>lit</code>: literal meaning
* <code>id</code>: sense ID; see {{temp|senseid}}
* <code>sc</code>: script code]==])
return concat(parts)
end
function export.usagedoc(args)
local exlangs = {}
for _, exlang in ipairs(args.exlang) do
insert(exlangs, exlang)
end
if not args.usedwithlimitedlangs then
insert(exlangs, 'en')
insert(exlangs, 'de')
insert(exlangs, 'ja')
end
exlangs = remove_duplicates(exlangs)
local sub = {}
local langparts = {}
for _, langcode in ipairs(exlangs) do
insert(langparts, '<code>' .. langcode .. '</code> for ' .. lang_name(langcode, "exlang"))
end
local exlangs = serial_comma_join(langparts, {conj = "or"})
local tempname = template_name("preserve lang code")
if args.lang then
return ([===[
==使用==
在定義行中使用,最常見的用法如下所示:
# <code><nowiki>{{%s</nowiki>|<var><主要詞條在此></var>}}</code>
===參數===
]===]):format(tempname) .. export.paramdoc(args)
else
return ([===[
==使用==
在定義行中使用,最常見的用法如下所示:
# <code><nowiki>{{%s</nowiki>|<var><語言代碼></var>|<var><主要詞條在此></var>}}</code>
其中<code><var><語言代碼></var></code>是[[Wiktionary:語言|語言代碼]],例如%s。
===Parameters===
]===]):format(tempname, exlangs) .. export.paramdoc(args)
end
end
function export.fulldoc(args)
local shortcuts = args.shortcut[1] and ("{{shortcut|%s}}"):format(concat(args.shortcut, "|")) or ""
local introdoc = export.introdoc(args)
local usagedoc = export.usagedoc(args)
return "{{documentation subpage}}\n" .. shortcuts .. introdoc .. "\n" .. usagedoc
end
function export.infldoc(args)
args = shallow_copy(args)
args.sgdesc = args.sgdesc or (args.art or "the") .. " " ..
template_name():gsub(" of$", "") .. (args.form and " " .. args.form or "")
args.pldesc = args.sgdesc
args.sgdescof = args.sgdescof or args.sgdesc .. " of"
args.primaryentrytext = args.primaryentrytext or "of a primary entry"
return export.fulldoc(args)
end
local tag_type_to_description = {
-- If not listed, we just capitalize the first letter
["tense-aspect"] = "時態/體貌",
["voice-valence"] = "語態/配價",
["comparison"] = "比較等級",
["class"] = "變位類別",
["sound change"] = "語音變化",
["grammar"] = "其他語法",
["other"] = "其他標籤",
}
local tag_type_order = {
"person",
"number",
"gender",
"animacy",
"tense-aspect",
"mood",
"voice-valence",
"non-finite",
"case",
"state",
"comparison",
"register",
"deixis",
"clusivity",
"class",
"attitude",
"sound change",
"grammar",
"other",
}
local function tag_type_desc(tag_type)
return tag_type_to_description[tag_type] or ucfirst(tag_type)
end
local function sort_by_first(a, b)
return a[1] < b[1]
end
local function get_display_form(tag_set, lang)
local norm_tag_sets = normalize_tag_set(tag_set, lang)
if #norm_tag_sets == 1 then
return get_tag_set_display_form(norm_tag_sets[1], lang)
end
-- If we have a conjoined shortcut that expands to multiple tag sets, display them using a numbered list.
-- In order to do that inside a table we need a newline before the list.
local display_forms = {}
for _, norm_tag_set in ipairs(norm_tag_sets) do
insert(display_forms, "\n# " .. get_tag_set_display_form(norm_tag_set, lang))
end
return concat(display_forms)
end
local function organize_tag_data(data_module)
local tab = {}
for name, data in pairs(data_module.tags) do
local tag_type = data[TAG_TYPE]
if not tag_type then
-- Throw an error because hopefully it will get noticed and fixed. If we just skip it, it may never get
-- fixed.
error("Tag '" .. name .. "' has no tag_type")
end
if not tab[tag_type] then
tab[tag_type] = {}
end
insert(tab[tag_type], {name, data})
end
local tag_type_order_set = list_to_set(tag_type_order)
for tag_type, tags_of_type in pairs(tab) do
if not tag_type_order_set[tag_type] then
-- See justification above for throwing an error.
error("Tag type '" .. tag_type .. "' not listed in tag_type_order")
end
sort(tags_of_type, sort_by_first)
end
return tab
end
local function insert_group(parts, group)
for _, namedata in ipairs(group) do
local sparts = {}
local name, data = unpack(namedata)
insert(sparts, "| <code>" .. name .. "</code> || ")
local shortcuts = data[SHORTCUTS]
if shortcuts then
local ssparts = {}
if type(shortcuts) == "string" then
shortcuts = {shortcuts}
end
for _, shortcut in ipairs(shortcuts) do
insert(ssparts, "<code>" .. shortcut .. "</code>")
end
insert(sparts, concat(ssparts, ", ") .. " ")
end
insert(sparts, "|| " .. get_tag_display_form(name))
insert(parts, "|-")
insert(parts, concat(sparts))
end
end
function export.tagtable()
local data1_tab = organize_tag_data(form_of_data1)
local data2_tab = organize_tag_data(form_of_data2)
local parts = {}
insert(parts, '{|class="wikitable"')
insert(parts, "! 規範標籤 !! 縮寫 !! 顯示形式")
for _, tag_type in ipairs(tag_type_order) do
local group_tab = data1_tab[tag_type]
if group_tab then
insert(parts, "|-")
insert(parts, '! colspan="3" style="text-align: center; background: var(--wikt-palette-lightergrey);" | ' .. tag_type_desc(tag_type) ..
"(更常見)")
insert_group(parts, group_tab)
end
group_tab = data2_tab[tag_type]
if group_tab then
insert(parts, "|-")
insert(parts, '! colspan="3" style="text-align: center; background: var(--wikt-palette-lightergrey);" | ' .. tag_type_desc(tag_type) ..
"(較不常見)")
insert_group(parts, group_tab)
end
end
insert(parts, "|}")
return concat(parts, "\n")
end
local function organize_non_alias_shortcut_data(data_module, lang)
local non_alias_shortcuts = {}
for shortcut, full in pairs(data_module.shortcuts) do
if type(full) == "table" or is_link_or_html(full) or full:find("//") or full:find(":") then
insert(non_alias_shortcuts, {shortcut, full, get_display_form({shortcut}, lang)})
end
end
sort(non_alias_shortcuts, sort_by_first)
return non_alias_shortcuts
end
local function insert_shortcut_group(parts, shortcuts)
for _, spec in ipairs(shortcuts) do
local shortcut, full, display = unpack(spec)
insert(parts, "|-")
if type(full) == "table" then
full = "{" .. concat(full, " ") .. "}"
end
insert(parts, ("| <code>%s</code> || <code>%s</code> || %s"):format(shortcut, full, display))
end
end
function export.non_alias_shortcut_table()
local non_alias_shortcuts1 = organize_non_alias_shortcut_data(form_of_data1)
local non_alias_shortcuts2 = organize_non_alias_shortcut_data(form_of_data2)
local parts = {}
insert(parts, '{|class="wikitable"')
insert(parts, "! Shortcut !! Expansion !! Display form")
if non_alias_shortcuts1[1] then
insert(parts, "|-")
insert(parts, '! colspan="3" style="text-align: center; background: var(--wikt-palette-grey-3, #dddddd);" | 更常見:')
insert_shortcut_group(parts, non_alias_shortcuts1)
end
if non_alias_shortcuts2[1] then
insert(parts, "|-")
insert(parts, '! colspan="3" style="text-align: center; background: var(--wikt-palette-grey-3, #dddddd);" | 較不常見:')
insert_shortcut_group(parts, non_alias_shortcuts2)
end
insert(parts, "|}")
return concat(parts, "\n")
end
local function process_spec(spec, cats, labels)
if type(spec) == "string" then
insert(cats, spec)
return
elseif not spec or spec == true then
-- Ignore labels, etc.
return
elseif type(spec) ~= "table" then
error("Wrong type of condition " .. spec .. ": " .. type(spec))
elseif spec.labels then
table_extend(labels, spec.labels)
return
end
local predicate = spec[1]
if predicate == "multi" or predicate == "cond" then
for _, sp in iterate_from(2, ipairs(spec)) do -- Iterate from 2.
process_spec(sp, cats, labels)
end
elseif predicate == "pexists" then
process_spec(spec[2], cats, labels)
process_spec(spec[3], cats, labels)
elseif predicate == "has" or predicate == "hasall" or predicate == "hasany" or
predicate == "tags=" or predicate == "p=" or predicate == "pany" or
predicate == "not" then
process_spec(spec[3], cats, labels)
process_spec(spec[4], cats, labels)
elseif predicate == "and" or predicate == "or" then
process_spec(spec[3], cats, labels)
process_spec(spec[4], cats, labels)
elseif predicate == "call" then
return
else
error("Unrecognized predicate: " .. predicate)
end
end
local function find_categories_and_labels(catstruct)
local cats, labels = {}, {}
for _, spec in ipairs(catstruct) do
process_spec(spec, cats, labels)
end
return cats, labels
end
local function construct_category_table(cats)
local category_parts = {}
insert(category_parts, '{|class="wikitable"')
insert(category_parts, "! Category")
for _, cat in ipairs(cats) do
insert(category_parts, "|-")
insert(category_parts, "| <code>" .. cat .. "</code>")
end
insert(category_parts, "|}")
return concat(category_parts, "\n")
end
local function construct_label_table(labels, lang, replace_und)
local label_parts = {}
insert(label_parts, '{|class="wikitable"')
insert(label_parts, "! 標籤 !! 顯示形式 !! 相關分類")
for _, label in ipairs(labels) do
insert(label_parts, "|-")
local label_data = get_label_info{
label = label,
lang = lang,
}
local coded_categories = {}
for _, cat in ipairs(label_data.categories) do
if replace_und then
cat = cat:gsub("^und:", "LANGCODE:")
cat = cat:gsub("^Undetermined ", "LANG ")
end
insert(coded_categories, "<code>" .. cat .. "</code>")
end
insert(label_parts, ("| <code>%s</code> || %s || %s"):format(label, label_data.label,
concat(coded_categories, ",")))
end
insert(label_parts, "|}")
return concat(label_parts, "\n")
end
local function iterate_languages(langcodes_module, data_by_lang)
for langcode in pairs(require(langcodes_module)) do
local data_module_name = form_of_lang_data_module_prefix .. langcode
local data_module = safe_require(data_module_name)
if data_module or m_cats[langcode] and langcode ~= "und" then
local lang = get_lang(langcode, nil, true)
-- First do base-lemma params.
local base_lemma_param_table
if data_module and data_module.base_lemma_params and data_module.base_lemma_params[1] then
local base_lemma_param_parts = {}
insert(base_lemma_param_parts, '{|class="wikitable"')
insert(base_lemma_param_parts, "! 參數 !! 顯示形式")
for _, base_lemma_param in ipairs(data_module.base_lemma_params) do
insert(base_lemma_param_parts, "|-")
insert(base_lemma_param_parts, ("| <code>%s</code> || %s"):format(base_lemma_param.param,
get_display_form(base_lemma_param.tags, lang)))
end
insert(base_lemma_param_parts, "|}")
base_lemma_param_table = concat(base_lemma_param_parts, "\n")
end
-- Then do inflection tags.
local data1_tab = data_module and organize_tag_data(data_module) or {}
local tag_parts = {}
insert(tag_parts, '{|class="wikitable"')
insert(tag_parts, "! 規範標籤 !! 縮寫 !! 標籤類型 !! 顯示形式")
local saw_any_tag = false
for _, tag_type in ipairs(tag_type_order) do
local group_tab = data1_tab[tag_type]
if group_tab then
for _, namedata in ipairs(group_tab) do
local sparts = {}
local name, data = unpack(namedata)
insert(sparts, "| <code>" .. name .. "</code> || ")
if data.shortcuts then
local ssparts = {}
for _, shortcut in ipairs(data.shortcuts) do
insert(ssparts, "<code>" .. shortcut .. "</code>")
end
insert(sparts, concat(ssparts, ", ") .. " ")
end
insert(sparts, "|| " .. tag_type_desc(tag_type) .. " || " ..
get_tag_display_form(name, lang))
insert(tag_parts, "|-")
insert(tag_parts, concat(sparts))
saw_any_tag = true
end
end
end
insert(tag_parts, "|}")
local tag_table = saw_any_tag and concat(tag_parts, "\n") or nil
-- Then do non-alias shortcuts.
local non_alias_shortcut_table
local non_alias_shortcuts = data_module and organize_non_alias_shortcut_data(data_module, lang) or {}
if non_alias_shortcuts[1] then
local non_alias_shortcut_parts = {}
insert(non_alias_shortcut_parts, '{|class="wikitable"')
insert(non_alias_shortcut_parts, "! 縮寫 !! 展開 !! 顯示形式")
for _, spec in ipairs(non_alias_shortcuts) do
local shortcut, full, display = unpack(spec)
insert(non_alias_shortcut_parts, "|-")
if type(full) == "table" then
full = "{" .. concat(full, " ") .. "}"
end
insert(non_alias_shortcut_parts, ("| <code>%s</code> || <code>%s</code> || %s"):format(shortcut, full, display))
end
insert(non_alias_shortcut_parts, "|}")
non_alias_shortcut_table = concat(non_alias_shortcut_parts, "\n")
end
-- Then do categories and labels.
local category_table, label_table
if m_cats[langcode] then
local cats, labels = find_categories_and_labels(m_cats[langcode])
if cats[1] then
category_table = construct_category_table(cats)
end
if labels[1] then
label_table = construct_label_table(labels, lang)
end
end
-- Concatenate all the tables together, with appropriate explanatory text.
if base_lemma_param_table or tag_table or non_alias_shortcut_table or category_table or label_table then
local langname, lang_parts = lang:getCanonicalName(), {}
insert(lang_parts, "===" .. langname .. "===")
insert(lang_parts, show_editlink(data_module_name))
if base_lemma_param_table then
insert(lang_parts, ("%s特定的基礎詞元參數:"):format(langname))
insert(lang_parts, base_lemma_param_table)
end
if tag_table then
insert(lang_parts, ("%s特定的變位標籤:"):format(langname))
insert(lang_parts, tag_table)
end
if non_alias_shortcut_table then
insert(lang_parts, ("%s特定的非別名縮寫:"):format(langname))
insert(lang_parts, non_alias_shortcut_table)
end
if category_table then
insert(lang_parts, ("%s特定的分類(添加這些分類的確切條件在[[Module:form of/cats]]中描述):"):
format(langname))
insert(lang_parts, category_table)
end
if label_table then
insert(lang_parts, ("%s特定的標籤(添加這些標籤的確切條件在[[Module:form of/cats]]中描述):"):
format(langname))
insert(lang_parts, label_table)
end
insert(data_by_lang, {langname, concat(lang_parts, "\n")})
end
end
end
end
local function sort_by_first_english_first(langdata1, langdata2)
if langdata1[1] == "English" then
-- English is "less than" (goes before) all other languages
return true
elseif langdata2[1] == "English" then
-- All other languages are not "less than" (do not go before) English
return false
end
return langdata1[1] < langdata2[1]
end
function export.lang_specific_tables()
local data_by_lang = {}
iterate_languages("Module:languages/code to canonical name", data_by_lang)
iterate_languages("Module:etymology languages/code to canonical name", data_by_lang)
sort(data_by_lang, sort_by_first_english_first)
local parts = {}
for _, lang_and_data in ipairs(data_by_lang) do
insert(parts, lang_and_data[2])
end
return concat(parts, "\n")
end
function export.postable()
local shortcut_tab = {}
for shortcut, full in pairs(form_of_pos) do
if not shortcut_tab[full] then
shortcut_tab[full] = {}
end
insert(shortcut_tab[full], shortcut)
end
local shorcut_list = {}
for full, shortcuts in pairs(shortcut_tab) do
sort(shortcuts)
insert(shorcut_list, {full, shortcuts})
end
sort(shorcut_list, sort_by_first)
local parts = {}
insert(parts, '{|class="wikitable"')
insert(parts, "! 規範詞性 !! 縮寫")
for _, full_shortcuts in ipairs(shorcut_list) do
local full = full_shortcuts[1]
local shortcuts = full_shortcuts[2]
insert(parts, "|-")
local sparts = {}
for _, shortcut in ipairs(shortcuts) do
insert(sparts, "<code>" .. shortcut .. "</code>")
end
insert(parts, "| <code>" .. full .. "</code> || " .. concat(sparts, ", "))
end
insert(parts, "|}")
return concat(parts, "\n")
end
function export.lang_independent_category_table()
if m_cats["und"] then
local cats = find_categories_and_labels(m_cats["und"])
if cats[1] then
return construct_category_table(cats)
end
end
return "(目前沒有語言無關分類)"
end
function export.lang_independent_label_table()
if m_cats["und"] then
local labels = select(2, find_categories_and_labels(m_cats["und"]))
if labels[1] then
return construct_label_table(labels, get_lang("und"), "replace und")
end
end
return "(目前沒有語言無關標籤)"
end
return export
svyv1388bqzz5zx3vpzwokjr7n8uwln
9739617
9739615
2026-04-21T07:06:28Z
TongcyDai
53191
9739617
Scribunto
text/plain
local export = {}
-- Author: Benwing2
--[==[ intro:
This module contains functions to implement {{form of/*doc}} templates.
The module contains the actual implementation, meant to be called from other
Lua code. See [[Module:form of doc/templates]] for the functions meant to be
called directly from templates.
]==]
local en_utilities_module = "Module:en-utilities"
local form_of_module = "Module:form of"
local form_of_data_module = "Module:form of/data"
local function_module = "Module:fun"
local labels_module = "Module:labels"
local languages_module = "Module:languages"
local load_module = "Module:load"
local parse_interface_module = "Module:parse interface"
local string_utilities_module = "Module:string utilities"
local table_module = "Module:table"
local template_parser_module = "Module:template parser"
local require = require
local m_form_of = require(form_of_module)
local m_form_of_data = require(form_of_data_module)
local m_cats = require(m_form_of.form_of_cats_module)
local m_str_utils = require(string_utilities_module)
local m_table = require(table_module)
local concat = table.concat
local get_indefinite_article = require(en_utilities_module).get_indefinite_article
local get_label_info = require(labels_module).get_label_info
local get_lang = require(languages_module).getByCode
local get_tag_display_form = m_form_of.get_tag_display_form
local get_tag_set_display_form = m_form_of.get_tag_set_display_form
local insert = table.insert
local ipairs = ipairs
local is_link_or_html = m_form_of.is_link_or_html
local iterate_from = require(function_module).iterateFrom
local list_to_set = m_table.listToSet
local normalize_tag_set = m_form_of.normalize_tag_set
local pairs = pairs
local remove_duplicates = m_table.removeDuplicates
local safe_require = require(load_module).safe_require
local serial_comma_join = m_table.serialCommaJoin
local shallow_copy = m_table.shallowCopy
local sort = table.sort
local table_extend = m_table.extend
local tostring = tostring
local ucfirst = m_str_utils.ucfirst
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local form_of_lang_data_module_prefix = m_form_of.form_of_lang_data_module_prefix
local form_of_data1 = require(m_form_of.form_of_data1_module)
local form_of_data2 = require(m_form_of.form_of_data2_module)
local form_of_pos = mw.loadData(m_form_of.headword_data_module).pos_aliases
local SHORTCUTS = m_form_of_data.SHORTCUTS
local TAG_TYPE = m_form_of_data.TAG_TYPE
local function lang_name(langcode, param)
return get_lang(langcode, param):getCanonicalName()
end
local function link_box(content)
return "<div class=\"noprint plainlinks\" style=\"float: right; clear: both; margin: 0 0 .5em 1em; background: var(--wikt-palette-paleblue, #f9f9f9); border: 1px var(--border-color-base,#aaaaaa) solid; margin-top: -1px; padding: 5px; font-weight: bold; font-size: small;\">"
.. content .. "</div>"
end
local function raw_editpage(page)
return tostring(mw.uri.fullUrl(page, "action=edit"))
end
local function show_editlink(page)
return link_box("[" .. raw_editpage(page) .. " 編輯]")
end
local function template_name(preserve_lang_code)
-- Fetch the template name, minus the '/documentation' suffix that may follow
-- and without any language-specific prefixes (e.g. 'el-' or 'ine-bsl-pro-')
-- (unless `preserve_lang_code` is given).
local PAGENAME = mw.title.getCurrentTitle().text -- DO NOT replace with mw.loadData("Module:headword/data").pagename; we want the whole template name
local tempname = PAGENAME:gsub("/documentation$", "")
if not preserve_lang_code then
while true do
-- Repeatedly strip off language code prefixes, in case there are multiple.
local newname = tempname:gsub("^%l%l%l?%-", "")
if newname == tempname then
break
end
tempname = newname
end
end
return tempname
end
function export.introdoc(args)
local lang = args.lang
local langname = lang and lang_name(lang, "lang")
local exlangnames = {}
for _, exlang in ipairs(args.exlang) do
insert(exlangnames, lang_name(exlang, "exlang"))
end
local parts = {}
local function ins(txt)
insert(parts, txt)
end
if args.etymtemp then
ins("{{hatnote|This template is for definition sections. For the template used in etymology sections, see [[Template:" .. args.etymtemp .. "]].}}\n")
end
ins(("{{uses lua|%s/templates}}"):format(form_of_module))
ins("此模板為")
if lang then
ins(langname)
elseif args.exlang[1] then
ins("(如" .. serial_comma_join(exlangnames, {conj = "或"} .. ")"))
end
ins(args.primaryentrytext or "主要條目的")
ins(args.pldesc or template_name())
ins("建立定義行。")
local cats = args.cat
if cats[1] then
ins("模板還將頁面加進")
local catparts = {}
if lang then
for _, cat in ipairs(cats) do
insert(catparts, "[[:Category:" .. langname .. cat .. "]]")
end
else
for _, cat in ipairs(cats) do
insert(catparts, "[[:Category:" .. ucfirst(cat) ..
"]]之適當語言特定子類別(例如[[:Category:" .. (exlangnames[1] or "漢語") .. cat .. "]])")
end
end
ins(serial_comma_join(catparts))
ins("當中。")
end
if args.addlintrotext then
ins("")
ins(args.addlintrotext)
end
ins("\n")
if args.withcap and args.withdot then
ins([===[
預設情況下,此模板會將輸出顯示為一個完整的句子,首字母大寫,句末帶句號。可以使用 {{para|nocap|1}} 和/或 {{para|nodot|1}} 來覆寫此設定(見下文)。
]===])
elseif args.withcap or args.withencap and lang == "en" then
ins([===[
By default, this template displays its output with an initial capital letter. This can be overridden using
{{para|nocap|1}} (see below).
]===])
elseif args.withencap then
ins([===[
By default, this template displays its output with an initial capital letter if the term's language in {{para|1}} is
English (but not otherwise]===])
if args.usedwithlimitedlangs then
ins([==[, and there are likely no English examples for this template).]==])
else
ins([==[). This can be overridden by using {{para|nocap|1}} to make the initial letter lowercase for
English. This does not auto-add a final period; if (and only if) the term's language is English, you should manually
include it after the template unless other text follows, since English definitions should be formatted like full
sentences.]==])
end
ins("\n")
else
ins([===[
By default, this template displays its output with an initial lowercase letter. This can be overridden by using
{{para|cap|1}} to make the initial letter capitalized]===] .. (lang == "en" and ".\n" or " (but this is not " ..
"generally recommended for non-English languages, as non-English definitions should be lowercase).\n"))
end
ins([===[
此模板'''不用於'''詞源章節。]===])
if args.etymtemp then
ins(" 對於這些章節,請使用{{tl|" .. args.etymtemp .. "}}。\n")
else
ins("\n")
end
ins([===[
'''Note:''' This is a “form of” template. The full list of such templates, including their distinctive properties and
how to customize the output of this template, can be found at [[:Category:Form-of templates]].
''The documentation for this page is auto-generated by [[Module:form of doc]].<sup>[<span class="plainlinks">[]===] .. raw_editpage("Module:form of doc") ..
" edit]</span>]</sup> As a result, the edit buttons on most section links do not work.''\n")
return concat(parts)
end
local function param(params, list, required)
local paramparts = {}
if type(params) ~= "table" then
params = {params}
end
for _, p in ipairs(params) do
local listparts = {}
insert(listparts, "{{para|" .. p .. "}}")
if list then
insert(listparts, ", {{para|" .. p .. "2}}")
insert(listparts, ", {{para|" .. p .. "3}}")
insert(listparts, ", etc.")
end
insert(paramparts, concat(listparts))
end
local reqtext = required and "'''(required)'''" or "''(optional)''"
return concat(paramparts, " or ") .. " " .. reqtext
end
function export.paramdoc(args)
local parts = {}
local function ins(txt)
insert(parts, txt)
end
local function param_and_doc(params, list, required, doc)
ins("; ")
ins(param(params, list, required))
ins("\n")
ins(": ")
ins(doc)
ins("\n")
end
local tempname = template_name()
local art = args.art or get_indefinite_article(tempname)
local sgdescof = args.sgdescof or art .. " " .. tempname
ins("''位置(未具名)參數:''\n")
local lang = args.lang
if args.lang then
param_and_doc("1", false, true,
"要連結到的詞條(本頁面即是該詞條的" .. sgdescof .. ")。這應包含該" ..
lang_name(lang, "lang") .. "適用的任何必要附加符號。這些附加符號會自動以" ..
"適當的方式移除,以便建立指向該頁面的連結。此參數也可以包含多個" ..
"以逗號分隔的詞條(逗號後不能有空格),且每個詞條都可以帶有" ..
"行內修飾符,用來指定轉寫、顯示形式、限定詞、標籤、性別和其他" ..
"屬性。詳見下文。")
param_and_doc("2", false, false,
"在詞條連結中顯示的文字。如果留空或省略,則會使用第一個參數指定" ..
"的詞條。此參數通常不是必需的,且不應僅為了顯示附加符號而使用;" ..
"請將附加符號放在第一個參數中。")
else
param_and_doc("1", false, true,
"所連結詞條的[[WT:LANGCODE|語言代碼]](本頁面即是該詞條的" .. sgdescof .. ")。參見" ..
"[[Wiktionary:語言列表]]。<small>參數 {{para|lang}} 是已棄用的等價參數;請" ..
"勿使用。如果使用了該參數,所有數字參數都會向後移一位。</small>")
param_and_doc("2", false, true,
"要連結到的詞條(本頁面即是該詞條的" .. sgdescof .. ")。這應包含該語言適用的附加符號" ..
"(例如:俄語中標記重音的重音符號、阿拉伯語中的母音符號、拉丁語中表示母音長度的" ..
"長音符號等)。這些附加符號會自動以該語言特有的方式移除,以便建立指向該頁面的連結。" ..
"此參數也可以包含多個以逗號分隔的詞條(逗號後不能有空格),且每個詞條都可以" ..
"帶有行內修飾符,用來指定轉寫、顯示形式、限定詞、標籤、性別和其他" ..
"屬性。詳見下文。")
param_and_doc("3", false, false,
"在詞條連結中顯示的文字。如果留空或省略,則會使用第二個參數指定" ..
"的詞條。此參數通常不是必需的,且不應僅為了顯示附加符號而使用;" ..
"請將附加符號放在第二個參數中。")
end
ins("具名參數:\n")
param_and_doc({"t", lang and "3" or "4"}, false, false, "所連結詞條的釋義或簡短翻譯。" ..
"<small>參數 {{para|gloss}} 是已棄用的等價參數;請勿使用。</small>")
param_and_doc("tr", false, false,
"非拉丁字母詞條的轉寫(若與自動生成的轉寫不同)。")
param_and_doc("ts", false, false, "非拉丁字母詞條的標音(適用於轉寫與實際發音有" ..
"明顯差異的情況)。不應用於 IPA 讀音。")
param_and_doc("cat", true, false, "要將頁面歸入的其他分類。它們會自動在" ..
"前面加上語言名稱。單個參數可以包含多個以逗號分隔的分類(只要" ..
"逗號後沒有空格)。")
param_and_doc("addl", false, false, "在結尾(最後的 <code></span></code> 標籤前)顯示的" ..
"附加文字。通常會以逗號加空格連接到前文。然而,如果 {{para|addl}} 的值以冒號或分號開頭," ..
"則會直接附加而不加任何連接標點;如果以底線開頭,其餘部分會以空格連接到前文。")
if args.withfrom then
param_and_doc("from", true, false, "標籤(參見 {{tl|label}}),用於提供有關" ..
"該詞條所屬語言變體、來源地或類似內容的附加資訊。")
end
if args.withdot then
param_and_doc("dot", false, false,
"用來替換通常自動顯示的末尾句點的字元。")
param_and_doc("nodot", false, false, "如果設置 {{para|nodot|1}},則不顯示自動句點。")
end
if (args.withcap or args.withencap) and not args.usedwithlimitedlangs then
-- 如果 usedwithlimitedlangs=1 則不提及,因為不太可能有英語範例。
param_and_doc("nocap", false, false, "如果設置 {{para|nocap|1}},則首字母將小寫。" ..
(args.withencap and " 僅對英語有用,因為其他語言已經以小寫字母開頭。"
or ""))
end
if not args.withcap then
param_and_doc("cap", false, false, "如果設置 {{para|cap|1}},則首字母將大寫。" ..
"通常不建議這樣做" .. (args.withencap and "" or ",除非是英語定義") ..
",因為非英語定義應以小寫字母開頭,並以短語的形式而非完整句子進行格式化。")
end
if args.cat and args.cat[1] then
param_and_doc("nocat", false, false, "停用模板內置分類的功能。" ..
"例如,{{tl|ellipsis of|en|...}} 通常會將頁面歸入 [[:Category:英語省略號]],但" ..
"可以使用 {{para|nocat|1}} 來停用。這不會影響在模板調用中通過 {{para|cat}} 明確指定的分類。")
end
param_and_doc("notext", false, false, "如果設置 {{para|notext|1}},則不顯示詞條前的初始文字," ..
"僅顯示實際詞條。除非提供了 {{para|nocat|1}},否則頁面仍會照常分類。")
param_and_doc("id", false, false, "詞條的義項 ID,連結至由 {{tl|senseid}} 模板設置的錨點。")
param_and_doc("sc", false, false, "若文字檢測失敗時要使用的文字代碼。參見" ..
"[[Wiktionary:文字]]。很少需要提供。")
param_and_doc("sort", false, false, "用於對頁面所加入的任何分類進行排序的排序鍵。除了日語外" ..
"很少需要提供,即便是在日語中,也僅在有多個可能讀音時才需要。")
if args.addlparamtext then
ins("\n")
ins(args.addlparamtext)
ins("\n")
end
ins([==[
===Inline modifiers===
Use a syntax like <code>Изабе́лла<tr:Izabɛ́lla><t:Isabelle></code> to specify modifiers such as transliterations, glosses, labels and qualifiers. In this example, for the Russian name {{m|ru|Изабе́лла|tr=Izabɛ́lla|t=Isabelle}}, the manual transliteration ''Izabɛ́lla'' and gloss "Isabelle" are given. The following modifiers are recognized; see [[WT:Inline modifiers]] for more detailed discussion of inline modifiers and the meanings of the modifiers given below.
* <code>t</code>: gloss
* <code>tr</code>: transliteration
* <code>ts</code>: transcription, for languages where the transliteration and pronunciation are markedly different
* <code>l</code>: comma-separated left labels, e.g. {{cd|<l:rare>}} or {{cd|<l:UK,Australia>}} or {{cd|<l:archaic,or,dialectal>}} or {{cd|<l:<<rare>>, <<archaic>> or <<dialectal>>>}}
*: As shown, in the syntax without {{cd|<<...>>}}, there must not be a space after the comma for it to be recognized as a delimiter.
*: The labels appear '''before''' the term, parenthesized, italicized and appropriately linked as if {{tl|lb}} were used (but without categorization).
* <code>ll</code>: comma-separated right labels; these appear '''after''' the term, parenthesized, italicized and appropriately linked as for left labels
* <code>q</code>: left qualifier; this appears '''before''' the term, parenthesized and italicized, but displayed as-is, without interpretation; useful for one-off explanatory notes
* <code>qq</code>: right qualifier; this appears '''after''' the term, parenthesized and italicized
* <code>ref</code>: reference or references, using the syntax documented in [[Template:IPA#References]]
* <code>g</code>: comma-separated list of gender/number specifications; see [[Module:gender and number]] for the complete list
* <code>alt</code>: alternative display text
* <code>pos</code>: part of speech
* <code>ng</code>: arbitrary non-gloss explanatory text
* <code>lit</code>: literal meaning
* <code>id</code>: sense ID; see {{temp|senseid}}
* <code>sc</code>: script code]==])
return concat(parts)
end
function export.usagedoc(args)
local exlangs = {}
for _, exlang in ipairs(args.exlang) do
insert(exlangs, exlang)
end
if not args.usedwithlimitedlangs then
insert(exlangs, 'en')
insert(exlangs, 'de')
insert(exlangs, 'ja')
end
exlangs = remove_duplicates(exlangs)
local sub = {}
local langparts = {}
for _, langcode in ipairs(exlangs) do
insert(langparts, '<code>' .. langcode .. '</code> for ' .. lang_name(langcode, "exlang"))
end
local exlangs = serial_comma_join(langparts, {conj = "or"})
local tempname = template_name("preserve lang code")
if args.lang then
return ([===[
==使用==
在定義行中使用,最常見的用法如下所示:
# <code><nowiki>{{%s</nowiki>|<var><主要詞條在此></var>}}</code>
===參數===
]===]):format(tempname) .. export.paramdoc(args)
else
return ([===[
==使用==
在定義行中使用,最常見的用法如下所示:
# <code><nowiki>{{%s</nowiki>|<var><語言代碼></var>|<var><主要詞條在此></var>}}</code>
其中<code><var><語言代碼></var></code>是[[Wiktionary:語言|語言代碼]],例如%s。
===Parameters===
]===]):format(tempname, exlangs) .. export.paramdoc(args)
end
end
function export.fulldoc(args)
local shortcuts = args.shortcut[1] and ("{{shortcut|%s}}"):format(concat(args.shortcut, "|")) or ""
local introdoc = export.introdoc(args)
local usagedoc = export.usagedoc(args)
return "{{documentation subpage}}\n" .. shortcuts .. introdoc .. "\n" .. usagedoc
end
function export.infldoc(args)
args = shallow_copy(args)
args.sgdesc = args.sgdesc or (args.art or "the") .. " " ..
template_name():gsub(" of$", "") .. (args.form and " " .. args.form or "")
args.pldesc = args.sgdesc
args.sgdescof = args.sgdescof or args.sgdesc .. " of"
args.primaryentrytext = args.primaryentrytext or "of a primary entry"
return export.fulldoc(args)
end
local tag_type_to_description = {
-- If not listed, we just capitalize the first letter
["tense-aspect"] = "時態/體貌",
["voice-valence"] = "語態/配價",
["comparison"] = "比較等級",
["class"] = "變位類別",
["sound change"] = "語音變化",
["grammar"] = "其他語法",
["other"] = "其他標籤",
}
local tag_type_order = {
"person",
"number",
"gender",
"animacy",
"tense-aspect",
"mood",
"voice-valence",
"non-finite",
"case",
"state",
"comparison",
"register",
"deixis",
"clusivity",
"class",
"attitude",
"sound change",
"grammar",
"other",
}
local function tag_type_desc(tag_type)
return tag_type_to_description[tag_type] or ucfirst(tag_type)
end
local function sort_by_first(a, b)
return a[1] < b[1]
end
local function get_display_form(tag_set, lang)
local norm_tag_sets = normalize_tag_set(tag_set, lang)
if #norm_tag_sets == 1 then
return get_tag_set_display_form(norm_tag_sets[1], lang)
end
-- If we have a conjoined shortcut that expands to multiple tag sets, display them using a numbered list.
-- In order to do that inside a table we need a newline before the list.
local display_forms = {}
for _, norm_tag_set in ipairs(norm_tag_sets) do
insert(display_forms, "\n# " .. get_tag_set_display_form(norm_tag_set, lang))
end
return concat(display_forms)
end
local function organize_tag_data(data_module)
local tab = {}
for name, data in pairs(data_module.tags) do
local tag_type = data[TAG_TYPE]
if not tag_type then
-- Throw an error because hopefully it will get noticed and fixed. If we just skip it, it may never get
-- fixed.
error("Tag '" .. name .. "' has no tag_type")
end
if not tab[tag_type] then
tab[tag_type] = {}
end
insert(tab[tag_type], {name, data})
end
local tag_type_order_set = list_to_set(tag_type_order)
for tag_type, tags_of_type in pairs(tab) do
if not tag_type_order_set[tag_type] then
-- See justification above for throwing an error.
error("Tag type '" .. tag_type .. "' not listed in tag_type_order")
end
sort(tags_of_type, sort_by_first)
end
return tab
end
local function insert_group(parts, group)
for _, namedata in ipairs(group) do
local sparts = {}
local name, data = unpack(namedata)
insert(sparts, "| <code>" .. name .. "</code> || ")
local shortcuts = data[SHORTCUTS]
if shortcuts then
local ssparts = {}
if type(shortcuts) == "string" then
shortcuts = {shortcuts}
end
for _, shortcut in ipairs(shortcuts) do
insert(ssparts, "<code>" .. shortcut .. "</code>")
end
insert(sparts, concat(ssparts, ", ") .. " ")
end
insert(sparts, "|| " .. get_tag_display_form(name))
insert(parts, "|-")
insert(parts, concat(sparts))
end
end
function export.tagtable()
local data1_tab = organize_tag_data(form_of_data1)
local data2_tab = organize_tag_data(form_of_data2)
local parts = {}
insert(parts, '{|class="wikitable"')
insert(parts, "! 規範標籤 !! 縮寫 !! 顯示形式")
for _, tag_type in ipairs(tag_type_order) do
local group_tab = data1_tab[tag_type]
if group_tab then
insert(parts, "|-")
insert(parts, '! colspan="3" style="text-align: center; background: var(--wikt-palette-lightergrey);" | ' .. tag_type_desc(tag_type) ..
"(更常見)")
insert_group(parts, group_tab)
end
group_tab = data2_tab[tag_type]
if group_tab then
insert(parts, "|-")
insert(parts, '! colspan="3" style="text-align: center; background: var(--wikt-palette-lightergrey);" | ' .. tag_type_desc(tag_type) ..
"(較不常見)")
insert_group(parts, group_tab)
end
end
insert(parts, "|}")
return concat(parts, "\n")
end
local function organize_non_alias_shortcut_data(data_module, lang)
local non_alias_shortcuts = {}
for shortcut, full in pairs(data_module.shortcuts) do
if type(full) == "table" or is_link_or_html(full) or full:find("//") or full:find(":") then
insert(non_alias_shortcuts, {shortcut, full, get_display_form({shortcut}, lang)})
end
end
sort(non_alias_shortcuts, sort_by_first)
return non_alias_shortcuts
end
local function insert_shortcut_group(parts, shortcuts)
for _, spec in ipairs(shortcuts) do
local shortcut, full, display = unpack(spec)
insert(parts, "|-")
if type(full) == "table" then
full = "{" .. concat(full, " ") .. "}"
end
insert(parts, ("| <code>%s</code> || <code>%s</code> || %s"):format(shortcut, full, display))
end
end
function export.non_alias_shortcut_table()
local non_alias_shortcuts1 = organize_non_alias_shortcut_data(form_of_data1)
local non_alias_shortcuts2 = organize_non_alias_shortcut_data(form_of_data2)
local parts = {}
insert(parts, '{|class="wikitable"')
insert(parts, "! Shortcut !! Expansion !! Display form")
if non_alias_shortcuts1[1] then
insert(parts, "|-")
insert(parts, '! colspan="3" style="text-align: center; background: var(--wikt-palette-grey-3, #dddddd);" | 更常見:')
insert_shortcut_group(parts, non_alias_shortcuts1)
end
if non_alias_shortcuts2[1] then
insert(parts, "|-")
insert(parts, '! colspan="3" style="text-align: center; background: var(--wikt-palette-grey-3, #dddddd);" | 較不常見:')
insert_shortcut_group(parts, non_alias_shortcuts2)
end
insert(parts, "|}")
return concat(parts, "\n")
end
local function process_spec(spec, cats, labels)
if type(spec) == "string" then
insert(cats, spec)
return
elseif not spec or spec == true then
-- Ignore labels, etc.
return
elseif type(spec) ~= "table" then
error("Wrong type of condition " .. spec .. ": " .. type(spec))
elseif spec.labels then
table_extend(labels, spec.labels)
return
end
local predicate = spec[1]
if predicate == "multi" or predicate == "cond" then
for _, sp in iterate_from(2, ipairs(spec)) do -- Iterate from 2.
process_spec(sp, cats, labels)
end
elseif predicate == "pexists" then
process_spec(spec[2], cats, labels)
process_spec(spec[3], cats, labels)
elseif predicate == "has" or predicate == "hasall" or predicate == "hasany" or
predicate == "tags=" or predicate == "p=" or predicate == "pany" or
predicate == "not" then
process_spec(spec[3], cats, labels)
process_spec(spec[4], cats, labels)
elseif predicate == "and" or predicate == "or" then
process_spec(spec[3], cats, labels)
process_spec(spec[4], cats, labels)
elseif predicate == "call" then
return
else
error("Unrecognized predicate: " .. predicate)
end
end
local function find_categories_and_labels(catstruct)
local cats, labels = {}, {}
for _, spec in ipairs(catstruct) do
process_spec(spec, cats, labels)
end
return cats, labels
end
local function construct_category_table(cats)
local category_parts = {}
insert(category_parts, '{|class="wikitable"')
insert(category_parts, "! Category")
for _, cat in ipairs(cats) do
insert(category_parts, "|-")
insert(category_parts, "| <code>" .. cat .. "</code>")
end
insert(category_parts, "|}")
return concat(category_parts, "\n")
end
local function construct_label_table(labels, lang, replace_und)
local label_parts = {}
insert(label_parts, '{|class="wikitable"')
insert(label_parts, "! 標籤 !! 顯示形式 !! 相關分類")
for _, label in ipairs(labels) do
insert(label_parts, "|-")
local label_data = get_label_info{
label = label,
lang = lang,
}
local coded_categories = {}
for _, cat in ipairs(label_data.categories) do
if replace_und then
cat = cat:gsub("^und:", "LANGCODE:")
cat = cat:gsub("^Undetermined ", "LANG ")
end
insert(coded_categories, "<code>" .. cat .. "</code>")
end
insert(label_parts, ("| <code>%s</code> || %s || %s"):format(label, label_data.label,
concat(coded_categories, ",")))
end
insert(label_parts, "|}")
return concat(label_parts, "\n")
end
local function iterate_languages(langcodes_module, data_by_lang)
for langcode in pairs(require(langcodes_module)) do
local data_module_name = form_of_lang_data_module_prefix .. langcode
local data_module = safe_require(data_module_name)
if data_module or m_cats[langcode] and langcode ~= "und" then
local lang = get_lang(langcode, nil, true)
-- First do base-lemma params.
local base_lemma_param_table
if data_module and data_module.base_lemma_params and data_module.base_lemma_params[1] then
local base_lemma_param_parts = {}
insert(base_lemma_param_parts, '{|class="wikitable"')
insert(base_lemma_param_parts, "! 參數 !! 顯示形式")
for _, base_lemma_param in ipairs(data_module.base_lemma_params) do
insert(base_lemma_param_parts, "|-")
insert(base_lemma_param_parts, ("| <code>%s</code> || %s"):format(base_lemma_param.param,
get_display_form(base_lemma_param.tags, lang)))
end
insert(base_lemma_param_parts, "|}")
base_lemma_param_table = concat(base_lemma_param_parts, "\n")
end
-- Then do inflection tags.
local data1_tab = data_module and organize_tag_data(data_module) or {}
local tag_parts = {}
insert(tag_parts, '{|class="wikitable"')
insert(tag_parts, "! 規範標籤 !! 縮寫 !! 標籤類型 !! 顯示形式")
local saw_any_tag = false
for _, tag_type in ipairs(tag_type_order) do
local group_tab = data1_tab[tag_type]
if group_tab then
for _, namedata in ipairs(group_tab) do
local sparts = {}
local name, data = unpack(namedata)
insert(sparts, "| <code>" .. name .. "</code> || ")
if data.shortcuts then
local ssparts = {}
for _, shortcut in ipairs(data.shortcuts) do
insert(ssparts, "<code>" .. shortcut .. "</code>")
end
insert(sparts, concat(ssparts, ", ") .. " ")
end
insert(sparts, "|| " .. tag_type_desc(tag_type) .. " || " ..
get_tag_display_form(name, lang))
insert(tag_parts, "|-")
insert(tag_parts, concat(sparts))
saw_any_tag = true
end
end
end
insert(tag_parts, "|}")
local tag_table = saw_any_tag and concat(tag_parts, "\n") or nil
-- Then do non-alias shortcuts.
local non_alias_shortcut_table
local non_alias_shortcuts = data_module and organize_non_alias_shortcut_data(data_module, lang) or {}
if non_alias_shortcuts[1] then
local non_alias_shortcut_parts = {}
insert(non_alias_shortcut_parts, '{|class="wikitable"')
insert(non_alias_shortcut_parts, "! 縮寫 !! 展開 !! 顯示形式")
for _, spec in ipairs(non_alias_shortcuts) do
local shortcut, full, display = unpack(spec)
insert(non_alias_shortcut_parts, "|-")
if type(full) == "table" then
full = "{" .. concat(full, " ") .. "}"
end
insert(non_alias_shortcut_parts, ("| <code>%s</code> || <code>%s</code> || %s"):format(shortcut, full, display))
end
insert(non_alias_shortcut_parts, "|}")
non_alias_shortcut_table = concat(non_alias_shortcut_parts, "\n")
end
-- Then do categories and labels.
local category_table, label_table
if m_cats[langcode] then
local cats, labels = find_categories_and_labels(m_cats[langcode])
if cats[1] then
category_table = construct_category_table(cats)
end
if labels[1] then
label_table = construct_label_table(labels, lang)
end
end
-- Concatenate all the tables together, with appropriate explanatory text.
if base_lemma_param_table or tag_table or non_alias_shortcut_table or category_table or label_table then
local langname, lang_parts = lang:getCanonicalName(), {}
insert(lang_parts, "===" .. langname .. "===")
insert(lang_parts, show_editlink(data_module_name))
if base_lemma_param_table then
insert(lang_parts, ("%s特定的基礎詞元參數:"):format(langname))
insert(lang_parts, base_lemma_param_table)
end
if tag_table then
insert(lang_parts, ("%s特定的變位標籤:"):format(langname))
insert(lang_parts, tag_table)
end
if non_alias_shortcut_table then
insert(lang_parts, ("%s特定的非別名縮寫:"):format(langname))
insert(lang_parts, non_alias_shortcut_table)
end
if category_table then
insert(lang_parts, ("%s特定的分類(添加這些分類的確切條件在[[Module:form of/cats]]中描述):"):
format(langname))
insert(lang_parts, category_table)
end
if label_table then
insert(lang_parts, ("%s特定的標籤(添加這些標籤的確切條件在[[Module:form of/cats]]中描述):"):
format(langname))
insert(lang_parts, label_table)
end
insert(data_by_lang, {langname, concat(lang_parts, "\n")})
end
end
end
end
local function sort_by_first_english_first(langdata1, langdata2)
if langdata1[1] == "English" then
-- English is "less than" (goes before) all other languages
return true
elseif langdata2[1] == "English" then
-- All other languages are not "less than" (do not go before) English
return false
end
return langdata1[1] < langdata2[1]
end
function export.lang_specific_tables()
local data_by_lang = {}
iterate_languages("Module:languages/code to canonical name", data_by_lang)
iterate_languages("Module:etymology languages/code to canonical name", data_by_lang)
sort(data_by_lang, sort_by_first_english_first)
local parts = {}
for _, lang_and_data in ipairs(data_by_lang) do
insert(parts, lang_and_data[2])
end
return concat(parts, "\n")
end
function export.postable()
local shortcut_tab = {}
for shortcut, full in pairs(form_of_pos) do
if not shortcut_tab[full] then
shortcut_tab[full] = {}
end
insert(shortcut_tab[full], shortcut)
end
local shorcut_list = {}
for full, shortcuts in pairs(shortcut_tab) do
sort(shortcuts)
insert(shorcut_list, {full, shortcuts})
end
sort(shorcut_list, sort_by_first)
local parts = {}
insert(parts, '{|class="wikitable"')
insert(parts, "! 規範詞性 !! 縮寫")
for _, full_shortcuts in ipairs(shorcut_list) do
local full = full_shortcuts[1]
local shortcuts = full_shortcuts[2]
insert(parts, "|-")
local sparts = {}
for _, shortcut in ipairs(shortcuts) do
insert(sparts, "<code>" .. shortcut .. "</code>")
end
insert(parts, "| <code>" .. full .. "</code> || " .. concat(sparts, ", "))
end
insert(parts, "|}")
return concat(parts, "\n")
end
function export.lang_independent_category_table()
if m_cats["und"] then
local cats = find_categories_and_labels(m_cats["und"])
if cats[1] then
return construct_category_table(cats)
end
end
return "(目前沒有語言無關分類)"
end
function export.lang_independent_label_table()
if m_cats["und"] then
local labels = select(2, find_categories_and_labels(m_cats["und"]))
if labels[1] then
return construct_label_table(labels, get_lang("und"), "replace und")
end
end
return "(目前沒有語言無關標籤)"
end
return export
3pe5n22pwvmiwm1dcaj2fecp5smye1o
9739619
9739617
2026-04-21T07:14:52Z
TongcyDai
53191
9739619
Scribunto
text/plain
local export = {}
-- Author: Benwing2
--[==[ intro:
This module contains functions to implement {{form of/*doc}} templates.
The module contains the actual implementation, meant to be called from other
Lua code. See [[Module:form of doc/templates]] for the functions meant to be
called directly from templates.
]==]
local en_utilities_module = "Module:en-utilities"
local form_of_module = "Module:form of"
local form_of_data_module = "Module:form of/data"
local function_module = "Module:fun"
local labels_module = "Module:labels"
local languages_module = "Module:languages"
local load_module = "Module:load"
local parse_interface_module = "Module:parse interface"
local string_utilities_module = "Module:string utilities"
local table_module = "Module:table"
local template_parser_module = "Module:template parser"
local require = require
local m_form_of = require(form_of_module)
local m_form_of_data = require(form_of_data_module)
local m_cats = require(m_form_of.form_of_cats_module)
local m_str_utils = require(string_utilities_module)
local m_table = require(table_module)
local concat = table.concat
local get_indefinite_article = require(en_utilities_module).get_indefinite_article
local get_label_info = require(labels_module).get_label_info
local get_lang = require(languages_module).getByCode
local get_tag_display_form = m_form_of.get_tag_display_form
local get_tag_set_display_form = m_form_of.get_tag_set_display_form
local insert = table.insert
local ipairs = ipairs
local is_link_or_html = m_form_of.is_link_or_html
local iterate_from = require(function_module).iterateFrom
local list_to_set = m_table.listToSet
local normalize_tag_set = m_form_of.normalize_tag_set
local pairs = pairs
local remove_duplicates = m_table.removeDuplicates
local safe_require = require(load_module).safe_require
local serial_comma_join = m_table.serialCommaJoin
local shallow_copy = m_table.shallowCopy
local sort = table.sort
local table_extend = m_table.extend
local tostring = tostring
local ucfirst = m_str_utils.ucfirst
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local form_of_lang_data_module_prefix = m_form_of.form_of_lang_data_module_prefix
local form_of_data1 = require(m_form_of.form_of_data1_module)
local form_of_data2 = require(m_form_of.form_of_data2_module)
local form_of_pos = mw.loadData(m_form_of.headword_data_module).pos_aliases
local SHORTCUTS = m_form_of_data.SHORTCUTS
local TAG_TYPE = m_form_of_data.TAG_TYPE
local function lang_name(langcode, param)
return get_lang(langcode, param):getCanonicalName()
end
local function link_box(content)
return "<div class=\"noprint plainlinks\" style=\"float: right; clear: both; margin: 0 0 .5em 1em; background: var(--wikt-palette-paleblue, #f9f9f9); border: 1px var(--border-color-base,#aaaaaa) solid; margin-top: -1px; padding: 5px; font-weight: bold; font-size: small;\">"
.. content .. "</div>"
end
local function raw_editpage(page)
return tostring(mw.uri.fullUrl(page, "action=edit"))
end
local function show_editlink(page)
return link_box("[" .. raw_editpage(page) .. " 編輯]")
end
local function template_name(preserve_lang_code)
-- Fetch the template name, minus the '/documentation' suffix that may follow
-- and without any language-specific prefixes (e.g. 'el-' or 'ine-bsl-pro-')
-- (unless `preserve_lang_code` is given).
local PAGENAME = mw.title.getCurrentTitle().text -- DO NOT replace with mw.loadData("Module:headword/data").pagename; we want the whole template name
local tempname = PAGENAME:gsub("/documentation$", "")
if not preserve_lang_code then
while true do
-- Repeatedly strip off language code prefixes, in case there are multiple.
local newname = tempname:gsub("^%l%l%l?%-", "")
if newname == tempname then
break
end
tempname = newname
end
end
return tempname
end
function export.introdoc(args)
local lang = args.lang
local langname = lang and lang_name(lang, "lang")
local exlangnames = {}
for _, exlang in ipairs(args.exlang) do
insert(exlangnames, lang_name(exlang, "exlang"))
end
local parts = {}
local function ins(txt)
insert(parts, txt)
end
if args.etymtemp then
ins("{{hatnote|此範本用於定義部分。有關詞源部分使用的模板,請參見[[Template:" .. args.etymtemp .. "]]。}}\n")
end
ins(("{{uses lua|%s/templates}}"):format(form_of_module))
ins("此模板為")
if lang then
ins(langname)
elseif args.exlang[1] then
ins("(如" .. serial_comma_join(exlangnames, {conj = "或"} .. ")"))
end
ins(args.primaryentrytext or "主要條目的")
ins(args.pldesc or template_name())
ins("建立定義行。")
local cats = args.cat
if cats[1] then
ins("模板還將頁面加進")
local catparts = {}
if lang then
for _, cat in ipairs(cats) do
insert(catparts, "[[:Category:" .. langname .. cat .. "]]")
end
else
for _, cat in ipairs(cats) do
insert(catparts, "[[:Category:" .. ucfirst(cat) ..
"]]之適當語言特定子類別(例如[[:Category:" .. (exlangnames[1] or "漢語") .. cat .. "]])")
end
end
ins(serial_comma_join(catparts))
ins("當中。")
end
if args.addlintrotext then
ins("")
ins(args.addlintrotext)
end
ins("\n")
if args.withcap and args.withdot then
ins([===[
預設情況下,此模板會將輸出顯示為一個完整的句子,首字母大寫,句末帶句號。可以使用 {{para|nocap|1}} 和/或 {{para|nodot|1}} 來覆寫此設定(見下文)。
]===])
elseif args.withcap or args.withencap and lang == "en" then
ins([===[
By default, this template displays its output with an initial capital letter. This can be overridden using
{{para|nocap|1}} (see below).
]===])
elseif args.withencap then
ins([===[
By default, this template displays its output with an initial capital letter if the term's language in {{para|1}} is
English (but not otherwise]===])
if args.usedwithlimitedlangs then
ins([==[, and there are likely no English examples for this template).]==])
else
ins([==[). This can be overridden by using {{para|nocap|1}} to make the initial letter lowercase for
English. This does not auto-add a final period; if (and only if) the term's language is English, you should manually
include it after the template unless other text follows, since English definitions should be formatted like full
sentences.]==])
end
ins("\n")
else
ins([===[
By default, this template displays its output with an initial lowercase letter. This can be overridden by using
{{para|cap|1}} to make the initial letter capitalized]===] .. (lang == "en" and ".\n" or " (but this is not " ..
"generally recommended for non-English languages, as non-English definitions should be lowercase).\n"))
end
ins([===[
此模板'''不用於'''詞源章節。]===])
if args.etymtemp then
ins(" 對於這些章節,請使用{{tl|" .. args.etymtemp .. "}}。\n")
else
ins("\n")
end
ins([===[
'''Note:''' This is a “form of” template. The full list of such templates, including their distinctive properties and
how to customize the output of this template, can be found at [[:Category:Form-of templates]].
本頁面的文檔由[[Module:form of doc]]自動產生。<sup>[<span class="plainlinks">[]===] .. raw_editpage("Module:form of doc") ..
" edit]</span>]</sup>因此,大多數章節連結上的編輯按鈕都無法使用。\n")
return concat(parts)
end
local function param(params, list, required)
local paramparts = {}
if type(params) ~= "table" then
params = {params}
end
for _, p in ipairs(params) do
local listparts = {}
insert(listparts, "{{para|" .. p .. "}}")
if list then
insert(listparts, ", {{para|" .. p .. "2}}")
insert(listparts, ", {{para|" .. p .. "3}}")
insert(listparts, ", etc.")
end
insert(paramparts, concat(listparts))
end
local reqtext = required and "'''(required)'''" or "''(optional)''"
return concat(paramparts, " or ") .. " " .. reqtext
end
function export.paramdoc(args)
local parts = {}
local function ins(txt)
insert(parts, txt)
end
local function param_and_doc(params, list, required, doc)
ins("; ")
ins(param(params, list, required))
ins("\n")
ins(": ")
ins(doc)
ins("\n")
end
local tempname = template_name()
local art = args.art or get_indefinite_article(tempname)
local sgdescof = args.sgdescof or art .. " " .. tempname
ins("''位置(未具名)參數:''\n")
local lang = args.lang
if args.lang then
param_and_doc("1", false, true,
"要連結到的詞條(本頁面即是該詞條的" .. sgdescof .. ")。這應包含該" ..
lang_name(lang, "lang") .. "適用的任何必要附加符號。這些附加符號會自動以" ..
"適當的方式移除,以便建立指向該頁面的連結。此參數也可以包含多個" ..
"以逗號分隔的詞條(逗號後不能有空格),且每個詞條都可以帶有" ..
"行內修飾符,用來指定轉寫、顯示形式、限定詞、標籤、性別和其他" ..
"屬性。詳見下文。")
param_and_doc("2", false, false,
"在詞條連結中顯示的文字。如果留空或省略,則會使用第一個參數指定" ..
"的詞條。此參數通常不是必需的,且不應僅為了顯示附加符號而使用;" ..
"請將附加符號放在第一個參數中。")
else
param_and_doc("1", false, true,
"所連結詞條的[[WT:LANGCODE|語言代碼]](本頁面即是該詞條的" .. sgdescof .. ")。參見" ..
"[[Wiktionary:語言列表]]。<small>參數 {{para|lang}} 是已棄用的等價參數;請" ..
"勿使用。如果使用了該參數,所有數字參數都會向後移一位。</small>")
param_and_doc("2", false, true,
"要連結到的詞條(本頁面即是該詞條的" .. sgdescof .. ")。這應包含該語言適用的附加符號" ..
"(例如:俄語中標記重音的重音符號、阿拉伯語中的母音符號、拉丁語中表示母音長度的" ..
"長音符號等)。這些附加符號會自動以該語言特有的方式移除,以便建立指向該頁面的連結。" ..
"此參數也可以包含多個以逗號分隔的詞條(逗號後不能有空格),且每個詞條都可以" ..
"帶有行內修飾符,用來指定轉寫、顯示形式、限定詞、標籤、性別和其他" ..
"屬性。詳見下文。")
param_and_doc("3", false, false,
"在詞條連結中顯示的文字。如果留空或省略,則會使用第二個參數指定" ..
"的詞條。此參數通常不是必需的,且不應僅為了顯示附加符號而使用;" ..
"請將附加符號放在第二個參數中。")
end
ins("具名參數:\n")
param_and_doc({"t", lang and "3" or "4"}, false, false, "所連結詞條的釋義或簡短翻譯。" ..
"<small>參數 {{para|gloss}} 是已棄用的等價參數;請勿使用。</small>")
param_and_doc("tr", false, false,
"非拉丁字母詞條的轉寫(若與自動生成的轉寫不同)。")
param_and_doc("ts", false, false, "非拉丁字母詞條的標音(適用於轉寫與實際發音有" ..
"明顯差異的情況)。不應用於 IPA 讀音。")
param_and_doc("cat", true, false, "要將頁面歸入的其他分類。它們會自動在" ..
"前面加上語言名稱。單個參數可以包含多個以逗號分隔的分類(只要" ..
"逗號後沒有空格)。")
param_and_doc("addl", false, false, "在結尾(最後的 <code></span></code> 標籤前)顯示的" ..
"附加文字。通常會以逗號加空格連接到前文。然而,如果 {{para|addl}} 的值以冒號或分號開頭," ..
"則會直接附加而不加任何連接標點;如果以底線開頭,其餘部分會以空格連接到前文。")
if args.withfrom then
param_and_doc("from", true, false, "標籤(參見 {{tl|label}}),用於提供有關" ..
"該詞條所屬語言變體、來源地或類似內容的附加資訊。")
end
if args.withdot then
param_and_doc("dot", false, false,
"用來替換通常自動顯示的末尾句點的字元。")
param_and_doc("nodot", false, false, "如果設置 {{para|nodot|1}},則不顯示自動句點。")
end
if (args.withcap or args.withencap) and not args.usedwithlimitedlangs then
-- 如果 usedwithlimitedlangs=1 則不提及,因為不太可能有英語範例。
param_and_doc("nocap", false, false, "如果設置 {{para|nocap|1}},則首字母將小寫。" ..
(args.withencap and " 僅對英語有用,因為其他語言已經以小寫字母開頭。"
or ""))
end
if not args.withcap then
param_and_doc("cap", false, false, "如果設置 {{para|cap|1}},則首字母將大寫。" ..
"通常不建議這樣做" .. (args.withencap and "" or ",除非是英語定義") ..
",因為非英語定義應以小寫字母開頭,並以短語的形式而非完整句子進行格式化。")
end
if args.cat and args.cat[1] then
param_and_doc("nocat", false, false, "停用模板內置分類的功能。" ..
"例如,{{tl|ellipsis of|en|...}} 通常會將頁面歸入 [[:Category:英語省略號]],但" ..
"可以使用 {{para|nocat|1}} 來停用。這不會影響在模板調用中通過 {{para|cat}} 明確指定的分類。")
end
param_and_doc("notext", false, false, "如果設置 {{para|notext|1}},則不顯示詞條前的初始文字," ..
"僅顯示實際詞條。除非提供了 {{para|nocat|1}},否則頁面仍會照常分類。")
param_and_doc("id", false, false, "詞條的義項 ID,連結至由 {{tl|senseid}} 模板設置的錨點。")
param_and_doc("sc", false, false, "若文字檢測失敗時要使用的文字代碼。參見" ..
"[[Wiktionary:文字]]。很少需要提供。")
param_and_doc("sort", false, false, "用於對頁面所加入的任何分類進行排序的排序鍵。除了日語外" ..
"很少需要提供,即便是在日語中,也僅在有多個可能讀音時才需要。")
if args.addlparamtext then
ins("\n")
ins(args.addlparamtext)
ins("\n")
end
ins([==[
===行內修飾符===
使用如 <code>Изабе́лла<tr:Izabɛ́lla><t:Isabelle></code> 的語法來指定轉寫、釋義、標籤和限定詞等修飾符。在此範例中,針對俄語名字 {{m|ru|Изабе́лла|tr=Izabɛ́lla|t=Isabelle}},給出了手動轉寫 ''Izabɛ́lla'' 和釋義「Isabelle」。可識別以下修飾符;關於行內修飾符的詳細討論以及下方各修飾符的含義,請參見 [[WT:Inline modifiers]]。
* <code>t</code>:釋義
* <code>tr</code>:轉寫
* <code>ts</code>:標音,適用於轉寫與實際發音有顯著差異的語言
* <code>l</code>:以逗號分隔的左標籤,例如 {{cd|<l:rare>}} 或 {{cd|<l:UK,Australia>}} 或 {{cd|<l:archaic,or,dialectal>}} 或 {{cd|<l:<<rare>>, <<archaic>> or <<dialectal>>>}}
*: 如上所示,在不使用 {{cd|<<...>>}} 的語法中,逗號後方不得有空格,才能被識別為分隔符。
*: 標籤會出現在詞條'''之前''',加上括號與斜體,並像使用 {{tl|lb}} 一樣加上適當連結(但不會進行分類)。
* <code>ll</code>:以逗號分隔的右標籤;這些會出現在詞條'''之後''',加上括號與斜體,連結方式同左標籤
* <code>q</code>:左限定詞;出現在詞條'''之前''',加上括號與斜體,但會按原樣顯示而不進行解析;適用於一次性的說明註記
* <code>qq</code>:右限定詞;出現在詞條'''之後''',加上括號與斜體
* <code>ref</code>:參考資料,使用 [[Template:IPA#References]] 中記載的語法
* <code>g</code>:以逗號分隔的性/數標註列表;完整列表請參見 [[Module:gender and number]]
* <code>alt</code>:替換顯示文字
* <code>pos</code>:詞性
* <code>ng</code>:任意非釋義的說明文字
* <code>lit</code>:字面意思
* <code>id</code>:義項 ID;參見 {{temp|senseid}}
* <code>sc</code>:文字代碼]==])
return concat(parts)
end
function export.usagedoc(args)
local exlangs = {}
for _, exlang in ipairs(args.exlang) do
insert(exlangs, exlang)
end
if not args.usedwithlimitedlangs then
insert(exlangs, 'en')
insert(exlangs, 'de')
insert(exlangs, 'ja')
end
exlangs = remove_duplicates(exlangs)
local sub = {}
local langparts = {}
for _, langcode in ipairs(exlangs) do
insert(langparts, '<code>' .. langcode .. '</code> for ' .. lang_name(langcode, "exlang"))
end
local exlangs = serial_comma_join(langparts, {conj = "or"})
local tempname = template_name("preserve lang code")
if args.lang then
return ([===[
==使用==
在定義行中使用,最常見的用法如下所示:
# <code><nowiki>{{%s</nowiki>|<var><主要詞條在此></var>}}</code>
===參數===
]===]):format(tempname) .. export.paramdoc(args)
else
return ([===[
==使用==
在定義行中使用,最常見的用法如下所示:
# <code><nowiki>{{%s</nowiki>|<var><語言代碼></var>|<var><主要詞條在此></var>}}</code>
其中<code><var><語言代碼></var></code>是[[Wiktionary:語言|語言代碼]],例如%s。
===Parameters===
]===]):format(tempname, exlangs) .. export.paramdoc(args)
end
end
function export.fulldoc(args)
local shortcuts = args.shortcut[1] and ("{{shortcut|%s}}"):format(concat(args.shortcut, "|")) or ""
local introdoc = export.introdoc(args)
local usagedoc = export.usagedoc(args)
return "{{documentation subpage}}\n" .. shortcuts .. introdoc .. "\n" .. usagedoc
end
function export.infldoc(args)
args = shallow_copy(args)
args.sgdesc = args.sgdesc or (args.art or "the") .. " " ..
template_name():gsub(" of$", "") .. (args.form and " " .. args.form or "")
args.pldesc = args.sgdesc
args.sgdescof = args.sgdescof or args.sgdesc .. " of"
args.primaryentrytext = args.primaryentrytext or "of a primary entry"
return export.fulldoc(args)
end
local tag_type_to_description = {
-- If not listed, we just capitalize the first letter
["tense-aspect"] = "時態/體貌",
["voice-valence"] = "語態/配價",
["comparison"] = "比較等級",
["class"] = "變位類別",
["sound change"] = "語音變化",
["grammar"] = "其他語法",
["other"] = "其他標籤",
}
local tag_type_order = {
"person",
"number",
"gender",
"animacy",
"tense-aspect",
"mood",
"voice-valence",
"non-finite",
"case",
"state",
"comparison",
"register",
"deixis",
"clusivity",
"class",
"attitude",
"sound change",
"grammar",
"other",
}
local function tag_type_desc(tag_type)
return tag_type_to_description[tag_type] or ucfirst(tag_type)
end
local function sort_by_first(a, b)
return a[1] < b[1]
end
local function get_display_form(tag_set, lang)
local norm_tag_sets = normalize_tag_set(tag_set, lang)
if #norm_tag_sets == 1 then
return get_tag_set_display_form(norm_tag_sets[1], lang)
end
-- If we have a conjoined shortcut that expands to multiple tag sets, display them using a numbered list.
-- In order to do that inside a table we need a newline before the list.
local display_forms = {}
for _, norm_tag_set in ipairs(norm_tag_sets) do
insert(display_forms, "\n# " .. get_tag_set_display_form(norm_tag_set, lang))
end
return concat(display_forms)
end
local function organize_tag_data(data_module)
local tab = {}
for name, data in pairs(data_module.tags) do
local tag_type = data[TAG_TYPE]
if not tag_type then
-- Throw an error because hopefully it will get noticed and fixed. If we just skip it, it may never get
-- fixed.
error("Tag '" .. name .. "' has no tag_type")
end
if not tab[tag_type] then
tab[tag_type] = {}
end
insert(tab[tag_type], {name, data})
end
local tag_type_order_set = list_to_set(tag_type_order)
for tag_type, tags_of_type in pairs(tab) do
if not tag_type_order_set[tag_type] then
-- See justification above for throwing an error.
error("Tag type '" .. tag_type .. "' not listed in tag_type_order")
end
sort(tags_of_type, sort_by_first)
end
return tab
end
local function insert_group(parts, group)
for _, namedata in ipairs(group) do
local sparts = {}
local name, data = unpack(namedata)
insert(sparts, "| <code>" .. name .. "</code> || ")
local shortcuts = data[SHORTCUTS]
if shortcuts then
local ssparts = {}
if type(shortcuts) == "string" then
shortcuts = {shortcuts}
end
for _, shortcut in ipairs(shortcuts) do
insert(ssparts, "<code>" .. shortcut .. "</code>")
end
insert(sparts, concat(ssparts, ", ") .. " ")
end
insert(sparts, "|| " .. get_tag_display_form(name))
insert(parts, "|-")
insert(parts, concat(sparts))
end
end
function export.tagtable()
local data1_tab = organize_tag_data(form_of_data1)
local data2_tab = organize_tag_data(form_of_data2)
local parts = {}
insert(parts, '{|class="wikitable"')
insert(parts, "! 規範標籤 !! 縮寫 !! 顯示形式")
for _, tag_type in ipairs(tag_type_order) do
local group_tab = data1_tab[tag_type]
if group_tab then
insert(parts, "|-")
insert(parts, '! colspan="3" style="text-align: center; background: var(--wikt-palette-lightergrey);" | ' .. tag_type_desc(tag_type) ..
"(更常見)")
insert_group(parts, group_tab)
end
group_tab = data2_tab[tag_type]
if group_tab then
insert(parts, "|-")
insert(parts, '! colspan="3" style="text-align: center; background: var(--wikt-palette-lightergrey);" | ' .. tag_type_desc(tag_type) ..
"(較不常見)")
insert_group(parts, group_tab)
end
end
insert(parts, "|}")
return concat(parts, "\n")
end
local function organize_non_alias_shortcut_data(data_module, lang)
local non_alias_shortcuts = {}
for shortcut, full in pairs(data_module.shortcuts) do
if type(full) == "table" or is_link_or_html(full) or full:find("//") or full:find(":") then
insert(non_alias_shortcuts, {shortcut, full, get_display_form({shortcut}, lang)})
end
end
sort(non_alias_shortcuts, sort_by_first)
return non_alias_shortcuts
end
local function insert_shortcut_group(parts, shortcuts)
for _, spec in ipairs(shortcuts) do
local shortcut, full, display = unpack(spec)
insert(parts, "|-")
if type(full) == "table" then
full = "{" .. concat(full, " ") .. "}"
end
insert(parts, ("| <code>%s</code> || <code>%s</code> || %s"):format(shortcut, full, display))
end
end
function export.non_alias_shortcut_table()
local non_alias_shortcuts1 = organize_non_alias_shortcut_data(form_of_data1)
local non_alias_shortcuts2 = organize_non_alias_shortcut_data(form_of_data2)
local parts = {}
insert(parts, '{|class="wikitable"')
insert(parts, "! Shortcut !! Expansion !! Display form")
if non_alias_shortcuts1[1] then
insert(parts, "|-")
insert(parts, '! colspan="3" style="text-align: center; background: var(--wikt-palette-grey-3, #dddddd);" | 更常見:')
insert_shortcut_group(parts, non_alias_shortcuts1)
end
if non_alias_shortcuts2[1] then
insert(parts, "|-")
insert(parts, '! colspan="3" style="text-align: center; background: var(--wikt-palette-grey-3, #dddddd);" | 較不常見:')
insert_shortcut_group(parts, non_alias_shortcuts2)
end
insert(parts, "|}")
return concat(parts, "\n")
end
local function process_spec(spec, cats, labels)
if type(spec) == "string" then
insert(cats, spec)
return
elseif not spec or spec == true then
-- Ignore labels, etc.
return
elseif type(spec) ~= "table" then
error("Wrong type of condition " .. spec .. ": " .. type(spec))
elseif spec.labels then
table_extend(labels, spec.labels)
return
end
local predicate = spec[1]
if predicate == "multi" or predicate == "cond" then
for _, sp in iterate_from(2, ipairs(spec)) do -- Iterate from 2.
process_spec(sp, cats, labels)
end
elseif predicate == "pexists" then
process_spec(spec[2], cats, labels)
process_spec(spec[3], cats, labels)
elseif predicate == "has" or predicate == "hasall" or predicate == "hasany" or
predicate == "tags=" or predicate == "p=" or predicate == "pany" or
predicate == "not" then
process_spec(spec[3], cats, labels)
process_spec(spec[4], cats, labels)
elseif predicate == "and" or predicate == "or" then
process_spec(spec[3], cats, labels)
process_spec(spec[4], cats, labels)
elseif predicate == "call" then
return
else
error("Unrecognized predicate: " .. predicate)
end
end
local function find_categories_and_labels(catstruct)
local cats, labels = {}, {}
for _, spec in ipairs(catstruct) do
process_spec(spec, cats, labels)
end
return cats, labels
end
local function construct_category_table(cats)
local category_parts = {}
insert(category_parts, '{|class="wikitable"')
insert(category_parts, "! Category")
for _, cat in ipairs(cats) do
insert(category_parts, "|-")
insert(category_parts, "| <code>" .. cat .. "</code>")
end
insert(category_parts, "|}")
return concat(category_parts, "\n")
end
local function construct_label_table(labels, lang, replace_und)
local label_parts = {}
insert(label_parts, '{|class="wikitable"')
insert(label_parts, "! 標籤 !! 顯示形式 !! 相關分類")
for _, label in ipairs(labels) do
insert(label_parts, "|-")
local label_data = get_label_info{
label = label,
lang = lang,
}
local coded_categories = {}
for _, cat in ipairs(label_data.categories) do
if replace_und then
cat = cat:gsub("^und:", "LANGCODE:")
cat = cat:gsub("^Undetermined ", "LANG ")
end
insert(coded_categories, "<code>" .. cat .. "</code>")
end
insert(label_parts, ("| <code>%s</code> || %s || %s"):format(label, label_data.label,
concat(coded_categories, ",")))
end
insert(label_parts, "|}")
return concat(label_parts, "\n")
end
local function iterate_languages(langcodes_module, data_by_lang)
for langcode in pairs(require(langcodes_module)) do
local data_module_name = form_of_lang_data_module_prefix .. langcode
local data_module = safe_require(data_module_name)
if data_module or m_cats[langcode] and langcode ~= "und" then
local lang = get_lang(langcode, nil, true)
-- First do base-lemma params.
local base_lemma_param_table
if data_module and data_module.base_lemma_params and data_module.base_lemma_params[1] then
local base_lemma_param_parts = {}
insert(base_lemma_param_parts, '{|class="wikitable"')
insert(base_lemma_param_parts, "! 參數 !! 顯示形式")
for _, base_lemma_param in ipairs(data_module.base_lemma_params) do
insert(base_lemma_param_parts, "|-")
insert(base_lemma_param_parts, ("| <code>%s</code> || %s"):format(base_lemma_param.param,
get_display_form(base_lemma_param.tags, lang)))
end
insert(base_lemma_param_parts, "|}")
base_lemma_param_table = concat(base_lemma_param_parts, "\n")
end
-- Then do inflection tags.
local data1_tab = data_module and organize_tag_data(data_module) or {}
local tag_parts = {}
insert(tag_parts, '{|class="wikitable"')
insert(tag_parts, "! 規範標籤 !! 縮寫 !! 標籤類型 !! 顯示形式")
local saw_any_tag = false
for _, tag_type in ipairs(tag_type_order) do
local group_tab = data1_tab[tag_type]
if group_tab then
for _, namedata in ipairs(group_tab) do
local sparts = {}
local name, data = unpack(namedata)
insert(sparts, "| <code>" .. name .. "</code> || ")
if data.shortcuts then
local ssparts = {}
for _, shortcut in ipairs(data.shortcuts) do
insert(ssparts, "<code>" .. shortcut .. "</code>")
end
insert(sparts, concat(ssparts, ", ") .. " ")
end
insert(sparts, "|| " .. tag_type_desc(tag_type) .. " || " ..
get_tag_display_form(name, lang))
insert(tag_parts, "|-")
insert(tag_parts, concat(sparts))
saw_any_tag = true
end
end
end
insert(tag_parts, "|}")
local tag_table = saw_any_tag and concat(tag_parts, "\n") or nil
-- Then do non-alias shortcuts.
local non_alias_shortcut_table
local non_alias_shortcuts = data_module and organize_non_alias_shortcut_data(data_module, lang) or {}
if non_alias_shortcuts[1] then
local non_alias_shortcut_parts = {}
insert(non_alias_shortcut_parts, '{|class="wikitable"')
insert(non_alias_shortcut_parts, "! 縮寫 !! 展開 !! 顯示形式")
for _, spec in ipairs(non_alias_shortcuts) do
local shortcut, full, display = unpack(spec)
insert(non_alias_shortcut_parts, "|-")
if type(full) == "table" then
full = "{" .. concat(full, " ") .. "}"
end
insert(non_alias_shortcut_parts, ("| <code>%s</code> || <code>%s</code> || %s"):format(shortcut, full, display))
end
insert(non_alias_shortcut_parts, "|}")
non_alias_shortcut_table = concat(non_alias_shortcut_parts, "\n")
end
-- Then do categories and labels.
local category_table, label_table
if m_cats[langcode] then
local cats, labels = find_categories_and_labels(m_cats[langcode])
if cats[1] then
category_table = construct_category_table(cats)
end
if labels[1] then
label_table = construct_label_table(labels, lang)
end
end
-- Concatenate all the tables together, with appropriate explanatory text.
if base_lemma_param_table or tag_table or non_alias_shortcut_table or category_table or label_table then
local langname, lang_parts = lang:getCanonicalName(), {}
insert(lang_parts, "===" .. langname .. "===")
insert(lang_parts, show_editlink(data_module_name))
if base_lemma_param_table then
insert(lang_parts, ("%s特定的基礎詞元參數:"):format(langname))
insert(lang_parts, base_lemma_param_table)
end
if tag_table then
insert(lang_parts, ("%s特定的變位標籤:"):format(langname))
insert(lang_parts, tag_table)
end
if non_alias_shortcut_table then
insert(lang_parts, ("%s特定的非別名縮寫:"):format(langname))
insert(lang_parts, non_alias_shortcut_table)
end
if category_table then
insert(lang_parts, ("%s特定的分類(添加這些分類的確切條件在[[Module:form of/cats]]中描述):"):
format(langname))
insert(lang_parts, category_table)
end
if label_table then
insert(lang_parts, ("%s特定的標籤(添加這些標籤的確切條件在[[Module:form of/cats]]中描述):"):
format(langname))
insert(lang_parts, label_table)
end
insert(data_by_lang, {langname, concat(lang_parts, "\n")})
end
end
end
end
local function sort_by_first_english_first(langdata1, langdata2)
if langdata1[1] == "English" then
-- English is "less than" (goes before) all other languages
return true
elseif langdata2[1] == "English" then
-- All other languages are not "less than" (do not go before) English
return false
end
return langdata1[1] < langdata2[1]
end
function export.lang_specific_tables()
local data_by_lang = {}
iterate_languages("Module:languages/code to canonical name", data_by_lang)
iterate_languages("Module:etymology languages/code to canonical name", data_by_lang)
sort(data_by_lang, sort_by_first_english_first)
local parts = {}
for _, lang_and_data in ipairs(data_by_lang) do
insert(parts, lang_and_data[2])
end
return concat(parts, "\n")
end
function export.postable()
local shortcut_tab = {}
for shortcut, full in pairs(form_of_pos) do
if not shortcut_tab[full] then
shortcut_tab[full] = {}
end
insert(shortcut_tab[full], shortcut)
end
local shorcut_list = {}
for full, shortcuts in pairs(shortcut_tab) do
sort(shortcuts)
insert(shorcut_list, {full, shortcuts})
end
sort(shorcut_list, sort_by_first)
local parts = {}
insert(parts, '{|class="wikitable"')
insert(parts, "! 規範詞性 !! 縮寫")
for _, full_shortcuts in ipairs(shorcut_list) do
local full = full_shortcuts[1]
local shortcuts = full_shortcuts[2]
insert(parts, "|-")
local sparts = {}
for _, shortcut in ipairs(shortcuts) do
insert(sparts, "<code>" .. shortcut .. "</code>")
end
insert(parts, "| <code>" .. full .. "</code> || " .. concat(sparts, ", "))
end
insert(parts, "|}")
return concat(parts, "\n")
end
function export.lang_independent_category_table()
if m_cats["und"] then
local cats = find_categories_and_labels(m_cats["und"])
if cats[1] then
return construct_category_table(cats)
end
end
return "(目前沒有語言無關分類)"
end
function export.lang_independent_label_table()
if m_cats["und"] then
local labels = select(2, find_categories_and_labels(m_cats["und"]))
if labels[1] then
return construct_label_table(labels, get_lang("und"), "replace und")
end
end
return "(目前沒有語言無關標籤)"
end
return export
s9nvo3caqz4k4ymfpz7sszt8jgmnjzm
9739620
9739619
2026-04-21T07:15:34Z
TongcyDai
53191
9739620
Scribunto
text/plain
local export = {}
-- Author: Benwing2
--[==[ intro:
This module contains functions to implement {{form of/*doc}} templates.
The module contains the actual implementation, meant to be called from other
Lua code. See [[Module:form of doc/templates]] for the functions meant to be
called directly from templates.
]==]
local en_utilities_module = "Module:en-utilities"
local form_of_module = "Module:form of"
local form_of_data_module = "Module:form of/data"
local function_module = "Module:fun"
local labels_module = "Module:labels"
local languages_module = "Module:languages"
local load_module = "Module:load"
local parse_interface_module = "Module:parse interface"
local string_utilities_module = "Module:string utilities"
local table_module = "Module:table"
local template_parser_module = "Module:template parser"
local require = require
local m_form_of = require(form_of_module)
local m_form_of_data = require(form_of_data_module)
local m_cats = require(m_form_of.form_of_cats_module)
local m_str_utils = require(string_utilities_module)
local m_table = require(table_module)
local concat = table.concat
local get_indefinite_article = require(en_utilities_module).get_indefinite_article
local get_label_info = require(labels_module).get_label_info
local get_lang = require(languages_module).getByCode
local get_tag_display_form = m_form_of.get_tag_display_form
local get_tag_set_display_form = m_form_of.get_tag_set_display_form
local insert = table.insert
local ipairs = ipairs
local is_link_or_html = m_form_of.is_link_or_html
local iterate_from = require(function_module).iterateFrom
local list_to_set = m_table.listToSet
local normalize_tag_set = m_form_of.normalize_tag_set
local pairs = pairs
local remove_duplicates = m_table.removeDuplicates
local safe_require = require(load_module).safe_require
local serial_comma_join = m_table.serialCommaJoin
local shallow_copy = m_table.shallowCopy
local sort = table.sort
local table_extend = m_table.extend
local tostring = tostring
local ucfirst = m_str_utils.ucfirst
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local form_of_lang_data_module_prefix = m_form_of.form_of_lang_data_module_prefix
local form_of_data1 = require(m_form_of.form_of_data1_module)
local form_of_data2 = require(m_form_of.form_of_data2_module)
local form_of_pos = mw.loadData(m_form_of.headword_data_module).pos_aliases
local SHORTCUTS = m_form_of_data.SHORTCUTS
local TAG_TYPE = m_form_of_data.TAG_TYPE
local function lang_name(langcode, param)
return get_lang(langcode, param):getCanonicalName()
end
local function link_box(content)
return "<div class=\"noprint plainlinks\" style=\"float: right; clear: both; margin: 0 0 .5em 1em; background: var(--wikt-palette-paleblue, #f9f9f9); border: 1px var(--border-color-base,#aaaaaa) solid; margin-top: -1px; padding: 5px; font-weight: bold; font-size: small;\">"
.. content .. "</div>"
end
local function raw_editpage(page)
return tostring(mw.uri.fullUrl(page, "action=edit"))
end
local function show_editlink(page)
return link_box("[" .. raw_editpage(page) .. " 編輯]")
end
local function template_name(preserve_lang_code)
-- Fetch the template name, minus the '/documentation' suffix that may follow
-- and without any language-specific prefixes (e.g. 'el-' or 'ine-bsl-pro-')
-- (unless `preserve_lang_code` is given).
local PAGENAME = mw.title.getCurrentTitle().text -- DO NOT replace with mw.loadData("Module:headword/data").pagename; we want the whole template name
local tempname = PAGENAME:gsub("/documentation$", "")
if not preserve_lang_code then
while true do
-- Repeatedly strip off language code prefixes, in case there are multiple.
local newname = tempname:gsub("^%l%l%l?%-", "")
if newname == tempname then
break
end
tempname = newname
end
end
return tempname
end
function export.introdoc(args)
local lang = args.lang
local langname = lang and lang_name(lang, "lang")
local exlangnames = {}
for _, exlang in ipairs(args.exlang) do
insert(exlangnames, lang_name(exlang, "exlang"))
end
local parts = {}
local function ins(txt)
insert(parts, txt)
end
if args.etymtemp then
ins("{{hatnote|此範本用於定義部分。有關詞源部分使用的模板,請參見[[Template:" .. args.etymtemp .. "]]。}}\n")
end
ins(("{{uses lua|%s/templates}}"):format(form_of_module))
ins("此模板為")
if lang then
ins(langname)
elseif args.exlang[1] then
ins("(如" .. serial_comma_join(exlangnames, {conj = "或"} .. ")"))
end
ins(args.primaryentrytext or "主要條目的")
ins(args.pldesc or template_name())
ins("建立定義行。")
local cats = args.cat
if cats[1] then
ins("模板還將頁面加進")
local catparts = {}
if lang then
for _, cat in ipairs(cats) do
insert(catparts, "[[:Category:" .. langname .. cat .. "]]")
end
else
for _, cat in ipairs(cats) do
insert(catparts, "[[:Category:" .. ucfirst(cat) ..
"]]之適當語言特定子類別(例如[[:Category:" .. (exlangnames[1] or "漢語") .. cat .. "]])")
end
end
ins(serial_comma_join(catparts))
ins("當中。")
end
if args.addlintrotext then
ins("")
ins(args.addlintrotext)
end
ins("\n")
if args.withcap and args.withdot then
ins([===[
預設情況下,此模板會將輸出顯示為一個完整的句子,首字母大寫,句末帶句號。可以使用 {{para|nocap|1}} 和/或 {{para|nodot|1}} 來覆寫此設定(見下文)。
]===])
elseif args.withcap or args.withencap and lang == "en" then
ins([===[
By default, this template displays its output with an initial capital letter. This can be overridden using
{{para|nocap|1}} (see below).
]===])
elseif args.withencap then
ins([===[
By default, this template displays its output with an initial capital letter if the term's language in {{para|1}} is
English (but not otherwise]===])
if args.usedwithlimitedlangs then
ins([==[, and there are likely no English examples for this template).]==])
else
ins([==[). This can be overridden by using {{para|nocap|1}} to make the initial letter lowercase for
English. This does not auto-add a final period; if (and only if) the term's language is English, you should manually
include it after the template unless other text follows, since English definitions should be formatted like full
sentences.]==])
end
ins("\n")
else
ins([===[
By default, this template displays its output with an initial lowercase letter. This can be overridden by using
{{para|cap|1}} to make the initial letter capitalized]===] .. (lang == "en" and ".\n" or " (but this is not " ..
"generally recommended for non-English languages, as non-English definitions should be lowercase).\n"))
end
ins([===[
此模板'''不用於'''詞源章節。]===])
if args.etymtemp then
ins(" 對於這些章節,請使用{{tl|" .. args.etymtemp .. "}}。\n")
else
ins("\n")
end
ins([===[
'''Note:''' This is a “form of” template. The full list of such templates, including their distinctive properties and
how to customize the output of this template, can be found at [[:Category:Form-of templates]].
本頁面的文檔由[[Module:form of doc]]自動產生。<sup>[<span class="plainlinks">[]===] .. raw_editpage("Module:form of doc") ..
" edit]</span>]</sup>因此,大多數章節連結上的編輯按鈕都無法使用。\n")
return concat(parts)
end
local function param(params, list, required)
local paramparts = {}
if type(params) ~= "table" then
params = {params}
end
for _, p in ipairs(params) do
local listparts = {}
insert(listparts, "{{para|" .. p .. "}}")
if list then
insert(listparts, ", {{para|" .. p .. "2}}")
insert(listparts, ", {{para|" .. p .. "3}}")
insert(listparts, ", etc.")
end
insert(paramparts, concat(listparts))
end
local reqtext = required and "'''(required)'''" or "''(optional)''"
return concat(paramparts, " or ") .. " " .. reqtext
end
function export.paramdoc(args)
local parts = {}
local function ins(txt)
insert(parts, txt)
end
local function param_and_doc(params, list, required, doc)
ins("; ")
ins(param(params, list, required))
ins("\n")
ins(": ")
ins(doc)
ins("\n")
end
local tempname = template_name()
local art = args.art or get_indefinite_article(tempname)
local sgdescof = args.sgdescof or art .. " " .. tempname
ins("''位置(匿名)參數:''\n")
local lang = args.lang
if args.lang then
param_and_doc("1", false, true,
"要連結到的詞條(本頁面即是該詞條的" .. sgdescof .. ")。這應包含該" ..
lang_name(lang, "lang") .. "適用的任何必要附加符號。這些附加符號會自動以" ..
"適當的方式移除,以便建立指向該頁面的連結。此參數也可以包含多個" ..
"以逗號分隔的詞條(逗號後不能有空格),且每個詞條都可以帶有" ..
"行內修飾符,用來指定轉寫、顯示形式、限定詞、標籤、性別和其他" ..
"屬性。詳見下文。")
param_and_doc("2", false, false,
"在詞條連結中顯示的文字。如果留空或省略,則會使用第一個參數指定" ..
"的詞條。此參數通常不是必需的,且不應僅為了顯示附加符號而使用;" ..
"請將附加符號放在第一個參數中。")
else
param_and_doc("1", false, true,
"所連結詞條的[[WT:LANGCODE|語言代碼]](本頁面即是該詞條的" .. sgdescof .. ")。參見" ..
"[[Wiktionary:語言列表]]。<small>參數 {{para|lang}} 是已棄用的等價參數;請" ..
"勿使用。如果使用了該參數,所有數字參數都會向後移一位。</small>")
param_and_doc("2", false, true,
"要連結到的詞條(本頁面即是該詞條的" .. sgdescof .. ")。這應包含該語言適用的附加符號" ..
"(例如:俄語中標記重音的重音符號、阿拉伯語中的母音符號、拉丁語中表示母音長度的" ..
"長音符號等)。這些附加符號會自動以該語言特有的方式移除,以便建立指向該頁面的連結。" ..
"此參數也可以包含多個以逗號分隔的詞條(逗號後不能有空格),且每個詞條都可以" ..
"帶有行內修飾符,用來指定轉寫、顯示形式、限定詞、標籤、性別和其他" ..
"屬性。詳見下文。")
param_and_doc("3", false, false,
"在詞條連結中顯示的文字。如果留空或省略,則會使用第二個參數指定" ..
"的詞條。此參數通常不是必需的,且不應僅為了顯示附加符號而使用;" ..
"請將附加符號放在第二個參數中。")
end
ins("具名參數:\n")
param_and_doc({"t", lang and "3" or "4"}, false, false, "所連結詞條的釋義或簡短翻譯。" ..
"<small>參數 {{para|gloss}} 是已棄用的等價參數;請勿使用。</small>")
param_and_doc("tr", false, false,
"非拉丁字母詞條的轉寫(若與自動生成的轉寫不同)。")
param_and_doc("ts", false, false, "非拉丁字母詞條的標音(適用於轉寫與實際發音有" ..
"明顯差異的情況)。不應用於 IPA 讀音。")
param_and_doc("cat", true, false, "要將頁面歸入的其他分類。它們會自動在" ..
"前面加上語言名稱。單個參數可以包含多個以逗號分隔的分類(只要" ..
"逗號後沒有空格)。")
param_and_doc("addl", false, false, "在結尾(最後的 <code></span></code> 標籤前)顯示的" ..
"附加文字。通常會以逗號加空格連接到前文。然而,如果 {{para|addl}} 的值以冒號或分號開頭," ..
"則會直接附加而不加任何連接標點;如果以底線開頭,其餘部分會以空格連接到前文。")
if args.withfrom then
param_and_doc("from", true, false, "標籤(參見 {{tl|label}}),用於提供有關" ..
"該詞條所屬語言變體、來源地或類似內容的附加資訊。")
end
if args.withdot then
param_and_doc("dot", false, false,
"用來替換通常自動顯示的末尾句點的字元。")
param_and_doc("nodot", false, false, "如果設置 {{para|nodot|1}},則不顯示自動句點。")
end
if (args.withcap or args.withencap) and not args.usedwithlimitedlangs then
-- 如果 usedwithlimitedlangs=1 則不提及,因為不太可能有英語範例。
param_and_doc("nocap", false, false, "如果設置 {{para|nocap|1}},則首字母將小寫。" ..
(args.withencap and " 僅對英語有用,因為其他語言已經以小寫字母開頭。"
or ""))
end
if not args.withcap then
param_and_doc("cap", false, false, "如果設置 {{para|cap|1}},則首字母將大寫。" ..
"通常不建議這樣做" .. (args.withencap and "" or ",除非是英語定義") ..
",因為非英語定義應以小寫字母開頭,並以短語的形式而非完整句子進行格式化。")
end
if args.cat and args.cat[1] then
param_and_doc("nocat", false, false, "停用模板內置分類的功能。" ..
"例如,{{tl|ellipsis of|en|...}} 通常會將頁面歸入 [[:Category:英語省略號]],但" ..
"可以使用 {{para|nocat|1}} 來停用。這不會影響在模板調用中通過 {{para|cat}} 明確指定的分類。")
end
param_and_doc("notext", false, false, "如果設置 {{para|notext|1}},則不顯示詞條前的初始文字," ..
"僅顯示實際詞條。除非提供了 {{para|nocat|1}},否則頁面仍會照常分類。")
param_and_doc("id", false, false, "詞條的義項 ID,連結至由 {{tl|senseid}} 模板設置的錨點。")
param_and_doc("sc", false, false, "若文字檢測失敗時要使用的文字代碼。參見" ..
"[[Wiktionary:文字]]。很少需要提供。")
param_and_doc("sort", false, false, "用於對頁面所加入的任何分類進行排序的排序鍵。除了日語外" ..
"很少需要提供,即便是在日語中,也僅在有多個可能讀音時才需要。")
if args.addlparamtext then
ins("\n")
ins(args.addlparamtext)
ins("\n")
end
ins([==[
===行內修飾符===
使用如 <code>Изабе́лла<tr:Izabɛ́lla><t:Isabelle></code> 的語法來指定轉寫、釋義、標籤和限定詞等修飾符。在此範例中,針對俄語名字 {{m|ru|Изабе́лла|tr=Izabɛ́lla|t=Isabelle}},給出了手動轉寫 ''Izabɛ́lla'' 和釋義「Isabelle」。可識別以下修飾符;關於行內修飾符的詳細討論以及下方各修飾符的含義,請參見 [[WT:Inline modifiers]]。
* <code>t</code>:釋義
* <code>tr</code>:轉寫
* <code>ts</code>:標音,適用於轉寫與實際發音有顯著差異的語言
* <code>l</code>:以逗號分隔的左標籤,例如 {{cd|<l:rare>}} 或 {{cd|<l:UK,Australia>}} 或 {{cd|<l:archaic,or,dialectal>}} 或 {{cd|<l:<<rare>>, <<archaic>> or <<dialectal>>>}}
*: 如上所示,在不使用 {{cd|<<...>>}} 的語法中,逗號後方不得有空格,才能被識別為分隔符。
*: 標籤會出現在詞條'''之前''',加上括號與斜體,並像使用 {{tl|lb}} 一樣加上適當連結(但不會進行分類)。
* <code>ll</code>:以逗號分隔的右標籤;這些會出現在詞條'''之後''',加上括號與斜體,連結方式同左標籤
* <code>q</code>:左限定詞;出現在詞條'''之前''',加上括號與斜體,但會按原樣顯示而不進行解析;適用於一次性的說明註記
* <code>qq</code>:右限定詞;出現在詞條'''之後''',加上括號與斜體
* <code>ref</code>:參考資料,使用 [[Template:IPA#References]] 中記載的語法
* <code>g</code>:以逗號分隔的性/數標註列表;完整列表請參見 [[Module:gender and number]]
* <code>alt</code>:替換顯示文字
* <code>pos</code>:詞性
* <code>ng</code>:任意非釋義的說明文字
* <code>lit</code>:字面意思
* <code>id</code>:義項 ID;參見 {{temp|senseid}}
* <code>sc</code>:文字代碼]==])
return concat(parts)
end
function export.usagedoc(args)
local exlangs = {}
for _, exlang in ipairs(args.exlang) do
insert(exlangs, exlang)
end
if not args.usedwithlimitedlangs then
insert(exlangs, 'en')
insert(exlangs, 'de')
insert(exlangs, 'ja')
end
exlangs = remove_duplicates(exlangs)
local sub = {}
local langparts = {}
for _, langcode in ipairs(exlangs) do
insert(langparts, '<code>' .. langcode .. '</code> for ' .. lang_name(langcode, "exlang"))
end
local exlangs = serial_comma_join(langparts, {conj = "or"})
local tempname = template_name("preserve lang code")
if args.lang then
return ([===[
==使用==
在定義行中使用,最常見的用法如下所示:
# <code><nowiki>{{%s</nowiki>|<var><主要詞條在此></var>}}</code>
===參數===
]===]):format(tempname) .. export.paramdoc(args)
else
return ([===[
==使用==
在定義行中使用,最常見的用法如下所示:
# <code><nowiki>{{%s</nowiki>|<var><語言代碼></var>|<var><主要詞條在此></var>}}</code>
其中<code><var><語言代碼></var></code>是[[Wiktionary:語言|語言代碼]],例如%s。
===參數===
]===]):format(tempname, exlangs) .. export.paramdoc(args)
end
end
function export.fulldoc(args)
local shortcuts = args.shortcut[1] and ("{{shortcut|%s}}"):format(concat(args.shortcut, "|")) or ""
local introdoc = export.introdoc(args)
local usagedoc = export.usagedoc(args)
return "{{documentation subpage}}\n" .. shortcuts .. introdoc .. "\n" .. usagedoc
end
function export.infldoc(args)
args = shallow_copy(args)
args.sgdesc = args.sgdesc or (args.art or "the") .. " " ..
template_name():gsub(" of$", "") .. (args.form and " " .. args.form or "")
args.pldesc = args.sgdesc
args.sgdescof = args.sgdescof or args.sgdesc .. " of"
args.primaryentrytext = args.primaryentrytext or "of a primary entry"
return export.fulldoc(args)
end
local tag_type_to_description = {
-- If not listed, we just capitalize the first letter
["tense-aspect"] = "時態/體貌",
["voice-valence"] = "語態/配價",
["comparison"] = "比較等級",
["class"] = "變位類別",
["sound change"] = "語音變化",
["grammar"] = "其他語法",
["other"] = "其他標籤",
}
local tag_type_order = {
"person",
"number",
"gender",
"animacy",
"tense-aspect",
"mood",
"voice-valence",
"non-finite",
"case",
"state",
"comparison",
"register",
"deixis",
"clusivity",
"class",
"attitude",
"sound change",
"grammar",
"other",
}
local function tag_type_desc(tag_type)
return tag_type_to_description[tag_type] or ucfirst(tag_type)
end
local function sort_by_first(a, b)
return a[1] < b[1]
end
local function get_display_form(tag_set, lang)
local norm_tag_sets = normalize_tag_set(tag_set, lang)
if #norm_tag_sets == 1 then
return get_tag_set_display_form(norm_tag_sets[1], lang)
end
-- If we have a conjoined shortcut that expands to multiple tag sets, display them using a numbered list.
-- In order to do that inside a table we need a newline before the list.
local display_forms = {}
for _, norm_tag_set in ipairs(norm_tag_sets) do
insert(display_forms, "\n# " .. get_tag_set_display_form(norm_tag_set, lang))
end
return concat(display_forms)
end
local function organize_tag_data(data_module)
local tab = {}
for name, data in pairs(data_module.tags) do
local tag_type = data[TAG_TYPE]
if not tag_type then
-- Throw an error because hopefully it will get noticed and fixed. If we just skip it, it may never get
-- fixed.
error("Tag '" .. name .. "' has no tag_type")
end
if not tab[tag_type] then
tab[tag_type] = {}
end
insert(tab[tag_type], {name, data})
end
local tag_type_order_set = list_to_set(tag_type_order)
for tag_type, tags_of_type in pairs(tab) do
if not tag_type_order_set[tag_type] then
-- See justification above for throwing an error.
error("Tag type '" .. tag_type .. "' not listed in tag_type_order")
end
sort(tags_of_type, sort_by_first)
end
return tab
end
local function insert_group(parts, group)
for _, namedata in ipairs(group) do
local sparts = {}
local name, data = unpack(namedata)
insert(sparts, "| <code>" .. name .. "</code> || ")
local shortcuts = data[SHORTCUTS]
if shortcuts then
local ssparts = {}
if type(shortcuts) == "string" then
shortcuts = {shortcuts}
end
for _, shortcut in ipairs(shortcuts) do
insert(ssparts, "<code>" .. shortcut .. "</code>")
end
insert(sparts, concat(ssparts, ", ") .. " ")
end
insert(sparts, "|| " .. get_tag_display_form(name))
insert(parts, "|-")
insert(parts, concat(sparts))
end
end
function export.tagtable()
local data1_tab = organize_tag_data(form_of_data1)
local data2_tab = organize_tag_data(form_of_data2)
local parts = {}
insert(parts, '{|class="wikitable"')
insert(parts, "! 規範標籤 !! 縮寫 !! 顯示形式")
for _, tag_type in ipairs(tag_type_order) do
local group_tab = data1_tab[tag_type]
if group_tab then
insert(parts, "|-")
insert(parts, '! colspan="3" style="text-align: center; background: var(--wikt-palette-lightergrey);" | ' .. tag_type_desc(tag_type) ..
"(更常見)")
insert_group(parts, group_tab)
end
group_tab = data2_tab[tag_type]
if group_tab then
insert(parts, "|-")
insert(parts, '! colspan="3" style="text-align: center; background: var(--wikt-palette-lightergrey);" | ' .. tag_type_desc(tag_type) ..
"(較不常見)")
insert_group(parts, group_tab)
end
end
insert(parts, "|}")
return concat(parts, "\n")
end
local function organize_non_alias_shortcut_data(data_module, lang)
local non_alias_shortcuts = {}
for shortcut, full in pairs(data_module.shortcuts) do
if type(full) == "table" or is_link_or_html(full) or full:find("//") or full:find(":") then
insert(non_alias_shortcuts, {shortcut, full, get_display_form({shortcut}, lang)})
end
end
sort(non_alias_shortcuts, sort_by_first)
return non_alias_shortcuts
end
local function insert_shortcut_group(parts, shortcuts)
for _, spec in ipairs(shortcuts) do
local shortcut, full, display = unpack(spec)
insert(parts, "|-")
if type(full) == "table" then
full = "{" .. concat(full, " ") .. "}"
end
insert(parts, ("| <code>%s</code> || <code>%s</code> || %s"):format(shortcut, full, display))
end
end
function export.non_alias_shortcut_table()
local non_alias_shortcuts1 = organize_non_alias_shortcut_data(form_of_data1)
local non_alias_shortcuts2 = organize_non_alias_shortcut_data(form_of_data2)
local parts = {}
insert(parts, '{|class="wikitable"')
insert(parts, "! Shortcut !! Expansion !! Display form")
if non_alias_shortcuts1[1] then
insert(parts, "|-")
insert(parts, '! colspan="3" style="text-align: center; background: var(--wikt-palette-grey-3, #dddddd);" | 更常見:')
insert_shortcut_group(parts, non_alias_shortcuts1)
end
if non_alias_shortcuts2[1] then
insert(parts, "|-")
insert(parts, '! colspan="3" style="text-align: center; background: var(--wikt-palette-grey-3, #dddddd);" | 較不常見:')
insert_shortcut_group(parts, non_alias_shortcuts2)
end
insert(parts, "|}")
return concat(parts, "\n")
end
local function process_spec(spec, cats, labels)
if type(spec) == "string" then
insert(cats, spec)
return
elseif not spec or spec == true then
-- Ignore labels, etc.
return
elseif type(spec) ~= "table" then
error("Wrong type of condition " .. spec .. ": " .. type(spec))
elseif spec.labels then
table_extend(labels, spec.labels)
return
end
local predicate = spec[1]
if predicate == "multi" or predicate == "cond" then
for _, sp in iterate_from(2, ipairs(spec)) do -- Iterate from 2.
process_spec(sp, cats, labels)
end
elseif predicate == "pexists" then
process_spec(spec[2], cats, labels)
process_spec(spec[3], cats, labels)
elseif predicate == "has" or predicate == "hasall" or predicate == "hasany" or
predicate == "tags=" or predicate == "p=" or predicate == "pany" or
predicate == "not" then
process_spec(spec[3], cats, labels)
process_spec(spec[4], cats, labels)
elseif predicate == "and" or predicate == "or" then
process_spec(spec[3], cats, labels)
process_spec(spec[4], cats, labels)
elseif predicate == "call" then
return
else
error("Unrecognized predicate: " .. predicate)
end
end
local function find_categories_and_labels(catstruct)
local cats, labels = {}, {}
for _, spec in ipairs(catstruct) do
process_spec(spec, cats, labels)
end
return cats, labels
end
local function construct_category_table(cats)
local category_parts = {}
insert(category_parts, '{|class="wikitable"')
insert(category_parts, "! Category")
for _, cat in ipairs(cats) do
insert(category_parts, "|-")
insert(category_parts, "| <code>" .. cat .. "</code>")
end
insert(category_parts, "|}")
return concat(category_parts, "\n")
end
local function construct_label_table(labels, lang, replace_und)
local label_parts = {}
insert(label_parts, '{|class="wikitable"')
insert(label_parts, "! 標籤 !! 顯示形式 !! 相關分類")
for _, label in ipairs(labels) do
insert(label_parts, "|-")
local label_data = get_label_info{
label = label,
lang = lang,
}
local coded_categories = {}
for _, cat in ipairs(label_data.categories) do
if replace_und then
cat = cat:gsub("^und:", "LANGCODE:")
cat = cat:gsub("^Undetermined ", "LANG ")
end
insert(coded_categories, "<code>" .. cat .. "</code>")
end
insert(label_parts, ("| <code>%s</code> || %s || %s"):format(label, label_data.label,
concat(coded_categories, ",")))
end
insert(label_parts, "|}")
return concat(label_parts, "\n")
end
local function iterate_languages(langcodes_module, data_by_lang)
for langcode in pairs(require(langcodes_module)) do
local data_module_name = form_of_lang_data_module_prefix .. langcode
local data_module = safe_require(data_module_name)
if data_module or m_cats[langcode] and langcode ~= "und" then
local lang = get_lang(langcode, nil, true)
-- First do base-lemma params.
local base_lemma_param_table
if data_module and data_module.base_lemma_params and data_module.base_lemma_params[1] then
local base_lemma_param_parts = {}
insert(base_lemma_param_parts, '{|class="wikitable"')
insert(base_lemma_param_parts, "! 參數 !! 顯示形式")
for _, base_lemma_param in ipairs(data_module.base_lemma_params) do
insert(base_lemma_param_parts, "|-")
insert(base_lemma_param_parts, ("| <code>%s</code> || %s"):format(base_lemma_param.param,
get_display_form(base_lemma_param.tags, lang)))
end
insert(base_lemma_param_parts, "|}")
base_lemma_param_table = concat(base_lemma_param_parts, "\n")
end
-- Then do inflection tags.
local data1_tab = data_module and organize_tag_data(data_module) or {}
local tag_parts = {}
insert(tag_parts, '{|class="wikitable"')
insert(tag_parts, "! 規範標籤 !! 縮寫 !! 標籤類型 !! 顯示形式")
local saw_any_tag = false
for _, tag_type in ipairs(tag_type_order) do
local group_tab = data1_tab[tag_type]
if group_tab then
for _, namedata in ipairs(group_tab) do
local sparts = {}
local name, data = unpack(namedata)
insert(sparts, "| <code>" .. name .. "</code> || ")
if data.shortcuts then
local ssparts = {}
for _, shortcut in ipairs(data.shortcuts) do
insert(ssparts, "<code>" .. shortcut .. "</code>")
end
insert(sparts, concat(ssparts, ", ") .. " ")
end
insert(sparts, "|| " .. tag_type_desc(tag_type) .. " || " ..
get_tag_display_form(name, lang))
insert(tag_parts, "|-")
insert(tag_parts, concat(sparts))
saw_any_tag = true
end
end
end
insert(tag_parts, "|}")
local tag_table = saw_any_tag and concat(tag_parts, "\n") or nil
-- Then do non-alias shortcuts.
local non_alias_shortcut_table
local non_alias_shortcuts = data_module and organize_non_alias_shortcut_data(data_module, lang) or {}
if non_alias_shortcuts[1] then
local non_alias_shortcut_parts = {}
insert(non_alias_shortcut_parts, '{|class="wikitable"')
insert(non_alias_shortcut_parts, "! 縮寫 !! 展開 !! 顯示形式")
for _, spec in ipairs(non_alias_shortcuts) do
local shortcut, full, display = unpack(spec)
insert(non_alias_shortcut_parts, "|-")
if type(full) == "table" then
full = "{" .. concat(full, " ") .. "}"
end
insert(non_alias_shortcut_parts, ("| <code>%s</code> || <code>%s</code> || %s"):format(shortcut, full, display))
end
insert(non_alias_shortcut_parts, "|}")
non_alias_shortcut_table = concat(non_alias_shortcut_parts, "\n")
end
-- Then do categories and labels.
local category_table, label_table
if m_cats[langcode] then
local cats, labels = find_categories_and_labels(m_cats[langcode])
if cats[1] then
category_table = construct_category_table(cats)
end
if labels[1] then
label_table = construct_label_table(labels, lang)
end
end
-- Concatenate all the tables together, with appropriate explanatory text.
if base_lemma_param_table or tag_table or non_alias_shortcut_table or category_table or label_table then
local langname, lang_parts = lang:getCanonicalName(), {}
insert(lang_parts, "===" .. langname .. "===")
insert(lang_parts, show_editlink(data_module_name))
if base_lemma_param_table then
insert(lang_parts, ("%s特定的基礎詞元參數:"):format(langname))
insert(lang_parts, base_lemma_param_table)
end
if tag_table then
insert(lang_parts, ("%s特定的變位標籤:"):format(langname))
insert(lang_parts, tag_table)
end
if non_alias_shortcut_table then
insert(lang_parts, ("%s特定的非別名縮寫:"):format(langname))
insert(lang_parts, non_alias_shortcut_table)
end
if category_table then
insert(lang_parts, ("%s特定的分類(添加這些分類的確切條件在[[Module:form of/cats]]中描述):"):
format(langname))
insert(lang_parts, category_table)
end
if label_table then
insert(lang_parts, ("%s特定的標籤(添加這些標籤的確切條件在[[Module:form of/cats]]中描述):"):
format(langname))
insert(lang_parts, label_table)
end
insert(data_by_lang, {langname, concat(lang_parts, "\n")})
end
end
end
end
local function sort_by_first_english_first(langdata1, langdata2)
if langdata1[1] == "English" then
-- English is "less than" (goes before) all other languages
return true
elseif langdata2[1] == "English" then
-- All other languages are not "less than" (do not go before) English
return false
end
return langdata1[1] < langdata2[1]
end
function export.lang_specific_tables()
local data_by_lang = {}
iterate_languages("Module:languages/code to canonical name", data_by_lang)
iterate_languages("Module:etymology languages/code to canonical name", data_by_lang)
sort(data_by_lang, sort_by_first_english_first)
local parts = {}
for _, lang_and_data in ipairs(data_by_lang) do
insert(parts, lang_and_data[2])
end
return concat(parts, "\n")
end
function export.postable()
local shortcut_tab = {}
for shortcut, full in pairs(form_of_pos) do
if not shortcut_tab[full] then
shortcut_tab[full] = {}
end
insert(shortcut_tab[full], shortcut)
end
local shorcut_list = {}
for full, shortcuts in pairs(shortcut_tab) do
sort(shortcuts)
insert(shorcut_list, {full, shortcuts})
end
sort(shorcut_list, sort_by_first)
local parts = {}
insert(parts, '{|class="wikitable"')
insert(parts, "! 規範詞性 !! 縮寫")
for _, full_shortcuts in ipairs(shorcut_list) do
local full = full_shortcuts[1]
local shortcuts = full_shortcuts[2]
insert(parts, "|-")
local sparts = {}
for _, shortcut in ipairs(shortcuts) do
insert(sparts, "<code>" .. shortcut .. "</code>")
end
insert(parts, "| <code>" .. full .. "</code> || " .. concat(sparts, ", "))
end
insert(parts, "|}")
return concat(parts, "\n")
end
function export.lang_independent_category_table()
if m_cats["und"] then
local cats = find_categories_and_labels(m_cats["und"])
if cats[1] then
return construct_category_table(cats)
end
end
return "(目前沒有語言無關分類)"
end
function export.lang_independent_label_table()
if m_cats["und"] then
local labels = select(2, find_categories_and_labels(m_cats["und"]))
if labels[1] then
return construct_label_table(labels, get_lang("und"), "replace und")
end
end
return "(目前沒有語言無關標籤)"
end
return export
4c86ltpixn6zq60vdi4machodb94ppf
Template:Abbreviation of
10
1406534
9739588
9583077
2026-04-21T05:57:57Z
TongcyDai
53191
9739588
wikitext
text/x-wiki
{{ {{#if:{{{lang|}}}|check deprecated lang param usage|no deprecated lang param usage}}|lang={{{lang|}}}|<!--
-->{{#invoke:form of/templates|form_of_t|的[[Appendix:Glossary#abbreviation|縮寫]]|cat=縮寫|withencap=1|conj=或}}<!--
-->}}<!--
--><noinclude>{{documentation}}</noinclude>
43epyd42toyi3mea7ghwqejdfl6l9u4
9739590
9739588
2026-04-21T06:04:45Z
TongcyDai
53191
9739590
wikitext
text/x-wiki
{{ {{#if:{{{lang|}}}|check deprecated lang param usage|no deprecated lang param usage}}|lang={{{lang|}}}|<!--
-->{{#invoke:form of/templates|form_of_t|的[[Appendix:Glossary#abbreviation|縮寫]]|cat=縮寫|conj=或}}<!--
-->}}<!--
--><noinclude>{{documentation}}</noinclude>
2pjij89bgz3tb74ytgcurqpyqr5paru
gegužė
0
1412025
9739603
9532127
2026-04-21T06:20:42Z
TongcyDai
53191
9739603
wikitext
text/x-wiki
{{also|geguže|gegužę}}
==立陶宛語==
{{wikipedia|lang=lt}}
===詞源===
對比[[w:lt:Elbingo žodynėlis|Elbing Vocabulary]] 中的{{cog|prg|geguse|t=布穀鳥}}。
===發音===
* (gegu'''žė̃''') {{IPA|lt|[ɡʲɛɡʊˈʒʲěː]}}
* (ge'''gù'''žė) {{IPA|lt|[ɡʲɛˈɡʊʒʲeː]}}
===名詞===
{{lt-noun|f|gẽgužės|3<sup>b</sup>|head=gegužė̃}}
{{lt-noun|f|gegùžės|2|head=gegùžė}}
# [[五月]]
# [[布穀鳥]]
====變格====
* {{qualifier|重音型3<sup>b</sup>}}
{{lt-noun-f-ė-3|geguž|gẽguž}}
* {{qualifier|重音型2}}
{{lt-noun-f-ė-2|geguž|gegùž}}
'''註''': 重音3<sup>b</sup>型更常見。
====近義詞====
* {{sense|布穀鳥}} {{l|lt|gegutė|g=f}}
* {{sense|五月}} {{l|lt|gegužis|g=m}}
====參見====
{{list:Gregorian calendar months/lt}}
===參考資料===
* {{R:lt:Martsinkyavitshute2012|gegužė}}
===拓展閱讀===
* [https://web.archive.org/web/20110604080458/http://vlkk.lt/lit/1234 Valstybinė lietuvių kalbos komisija / Kaip kirčiuoti „gegužę“?]
{{c|lt|月份|鳥}}
91egicyunosworqwvwwqh3epyo2fih1
gruodis
0
1412366
9739208
9532108
2026-04-21T04:50:47Z
TongcyDai
53191
9739208
wikitext
text/x-wiki
==立陶宛語==
===其他形式===
* {{alt|lt|gruod.||縮寫}}
===詞源===
源自 {{m|lt|grúodas|t=凍泥,凍土}},指十二月東北歐的嚴寒天氣。對照{{cog|sla-pro|*grudьňь|t=十二月}}。<ref>{{R:lt:SEJL|grúodas|206}}</ref>
===發音===
* {{IPA|lt|[ˈɡr̺ûə.d̪ʲɪs̪]}}
===名詞===
{{lt-noun|m|grúodžiai|1|head=grúodis}}
# [[十二月]]
====變格====
{{lt-noun-m-dis-1||grúo}}
====參見====
{{list:Gregorian calendar months/lt}}
===參考資料===
<references />
{{C|lt|月份}}
oasaw2k55qqj1skse5aev0217natgr6
Template:Abbreviation of/doc
10
1413402
9739609
9672221
2026-04-21T06:35:06Z
TongcyDai
53191
9739609
wikitext
text/x-wiki
{{form of/fulldoc|cat=縮寫|shortcut=abbr of,abbrev of|etymtemp=abbrev|withencap=1}}
==範例==
{|class="wikitable"
! 詞條 !! 維基代碼 !! 輸出結果
|-
| {{m+|he|מ״מ|tr=MM}} || {{demo2c|<nowiki>{{abbr of|he|מִכָּל מָקוֹם|tr=mikól makóm|t=[[儘管]][[如此]]}}</nowiki>}}
|-
| {{m+|en|G}} || {{demo2c|<nowiki>{{C|en|娛樂性藥物}} {{lb|en|毒品|_|俚語}} {{abbrev of|en|gamma-hydroxybutyrate,gamma-butyrolactone}}。</nowiki>}}
|-
| {{m+|sv|h}} || {{demo2c|<nowiki>{{lb|sv|非標準|英語借詞}} {{abbr of|sv|en:hour}}</nowiki>}}
|-
| {{m+|sv|h}} || {{demo2c|<nowiki>{{lb|sv|嚴格|_|技術}} {{abbr of|sv|la:hōra}}</nowiki>}}
|-
| {{m+|en|d}} || {{demo2c|<nowiki>{{abbr of|en|died,death}}。</nowiki>}}
|-
| {{m+|mul|k}} || {{demo2c|<nowiki>{{senseid|mul|thousand}} {{lb|mul|數字}} {{abbr of|mul|fr:kilo-|t=1000}}</nowiki>}}
|-
| {{m+|vi|t}} || {{demo2c|<nowiki>{{lb|vi|俚語|網絡|簡訊}} {{abbr of|vi|tao,tau,tôi<q:有時>,tớ}}</nowiki>}}
|-
| {{m+|en|cent}} || {{demo2c|<nowiki>{{lb|en|廢棄|除了用於 ''per cent'' 和 ''cent percent''}} {{abbr of|en|la:centum|t=一百}}。</nowiki>}}
|-
| {{m+|mul|LC}} || {{demo2c|<nowiki>{{lb|mul|[[w:IUCN Red List|IUCN 紅皮書]]}} {{abbr of|mul|en:[[w:Least-concern species|無危]]}}</nowiki>}}
|-
| {{m+|pl|LP}} || {{demo2c|<nowiki>{{lb|pl|音樂}} {{abbr of|pl|en:long play|addl={{m|pl|płyta długogrająca|t=一張錄音專輯,構成一個完整的作品}}}}</nowiki>}}
|-
| {{m+|mul|FAI}} || {{demo2c|<nowiki>{{abbr of|mul|fr:{{w|lang=en|Fédération Aéronautique Internationale}}|addl=世界航空運動聯合會}}。</nowiki>}}
|-
| {{m+|en|RXR}} || {{demo2c|<nowiki>{{abbr of|en|railroad,railway,rail-line,[[rail]] [[crossing]]|addl=一個[[平交道]]}}。</nowiki>}}
|-
| {{m+|en|l}} || {{demo2c|<nowiki>{{abbr of|en|la:libra|t=[[鎊]]([[pound sterling|英鎊]])}}。</nowiki>}}
|-
| {{m+|pl|cnd.}} || {{demo2c|<nowiki>{{abbr of|pl|czego należało dowieść,co należało dowieść}}: [[QED]] {{gl|證明完畢}}</nowiki>}}
|-
| {{m+|ja|JK}} || {{demo2c|<nowiki>{{abbr of|ja|女子高生<tr:joshi kōsei>,[[女子]][[高校生]]<tr:joshi kōkōsei><t:女高中生>}}</nowiki>}}
|-
| {{m+|en|JJ}} || {{demo2c|<nowiki>{{lb|en|法律|名後銜接詞}} {{plural of|en|J}}: {{abbr of|en|judges,justices|nocap=1}}。</nowiki>}}
|}
==參見==
* {{tl|acronym of}}(首字母縮略字)
* {{tl|contraction of}}(縮約形)
* {{tl|initialism of}}(首字母組合詞)
* {{tl|nomen sacrum form of}}(神聖姓名形式)
<includeonly>
[[Category:之形式模板]]
</includeonly>
l4k93jh1jo9vjh9142kl30lyzmzdd7s
kovas
0
1421827
9739605
9532226
2026-04-21T06:25:12Z
TongcyDai
53191
9739605
wikitext
text/x-wiki
==世界語==
===發音===
{{eo-pr}}
===動詞===
{{eo-head}}
# {{eo-form of|kov|as}}
==立陶宛語==
===其他形式===
* {{alt|lt|kov.||縮寫}}
===詞源===
源於禿鼻鴉鳴叫聲的{{onomatopoeia|lt}};<ref>{{R:lt:SEJL|kóvas|306}}</ref> 比較具有相似構詞的 {{cog|sla-pro|*gàvornъ|t=禿鼻鴉}}、{{cog|en|caw}}。轉變為「三月」之義是由於禿鼻鴉(以及其他鴉科鳥類)通常在三月開始築巢。
===發音===
{{rfp|lt}}
===名詞===
{{lt-noun|m|kovaĩ|3|head=kóvas}}
# [[三月]]
# {{w|秃鼻乌鸦}},禿鼻鴉
====變格====
{{lt-noun-m-as-3|kov|kóv}}
====參見====
{{list:Gregorian calendar months/lt}}
===參考資料===
<references />
===異序詞===
* {{anagrams|lt|vokas}}
{{C|lt|鴉科動物|月份|鳥}}
==瑞典語==
===名詞===
{{head|sv|名詞變格形}}
# {{noun form of|sv|kova||indef|gen|s}}
bmvo9a3b2fbary48jnhzc6j5q6btrer
lapkritis
0
1423439
9739209
9532238
2026-04-21T04:52:30Z
TongcyDai
53191
9739209
wikitext
text/x-wiki
==立陶宛語==
===其他形式===
* {{alt|lt|lapkr.||縮寫}}
===詞源===
源自 {{m|lt|lãpas|t=葉}}<ref>{{R:lt:SEJL|lãpas|336-7}}</ref> + {{m|lt||*krità}},後半部份是 {{m|lt|krìsti|t=掉落}} 的派生詞<ref>{{R:lt:SEJL|krìsti|316}}</ref>,指[[落葉植物|落葉樹]]在秋季掉落葉子的現象。
===發音===
* {{IPA|lt|/ˈɫäːpʲ.kʲrʲɪ.tʲɪs/}}
===名詞===
{{lt-noun|m|lãpkričiai|1|head=lãpkritis}}
# [[十一月]]
====變格====
{{lt-noun-m-tis-1|lapkri|lãpkri}}
====參見====
{{list:Gregorian calendar months/lt}}
===參考資料===
<references />
{{C|lt|月份}}
nih9ebml9kzp8ryg0otyqwwahz82xpl
liepa
0
1423952
9739594
9532253
2026-04-21T06:11:37Z
TongcyDai
53191
9739594
wikitext
text/x-wiki
{{also|liepā|Liepa}}
==拉脫維亞語==
{{wikipedia|Parastā liepa|Liepa|lang=lv}}
[[File:Tilleul commun parc Pierrefitte-Nestalas.JPG|250px|thumb|Liepa]]
===詞源===
源自{{der|lv|ine-bsl-pro|*leipāˀ}}<ref>{{R:Kim PBS}}</ref>,源自{{der|lv|ine-pro|*leyp-||粘,貼}},參見{{l|lv|lipt||黏附}}。沒有雙元音化的詞幹見於地名如{{l|lv||Līpes kalns}}、{{l|lv|Lipaiķi}}。可能源自椴樹枝葉或汁液。椴樹的另一種名稱,源自{{cog|ine-pro|*lento-}},可見於{{cog|en|[[lind]], [[linden]]}}, {{cog|de|Linde}},拉脫維亞語中同源詞為{{l|lv|lieta||東西}}。與{{cog|lt|líepa}}, {{cog|prg|lipe|tr=[liːpe]}}, {{l|prg|*leipe}} (源自地名如{{l|prg|Leypein}}, {{l|prg|Leypiten}}), {{cog|sla-pro|*lipa}} ({{cog|uk|-}}, {{cog|ru|ли́па}}, {{cog|be|лі́па}}, {{cog|bg|липа́}}, {{cog|cs|lípa}}, {{cog|pl|lipa}})同源。(這些也可能是日耳曼語族同源詞,後被{{l|ine-pro|*lento-}}來源的詞彙所代替。)<ref>{{R:lv:LEV}}</ref>
===發音===
* {{lv-IPA|līɛ̄pa|level}}
{{audio|lv|lv-riga-liepa.ogg}}
===名詞===
{{lv-noun|f|4}}
# [[椴樹]] {{gloss|''Tillia cordata''}}
#: {{ux|lv|kupla '''liepa'''|枝葉繁茂的'''椴樹'''|inline=1}}
#: {{ux|lv|'''liepu''' ziedi|'''椴樹'''的花|inline=1}}
#: {{ux|lv|'''liepu''' lūki|'''椴樹'''皮|inline=1}}
#: {{ux|lv|'''liepu''' (ziedu) tēja|'''椴樹'''(花)茶|inline=1}}
====變格====
{{lv-decl-noun|liep|a|4th|extrawidth=-60}}
===參考資料===
<references />
[[Category:拉脫維亞語 樹]]
==立陶宛語==
===其他形式===
* {{alt|lt|liep.||縮寫}}
===詞源===
{{inh+|lt|ine-bsl-pro|*léiˀpāˀ|t=椴樹}}。對照{{cog|sla-pro|*lipa}}。
===發音===
* {{IPA|lt|[¹ˈlʲiɛpɐ]}}
===名詞===
{{lt-noun|f|líepos|1|head=líepa}}
# [[七月]]
# [[椴樹]]
====變格====
{{lt-noun-f-a-1|liep|líep}}
====參見====
{{list:Gregorian calendar months/lt}}
{{C|lt|錦葵科植物|月份|樹}}
qcbntn4bq7vg9xtiivk2t5k9ts4anwv
9739595
9739594
2026-04-21T06:12:06Z
TongcyDai
53191
9739595
wikitext
text/x-wiki
{{also|liepā|Liepa}}
==拉脫維亞語==
{{wikipedia|lv:Parastā liepa,lv:Liepa}}
[[File:Tilleul commun parc Pierrefitte-Nestalas.JPG|250px|thumb|Liepa]]
===詞源===
源自{{der|lv|ine-bsl-pro|*leipāˀ}}<ref>{{R:Kim PBS}}</ref>,源自{{der|lv|ine-pro|*leyp-||粘,貼}},參見{{l|lv|lipt||黏附}}。沒有雙元音化的詞幹見於地名如{{l|lv||Līpes kalns}}、{{l|lv|Lipaiķi}}。可能源自椴樹枝葉或汁液。椴樹的另一種名稱,源自{{cog|ine-pro|*lento-}},可見於{{cog|en|[[lind]], [[linden]]}}, {{cog|de|Linde}},拉脫維亞語中同源詞為{{l|lv|lieta||東西}}。與{{cog|lt|líepa}}, {{cog|prg|lipe|tr=[liːpe]}}, {{l|prg|*leipe}} (源自地名如{{l|prg|Leypein}}, {{l|prg|Leypiten}}), {{cog|sla-pro|*lipa}} ({{cog|uk|-}}, {{cog|ru|ли́па}}, {{cog|be|лі́па}}, {{cog|bg|липа́}}, {{cog|cs|lípa}}, {{cog|pl|lipa}})同源。(這些也可能是日耳曼語族同源詞,後被{{l|ine-pro|*lento-}}來源的詞彙所代替。)<ref>{{R:lv:LEV}}</ref>
===發音===
* {{lv-IPA|līɛ̄pa|level}}
{{audio|lv|lv-riga-liepa.ogg}}
===名詞===
{{lv-noun|f|4}}
# [[椴樹]] {{gloss|''Tillia cordata''}}
#: {{ux|lv|kupla '''liepa'''|枝葉繁茂的'''椴樹'''|inline=1}}
#: {{ux|lv|'''liepu''' ziedi|'''椴樹'''的花|inline=1}}
#: {{ux|lv|'''liepu''' lūki|'''椴樹'''皮|inline=1}}
#: {{ux|lv|'''liepu''' (ziedu) tēja|'''椴樹'''(花)茶|inline=1}}
====變格====
{{lv-decl-noun|liep|a|4th|extrawidth=-60}}
===參考資料===
<references />
[[Category:拉脫維亞語 樹]]
==立陶宛語==
===其他形式===
* {{alt|lt|liep.||縮寫}}
===詞源===
{{inh+|lt|ine-bsl-pro|*léiˀpāˀ|t=椴樹}}。對照{{cog|sla-pro|*lipa}}。
===發音===
* {{IPA|lt|[¹ˈlʲiɛpɐ]}}
===名詞===
{{lt-noun|f|líepos|1|head=líepa}}
# [[七月]]
# [[椴樹]]
====變格====
{{lt-noun-f-a-1|liep|líep}}
====參見====
{{list:Gregorian calendar months/lt}}
{{C|lt|錦葵科植物|月份|樹}}
anmwtgy96io5orwlbqh6s7nvp9xs872
9739598
9739595
2026-04-21T06:14:44Z
TongcyDai
53191
9739598
wikitext
text/x-wiki
{{also|liepā|Liepa}}
==拉脫維亞語==
{{wikipedia|lv:Parastā liepa,lv:Liepa}}
[[File:Tilleul commun parc Pierrefitte-Nestalas.JPG|250px|thumb|Liepa]]
===詞源===
源自{{der|lv|ine-bsl-pro|*leipāˀ}}<ref>{{R:Kim PBS}}</ref>,源自{{der|lv|ine-pro|*leyp-||粘,貼}},參見{{l|lv|lipt||黏附}}。沒有雙元音化的詞幹見於地名如{{l|lv||Līpes kalns}}、{{l|lv|Lipaiķi}}。可能源自椴樹枝葉或汁液。椴樹的另一種名稱,源自{{cog|ine-pro|*lento-}},可見於{{cog|en|[[lind]], [[linden]]}}, {{cog|de|Linde}},拉脫維亞語中同源詞為{{l|lv|lieta||東西}}。與{{cog|lt|líepa}}, {{cog|prg|lipe|tr=[liːpe]}}, {{l|prg|*leipe}} (源自地名如{{l|prg|Leypein}}, {{l|prg|Leypiten}}), {{cog|sla-pro|*lipa}} ({{cog|uk|-}}, {{cog|ru|ли́па}}, {{cog|be|лі́па}}, {{cog|bg|липа́}}, {{cog|cs|lípa}}, {{cog|pl|lipa}})同源。(這些也可能是日耳曼語族同源詞,後被{{l|ine-pro|*lento-}}來源的詞彙所代替。)<ref>{{R:lv:LEV}}</ref>
===發音===
* {{lv-IPA|līɛ̄pa|level}}
{{audio|lv|lv-riga-liepa.ogg}}
===名詞===
{{lv-noun|f|4}}
# [[椴樹]] {{gloss|''Tillia cordata''}}
#: {{ux|lv|kupla '''liepa'''|枝葉繁茂的'''椴樹'''|inline=1}}
#: {{ux|lv|'''liepu''' ziedi|'''椴樹'''的花|inline=1}}
#: {{ux|lv|'''liepu''' lūki|'''椴樹'''皮|inline=1}}
#: {{ux|lv|'''liepu''' (ziedu) tēja|'''椴樹'''(花)茶|inline=1}}
====變格====
{{lv-decl-noun|liep|a|4th|extrawidth=-60}}
===參考資料===
<references />
{{C|lt|樹}}
==立陶宛語==
===其他形式===
* {{alt|lt|liep.||縮寫}}
===詞源===
{{inh+|lt|ine-bsl-pro|*léiˀpāˀ|t=椴樹}}。對照{{cog|sla-pro|*lipa}}。
===發音===
* {{IPA|lt|[¹ˈlʲiɛpɐ]}}
===名詞===
{{lt-noun|f|líepos|1|head=líepa}}
# [[七月]]
# [[椴樹]]
====變格====
{{lt-noun-f-a-1|liep|líep}}
====參見====
{{list:Gregorian calendar months/lt}}
{{C|lt|錦葵科植物|月份|樹}}
b8c6jq9ahtcm8xj0thigas0g63achk1
Umaw
0
1435415
9739596
7672207
2026-04-21T06:12:57Z
Chihunglu83
87715
9739596
wikitext
text/x-wiki
{{also|umawa}}
==阿美語==
===專有名詞===
{{head|ami|專有名詞}}
# [[阿美族]]{{人名|ami|男性}}
===使用說明===
{{臺灣原住民族人名說明|阿美}}
===參考資料===
* {{原住民族人名譜}}
==邵語==
===專有名詞===
{{head|ssf|專有名詞}}
# [[邵族]]{{人名|ssf|女性}}
===使用說明===
{{臺灣原住民族人名說明|邵}}
===參考資料===
* {{原住民族人名譜}}
==賽德克語==
===專有名詞===
{{head|trv|專有名詞}}
# [[賽德克族]]{{人名|trv|男性}}
===使用說明===
{{臺灣原住民族人名說明|賽德克}}
===參考資料===
* {{原住民族人名譜}}
==泰雅語==
===專有名詞===
{{head|tay|專有名詞}}
# [[泰雅族]]{{人名|tay|男性}}
# [[泰雅族]]{{人名|tay|女性}}
===使用說明===
{{臺灣原住民族人名說明|泰雅}}
===參考資料===
* {{原住民族人名譜}}
==太魯閣語==
===專有名詞===
{{head|map-trv|專有名詞}}
# [[太魯閣族]]{{人名|map-trv|男性}}
===使用說明===
{{臺灣原住民族人名說明|賽德克}}
===參考資料===
* {{原住民族人名譜}}
hfwd6fzqxf3w3etekbrbet2g490al6a
9739597
9739596
2026-04-21T06:13:09Z
Chihunglu83
87715
9739597
wikitext
text/x-wiki
{{also|umaw}}
==阿美語==
===專有名詞===
{{head|ami|專有名詞}}
# [[阿美族]]{{人名|ami|男性}}
===使用說明===
{{臺灣原住民族人名說明|阿美}}
===參考資料===
* {{原住民族人名譜}}
==邵語==
===專有名詞===
{{head|ssf|專有名詞}}
# [[邵族]]{{人名|ssf|女性}}
===使用說明===
{{臺灣原住民族人名說明|邵}}
===參考資料===
* {{原住民族人名譜}}
==賽德克語==
===專有名詞===
{{head|trv|專有名詞}}
# [[賽德克族]]{{人名|trv|男性}}
===使用說明===
{{臺灣原住民族人名說明|賽德克}}
===參考資料===
* {{原住民族人名譜}}
==泰雅語==
===專有名詞===
{{head|tay|專有名詞}}
# [[泰雅族]]{{人名|tay|男性}}
# [[泰雅族]]{{人名|tay|女性}}
===使用說明===
{{臺灣原住民族人名說明|泰雅}}
===參考資料===
* {{原住民族人名譜}}
==太魯閣語==
===專有名詞===
{{head|map-trv|專有名詞}}
# [[太魯閣族]]{{人名|map-trv|男性}}
===使用說明===
{{臺灣原住民族人名說明|賽德克}}
===參考資料===
* {{原住民族人名譜}}
67pls2xo20vq23edcv6b5ytxhfvc9h3
aciw
0
1436162
9739736
6144437
2026-04-21T09:11:31Z
Chihunglu83
87715
9739736
wikitext
text/x-wiki
{{also|Aciw}}
==噶瑪蘭語==
===專有名詞===
{{head|ckv|專有名詞}}
# [[噶瑪蘭族]]{{人名|ckv|男性}}
===參考資料===
* {{原住民族人名譜}}
4kva7zym5uqg70luq3qsmgvpi9vdyim
王梨
0
1482185
9739154
9739141
2026-04-20T13:47:50Z
TongcyDai
53191
9739154
wikitext
text/x-wiki
==閩語==
{{zh-forms|alt=鳳萊,旺梨,𦬬萊,黃梨-閩東語、客家語}}
===詞源===
{{rfe|zh}}
===發音===
{{zh-pron
|md=uòng-lì
|mn=ml,tw,jj,ph,sg:ông-lâi/ta:ō͘-lâi/zp:ōng-lâi
|mna=LL-Q36495 (nan)-Akamycoco-ông-lâi.wav
|mn-t=uang5 lai5
|px=pt,jk,nr:orng2 *lai2/xy,yy,ft:orng2 lai2
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|閩東語|泉漳話|莆仙語}} [[菠蘿]],[[鳳梨]]
====近義詞====
{{zh-dial|菠蘿}}
====派生語彙====
* {{desc|bnn|bunglai|bor=1}}
* {{desc|ckv|unglay|bor=1}}
* {{desc|ssf|unglai|bor=1}}
* {{desc|tsu|'ungeai|bor=1}}
===參考資料===
* {{thcwd|1270}}
5nx1xbflpr65ooxwux6th1es7svui08
9739155
9739154
2026-04-20T13:48:15Z
TongcyDai
53191
9739155
wikitext
text/x-wiki
==漢語==
{{zh-forms|alt=鳳萊,旺梨,𦬬萊,黃梨-閩東語、客家語}}
===詞源===
{{rfe|zh}}
===發音===
{{zh-pron
|md=uòng-lì
|mn=ml,tw,jj,ph,sg:ông-lâi/ta:ō͘-lâi/zp:ōng-lâi
|mna=LL-Q36495 (nan)-Akamycoco-ông-lâi.wav
|mn-t=uang5 lai5
|px=pt,jk,nr:orng2 *lai2/xy,yy,ft:orng2 lai2
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|閩東語|泉漳話|莆仙語}} [[菠蘿]],[[鳳梨]]
====近義詞====
{{zh-dial|菠蘿}}
====派生語彙====
* {{desc|bnn|bunglai|bor=1}}
* {{desc|ckv|unglay|bor=1}}
* {{desc|ssf|unglai|bor=1}}
* {{desc|tsu|'ungeai|bor=1}}
===參考資料===
* {{thcwd|1260}}
rwehp1p6ox9450rri1hr2crfiv7b5ju
neoliberalizmus
0
1487220
9739162
7592069
2026-04-20T13:55:18Z
TongcyDai
53191
9739162
wikitext
text/x-wiki
==捷克語==
===其他形式===
* {{alt|cs|neoliberalismus|g=m}}
===發音===
* {{cs-IPA}}
===名詞===
{{cs-noun|m-in}}
# [[新自由主義]]
====變格====
{{cs-ndecl|m.foreign}}
====相關詞彙====
{{col|cs
|neoliberální
|liberalizmus<g:m>
}}
s9zlvdo1uaoasqnrmmgp7rhvkweileo
gunghozgoz
0
1504675
9739722
9625728
2026-04-21T07:38:40Z
TongcyDai
53191
9739722
wikitext
text/x-wiki
==壯語==
{{wikipedia|za:}}
===詞源===
借自{{bor|za|cmn|-}} {{zh-l|共和國}}。
===發音===
* {{za-pron|new_bor=y}}
===名詞===
{{za-head|名詞}}
# [[共和國]]
{{C|za|政府體制}}
bmwiz3jogq19d4s3rw5whe0cbf37vcu
Module:Zh/data/dial-syn/木薯
828
1537096
9739181
6080852
2026-04-20T15:04:48Z
明瑤
132921
9739181
Scribunto
text/plain
local export = {}
export.list = {
["meaning"] = "cassava",
["note"] = "",
["Classical"] = { "" },
["Formal"] = { "木薯" },
["Taxonomic"] = { "" },
["Beijing"] = { "木薯" }, --樹薯?
["Taiwan"] = { "樹薯", "木薯" },
["Tianjin"] = { "" },
["Langfang"] = { "" },
["Tangshan"] = { "" },
["Cangzhou"] = { "" },
["Baoding"] = { "" },
["Shijiazhuang"]= { "" },
["Daming"] = { "" },
["Harbin"] = { "" },
["Shenyang"] = { "" },
["Hailar"] = { "" },
["Ulan Hot"] = { "" },
["Tongliao"] = { "" },
["Chifeng"] = { "" },
["Bayanhot"] = { "" },
["Jinan"] = { "" },
["Muping"] = { "" },
["Luoyang"] = { "" },
["Wanrong"] = { "" },
["Ronghe"] = { "" },
["Xi'an"] = { "" },
["Qingdao"] = { "" },
["Zhengzhou"] = { "" },
["Xining"] = { "" },
["Xuzhou"] = { "" },
["Yinchuan"] = { "" },
["Lanzhou"] = { "" },
["Ürümqi"] = { "" },
["Wuhan"] = { "" },
["Huanggang"] = { "" },
["Chengdu"] = { "" },
["Chongqing"] = { "" },
["Guiyang"] = { "" },
["Guilin"] = { "" },
["Liuzhou"] = { "" }, --木薯?
["Kunming"] = { "" },
["Yangzhou"] = { "" },
["Nanjing"] = { "" },
["Hefei"] = { "" },
["Nantong"] = { "" },
["Malaysia-M"] = { "" },
["Singapore-M"] = { "" },
["Gansu-DG"] = { "" },
["Shaanxi-DG"] = { "" },
["Taiyuan"] = { "" },
["Pingyao"] = { "" },
["Xinzhou"] = { "" },
["Baochang"] = { "" },
["Jining"] = { "" },
["Hohhot"] = { "" },
["Baotou"] = { "" },
["Dongsheng"] = { "" },
["Linhe"] = { "" },
["Haibowan"] = { "" },
["Zhangjiakou"] = { "" },
["Handan"] = { "" },
["Shanghai"] = { "" },
["Suzhou"] = { "" },
["Wuxi"] = { "" },
["Hangzhou"] = { "" },
["Chongming"] = { "" },
["Wenzhou"] = { "" },
["Danyang"] = { "" },
["Jinhua"] = { "" },
["Tangxi"] = { "" },
["Ningbo"] = { "" },
["Changzhou"] = { "" },
["Changsha"] = { "" },
["Shuangfeng"] = { "" },
["Xiangtan"] = { "" },
["Loudi"] = { "" },
["Quanzhou-X"] = { "" },
["Nanchang"] = { "" },
["Lichuan"] = { "" },
["Pingxiang"] = { "" },
["Guixi"] = { "" },
["Meixian"] = { "樹番薯" },
["Xingning"] = { "" },
["Huizhou"] = { "" },
["Huizhou-SK"] = { "" },
["Huizhou-HL"] = { "" },
["Huiyang"] = { "" },
["Huidong-PS"] = { "" },
["Huidong-DL"] = { "" },
["Dongguan-H"] = { "" },
["Longmen-PL"] = { "" },
["Longmen-LX"] = { "" },
["Boluo"] = { "" },
["Shenzhen-H"] = { "" },
["Zengcheng-ZG"]= { "番鬼葛", "木薯" },
["Zhongshan-WGS"] = { "" },
["Zhongshan-NLHS"] = { "" },
["Wuhua-SZ"] = { "" },
["Wuhua-HC"] = { "" },
["Wuhua-CB"] = { "" },
["Wuhua-MY"] = { "" },
["Wuhua-ML"] = { "" },
["Heyuan"] = { "" },
["Zijin-GZ"] = { "" },
["Longchuan-TC"]= { "" },
["Longchuan-SD"]= { "" },
["Heping-LZ"] = { "" },
["Lianping-ZX"] = { "" },
["Lianping-LJ"] = { "" },
["Wengyuan"] = { "" },
["Qujiang"] = { "" },
["Xinfeng-MT"] = { "" },
["Xinfeng-DX"] = { "" },
["Xiaosanjiang"]= { "" },
["Liannan"] = { "" },
["Conghua-H"] = { "" },
["Jiexi"] = { "" },
["Luhe"] = { "" },
["Xihe"] = { "" },
["Luchuan-LC"] = { "" },
["Luchuan-DQ"] = { "" },
["Tang'an"] = { "" },
["Mashan-PL"] = { "" },
["Xiuzhuan"] = { "" },
["Changting"] = { "" },
["Pingyu"] = { "" },
["Wuping"] = { "" },
["Wuping-Y"] = { "" },
["Liancheng"] = { "" },
["Ninghua"] = { "" },
["Yudu"] = { "" },
["Ningdu"] = { "" },
["Ruijin"] = { "" },
["Shicheng"] = { "" },
["Shangyou"] = { "" },
["Sandu"] = { "" },
["Ganzhou-PL"] = { "" },
["Dayu"] = { "" },
["Taoyuan"] = { "" },
["Miaoli"] = { "樹薯" },
["Liudui"] = { "樹薯" },
["Hsinchu"] = { "樹薯" },
["Dongshi"] = { "樹薯" },
["Raoping"] = { "樹薯" },
["Yunlin"] = { "樹薯" },
["Hong Kong-H"] = { "" },
["Tangkou"] = { "" },
["Sanjia"] = { "" },
["Sihe"] = { "" },
["Qianpai"] = { "" },
["Xindong"] = { "" },
["Shalang"] = { "" },
["Xin'an"] = { "" },
["Shijiao"] = { "" },
["Qingping"] = { "" },
["Sabah-B"] = { "" },
["Sabah-L"] = { "" },
["Senai"] = { "" },
["Sungai Tapang"] = { "" },
["Singkawang"] = { "荷蘭薯" },
["Jixi"] = { "" },
["Shexian"] = { "" },
["Tunxi"] = { "" },
["Xiuning"] = { "" },
["Yixian"] = { "" },
["Qimen"] = { "" },
["Wuyuan"] = { "" },
["Fuliang"] = { "" },
["Dexing"] = { "" },
["Jingde"] = { "" },
["Zhanda"] = { "" },
["Guangzhou"] = { "木薯" },
["Hong Kong"] = { "木薯" },
["HK Weitou"] = { "" },
["Kam Tin"] = { "" },
["Ting Kok"] = { "" },
["Tung Ping Chau"]= { "" },
["Macau"] = { "" },
["Panyu"] = { "" },
["Huadu"] = { "" },
["Conghua"] = { "" },
["Zengcheng"] = { "" },
["Foshan"] = { "" },
["Nanhai"] = { "" },
["Shunde"] = { "" },
["Sanshui"] = { "" },
["Gaoming"] = { "" },
["Zhongshan"] = { "" },
["Zhuhai"] = { "" },
["Doumen-T"] = { "" },
["Doumen-S"] = { "" },
["Jiangmen"] = { "" },
["Xinhui"] = { "" },
["Taishan"] = { "" },
["Kaiping"] = { "" },
["Enping"] = { "" },
["Heshan"] = { "" },
["Dongguan"] = { "木薯" },
["Bao'an"] = { "" },
["Dapeng"] = { "" },
["Qingyuan"] = { "" },
["Fogang"] = { "" },
["Yingde"] = { "" },
["Yangshan"] = { "" },
["Lianshan"] = { "" },
["Lianzhou"] = { "" },
["Shaoguan"] = { "" },
["Qujiang-C"] = { "" },
["Renhua"] = { "" },
["Lechang"] = { "" },
["Gaoyao"] = { "" },
["Sihui"] = { "" },
["Guangning"] = { "" },
["Deqing"] = { "" },
["Huaiji"] = { "" },
["Fengkai"] = { "" },
["Yunfu"] = { "" },
["Xinxing"] = { "" },
["Luoding"] = { "" },
["Yunan"] = { "" },
["Yangjiang"] = { "" },
["Xinyi"] = { "" },
["Maoming"] = { "" },
["Zhanjiang"] = { "" },
["Lianjiang"] = { "" },
["Wuchuan"] = { "" },
["Nanning"] = { "" },
["Wuzhou"] = { "" },
["Yulin"] = { "" },
["Hepu"] = { "" },
["Hepu-ST"] = { "" },
["Guiping"] = { "" },
["Mengshan"] = { "" },
["Guigang-NJ"] = { "" },
["Beiliu-TL"] = { "" },
["Baise"] = { "" },
["Bobai"] = { "" },
["Lingshan"] = { "" },
["Pubei"] = { "" },
["Qinzhou"] = { "" },
["Beihai"] = { "" },
["Beihai-NK"] = { "" },
["Beihai-YP"] = { "" },
["Beihai-QG"] = { "" },
["Ningming"] = { "" },
["Hengxian"] = { "" },
["Pumen"] = { "" },
["Fangchenggang-FC"] = { "" },
["Danzhou"] = { "" },
["Kuala Lumpur"]= { "" },
["Singapore-C"] = { "" },
["Ho Chi Minh City"]= { "" },
["Mong Cai"] = { "" },
["Nanning-P"] = { "木薯" },
["Guilin-P"] = { "" },
["Xiamen"] = { "樹薯" },
["Tong'an"] = { "" },
["Quanzhou"] = { "樹薯" },
["Jinjiang"] = { "樹薯" },
["Nan'an"] = { "" },
["Shishi"] = { "" },
["Hui'an"] = { "" },
["Anxi"] = { "" },
["Yongchun"] = { "" },
["Dehua"] = { "" },
["Zhangzhou"] = { "樹薯", "樹葛" },
["Longhai"] = { "" },
["Changtai"] = { "" },
["Hua'an"] = { "" },
["Nanjing-MN"] = { "" },
["Pinghe"] = { "" },
["Zhangpu"] = { "" },
["Yunxiao"] = { "" },
["Zhao'an"] = { "" },
["Dongshan"] = { "" },
["Taipei"] = { "樹薯" },
["Kaohsiung"] = { "樹薯" },
["Tainan"] = { "" },
["Taichung"] = { "" },
["Wuqi"] = { "" },
["Hsinchu-MN"] = { "" },
["Taitung"] = { "" },
["Lukang"] = { "" },
["Sanxia"] = { "" },
["Yilan"] = { "" },
["Kinmen"] = { "" },
["Magong"] = { "" },
["Malaysia-MN"] = { "樹薯" },
["Singapore-MN"] = { "樹薯" },
["Philippine-MN"] = { "柴薯" },
["Medan"] = { "" },
["Longyan"] = { "" },
["Zhangping"] = { "" },
["Yongfu"] = { "" },
["Datian"] = { "" },
["Pingnan"] = { "" },
["Chaozhou"] = { "樹薯" },
["Shantou"] = { "樹薯" },
["Chenghai"] = { "" },
["Chaoyang"] = { "" },
["Jieyang"] = { "樹薯" },
["Lufeng"] = { "" },
["Haifeng"] = { "" },
["Thailand-MN-T"] = { "樹薯" },
["Johor Bahru"] = { "樹薯" },
["Singapore-MN-T"] = { "" },
["Pontianak-MN-T"] = {"樹薯"},
["Leizhou"] = { "" },
["Wenchang"] = { "" },
["Haikou"] = { "樹薯" },
["Qionghai"] = { "" },
["Singapore-MN-H"] = { "" },
["Putian"] = { "樹薯" },
["Xianyou"] = { "樹薯" },
["Shaxi"] = { "" },
["Sanxiang"] = { "" },
["Fuzhou"] = { "" },
["Changle"] = { "" },
["Lianjiang-MD"]= { "" },
["Fuqing"] = { "" },
["Pingtan"] = { "" },
["Yongtai"] = { "" },
["Minqing"] = { "" },
["Gutian"] = { "" },
["Pingnan-MD"] = { "" },
["Luoyuan"] = { "" },
["Fu'an"] = { "" },
["Ningde"] = { "" },
["Xiapu"] = { "" },
["Zherong"] = { "" },
["Shouning"] = { "" },
["Zhouning"] = { "" },
["Fuding"] = { "" },
["Matsu"] = { "" },
["Jian'ou"] = { "木薯" },
["Dikou"] = { "" },
["Songxi"] = { "" },
["Zhenghe"] = { "" },
["Zhenqian"] = { "" },
["Jianyang"] = { "" },
["Wuyishan"] = { "" },
["Shibei"] = { "" },
["Yong'an"] = { "" },
["Sanyuan"] = { "" },
["Shaxian"] = { "" },
["Fu'an-She"] = { "" },
["Fuding-She"] = { "" },
["Luoyuan-She"] = { "" },
["Sanming-She"] = { "" },
["Shunchang-She"] = { "" },
["Hua'an-She"] = { "" },
["Guixi-She"] = { "" },
["Cangnan-She"] = { "" },
["Jingning-She"] = { "" },
["Lishui-She"] = { "" },
["Longyou-She"] = { "" },
["Chaozhou-She"] = { "" },
["Fengshun-She"] = { "" },
}
return export
svd8qq753d8ct5jx4lsiw9kj2aoq59o
Module:Zh/data/dial-syn/身體
828
1537371
9739725
6081128
2026-04-21T08:07:58Z
明瑤
132921
9739725
Scribunto
text/plain
local export = {}
export.list = {
["meaning"] = "body", --physical body
["note"] = "",
["Classical"] = { "" },
["Formal"] = { "" },
["Taxonomic"] = { "" },
["Beijing"] = { "身體", "身子" },
["Taiwan"] = { "身體" }, --身?
["Tianjin"] = { "身子" },
["Langfang"] = { "" },
["Tangshan"] = { "身體", "身子" },
["Cangzhou"] = { "身子", "身子骨兒" },
["Baoding"] = { "身子" },
["Shijiazhuang"]= { "身子" },
["Daming"] = { "" },
["Harbin"] = { "身體", "身子" },
["Shenyang"] = { "身體", "身子" },
["Hailar"] = { "身體" },
["Ulan Hot"] = { "" },
["Tongliao"] = { "" },
["Chifeng"] = { "身體", "身子" },
["Bayanhot"] = { "" },
["Jinan"] = { "身體", "身子" },
["Muping"] = { "身體", "身子" }, --身?
["Luoyang"] = { "身體", "身子" },
["Wanrong"] = { "" },
["Ronghe"] = { "" },
["Xi'an"] = { "身體", "身子" }, --身?
["Qingdao"] = { "身子", "身板骨兒" },
["Zhengzhou"] = { "身" },
["Xining"] = { "身體", "身子" },
["Xuzhou"] = { "身子", "身體" },
["Yinchuan"] = { "身子" }, --身?
["Lanzhou"] = { "身子", "體子" },
["Ürümqi"] = { "身體", "身子" }, --身?
["Wuhan"] = { "身體", "身子" },
["Huanggang"] = { "" },
["Chengdu"] = { "身體" },
["Chongqing"] = { "身體", "身子" },
["Guiyang"] = { "身體", "身子" }, --身?
["Guilin"] = { "身子", "身體" },
["Liuzhou"] = { "身子", "身體" },
["Kunming"] = { "身體", "身子" },
["Yangzhou"] = { "身子" }, --身?
["Nanjing"] = { "身體", "身子" },
["Hefei"] = { "身體", "身子" },
["Nantong"] = { "身子" },
["Malaysia-M"] = { "" },
["Singapore-M"] = { "身體" },
["Gansu-DG"] = { "" },
["Shaanxi-DG"] = { "" },
["Taz"] = { "身子" },
["Taiyuan"] = { "身體", "身子" }, --身?
["Pingyao"] = { "" },
["Xinzhou"] = { "身子", "身體", "身得", "身坯得" },
["Baochang"] = { "" },
["Jining"] = { "身體" },
["Hohhot"] = { "身體", "身子" },
["Baotou"] = { "" },
["Dongsheng"] = { "" },
["Linhe"] = { "身子" },
["Haibowan"] = { "" },
["Zhangjiakou"] = { "身體", "身子" },
["Handan"] = { "身體", "身子" },
["Shanghai"] = { "身體", "身子" }, --身?
["Chongming"] = { "身體" },
["Baoshan-SCD"] = { "" },
["Baoshan-LD"] = { "" },
["Zhoupu"] = { "" },
["Songjiang"] = { "" },
["Suzhou"] = { "身體" }, --身?
["Wujiang-LL"] = { "" },
["Wujiang-SZ"] = { "" },
["Wuxi"] = { "" },
["Changshu"] = { "" },
["Kunshan"] = { "" },
["Jiaxing"] = { "" },
["Changzhou"] = { "" },
["Liyang"] = { "" },
["Yixing"] = { "" },
["Danyang"] = { "身體" }, --身?
["Danyang-TJQ"] = { "" },
["Jingjiang"] = { "" },
["Jiangyin"] = { "" },
["Huzhou-SL"] = { "" },
["Hangzhou"] = { "身體" },
["Shaoxing"] = { "" },
["Zhuji-WJJ"] = { "" },
["Shengzhou-CR"]= { "" },
["Shengzhou-TP"]= { "" },
["Yuyao"] = { "" },
["Ningbo"] = { "身體" },
["Zhoushan"] = { "" },
["Huangyan"] = { "" },
["Wenzhou"] = { "身體" },
["Quzhou"] = { "" },
["Jinhua"] = { "" },
["Tangxi"] = { "" },
["Yiwu"] = { "" },
["Yongkang"] = { "" },
["Changsha"] = { "身子" },
["Shuangfeng"] = { "" },
["Xiangtan"] = { "" },
["Loudi"] = { "" },
["Quanzhou-X"] = { "" },
["Nanchang"] = { "" },
["Lichuan"] = { "身體" }, --身?
["Pingxiang"] = { "" }, --身?
["Guixi"] = { "" },
["Meixian"] = { "身體" }, --身?
["Xingning"] = { "" },
["Huizhou"] = { "身體" },
["Huizhou-SK"] = { "" },
["Huizhou-HL"] = { "" },
["Huiyang"] = { "" },
["Huidong-PS"] = { "" },
["Huidong-DL"] = { "" },
["Dongguan-H"] = { "完身" },
["Longmen-PL"] = { "" },
["Longmen-LX"] = { "" },
["Boluo"] = { "" },
["Shenzhen-H"] = { "完身" },
["Zengcheng-ZG"]= { "" },
["Zhongshan-WGS"] = { "" },
["Zhongshan-NLHS"] = { "身" },
["Wuhua-SZ"] = { "身體", "完身" },
["Wuhua-HC"] = { "身體" },
["Wuhua-CB"] = { "完身" },
["Wuhua-MY"] = { "完身" },
["Wuhua-ML"] = { "" },
["Heyuan"] = { "" },
["Zijin-GZ"] = { "" },
["Longchuan-TC"]= { "" },
["Longchuan-SD"]= { "" },
["Heping-LZ"] = { "" },
["Lianping-ZX"] = { "" },
["Lianping-LJ"] = { "" },
["Wengyuan"] = { "" },
["Qujiang"] = { "" },
["Xinfeng-MT"] = { "" },
["Xinfeng-DX"] = { "" },
["Xiaosanjiang"]= { "" },
["Liannan"] = { "" },
["Conghua-H"] = { "身" },
["Jiexi"] = { "膚身" },
["Luhe"] = { "身體" },
["Xihe"] = { "" },
["Luchuan-LC"] = { "" },
["Luchuan-DQ"] = { "" },
["Tang'an"] = { "" },
["Mashan-PL"] = { "" },
["Xiuzhuan"] = { "" },
["Changting"] = { "" },
["Pingyu"] = { "" },
["Wuping"] = { "" },
["Wuping-Y"] = { "" },
["Liancheng"] = { "" },
["Ninghua"] = { "" },
["Yudu"] = { "身體" },
["Ningdu"] = { "" },
["Ruijin"] = { "" },
["Shicheng"] = { "" },
["Shangyou"] = { "" },
["Sandu"] = { "" },
["Ganzhou-PL"] = { "" },
["Dayu"] = { "" },
["Taoyuan"] = { "" },
["Miaoli"] = { "圓身" },
["Liudui"] = { "圓身" },
["Hsinchu"] = { "膴身" },
["Dongshi"] = { "圓身", "圍身" },
["Raoping"] = { "膴身" },
["Yunlin"] = { "膴身" },
["Hong Kong-H"] = { "" },
["Tangkou"] = { "" },
["Sanjia"] = { "" },
["Sihe"] = { "" },
["Qianpai"] = { "" },
["Xindong"] = { "" },
["Shalang"] = { "" },
["Xin'an"] = { "" },
["Shijiao"] = { "" },
["Qingping"] = { "" },
["Sabah-B"] = { "" },
["Sabah-L"] = { "" },
["Senai"] = { "" },
["Sungai Tapang"] = { "膚身" },
["Singkawang"] = { "膴身", "身體" },
["Jixi"] = { "身體" }, --身?
["Shexian"] = { "身體" },
["Tunxi"] = { "" },
["Xiuning"] = { "" },
["Yixian"] = { "" },
["Qimen"] = { "" },
["Wuyuan"] = { "" },
["Fuliang"] = { "" },
["Dexing"] = { "" },
["Jingde"] = { "" },
["Zhanda"] = { "" },
["Guangzhou"] = { "身", "身子" },
["Hong Kong"] = { "身" }, --身子?
["HK Weitou"] = { "" },
["Kam Tin"] = { "身體" },
["Ting Kok"] = { "" },
["Tung Ping Chau"]= { "" },
["Macau"] = { "身" },
["Panyu"] = { "身" },
["Huadu"] = { "身" },
["Conghua"] = { "身" },
["Zengcheng"] = { "身" },
["Foshan"] = { "身" },
["Nanhai"] = { "身" },
["Shunde"] = { "身" },
["Sanshui"] = { "身" },
["Gaoming"] = { "身" },
["Zhongshan"] = { "身" },
["Zhuhai"] = { "身" },
["Doumen-T"] = { "身" },
["Doumen-S"] = { "身" },
["Jiangmen"] = { "身" },
["Xinhui"] = { "身" },
["Taishan"] = { "身" },
["Kaiping"] = { "身" },
["Enping"] = { "身" },
["Heshan"] = { "身體" },
["Dongguan"] = { "身", "身體" },
["Bao'an"] = { "身" },
["Dapeng"] = { "身" },
["Qingyuan"] = { "身" },
["Fogang"] = { "身" },
["Yingde"] = { "身" },
["Yangshan"] = { "身" },
["Lianshan"] = { "身體" },
["Lianzhou"] = { "身" },
["Shaoguan"] = { "身" },
["Qujiang-C"] = { "身體" },
["Renhua"] = { "身" },
["Lechang"] = { "身" },
["Gaoyao"] = { "身" },
["Sihui"] = { "身體" },
["Guangning"] = { "身體", "身" },
["Deqing"] = { "身" },
["Huaiji"] = { "身" },
["Fengkai"] = { "身" },
["Yunfu"] = { "身" },
["Xinxing"] = { "身" },
["Luoding"] = { "身" },
["Yunan"] = { "身" },
["Yangjiang"] = { "身體", "身子" },
["Xinyi"] = { "身" },
["Maoming"] = { "身" },
["Zhanjiang"] = { "" },
["Lianjiang"] = { "身" },
["Wuchuan"] = { "" },
["Nanning"] = { "" },
["Wuzhou"] = { "" },
["Yulin"] = { "" },
["Hepu"] = { "" },
["Hepu-ST"] = { "" },
["Guiping"] = { "" },
["Mengshan"] = { "" },
["Guigang-NJ"] = { "" },
["Beiliu-TL"] = { "" },
["Baise"] = { "" },
["Bobai"] = { "" },
["Lingshan"] = { "" },
["Pubei"] = { "" },
["Qinzhou"] = { "" },
["Beihai"] = { "身體" },
["Beihai-NK"] = { "" },
["Beihai-YP"] = { "" },
["Beihai-QG"] = { "" },
["Ningming"] = { "" },
["Hengxian"] = { "" },
["Pumen"] = { "" },
["Fangchenggang-FC"] = { "" },
["Danzhou"] = { "" },
["Kuala Lumpur"]= { "" },
["Singapore-C"] = { "身" }, -- 身體?
["Ho Chi Minh City"]= { "" },
["Mong Cai"] = { "" },
["Nanning-P"] = { "身" },
["Guilin-P"] = { "" },
["Xiamen"] = { "身軀" }, --身?
["Tong'an"] = { "身軀" },
["Quanzhou"] = { "身軀" }, --身?
["Jinjiang"] = { "" },
["Nan'an"] = { "" },
["Shishi"] = { "" },
["Hui'an"] = { "" },
["Anxi"] = { "" },
["Yongchun"] = { "" },
["Dehua"] = { "" },
["Zhangzhou"] = { "身軀" }, --身?
["Longhai"] = { "" },
["Changtai"] = { "渾身", "渾軀" },
["Hua'an"] = { "" },
["Nanjing-MN"] = { "" },
["Pinghe"] = { "" },
["Zhangpu"] = { "" },
["Yunxiao"] = { "" },
["Zhao'an"] = { "身體" },
["Dongshan"] = { "" },
["Taipei"] = { "身軀" }, --Wanhua 身軀
["Kaohsiung"] = { "身軀" },
["Tainan"] = { "身軀" },
["Taichung"] = { "身軀" },
["Wuqi"] = { "身軀" },
["Hsinchu-MN"] = { "身軀" },
["Taitung"] = { "身軀" },
["Lukang"] = { "身軀" },
["Sanxia"] = { "身軀" },
["Yilan"] = { "身軀" },
["Kinmen"] = { "身軀" },
["Magong"] = { "身軀" },
["Malaysia-MN"] = { "身軀" },
["Singapore-MN"] = { "身軀" },
["Philippine-MN"] = { "身軀" },
["Medan"] = { "" },
["Longyan"] = { "" },
["Zhangping"] = { "" },
["Yongfu"] = { "" },
["Datian"] = { "" },
["Pingnan"] = { "身體" },
["Chaozhou"] = { "" },
["Shantou"] = { "身體" },
["Chenghai"] = { "" },
["Chaoyang"] = { "" },
["Jieyang"] = { "" },
["Lufeng"] = { "" },
["Haifeng"] = { "" },
["Thailand-MN-T"] = { "" },
["Johor Bahru"] = { "" },
["Singapore-MN-T"] = { "" },
["Leizhou"] = { "身軀" },
["Wenchang"] = { "" },
["Haikou"] = { "身體" }, --身?
["Qionghai"] = { "" },
["Singapore-MN-H"] = { "" },
["Putian"] = { "" },
["Xianyou"] = { "" },
["Fuding-AY"] = { "身軀" },
["Shaxi"] = { "身" },
["Sanxiang"] = { "" },
["Fuzhou"] = { "身", "身體" },
["Changle"] = { "身" },
["Lianjiang-MD"]= { "" },
["Fuqing"] = { "身體" },
["Pingtan"] = { "" },
["Yongtai"] = { "完身" },
["Minqing"] = { "" },
["Gutian"] = { "完身" },
["Pingnan-MD"] = { "完身" },
["Luoyuan"] = { "" },
["Fu'an"] = { "完身" },
["Ningde"] = { "完身" },
["Xiapu"] = { "完身" },
["Zherong"] = { "身體" },
["Shouning"] = { "完身", "身體" },
["Zhouning"] = { "完身" },
["Fuding"] = { "身體" },
["Matsu"] = { "" },
["Jian'ou"] = { "" }, --身?
["Dikou"] = { "" },
["Songxi"] = { "" },
["Zhenghe"] = { "" },
["Zhenqian"] = { "" },
["Jianyang"] = { "" },
["Wuyishan"] = { "" },
["Shibei"] = { "" },
["Yong'an"] = { "完身" },
["Sanyuan"] = { "完身" },
["Shaxian"] = { "" }, --muĩ31-33身
["Fu'an-She"] = { "" },
["Fuding-She"] = { "" },
["Luoyuan-She"] = { "" },
["Sanming-She"] = { "" },
["Shunchang-She"] = { "" },
["Hua'an-She"] = { "" },
["Guixi-She"] = { "" },
["Cangnan-She"] = { "" },
["Jingning-She"] = { "" },
["Lishui-She"] = { "" },
["Longyou-She"] = { "" },
["Chaozhou-She"] = { "" },
["Fengshun-She"] = { "" },
["Guzhang-WX"] = { "身" },
["Yuanling-WX"] = { "" },
["Luxi-WX"] = { "" },
}
return export
rdm3mrbh8jqznzvayfkw3dgw81jsa9g
9739726
9739725
2026-04-21T08:16:07Z
明瑤
132921
9739726
Scribunto
text/plain
local export = {}
export.list = {
["meaning"] = "body", --physical body
["note"] = "",
["Classical"] = { "" },
["Formal"] = { "" },
["Taxonomic"] = { "" },
["Beijing"] = { "身體", "身子" },
["Taiwan"] = { "身體" }, --身?
["Tianjin"] = { "身子" },
["Langfang"] = { "" },
["Tangshan"] = { "身體", "身子" },
["Cangzhou"] = { "身子", "身子骨兒" },
["Baoding"] = { "身子" },
["Shijiazhuang"]= { "身子" },
["Daming"] = { "" },
["Harbin"] = { "身體", "身子" },
["Shenyang"] = { "身體", "身子" },
["Hailar"] = { "身體" },
["Ulan Hot"] = { "" },
["Tongliao"] = { "" },
["Chifeng"] = { "身體", "身子" },
["Bayanhot"] = { "" },
["Jinan"] = { "身體", "身子" },
["Muping"] = { "身體", "身子" }, --身?
["Luoyang"] = { "身體", "身子" },
["Wanrong"] = { "" },
["Ronghe"] = { "" },
["Xi'an"] = { "身體", "身子" }, --身?
["Qingdao"] = { "身子", "身板骨兒" },
["Zhengzhou"] = { "身" },
["Xining"] = { "身體", "身子" },
["Xuzhou"] = { "身子", "身體" },
["Yinchuan"] = { "身子" }, --身?
["Lanzhou"] = { "身子", "體子" },
["Ürümqi"] = { "身體", "身子" }, --身?
["Wuhan"] = { "身體", "身子" },
["Huanggang"] = { "" },
["Chengdu"] = { "身體" },
["Chongqing"] = { "身體", "身子" },
["Guiyang"] = { "身體", "身子" }, --身?
["Guilin"] = { "身子", "身體" },
["Liuzhou"] = { "身子", "身體" },
["Kunming"] = { "身體", "身子" },
["Yangzhou"] = { "身子" }, --身?
["Nanjing"] = { "身體", "身子" },
["Hefei"] = { "身體", "身子" },
["Nantong"] = { "身子" },
["Malaysia-M"] = { "" },
["Singapore-M"] = { "身體" },
["Gansu-DG"] = { "" },
["Shaanxi-DG"] = { "" },
["Taz"] = { "身子" },
["Taiyuan"] = { "身體", "身子" }, --身?
["Pingyao"] = { "" },
["Xinzhou"] = { "身子", "身體", "身得", "身坯得" },
["Baochang"] = { "" },
["Jining"] = { "身體" },
["Hohhot"] = { "身體", "身子" },
["Baotou"] = { "" },
["Dongsheng"] = { "" },
["Linhe"] = { "身子" },
["Haibowan"] = { "" },
["Zhangjiakou"] = { "身體", "身子" },
["Handan"] = { "身體", "身子" },
["Shanghai"] = { "身體", "身子" }, --身?
["Chongming"] = { "身體" },
["Baoshan-SCD"] = { "" },
["Baoshan-LD"] = { "" },
["Zhoupu"] = { "" },
["Songjiang"] = { "" },
["Suzhou"] = { "身體" }, --身?
["Wujiang-LL"] = { "" },
["Wujiang-SZ"] = { "" },
["Wuxi"] = { "" },
["Changshu"] = { "" },
["Kunshan"] = { "" },
["Jiaxing"] = { "" },
["Changzhou"] = { "" },
["Liyang"] = { "" },
["Yixing"] = { "" },
["Danyang"] = { "身體" }, --身?
["Danyang-TJQ"] = { "" },
["Jingjiang"] = { "" },
["Jiangyin"] = { "" },
["Huzhou-SL"] = { "" },
["Hangzhou"] = { "身體" },
["Shaoxing"] = { "" },
["Zhuji-WJJ"] = { "" },
["Shengzhou-CR"]= { "" },
["Shengzhou-TP"]= { "" },
["Yuyao"] = { "" },
["Ningbo"] = { "身體" },
["Zhoushan"] = { "" },
["Huangyan"] = { "" },
["Wenzhou"] = { "身體" },
["Quzhou"] = { "" },
["Jinhua"] = { "" },
["Tangxi"] = { "" },
["Yiwu"] = { "" },
["Yongkang"] = { "" },
["Changsha"] = { "身子" },
["Shuangfeng"] = { "" },
["Xiangtan"] = { "" },
["Loudi"] = { "" },
["Quanzhou-X"] = { "" },
["Nanchang"] = { "" },
["Lichuan"] = { "身體" }, --身?
["Pingxiang"] = { "" }, --身?
["Guixi"] = { "" },
["Meixian"] = { "身仔", "身體" }, --身?
["Xingning"] = { "" },
["Huizhou"] = { "身體" },
["Huizhou-SK"] = { "" },
["Huizhou-HL"] = { "" },
["Huiyang"] = { "" },
["Huidong-PS"] = { "" },
["Huidong-DL"] = { "" },
["Dongguan-H"] = { "完身" },
["Longmen-PL"] = { "" },
["Longmen-LX"] = { "" },
["Boluo"] = { "" },
["Shenzhen-H"] = { "完身" },
["Zengcheng-ZG"]= { "" },
["Zhongshan-WGS"] = { "" },
["Zhongshan-NLHS"] = { "身" },
["Wuhua-SZ"] = { "身體", "完身" },
["Wuhua-HC"] = { "身體" },
["Wuhua-CB"] = { "完身" },
["Wuhua-MY"] = { "完身" },
["Wuhua-ML"] = { "" },
["Heyuan"] = { "" },
["Zijin-GZ"] = { "" },
["Longchuan-TC"]= { "" },
["Longchuan-SD"]= { "" },
["Heping-LZ"] = { "" },
["Lianping-ZX"] = { "" },
["Lianping-LJ"] = { "" },
["Wengyuan"] = { "" },
["Qujiang"] = { "" },
["Xinfeng-MT"] = { "" },
["Xinfeng-DX"] = { "" },
["Xiaosanjiang"]= { "" },
["Liannan"] = { "" },
["Conghua-H"] = { "身" },
["Jiexi"] = { "膚身" },
["Luhe"] = { "身體" },
["Xihe"] = { "" },
["Luchuan-LC"] = { "" },
["Luchuan-DQ"] = { "" },
["Tang'an"] = { "" },
["Mashan-PL"] = { "" },
["Xiuzhuan"] = { "" },
["Changting"] = { "" },
["Pingyu"] = { "" },
["Wuping"] = { "" },
["Wuping-Y"] = { "" },
["Liancheng"] = { "" },
["Ninghua"] = { "" },
["Yudu"] = { "身體" },
["Ningdu"] = { "" },
["Ruijin"] = { "" },
["Shicheng"] = { "" },
["Shangyou"] = { "" },
["Sandu"] = { "" },
["Ganzhou-PL"] = { "" },
["Dayu"] = { "" },
["Taoyuan"] = { "" },
["Miaoli"] = { "圓身" },
["Liudui"] = { "圓身" },
["Hsinchu"] = { "膴身" },
["Dongshi"] = { "圓身", "圍身" },
["Raoping"] = { "膴身" },
["Yunlin"] = { "膴身" },
["Hong Kong-H"] = { "" },
["Tangkou"] = { "" },
["Sanjia"] = { "" },
["Sihe"] = { "" },
["Qianpai"] = { "" },
["Xindong"] = { "" },
["Shalang"] = { "" },
["Xin'an"] = { "" },
["Shijiao"] = { "" },
["Qingping"] = { "" },
["Sabah-B"] = { "" },
["Sabah-L"] = { "" },
["Senai"] = { "" },
["Sungai Tapang"] = { "膚身" },
["Singkawang"] = { "膴身", "身體" },
["Pontianak-MX"] = {"身仔", "身體"},
["Jixi"] = { "身體" }, --身?
["Shexian"] = { "身體" },
["Tunxi"] = { "" },
["Xiuning"] = { "" },
["Yixian"] = { "" },
["Qimen"] = { "" },
["Wuyuan"] = { "" },
["Fuliang"] = { "" },
["Dexing"] = { "" },
["Jingde"] = { "" },
["Zhanda"] = { "" },
["Guangzhou"] = { "身", "身子" },
["Hong Kong"] = { "身" }, --身子?
["HK Weitou"] = { "" },
["Kam Tin"] = { "身體" },
["Ting Kok"] = { "" },
["Tung Ping Chau"]= { "" },
["Macau"] = { "身" },
["Panyu"] = { "身" },
["Huadu"] = { "身" },
["Conghua"] = { "身" },
["Zengcheng"] = { "身" },
["Foshan"] = { "身" },
["Nanhai"] = { "身" },
["Shunde"] = { "身" },
["Sanshui"] = { "身" },
["Gaoming"] = { "身" },
["Zhongshan"] = { "身" },
["Zhuhai"] = { "身" },
["Doumen-T"] = { "身" },
["Doumen-S"] = { "身" },
["Jiangmen"] = { "身" },
["Xinhui"] = { "身" },
["Taishan"] = { "身" },
["Kaiping"] = { "身" },
["Enping"] = { "身" },
["Heshan"] = { "身體" },
["Dongguan"] = { "身", "身體" },
["Bao'an"] = { "身" },
["Dapeng"] = { "身" },
["Qingyuan"] = { "身" },
["Fogang"] = { "身" },
["Yingde"] = { "身" },
["Yangshan"] = { "身" },
["Lianshan"] = { "身體" },
["Lianzhou"] = { "身" },
["Shaoguan"] = { "身" },
["Qujiang-C"] = { "身體" },
["Renhua"] = { "身" },
["Lechang"] = { "身" },
["Gaoyao"] = { "身" },
["Sihui"] = { "身體" },
["Guangning"] = { "身體", "身" },
["Deqing"] = { "身" },
["Huaiji"] = { "身" },
["Fengkai"] = { "身" },
["Yunfu"] = { "身" },
["Xinxing"] = { "身" },
["Luoding"] = { "身" },
["Yunan"] = { "身" },
["Yangjiang"] = { "身體", "身子" },
["Xinyi"] = { "身" },
["Maoming"] = { "身" },
["Zhanjiang"] = { "" },
["Lianjiang"] = { "身" },
["Wuchuan"] = { "" },
["Nanning"] = { "" },
["Wuzhou"] = { "" },
["Yulin"] = { "" },
["Hepu"] = { "" },
["Hepu-ST"] = { "" },
["Guiping"] = { "" },
["Mengshan"] = { "" },
["Guigang-NJ"] = { "" },
["Beiliu-TL"] = { "" },
["Baise"] = { "" },
["Bobai"] = { "" },
["Lingshan"] = { "" },
["Pubei"] = { "" },
["Qinzhou"] = { "" },
["Beihai"] = { "身體" },
["Beihai-NK"] = { "" },
["Beihai-YP"] = { "" },
["Beihai-QG"] = { "" },
["Ningming"] = { "" },
["Hengxian"] = { "" },
["Pumen"] = { "" },
["Fangchenggang-FC"] = { "" },
["Danzhou"] = { "" },
["Kuala Lumpur"]= { "" },
["Singapore-C"] = { "身" }, -- 身體?
["Ho Chi Minh City"]= { "" },
["Mong Cai"] = { "" },
["Nanning-P"] = { "身" },
["Guilin-P"] = { "" },
["Xiamen"] = { "身軀" }, --身?
["Tong'an"] = { "身軀" },
["Quanzhou"] = { "身軀" }, --身?
["Jinjiang"] = { "" },
["Nan'an"] = { "" },
["Shishi"] = { "" },
["Hui'an"] = { "" },
["Anxi"] = { "" },
["Yongchun"] = { "" },
["Dehua"] = { "" },
["Zhangzhou"] = { "身軀" }, --身?
["Longhai"] = { "" },
["Changtai"] = { "渾身", "渾軀" },
["Hua'an"] = { "" },
["Nanjing-MN"] = { "" },
["Pinghe"] = { "" },
["Zhangpu"] = { "" },
["Yunxiao"] = { "" },
["Zhao'an"] = { "身體" },
["Dongshan"] = { "" },
["Taipei"] = { "身軀" }, --Wanhua 身軀
["Kaohsiung"] = { "身軀" },
["Tainan"] = { "身軀" },
["Taichung"] = { "身軀" },
["Wuqi"] = { "身軀" },
["Hsinchu-MN"] = { "身軀" },
["Taitung"] = { "身軀" },
["Lukang"] = { "身軀" },
["Sanxia"] = { "身軀" },
["Yilan"] = { "身軀" },
["Kinmen"] = { "身軀" },
["Magong"] = { "身軀" },
["Malaysia-MN"] = { "身軀" },
["Singapore-MN"] = { "身軀" },
["Philippine-MN"] = { "身軀" },
["Medan"] = { "" },
["Longyan"] = { "" },
["Zhangping"] = { "" },
["Yongfu"] = { "" },
["Datian"] = { "" },
["Pingnan"] = { "身體" },
["Chaozhou"] = { "" },
["Shantou"] = { "身體" },
["Chenghai"] = { "" },
["Chaoyang"] = { "" },
["Jieyang"] = { "" },
["Lufeng"] = { "" },
["Haifeng"] = { "" },
["Thailand-MN-T"] = { "" },
["Johor Bahru"] = { "" },
["Singapore-MN-T"] = { "" },
["Leizhou"] = { "身軀" },
["Wenchang"] = { "" },
["Haikou"] = { "身體" }, --身?
["Qionghai"] = { "" },
["Singapore-MN-H"] = { "" },
["Putian"] = { "" },
["Xianyou"] = { "" },
["Fuding-AY"] = { "身軀" },
["Shaxi"] = { "身" },
["Sanxiang"] = { "" },
["Fuzhou"] = { "身", "身體" },
["Changle"] = { "身" },
["Lianjiang-MD"]= { "" },
["Fuqing"] = { "身體" },
["Pingtan"] = { "" },
["Yongtai"] = { "完身" },
["Minqing"] = { "" },
["Gutian"] = { "完身" },
["Pingnan-MD"] = { "完身" },
["Luoyuan"] = { "" },
["Fu'an"] = { "完身" },
["Ningde"] = { "完身" },
["Xiapu"] = { "完身" },
["Zherong"] = { "身體" },
["Shouning"] = { "完身", "身體" },
["Zhouning"] = { "完身" },
["Fuding"] = { "身體" },
["Matsu"] = { "" },
["Jian'ou"] = { "" }, --身?
["Dikou"] = { "" },
["Songxi"] = { "" },
["Zhenghe"] = { "" },
["Zhenqian"] = { "" },
["Jianyang"] = { "" },
["Wuyishan"] = { "" },
["Shibei"] = { "" },
["Yong'an"] = { "完身" },
["Sanyuan"] = { "完身" },
["Shaxian"] = { "" }, --muĩ31-33身
["Fu'an-She"] = { "" },
["Fuding-She"] = { "" },
["Luoyuan-She"] = { "" },
["Sanming-She"] = { "" },
["Shunchang-She"] = { "" },
["Hua'an-She"] = { "" },
["Guixi-She"] = { "" },
["Cangnan-She"] = { "" },
["Jingning-She"] = { "" },
["Lishui-She"] = { "" },
["Longyou-She"] = { "" },
["Chaozhou-She"] = { "" },
["Fengshun-She"] = { "" },
["Guzhang-WX"] = { "身" },
["Yuanling-WX"] = { "" },
["Luxi-WX"] = { "" },
}
return export
rktwsbtxagn3fqw5y7xgtd5tyyfzuds
rugpjūtis
0
1543623
9739587
9532502
2026-04-21T05:56:43Z
TongcyDai
53191
9739587
wikitext
text/x-wiki
==立陶宛語==
===其他形式===
* {{alt|lt|rugp.||縮寫}}
===詞源===
源自 {{compound|lt|rugỹs|pjūtìs|t1=黑麥|t2=收穫}}。<ref>{{R:lt:LEW|head=rugỹs|pages=745-6}}</ref><ref>{{R:lt:SEJL|rugỹs|523}}</ref>
===發音===
* {{IPA|lt|[r̺ʊk.pʲjûː.t̪ʲɪs̪]}}
===名詞===
{{lt-noun|m|rugpjū́čiai|1|head=rugpjū́tis}}
# [[八月]]
====變格====
{{lt-noun-m-tis-1|rugpjū|rugpjū́}}
====參見====
{{list:Gregorian calendar months/lt}}
===參考資料===
<references />
{{C|lt|月份}}
d0yi2nmw74jcca4li0ruv0tyj4kl6ia
spalis
0
1543730
9739213
9532557
2026-04-21T05:01:47Z
TongcyDai
53191
9739213
wikitext
text/x-wiki
==弗留利語==
===名詞===
{{head|fur|名詞變格形}}
# {{plural of|fur|spale}}
==立陶宛語==
===其他形式===
* {{alt|lt|spal.||縮寫}}
===詞源===
和{{cog|lv|spaļi|t=亞麻碎屑}}、{{cog|prg|spelanxtis|t=碎片}} 同源;波羅的語族以外的同源詞可能還包括{{der|lt|ine-pro|*(s)pelH-|t=撕裂,撕開}}。若確實如此,可以將此詞和{{cog|grc|σπολᾰ́ς|t=皮革製的服裝}}、{{cog|la|spolium|t=皮,獸皮;戰利品}}、{{cog|cu|поль|t=性;一半}}、<ref>{{R:bat:EDBIL|418|spalis}}</ref>{{cog|gem-pro|*spelþą|t=毀滅,損毀}}、{{cog|sa|फल्|t=爆發;結出果實}} 對照。由於此月是傳統上農民打麻、碎麻以提取纖維的時間,故此得名。
===發音===
* {{IPA|lt|[ˈspa.lʲɪs]}}
===名詞===
{{lt-noun|m|spãliai|2|head=spãlis}}
# [[十月]]
# [[麻骨]]{{gl|[[亞麻]]的[[木質]]部分}}
# {{lb|lt|plural only}} 打麻、梳麻過程中產生的廢棄[[碎屑]]
====變格====
{{lt-noun-m-is-1-2|spal|spãl}}
====參見====
{{list:Gregorian calendar months/lt}}
===參考資料===
<references />
{{C|lt|月份}}
b48ckpjr53iaw27u2s3o92y8mvei0xd
vasaris
0
1543915
9739606
9532664
2026-04-21T06:27:03Z
TongcyDai
53191
9739606
wikitext
text/x-wiki
==立陶宛語==
===其他形式===
* {{alt|lt|vas.||縮寫}}
===詞源===
派生自 {{m|lt|vãsara|t=夏季}};該詞源自{{cog|ine-pro|*wósr̥}},最初是指「春天」,<ref>{{R:lt:SEJL|vasãra|725}}</ref> 而二月在口語中通常被視為春季的一個月份。
===發音===
* {{IPA|lt|/vɐˈsäː.rʲɪs/}}
===名詞===
{{lt-noun|m|vasãriai|2|head=vasãris}}
# [[二月]]
====變格====
{{lt-noun-m-is-1-2|vasar|vasãr}}
====參見====
{{list:Gregorian calendar months/lt}}
===參考資料===
<references />
{{C|lt|月份}}
5nqamo7dmu4uwgv5e82hazambuuexx6
rugsėjis
0
1591448
9739216
9532499
2026-04-21T05:06:14Z
TongcyDai
53191
9739216
wikitext
text/x-wiki
==立陶宛語==
===其他形式===
* {{alt|lt|rugs.||縮寫}}
===詞源===
源自 {{compound|lt|rugỹs|sė̃jis|t1=黑麥|t2=播(種)}},後半部份來自{{m|lt|sė́ti|t=播撒}}。<ref>{{R:lt:LEW|head=rugỹs|pages=745-6}}</ref><ref>{{R:lt:SEJL|rugỹs|523}}</ref>
===發音===
* {{IPA|lt|/rʊkʲˈsʲeː.jɪs/}}
===名詞===
{{lt-noun|m|rugsė́jiai|1|head=rugsė́jis}}
# [[九月]]
====變格====
{{lt-noun-m-is-1|rugsėj|rugsė́j}}
====參見====
{{list:Gregorian calendar months/lt}}
===參考資料===
<references />
{{C|lt|月份}}
cay92curip19it0ybtyp52l8y730i88
ingsay
0
1872349
9739157
8231982
2026-04-20T13:51:08Z
TongcyDai
53191
9739157
wikitext
text/x-wiki
==噶瑪蘭語==
===詞源===
源自{{bor|ckv|nan-hbl|蕹菜|tr=èng-chhài||空心菜}}。
===名詞===
{{head|ckv|名詞}}
# [[空心菜]]{{gl|{{taxfmt|Ipomoea aquatica|species}}}}
===參考資料===
* {{R:ODAL|534322}}
{{C|ckv|旋花科植物}}
6y0b7atccth5l2ohbtrhe468xrc2mj9
kærr
0
1991574
9739189
8461104
2026-04-20T19:40:14Z
InternetArchiveBot
95668
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
9739189
wikitext
text/x-wiki
{{also|kärr}}
==古诺尔斯语==
===其他形式===
* {{alter|non|kę́rr}}
===词源===
可能{{bor+|non|fro-nor|ker}}、{{m|fro|kier}}、{{m|fro|quer}}({{der|non|fro|chier}}、{{m|fro|cher}}),源自{{der|non|la|cārus||親愛的}},源自{{der|non|itc-pro|*kāros}},源自{{der|non|ine-pro|*keh₂-||渴望,希望}}。<ref>[https://web.archive.org/web/20220922064704/https://ordbok.uib.no/perl/ordbok.cgi?OPP=kj%C3%A6r&nynorsk=+&ordbok=nynorsk kjær], ordbok.uib.no</ref>
===发音===
* {{IPA|non|/kɛːrː/|a=12世紀冰島語}}
===形容词===
{{non-adj|kærari|kærastr}}
# [[親愛]]的
====衍生词汇====
* {{l|non|kærligr}}
====派生語彙====
* {{desc|is|kær}}
* {{desc|fo|kærur}}
* {{desc|nrn|kårr}}
* {{desc|no|kjær}}
* {{desc|gmq-osw|kær}}
** {{desc|sv|kär}}
* {{desc|da|kær}}
===参考资料===
<references />
kvlyz06g4tqf23eqsqljo97n388dbwh
ᥞᥝᥰ
0
2053616
9739585
7441345
2026-04-21T05:44:26Z
Apisite
85347
/* 傣納語 */
9739585
wikitext
text/x-wiki
==傣納語==
===詞源===
{{inh+|tdd|tai-pro|*rawᴬ||第一人稱複數代詞}}。和{{cog|th|เรา}}、{{cog|nod|ᩁᩮᩢᩣ}}、{{cog|tts|เฮา}}、{{cog|lo|ເຮົາ}}、{{cog|khb|ᦣᧁ}}、{{cog|blt|ꪹꪭꪱ}}、{{cog|shn|ႁဝ်း}}、{{cog|aho|𑜍𑜧}}、{{m|aho|𑜍𑜈𑜫}} 或 {{m|aho|𑜍𑜧𑜈𑜫}}、{{cog|pcc|rauz}}、{{cog|za|raeuz}} 同源。
===發音===
* {{IPA|tdd|/haw˥˧/}}
===代詞===
{{tdd-pronoun}}
# [[咱們]](第一人稱複數包含式)
1mtx4fz3bpaymfj5eyus6gak9i34a18
inconnu
0
2129295
9739187
7552009
2026-04-20T17:54:21Z
InternetArchiveBot
95668
Rescuing 0 sources and tagging 1 as dead.) #IABot (v2.0.9.5
9739187
wikitext
text/x-wiki
==英語==
{{wikipedia|lang=en}}
===名詞===
{{en-noun}}
# {{w|極北鮭}}({{taxlink|Stenodus leucichthys|species|noshow=1|ver=161026}})
====近義詞====
* {{l|en|nelma}}
* {{l|en|sheefish}}
* {{l|en|connie}}
{{c|en|魚}}
==法語==
===詞源===
源自 {{af|fr|in-|connu}}。
===發音===
* {{fr-IPA}}
* {{audio|fr|Fr-inconnu.ogg|音頻}}
===形容詞===
{{fr-adj}}
# [[未知]]的,[[陌生]]的,[[不詳]]的
#: {{ux|fr|Le hurling est un sport '''inconnu''' en dehors de l{{'}}Irlande.|板棍球運動在愛爾蘭以外'''鮮為人知'''。}}
===名詞===
{{fr-noun|m|f=+}}
# [[未知]]的事物;[[陌生人]]
#: {{ux|fr|L{{'}}'''inconnu''' au bar m{{'}}a souri.|酒吧裡有個'''陌生人'''對著我笑。}}
====用法說明====
* '''{{m|fr||inconnu}}''' 指的是此前完全沒有了解的人或事物,與之相對的是有一定了解、但並不熟悉的 {{m|fr|méconnu}}。<ref>{{Cite-web |title=Inconnu et méconnu {{!}} Blog alorthographe |url=https://blog.alorthographe.com/2016/09/20/inconnu-et-meconnu/ |access-date=2023-04-22 |archivedate=2021-09-28 |archiveurl=https://web.archive.org/web/20210928140010/http://blog.alorthographe.com/2016/09/20/inconnu-et-meconnu/ }}</ref><ref>[https://hinative.com/en-US/questions/14888325 What is the difference between "inconnu" and "méconnu" ? "inconnu" vs "méconnu" ? | HiNative]{{Dead link|date=April 2026 |bot=InternetArchiveBot |fix-attempted=yes }}</ref>
====派生詞彙====
* {{l|fr|illustre inconnu}}
* {{l|fr|inconnu au bataillon}}
* {{l|fr|inconnue}}
===參考資料===
* {{R:fr:TLFi}}
<references/>
87sjvkayofyibu7ovo5f4lvyw9jcdi6
User:Sayonzei/Kotori
2
2129326
9739215
9738452
2026-04-21T05:04:19Z
Sayonzei
40728
9739215
wikitext
text/x-wiki
精製鳥飼料:[[User:KotoriBot]]
==列表==
===法語===
*一個-er結尾的第一類法語動詞(連同本體)理論上可產出'''40'''個新詞條。<br>
:{{col3|fr|}}<!--明日:
;需自行創建
:{{col3|fr|retransmigrer|redésentrelacer|retransfigurer|réobséder|désobséder|désamocher|réamocher|rebuissonner|débuissonner|recolmater|décolmater|désaffréter|redélester|réindividuer|recharrier|recémenter|décémenter|réabsolutiser|désabsolutiser|désacadémiser|désaccastiller|réaccompagner|désaccompagner|réagrémenter|désagrémenter|désalambiquer|désanalphabétiser|désanathématiser|réapostropher|réajourner|désajourner|redétremper|redogmatiser|dédogmatiser|réextirper|réintituler|resolutionner|resouscrire|resulfater|désulfater|réagenouiller|désagenouiller|débouillir|désaccomplir|réaccomplir|réaccoutrer}}-->
===加泰===
*一個-ar結尾的普通加泰羅尼亞語動詞(連同本體)理論上可產出'''44'''個新詞條。<br>
:{{col3|ca|}}
===葡加利===
*一個-ar結尾的普通葡萄牙語動詞(連同本體)理論上可產出'''53'''個新詞條;但需注意,過去分詞可能不在accel範圍內。<br>
:{{col3|pt|esbofetear|estapear|esbravejar|esbardalhar|esgalhar|desgalhar|espaçar}}<!--明日:-->
===西===
*一個-ar結尾的普通西班牙語動詞(連同本體、不含合詞)理論上可產出'''58'''個新詞條。<br>
:{{col3|es|}}<!--明日:-->
===德語===
:{{col3|de|}}
===拉丁語===
:{{col3|la|}}<!--明日:-->
:{{col3|la|}}<!--明日:-->
===意大利語===
:{{col3|it||}}<!--明日:-->
===俄語===
:{{col3|ru|}}
:{{col3|ru|}}
9gnte4h21273tc5kbxb34ul7y2wpnjh
ᥐᥣ
0
2147083
9739614
7572323
2026-04-21T06:55:31Z
Apisite
85347
/* 傣納語 */
9739614
wikitext
text/x-wiki
==傣納語==
===發音===
* {{IPA|tdd|/kaː˧˧/}}
===詞源1===
{{inh+|tdd|tai-pro|*kaːᴬ||烏鴉}}。同源詞包括{{cog|lo|ກາ}}、{{cog|khb|ᦂᦱ}}、{{cog|shn|ၵႃ}}、{{cog|th|กา}}、{{cog|nod|ᨠᩣ}}、{{cog|blt|ꪀꪱ}}、{{cog|za|roegga}}。
====名詞====
{{tdd-noun}}
# [[烏鴉]]
===詞源2===
源自{{der|tdd|zh|價}}。同源詞包括{{cog|th|ค่า}}、{{cog|tts|ค่า}}、{{cog|lo|ຄ່າ}}、{{cog|khb|ᦅᦱᧈ}}、{{cog|nod|ᨣ᩵ᩤ}}、{{cog|kkh|ᨣ᩵ᩤ}}、{{cog|shn|ၵႃႈ}}、{{cog|blt|ꪁ꪿ꪱ}}、{{cog|aho|𑜀𑜠}}、{{cog|tyz|chá}}。
====名詞====
{{tdd-noun}}
# [[價格]]
# [[價值]]
{{c|tdd|鳥}}
l656zm00kjddtwv7zgcwitsie25h1yo
ꪁ꪿ꪱ
0
2147087
9739734
7572327
2026-04-21T08:57:37Z
TongcyDai
53191
9739734
wikitext
text/x-wiki
==傣黯語==
===詞源===
和{{cog|th|ค่า}}、{{cog|tts|ค่า}}、{{cog|lo|ຄ່າ}}、{{cog|nod|ᨣ᩵ᩤ}}、{{cog|kkh|ᨣ᩵ᩤ}}、{{cog|shn|ၵႃႈ}}、{{cog|aho|𑜀𑜠}}同源。
===發音===
* {{blt-pron}}
===名詞===
{{head|blt|名詞|tr=ꞌca}}
# [[價格]]
==傣端語==
===發音===
* {{IPA|twh|/kaː˦˥˦/}}
===名詞===
{{head|twh|名詞}}
# {{altform|twh|ꪁꪱꫀ}}
===參考資料===
* Hudak, T. J. (2008). ''William J. Gedney’s comparative Tai source book''. Honolulu: University of Hawai'i Press.
njp4scot46eiugh0b020ea9t2vqntk6
inji
0
2953375
9739188
9738118
2026-04-20T18:11:31Z
InternetArchiveBot
95668
Rescuing 1 sources and tagging 0 as dead.) #IABot (v2.0.9.5
9739188
wikitext
text/x-wiki
{{also|Inji}}
==阿納廷加多貢語==
===名詞===
{{head|dti|名詞}}
# [[水]]
===參考資料===
* Roger Blench, ''[https://web.archive.org/web/20160304044623/http://www.rogerblench.info/Language/Niger-Congo/Dogon/Ana%20wordlist%20paper.pdf Ana, a language of the Dogon group in Northern Mali and its affinities]'' (2005)
{{C|dti|水}}
==布拉馬邦語==
===名詞===
{{head|dti|名詞}}
# [[水]]
===參考資料===
* Christopher Ehret, ''A Historical-comparative Reconstruction of Nilo-Saharan'' (2001, {{ISBN|3896450980}}, page 371
{{C|mde|水}}
ez9zpbu9ge8dxi04h4528dxidvpqhi8
méconnu
0
2986519
9739192
9088527
2026-04-20T21:37:29Z
InternetArchiveBot
95668
Rescuing 0 sources and tagging 1 as dead.) #IABot (v2.0.9.5
9739192
wikitext
text/x-wiki
==法語==
===發音===
* {{fr-IPA}}
* {{audio|fr|LL-Q150 (fra)-Poslovitch-méconnu.wav}}
===形容詞===
{{fr-adj}}
# 不太[[熟悉]]的
#: {{syn|fr|ignoré|[[peu]] [[connu]]}}
#: {{ux|fr|Elle habite une maison modeste dans un quartier '''méconnu''' de son amant.|她住在一个简朴的房子里,所在的地区对她的爱人来说并'''不熟悉'''。}}
# 被[[誤解]]的,沒有得到充分[[認識]]的
#: {{syn|fr|incompris|[[mal]] [[connu]]}}
# 未得應有[[重視]]、[[認可]]的
#: {{syn|fr|sous-estimé}}
#: {{coi|fr|comblé de talents méconnus}}
#: {{coi|fr|un bienfaiteur méconnu}}
# {{qualifier|形容人}} [[寂寂無名]]的,未得[[欣賞]]的
#: {{syn|fr|obscur}}
#: {{coi|fr|des musiciens '''méconnus'''|'''未得欣賞的'''音樂家}}
====用法說明====
* '''{{m|fr||méconnu}}''' 一词指的是遇到过但并不完全熟悉的人或物;{{m|fr|inconnu}} 指的是之前没有遇到过并且完全未知的人或物。<ref>{{cite-web|fr|url=https://blog.alorthographe.com/2016/09/20/inconnu-et-meconnu/ |title=Inconnu et méconnu {{!}} Blog alorthographe |accessdate=23 June 2022 |archiveurl=https://web.archive.org/web/20210928140010/http://blog.alorthographe.com/2016/09/20/inconnu-et-meconnu/ |archivedate=28 September 2021 }}</ref><ref>[https://hinative.com/en-US/questions/14888325 What is the difference between "inconnu" and "méconnu" ? "inconnu" vs "méconnu" ? | HiNative]{{Dead link|date=April 2026 |bot=InternetArchiveBot |fix-attempted=yes }}</ref>
===分詞===
{{fr-past participle}}
# {{past participle of|fr|méconnaître}}
===參考資料===
* {{R:fr:TLFi}}
* {{R:Larousse}}
* {{R:Robert}}
<references />
hugfkjngq5387pr0f52obdvsrop53v0
Module:Demo
828
3196536
9739616
9365778
2026-04-21T06:58:33Z
TongcyDai
53191
9739616
Scribunto
text/plain
local export = {}
local string_remove_comments_module = "Module:string/removeComments"
local string_utilities_module = "Module:string utilities"
local require = require
local tonumber = tonumber
local unstrip_nowiki = mw.text.unstripNoWiki
local function remove_comments(...)
remove_comments = require(string_remove_comments_module)
return remove_comments(...)
end
-- Ported from [[w:Module:Demo]] by Benwing2 on Sep 1st 2023 around 6am UTC.
-- Significantly reworked since then; quite divergent by now.
local nowiki_strip_marker_pattern = "\127'\"`UNIQ%-%-nowiki%-" .. ("[%dA-F]"):rep(8) .. "%-QINU`\"'\127"
local nowiki_replacements = {
["gt"] = ">",
["lt"] = "<",
["#123"] = "{",
["#125"] = "}",
}
function export.main(frame)
local boolean = {type = "boolean"}
local parent_args = frame:getParent().args
local args = require("Module:parameters").process(parent_args, {
[1] = true,
["fmt"] = {
set = {
["compact"] = true, ["c"] = "compact",
["inline"] = true, ["i"] = "inline", ["1"] = "inline",
["multiline"] = true, ["m"] = "multiline",
["raw"] = true,
["twoline"] = true, ["2"] = "twoline",
["twocol"] = true, ["2c"] = "twocol", ["2col"] = "twocol",
["nooutput"] = true, ["0"] = "nooutput",
},
default = frame.args.fmt or "compact"
},
["br"] = true,
["fullsep"] = true,
["sep"] = true,
["reverse"] = boolean,
["nocat"] = boolean,
["style"] = true,
["omit"] = {sublist = true, default = "pagename"},
["indent"] = true,
-- Hack to allow for > to appear in the output, if &gt; is supplied in the input.
-- Otherwise this isn't possible because > and > both end up as > when placed inside of <nowiki>...</nowiki>
-- and passed through unstrip_nowiki(), and can't be distinguished. As a result, the code below converts > back
-- to >, and there's no way to get a literal > in the output since &gt; normally ends up unchanged.
["replace_amp"] = boolean,
})
local source = args[1]
if source:match(nowiki_strip_marker_pattern) then
-- Unescape the four patterns that automatically get escaped by nowiki
-- (taken from CoreTagHooks.php).
source = unstrip_nowiki(source)
source = source:gsub("()&([#gl][1t]2?[35]?);", function(pos, code)
local ch = nowiki_replacements[code]
if ch == "{" then -- -{
return source:byte(pos - 1) == 0x2D and ch or nil
elseif ch == "}" then -- }-
return source:byte(pos + 6) == 0x2D and ch or nil
end
return ch
end)
if args.replace_amp then
source = source:gsub("&", "&")
end
end
local fullsep, sep, fmt, rev, indent = args.fullsep, args.sep, args.fmt, args.reverse, args.indent
local output = fmt == "nooutput" and "" or remove_comments(frame:preprocess(source), "POST")
-- FIXME: this will miss some categories.
if args.nocat then
output = output:gsub("%[%[Category.-%]%]", "")
end
for _, param in ipairs(args.omit) do
if param ~= "-" then
-- FIXME, this doesn't correctly handle nested template calls or HTML comments in the param value
source = source:gsub(("| *%s *=[^{}|]*"):format(require(string_utilities_module).pattern_escape(param)), "")
end
end
if indent == "-" then
indent = ""
elseif not indent then
if fmt == "twoline" then
indent = ":"
else
indent = ""
end
end
local newline = indent == "" and "<br />" or "\n"
if not fullsep then
local br = args.br
if br then
fullsep = tonumber(br) and ("<br />"):rep(br) or br
elseif fmt == "inline" or fmt == "twoline" then
fullsep = (sep or (rev and "⇐" or "⇒")) .. (fmt == "twoline" and newline .. (newline == "\n" and "" or "\n") .. indent or "")
elseif fmt == "raw" or fmt == "nooutput" then
fullsep = sep or ""
elseif fmt == "twocol" then
fullsep = sep or "||"
else
fullsep = (sep or (rev and "產生自" or "輸出為")) .. "<br />\n" .. indent
if fmt == "compact" then
fullsep = newline .. indent .. fullsep
end
end
end
if #fullsep > 0 and not (fullsep:find("\n", nil, true) or fullsep:match("<br%f[%W].->")) then
fullsep = " " .. fullsep .. " "
end
source = frame:extensionTag("syntaxhighlight", source, {
lang = "wikitext",
inline = fmt ~= "multiline" and fmt ~= "raw" and true or nil,
style = args.style
})
return indent .. (rev and output .. fullsep .. source or source .. fullsep .. output)
end
return export
jxtju5hm6ny5k4a5i8bryzy2tparqth
Module:Zh/data/dial-syn/水母
828
3357856
9739146
9738415
2026-04-20T13:02:00Z
明瑤
132921
9739146
Scribunto
text/plain
local export = {}
export.list = {
["title"] = "",
["meaning"] = "jellyfish",
["note"] = "",
["Classical"] = { "" },
["Formal"] = { "水母", "海蜇" },
["Taxonomic"] = { "" },
["Beijing"] = { "" },
["Beijing-PG"] = { "" },
["Beijing-MY"] = { "" },
["Beijing-HR"] = { "" },
["Beijing-YQ"] = { "" },
["Beijing-CP"] = { "" },
["Beijing-MTG"] = { "" },
["Beijing-FS"] = { "" },
["Taiwan"] = { "水母", "海蜇" },
["Tianjin-WQ"] = { "" },
["Langfang"] = { "" },
["Chengde"] = { "" },
["Ulan Hot"] = { "" },
["Tongliao"] = { "" },
["Chifeng"] = { "" },
["Hailar"] = { "" },
["Heihe"] = { "" },
["Nenjiang"] = { "" },
["Mohe"] = { "" },
["Qiqihar"] = { "" },
["Tailai"] = { "" },
["Jixian-HLJ"] = { "" },
["Lanxi-M"] = { "" },
["Boli"] = { "" },
["Jiayin"] = { "" },
["Muling"] = { "" },
["Dongning"] = { "" },
["Ning'an"] = { "" },
["Linkou"] = { "" },
["Zhaozhou"] = { "" },
["Zhaodong"] = { "" },
["Jixi-M"] = { "" },
["Mishan"] = { "" },
["Harbin"] = { "" },
["Shangzhi"] = { "" },
["Yingchengzi"] = { "" },
["Jiamusi"] = { "" },
["Tongjiang-M"] = { "" },
["Baicheng"] = { "" },
["Da'an"] = { "" },
["Songyuan"] = { "" },
["Changchun"] = { "" },
["Yushu"] = { "" },
["Jilin"] = { "" },
["Siping"] = { "" },
["Liaoyuan"] = { "" },
["Dunhua"] = { "" },
["Hunchun"] = { "" },
["Baishan"] = { "" },
["Tonghua"] = { "" },
["Shenyang"] = { "" },
["Anshan"] = { "" },
["Tieling"] = { "" },
["Jinzhou"] = { "" },
["Jingzhou-SS"] = { "" },
["Malaysia-M"] = { "" },
["Singapore-M"] = { "" },
["Taz"] = { "" },
["Tianjin"] = { "" },
["Tianjin-JZ"] = { "" },
["Tianjin-BD"] = { "" },
["Tianjin-NH"] = { "" },
["Tianjin-HG"] = { "" },
["Tianjin-TG"] = { "" },
["Tianjin-DG"] = { "" },
["Tianjin-JN"] = { "" },
["Tianjin-DL"] = { "" },
["Tianjin-JH"] = { "" },
["Tianjin-XQ"] = { "" },
["Tianjin-BC"] = { "" },
["Tangshan"] = { "" },
["Qinhuangdao"] = { "" },
["Cangzhou"] = { "" },
["Xianxian"] = { "" },
["Xianxian-XY"] = { "" },
["Baoding"] = { "" },
["Dingxing"] = { "" },
["Xiong'an"] = { "" },
["Shijiazhuang"] = { "" },
["Xingtai"] = { "" },
["Hengshui"] = { "" },
["Lijin"] = { "" },
["Binzhou"] = { "" },
["Wudi"] = { "" },
["Weicheng"] = { "" },
["Fangzi"] = { "" },
["Changle-WF"] = { "" },
["Shouguang"] = { "" },
["Rizhao"] = { "" },
["Wulian"] = { "" },
["Jinan"] = { "" },
["Zhangqiu"] = { "" },
["Liaocheng"] = { "" },
["Dezhou"] = { "" },
["Tai'an"] = { "" },
["Xintai"] = { "" },
["Zibo"] = { "" },
["Zichuan"] = { "" },
["Boshan"] = { "" },
["Yinan"] = { "" },
["Dalian"] = { "" },
["Dandong"] = { "" },
["Yantai"] = { "" },
["Muping"] = { "" },
["Laizhou"] = { "" },
["Weihai"] = { "" },
["Rongcheng"] = { "" },
["Qingdao"] = { "" },
["Chengyang"] = { "" },
["Jimo"] = { "" },
["Laixi"] = { "" },
["Pingdu"] = { "" },
["Jiaozhou"] = { "" },
["Jiaonan"] = { "" },
["Hanting"] = { "" },
["Changyi"] = { "" },
["Gaomi"] = { "" },
["Zhucheng"] = { "" },
["Anqiu"] = { "" },
["Linqu"] = { "" },
["Qingzhou"] = { "" },
["Yishui"] = { "" },
["Hulin-XL"] = { "" },
["Linjiang"] = { "" },
["Ji'an-M"] = { "" },
["Luoyang"] = { "" },
["Luoning"] = { "" },
["Sanmenxia"] = { "" },
["Lingbao"] = { "" },
["Luohe"] = { "" },
["Zhumadian"] = { "" },
["Biyang"] = { "" },
["Zhoukou"] = { "" },
["Dancheng"] = { "" },
["Xuchang"] = { "" },
["Changge"] = { "" },
["Pingdingshan"] = { "" },
["Lushan-M"] = { "" },
["Nanyang"] = { "" },
["Xixia"] = { "" },
["Dengzhou"] = { "" },
["Zaozhuang"] = { "" },
["Ningyang"] = { "" },
["Jining-M"] = { "" },
["Linyi"] = { "" },
["Heze"] = { "" },
["Daming"] = { "" },
["Yuncheng"] = { "" },
["Wenxi"] = { "" },
["Longxing"] = { "" },
["Yongji"] = { "" },
["Wanrong"] = { "" },
["Ronghe"] = { "" },
["Linfen"] = { "" },
["Jixian"] = { "" },
["Huozhou"] = { "" },
["Hongtong"] = { "" },
["Shangqiu"] = { "" },
["Yongcheng"] = { "" },
["Yuanyang"] = { "" },
["Zhengzhou"] = { "" },
["Kaifeng"] = { "" },
["Lankao"] = { "" },
["Changyuan"] = { "" },
["Xunxian"] = { "" },
["Puyang"] = { "" },
["Fanxian"] = { "" },
["Xinyang"] = { "" },
["Gushi"] = { "" },
["Shangluo"] = { "" },
["Luonan"] = { "" },
["Danfeng"] = { "" },
["Shangnan"] = { "" },
["Shanyang"] = { "" },
["Zhen'an"] = { "" },
["Hanbin"] = { "" },
["Hanbin-XH"] = { "" },
["Baihe"] = { "" },
["Baihe-MP"] = { "" },
["Pingli"] = { "" },
["Xunyang"] = { "" },
["Lueyang"] = { "" },
["Mianxian"] = { "" },
["Yangxian"] = { "" },
["Xi'an"] = { "" },
["Weiyang"] = { "" },
["Baqiao"] = { "" },
["Yanliang"] = { "" },
["Lintong"] = { "" },
["Chang'an"] = { "" },
["Huyi"] = { "" },
["Gaoling"] = { "" },
["Zhouzhi"] = { "" },
["Lantian"] = { "" },
["Xianyang"] = { "" },
["Xingping"] = { "" },
["Wugong"] = { "" },
["Qianxian"] = { "" },
["Liquan"] = { "" },
["Jingyang"] = { "" },
["Sanyuan-M"] = { "" },
["Yongshou"] = { "" },
["Changwu"] = { "" },
["Tongchuan"] = { "" },
["Yaozhou"] = { "" },
["Yijun"] = { "" },
["Weinan"] = { "" },
["Weinan-HZ"] = { "" },
["Hancheng"] = { "" },
["Huayin"] = { "" },
["Tongguan"] = { "" },
["Dali-SX"] = { "" },
["Heyang"] = { "" },
["Chengcheng"] = { "" },
["Baishui"] = { "" },
["Pucheng-M"] = { "" },
["Fuping"] = { "" },
["Huanglong"] = { "" },
["Yichuan"] = { "" },
["Huangling"] = { "" },
["Luochuan"] = { "" },
["Fuxian"] = { "" },
["Dingbian"] = { "" },
["Baoji"] = { "" },
["Baoji-CC"] = { "" },
["Fengxiang"] = { "" },
["Qishan"] = { "" },
["Fufeng"] = { "" },
["Meixian-M"] = { "" },
["Taibai"] = { "" },
["Fengxian-SX"] = { "" },
["Qianyang"] = { "" },
["Longxian"] = { "" },
["Linyou"] = { "" },
["Tongxin"] = { "" },
["Yanchi"] = { "" },
["Guyuan"] = { "" },
["Xiji"] = { "" },
["Longde"] = { "" },
["Jingyuan"] = { "" },
["Tianshui"] = { "" },
["Hezuo"] = { "" },
["Xining"] = { "" },
["Menyuan"] = { "" },
["Yanqi"] = { "" },
["Xuzhou"] = { "" },
["Xuzhou-JW"] = { "" },
["Pizhou"] = { "" },
["Suining"] = { "" },
["Peixian"] = { "" },
["Xinyi-M"] = { "" },
["Fengxian-M"] = { "" },
["Suqian"] = { "" },
["Ganyu"] = { "" },
["Donghai"] = { "" },
["Fuyang"] = { "" },
["Bengbu"] = { "" },
["Suzhou-M"] = { "" },
["Huaibei"] = { "" },
["Bozhou"] = { "" },
["Guangde-QC"] = { "" },
["Qimen-AL-Jun"] = { "" },
["Anji-HN"] = { "" },
["Gansu-DG"] = { "" },
["Shaanxi-DG"] = { "" },
["Yinchuan"] = { "" },
["Najiahu"] = { "" },
["Wuzhong"] = { "" },
["Zhongwei"] = { "" },
["Bayanhot"] = { "" },
["Lanzhou"] = { "" },
["Jiuquan"] = { "" },
["Dunhuang"] = { "" },
["Shandan"] = { "" },
["Wuwei-GS"] = { "" },
["Wuwei-GS-ZY"] = { "" },
["Tianzhu"] = { "" },
["Hami"] = { "" },
["Changji"] = { "" },
["Ürümqi"] = { "" },
["Dabancheng-XG"] = { "" },
["Midong-CSZ"] = { "" },
["Ürümqi-BFG"] = { "" },
["Jimsar"] = { "" },
["Chengdu"] = { "" },
["Xindu"] = { "" },
["Xindu-XF"] = { "" },
["Huayang"] = { "" },
["Pidu"] = { "" },
["Wenjiang"] = { "" },
["Shuangliu"] = { "" },
["Xinjin"] = { "" },
["Jintang"] = { "" },
["Pengzhou"] = { "" },
["Dujiangyan"] = { "" },
["Chongzhou"] = { "" },
["Dayi"] = { "" },
["Pujiang-M"] = { "" },
["Qionglai"] = { "" },
["Jianyang-M"] = { "" },
["Xiaojin"] = { "" },
["Jinchuan"] = { "" },
["Songpan"] = { "" },
["Maoxian"] = { "" },
["Lixian"] = { "" },
["Wenchuan"] = { "" },
["Deyang"] = { "" },
["Luojiang"] = { "" },
["Mianzhu"] = { "" },
["Shifang"] = { "" },
["Guanghan"] = { "" },
["Zhongjiang"] = { "" },
["Ziyang-SC"] = { "" },
["Anyue"] = { "" },
["Lezhi"] = { "" },
["Mianyang"] = { "" },
["Anzhou"] = { "" },
["Zitong"] = { "" },
["Jiangyou"] = { "" },
["Jiangyou-ZM"] = { "" },
["Pingwu"] = { "" },
["Beichuan"] = { "" },
["Yanting"] = { "" },
["Santai"] = { "" },
["Guangyuan"] = { "" },
["Zhaohua"] = { "" },
["Cangxi"] = { "" },
["Jiange"] = { "" },
["Meishan"] = { "" },
["Pengshan"] = { "" },
["Danling"] = { "" },
["Hongya"] = { "" },
["Qingshen"] = { "" },
["Renshou"] = { "" },
["Luzhou"] = { "" },
["Naxi"] = { "" },
["Luxian"] = { "" },
["Xuyong"] = { "" },
["Gulin"] = { "" },
["Hejiang"] = { "" },
["Yibin"] = { "" },
["Nanxi"] = { "" },
["Pingshan-M"] = { "" },
["Gaoxian"] = { "" },
["Changning-M"] = { "" },
["Gongxian"] = { "" },
["Xingwen-GS"] = { "" },
["Xingwen-BWS"] = { "" },
["Jiang'an"] = { "" },
["Junlian"] = { "" },
["Leshan"] = { "" },
["Jiajiang"] = { "" },
["Emeishan"] = { "" },
["Ebian"] = { "" },
["Qianwei"] = { "" },
["Mabian"] = { "" },
["Jingyan"] = { "" },
["Neijiang"] = { "" },
["Zizhong"] = { "" },
["Weiyuan"] = { "" },
["Longchang"] = { "" },
["Suining-SC"] = { "" },
["Pengxi"] = { "" },
["Shehong"] = { "" },
["Guang'an"] = { "" },
["Yuechi"] = { "" },
["Wusheng"] = { "" },
["Linshui"] = { "" },
["Nanchong"] = { "" },
["Nanbu"] = { "" },
["Langzhong"] = { "" },
["Yilong"] = { "" },
["Yingshan"] = { "" },
["Peng'an"] = { "" },
["Dazhou"] = { "" },
["Dazhu"] = { "" },
["Kaijiang"] = { "" },
["Wanyuan"] = { "" },
["Xuanhan"] = { "" },
["Bazhong"] = { "" },
["Tongjiang"] = { "" },
["Nanjiang"] = { "" },
["Hanyuan"] = { "" },
["Xichang"] = { "" },
["Zigong"] = { "" },
["Fushun"] = { "" },
["Rongxian-M"] = { "" },
["Muli"] = { "" },
["Leibo"] = { "" },
["Chongqing"] = { "" },
["Chongqing-JB"] = { "" },
["Chongqing-JLP"] = { "" },
["Chongqing-DDK"] = { "" },
["Chongqing-SPB"] = { "" },
["Chongqing-BN"] = { "" },
["Chongqing-NA"] = { "" },
["Chongqing-QIJ"] = { "" },
["Chongqing-QJ-WS"] = { "" },
["Chongqing-YB"] = { "" },
["Chongqing-BB"] = { "" },
["Chongqing-NC"] = { "" },
["Chongqing-WL"] = { "" },
["Chongqing-DZ"] = { "" },
["Chongqing-RC"] = { "" },
["Chongqing-YC"] = { "" },
["Chongqing-BS"] = { "" },
["Chongqing-TL"] = { "" },
["Chongqing-TN"] = { "" },
["Chongqing-HC"] = { "" },
["Chongqing-CS"] = { "" },
["Chongqing-FL"] = { "" },
["Chongqing-JJ"] = { "" },
["Chongqing-WZ"] = { "" },
["Chongqing-SZ"] = { "" },
["Chongqing-KZ"] = { "" },
["Chongqing-CK"] = { "" },
["Chongqing-DJ"] = { "" },
["Chongqing-LP"] = { "" },
["Chongqing-FD"] = { "" },
["Chongqing-ZX"] = { "" },
["Chongqing-QJ"] = { "" },
["Chongqing-PS"] = { "" },
["Chongqing-YY"] = { "" },
["Chongqing-XS"] = { "" },
["Chongqing-YNY"] = { "" },
["Chongqing-WX"] = { "" },
["Chongqing-FJ"] = { "" },
["Chongqing-WS"] = { "" },
["Wuhan"] = { "" },
["Jiangxia"] = { "" },
["Caidian"] = { "" },
["Xinzhou-HB"] = { "" },
["Huangpi"] = { "" },
["Hanchuan"] = { "" },
["Suizhou"] = { "" },
["Suixian"] = { "" },
["Yichang"] = { "" },
["Dangyang"] = { "" },
["Zhijiang"] = { "" },
["Yidu"] = { "" },
["Changyang"] = { "" },
["Xingshan"] = { "" },
["Zigui"] = { "" },
["Wufeng"] = { "" },
["Enshi"] = { "" },
["Hefeng"] = { "" },
["Badong"] = { "" },
["Xuan'en"] = { "" },
["Laifeng"] = { "" },
["Lichuan-M"] = { "" },
["Jianshi"] = { "" },
["Xianfeng"] = { "" },
["Xiangyang"] = { "" },
["Laohekou"] = { "" },
["Baokang"] = { "" },
["Nanzhang"] = { "" },
["Zaoyang"] = { "" },
["Yicheng"] = { "" },
["Gucheng"] = { "" },
["Jingzhou"] = { "" },
["Jiangling"] = { "" },
["Shishou"] = { "" },
["Gong'an"] = { "" },
["Songzi"] = { "" },
["Jingmen"] = { "" },
["Zhongxiang"] = { "" },
["Jingshan"] = { "" },
["Tianmen"] = { "" },
["Xiantao"] = { "" },
["Qianjiang"] = { "" },
["Shennongjia"] = { "" },
["Shiyan"] = { "" },
["Zhuxi"] = { "" },
["Zhushan"] = { "" },
["Yunxi"] = { "" },
["Yunyang"] = { "" },
["Danjiangkou"] = { "" },
["Fangxian"] = { "" },
["Lhasa"] = { "" },
["Guiyang"] = { "" },
["Huaxi"] = { "" },
["Zunyi"] = { "" },
["Tongzi"] = { "" },
["Renhuai"] = { "" },
["Bijie"] = { "" },
["Jinsha-M"] = { "" },
["Dafang"] = { "" },
["Weining"] = { "" },
["Liupanshui"] = { "" },
["Liuzhi"] = { "" },
["Xingyi"] = { "" },
["Anshun"] = { "" },
["Duyun"] = { "" },
["Pingtang"] = { "" },
["Fuquan"] = { "" },
["Weng'an"] = { "" },
["Kaili"] = { "" },
["Liping-GZ"] = { "" },
["Zhenyuan"] = { "" },
["Tongren"] = { "" },
["Sinan"] = { "" },
["Yuping"] = { "" },
["Liping"] = { "" },
["Zhaotong"] = { "" },
["Shuifu"] = { "" },
["Daguan"] = { "" },
["Baoshan-M"] = { "" },
["Dali"] = { "" },
["Kunming"] = { "" },
["Qujing"] = { "" },
["Wenshan"] = { "" },
["Mengzi"] = { "" },
["Lancang"] = { "" },
["Weixi"] = { "" },
["Pu'er"] = { "" },
["Lincang"] = { "" },
["Guilin"] = { "" },
["Lingui"] = { "" },
["Guanyang"] = { "" },
["Lipu"] = { "" },
["Pingle"] = { "" },
["Yangshuo"] = { "" },
["Liuzhou"] = { "" },
["Liuzhou-LR"] = { "" },
["Luzhai"] = { "" },
["Sanjiang-DZ"] = { "" },
["Nanning-M"] = { "" },
["Yongning-FJ"] = { "" },
["Wuming"] = { "" },
["Wuming-FC"] = { "" },
["Binyang-M"] = { "" },
["Shanglin"] = { "" },
["Yizhou"] = { "" },
["Jinchengjiang"] = { "" },
["Luocheng"] = { "" },
["Fengshan"] = { "" },
["Tianlin-LP"] = { "" },
["Tianlin-PT"] = { "" },
["Leye"] = { "" },
["Lingyun"] = { "" },
["Longlin"] = { "" },
["Xilin"] = { "" },
["Xiangzhou-NL"] = { "" },
["Jishou"] = { "" },
["Changde"] = { "" },
["Zhangjiajie"] = { "" },
["Yongzhou"] = { "" },
["Chenzhou"] = { "" },
["Huaihua"] = { "" },
["Huitong"] = { "" },
["Xiangtan-JN"] = { "" },
["Ganzhou-M"] = { "" },
["Shiquan"] = { "" },
["Ziyang"] = { "" },
["Ningshan"] = { "" },
["Langao"] = { "" },
["Zhenping"] = { "" },
["Hanzhong"] = { "" },
["Nanzheng"] = { "" },
["Ningqiang"] = { "" },
["Liuba"] = { "" },
["Chenggu"] = { "" },
["Foping"] = { "" },
["Xixiang"] = { "" },
["Zhenba"] = { "" },
["Anji-HB"] = { "" },
["Kokang"] = { "" },
["Dagudi"] = { "" },
["Reshuitang"] = { "" },
["Mae Salong"] = { "" },
["Mae Sai"] = { "" },
["Oudomxay"] = { "" },
["Siantar"] = { "" },
["Nanjing"] = { "" },
["Pukou"] = { "" },
["Luhe-M"] = { "" },
["Lishui-M"] = { "" },
["Yangzhou"] = { "" },
["Jiangdu"] = { "" },
["Baoying"] = { "" },
["Gaoyou"] = { "" },
["Yizheng"] = { "" },
["Taizhou-M"] = { "" },
["Taixing"] = { "" },
["Jiangyan"] = { "" },
["Jingjiang-DX"] = { "" },
["Zhenjiang"] = { "" },
["Jurong"] = { "" },
["Yangzhong"] = { "" },
["Jintan-XG"] = { "" },
["Lianyungang"] = { "" },
["Haizhou"] = { "" },
["Guanyun"] = { "" },
["Guannan"] = { "" },
["Huai'an"] = { "" },
["Huai'an-HA"] = { "" },
["Huaiyin"] = { "" },
["Hongze"] = { "" },
["Lianshui"] = { "" },
["Xuyi"] = { "" },
["Jinhu"] = { "" },
["Xinghua"] = { "" },
["Nantong"] = { "" },
["Rugao"] = { "" },
["Rudong"] = { "" },
["Hai'an"] = { "" },
["Yancheng"] = { "" },
["Dongtai"] = { "" },
["Binhai"] = { "" },
["Sheyang"] = { "" },
["Dafeng"] = { "" },
["Funing"] = { "" },
["Jianhu"] = { "" },
["Xiangshui"] = { "" },
["Shuyang"] = { "" },
["Sihong"] = { "" },
["Siyang"] = { "" },
["Anqing"] = { "" },
["Tongcheng"] = { "" },
["Zongyang"] = { "" },
["Chizhou"] = { "" },
["Qingyang"] = { "" },
["Wuhu"] = { "" },
["Wuhu-QS"] = { "" },
["Wanzhi"] = { "" },
["Jinghu"] = { "" },
["Fanchang"] = { "" },
["Wuwei"] = { "" },
["Hanshan"] = { "" },
["Hexian"] = { "" },
["Ma'anshan"] = { "" },
["Dangtu"] = { "" },
["Xuancheng"] = { "" },
["Langxi"] = { "" },
["Guangde"] = { "" },
["Tongling"] = { "" },
["Hefei"] = { "" },
["Feidong"] = { "" },
["Feixi"] = { "" },
["Chaohu"] = { "" },
["Lujiang"] = { "" },
["Changfeng"] = { "" },
["Huainan"] = { "" },
["Lu'an"] = { "" },
["Jin'an-QSH"] = { "" },
["Shucheng"] = { "" },
["Huoshan"] = { "" },
["Chuzhou"] = { "" },
["Lai'an"] = { "" },
["Quanjiao"] = { "" },
["Mingguang"] = { "" },
["Tianchang"] = { "" },
["Echeng"] = { "" },
["Huangshi"] = { "" },
["Huanggang"] = { "" },
["Hong'an"] = { "" },
["Macheng"] = { "" },
["Luotian"] = { "" },
["Yingshan-HB"] = { "" },
["Xishui"] = { "" },
["Huangmei"] = { "" },
["Wuxue"] = { "" },
["Qichun"] = { "" },
["Xiaogan"] = { "" },
["Anlu"] = { "" },
["Yingcheng"] = { "" },
["Yunmeng"] = { "" },
["Dawu"] = { "" },
["Guangshui"] = { "" },
["Zhashui"] = { "" },
["Jiujiang"] = { "" },
["Ruichang"] = { "" },
["Anji-AQ"] = { "" },
["Jinhua-M-SDJ"] = { "" },
["Dianbai-Jun"] = { "" },
["Qinzhou-M"] = { "" },
["Pinghai-Jun"] = { "" },
["Ningguo-GK"] = { "" },
["Changle-QJ"] = { "" },
["Yanping"] = { "" },
["Wuping-ZS-Jun"] = { "" },
["Jiangshan-M-NBD"] = { "" },
["Kaihua-M-HB"] = { "" },
["Yushan-M-HY"] = { "" },
["Juexi"] = { "" },
["Taiyuan"] = { "" },
["Jiancaoping"] = { "" },
["Jinyuan"] = { "" },
["Qingxu"] = { "" },
["Loufan"] = { "" },
["Taigu"] = { "" },
["Pingyao"] = { "" },
["Heshun"] = { "" },
["Qixian"] = { "" },
["Yangyuan"] = { "" },
["Datong"] = { "" },
["Yunzhou"] = { "" },
["Yunzhou-XCT"] = { "" },
["Tianzhen"] = { "" },
["Guangling"] = { "" },
["Shuozhou"] = { "" },
["Shanyin"] = { "" },
["Pinglu"] = { "" },
["Pingding"] = { "" },
["Xinzhou"] = { "" },
["Wutai"] = { "" },
["Daixian"] = { "" },
["Wuzhai"] = { "" },
["Lishi"] = { "" },
["Shilou"] = { "" },
["Fenyang"] = { "" },
["Lanxian"] = { "" },
["Linxian"] = { "" },
["Wenshui"] = { "" },
["Xiaoyi"] = { "" },
["Fenxi"] = { "" },
["Xixian"] = { "" },
["Changzhi"] = { "" },
["Tunliu"] = { "" },
["Shangdang"] = { "" },
["Baochang"] = { "" },
["Linhe"] = { "" },
["Pingshun"] = { "" },
["Zhangzi"] = { "" },
["Qinxian"] = { "" },
["Jincheng"] = { "" },
["Lingchuan"] = { "" },
["Yangcheng"] = { "" },
["Gaoping"] = { "" },
["Jining"] = { "" },
["Liangcheng"] = { "" },
["Hohhot"] = { "" },
["Baotou"] = { "" },
["Dongsheng"] = { "" },
["Haibowan"] = { "" },
["Erenhot"] = { "" },
["Pingshan"] = { "" },
["Zhangjiakou"] = { "" },
["Chongli"] = { "" },
["Handan"] = { "" },
["Linzhang"] = { "" },
["Anyang"] = { "" },
["Linzhou"] = { "" },
["Hebi"] = { "" },
["Xinxiang"] = { "" },
["Jiaozuo"] = { "" },
["Qinyang"] = { "" },
["Wenxian"] = { "" },
["Wuzhi"] = { "" },
["Jiyuan"] = { "" },
["Suide"] = { "" },
["Zizhou"] = { "" },
["Mizhi"] = { "" },
["Jiaxian"] = { "" },
["Wubu"] = { "" },
["Shenmu"] = { "" },
["Fugu"] = { "" },
["Yulin-J"] = { "" },
["Hengshan-J"] = { "" },
["Jingbian"] = { "" },
["Yan'an"] = { "" },
["Ansai"] = { "" },
["Ganquan"] = { "" },
["Zhidan"] = { "" },
["Wuqi-J"] = { "" },
["Qingjian"] = { "" },
["Zichang"] = { "" },
["Yanchuan"] = { "" },
["Yanchang"] = { "" },
["Shanghai"] = { "白皮子" },
["Yangpu"] = { "" },
["Xinzhuang"] = { "" },
["Zhenru"] = { "" },
["Songjiang"] = { "" },
["Chuansha"] = { "" },
["Nanhui"] = { "" },
["Zhoupu"] = { "" },
["Huinan"] = { "" },
["Fengxian"] = { "" },
["Jinshan"] = { "" },
["Qingpu"] = { "" },
["Jiading"] = { "" },
["Baoshan-SCD"] = { "" },
["Baoshan-LD"] = { "" },
["Baoshan-YP"] = { "" },
["Chongming"] = { "" },
["Suzhou"] = { "" },
["Shengpu"] = { "" },
["Xishan"] = { "" },
["Wujiang-SL"] = { "" },
["Wujiang-LL"] = { "" },
["Wujiang-SZ"] = { "" },
["Wuxi"] = { "" },
["Changshu"] = { "" },
["Kunshan"] = { "" },
["Taicang"] = { "" },
["Zhangjiagang"] = { "" },
["Tongzhou"] = { "" },
["Qidong"] = { "" },
["Qidong-LS"] = { "" },
["Haimen"] = { "" },
["Haimen-SJ"] = { "" },
["Rudong-W"] = { "" },
["Jiaxing"] = { "" },
["Jiashan"] = { "" },
["Pinghu"] = { "" },
["Haining-YG"] = { "" },
["Haining-XS"] = { "" },
["Tongxiang"] = { "" },
["Haiyan"] = { "" },
["Changzhou"] = { "" },
["Liyang"] = { "" },
["Jintan"] = { "" },
["Yixing"] = { "" },
["Danyang"] = { "" },
["Danyang-TJQ"] = { "" },
["Jingjiang"] = { "" },
["Jiangyin"] = { "" },
["Gaochun"] = { "" },
["Gaochun-ZB"] = { "" },
["Huzhou"] = { "" },
["Huzhou-SL"] = { "" },
["Changxing"] = { "" },
["Anji"] = { "" },
["Anji-XF"] = { "" },
["Deqing-W"] = { "" },
["Deqing-GT"] = { "" },
["Hangzhou"] = { "" },
["Yuhang"] = { "" },
["Lin'an"] = { "" },
["Lin'an-CH"] = { "" },
["Lin'an-YQ"] = { "" },
["Fuyang-W"] = { "" },
["Fuyang-XD"] = { "" },
["Xiaoshan"] = { "" },
["Tonglu"] = { "" },
["Fenshui-WS"] = { "" },
["Shaoxing"] = { "" },
["Shaoxing-KQ"] = { "" },
["Shangyu"] = { "" },
["Zhuji"] = { "" },
["Zhuji-WJJ"] = { "" },
["Shengzhou"] = { "" },
["Shengzhou-CR"] = { "" },
["Shengzhou-TP"] = { "" },
["Xinchang"] = { "" },
["Ningbo"] = { "" },
["Zhenhai"] = { "" },
["Fenghua"] = { "" },
["Beilun"] = { "" },
["Yinzhou"] = { "" },
["Yuyao"] = { "" },
["Cixi"] = { "" },
["Xiangshan"] = { "" },
["Ninghai"] = { "" },
["Zhoushan"] = { "" },
["Dinghai"] = { "" },
["Daishan"] = { "" },
["Shengsi"] = { "" },
["Jiaojiang"] = { "" },
["Huangyan"] = { "" },
["Tiantai"] = { "" },
["Xianju"] = { "" },
["Sanmen"] = { "" },
["Linhai"] = { "" },
["Wenling"] = { "" },
["Yuhuan"] = { "" },
["Yuhuan-DMY"] = { "" },
["Yuhuan-CM"] = { "" },
["Wenzhou"] = { "" },
["Yueqing"] = { "" },
["Yongjia"] = { "" },
["Yongjia-FL"] = { "" },
["Rui'an"] = { "" },
["Longgang"] = { "" },
["Dongtou"] = { "" },
["Cangnan-HS"] = { "" },
["Cangnan-JX"] = { "" },
["Cangnan-PC"] = { "" },
["Pingyang"] = { "" },
["Taishun"] = { "" },
["Wencheng"] = { "" },
["Lishui"] = { "" },
["Qingtian"] = { "" },
["Jinyun"] = { "" },
["Xuanping"] = { "" },
["Songyang-XP"] = { "" },
["Songyang-GS"] = { "" },
["Yunhe"] = { "" },
["Jingning"] = { "" },
["Qingyuan-W"] = { "" },
["Longquan"] = { "" },
["Quzhou"] = { "" },
["Qujiang-DZ"] = { "" },
["Suichang"] = { "" },
["Jiangshan"] = { "" },
["Changshan"] = { "" },
["Kaihua"] = { "" },
["Longyou"] = { "" },
["Jinhua"] = { "" },
["Tangxi"] = { "" },
["Yiwu"] = { "" },
["Yongkang"] = { "" },
["Pujiang"] = { "" },
["Dongyang"] = { "" },
["Pan'an"] = { "" },
["Wuyi"] = { "" },
["Lanxi"] = { "" },
["Shangrao"] = { "" },
["Shangrao-Rail"] = { "" },
["Shangrao-ZF"] = { "" },
["Guangfeng"] = { "" },
["Yushan"] = { "" },
["Yanshan-JC"] = { "" },
["Hengfeng-GY"] = { "" },
["Xuancheng-YC"] = { "" },
["Xuancheng-JP"] = { "" },
["Wuhu-LL"] = { "" },
["Tongling-W"] = { "" },
["Nanling"] = { "" },
["Yi'an-WS"] = { "" },
["Huangshan"] = { "" },
["Jingxian"] = { "" },
["Jingxian-ZJ"] = { "" },
["Shitai-JZ"] = { "" },
["Pucheng"] = { "" },
["Changsha"] = { "" },
["Yiyang-X"] = { "" },
["Liuyang-YA"] = { "" },
["Xiangtan"] = { "" },
["Xiangtan-CES"] = { "" },
["Miluo-CL"] = { "" },
["Xiangxiang"] = { "" },
["Xiangxiang-MQ"] = { "" },
["Loudi"] = { "" },
["Shuangfeng"] = { "" },
["Xinhua"] = { "" },
["Lianyuan"] = { "" },
["Shaoyang"] = { "" },
["Lengshuitan"] = { "" },
["Zhuzhou"] = { "" },
["Longhui"] = { "" },
["Suining-X"] = { "" },
["Dongkou-HQ"] = { "" },
["Wugang"] = { "" },
["Hengyang"] = { "" },
["Hengyang County"] = { "" },
["Hengshan"] = { "" },
["Hengshan-BG"] = { "" },
["Qiyang"] = { "" },
["Quanzhou-X"] = { "" },
["Guanyang-X"] = { "" },
["Qinglong-CL"] = { "" },
["Nanchong-CL"] = { "" },
["Nanchang"] = { "" },
["Xinjian-WC"] = { "" },
["Nanchang-TC"] = { "" },
["Anyi"] = { "" },
["Hukou"] = { "" },
["Lushan"] = { "" },
["Yongxiu"] = { "" },
["Gongqingcheng-JY"] = { "" },
["Xiushui"] = { "" },
["Pengze"] = { "" },
["Duchang"] = { "" },
["Duchang-TT"] = { "" },
["Duchang-YF"] = { "" },
["Wuning-QK"] = { "" },
["Poyang"] = { "" },
["Poyang-MT"] = { "" },
["Yugan"] = { "" },
["Wannian"] = { "" },
["Yiyang"] = { "" },
["Hengfeng"] = { "" },
["Yanshan-HK"] = { "" },
["Yanshan-YP"] = { "" },
["Shangrao-SX"] = { "" },
["Shangrao-HM"] = { "" },
["Yushan-G"] = { "" },
["Jingdezhen"] = { "" },
["Leping"] = { "" },
["Yichun"] = { "" },
["Yifeng"] = { "" },
["Gao'an"] = { "" },
["Fengxin"] = { "" },
["Shanggao"] = { "" },
["Wanzai"] = { "" },
["Fengcheng"] = { "" },
["Fengcheng-ST"] = { "" },
["Xinyu"] = { "" },
["Fuzhou-G"] = { "" },
["Linchuan-SDD"] = { "" },
["Dongxiang"] = { "" },
["Nancheng"] = { "" },
["Nanfeng"] = { "" },
["Yihuang"] = { "" },
["Lichuan"] = { "" },
["Chongren"] = { "" },
["Pingxiang"] = { "" },
["Lianhua"] = { "" },
["Luxi"] = { "" },
["Ji'an"] = { "" },
["Jishui-LT"] = { "" },
["Yongfeng"] = { "" },
["Taihe"] = { "" },
["Xiajiang"] = { "" },
["Yongxin"] = { "" },
["Yingtan"] = { "" },
["Yujiang"] = { "" },
["Guixi"] = { "" },
["Susong"] = { "" },
["Susong-HT"] = { "" },
["Susong-GL"] = { "" },
["Wangjiang"] = { "" },
["Qianshan"] = { "" },
["Huaining"] = { "" },
["Huaining-SP"] = { "" },
["Yuexi"] = { "" },
["Taihu"] = { "" },
["Dongzhi"] = { "" },
["Shitai"] = { "" },
["Yangxin"] = { "" },
["Yangxin-GH"] = { "" },
["Daye"] = { "" },
["Xianning"] = { "" },
["Xianning-MQ"] = { "" },
["Jiayu"] = { "" },
["Chongyang"] = { "" },
["Chibi"] = { "" },
["Tongshan"] = { "" },
["Tongcheng-G"] = { "" },
["Jianli"] = { "" },
["Yueyang"] = { "" },
["Yueyang-BX"] = { "" },
["Linxiang"] = { "" },
["Pingjiang-XJ"] = { "" },
["Pingjiang-NJ"] = { "" },
["Liuyang"] = { "" },
["Liuyang-DY"] = { "" },
["Liuyang-FY"] = { "" },
["Liling-BTT"] = { "" },
["Liling-BS"] = { "" },
["Youxian"] = { "" },
["Chaling"] = { "" },
["Changning"] = { "" },
["Changning-TS"] = { "" },
["Leiyang"] = { "" },
["Anren"] = { "" },
["Zixing-XN"] = { "" },
["Longhui-LDZ"] = { "" },
["Dongkou"] = { "" },
["Dongkou-SJ"] = { "" },
["Jianning"] = { "" },
["Taining"] = { "" },
["Hanbin-NT"] = { "" },
["Jinxian"] = { "" },
["Jinxi"] = { "" },
["Le'an"] = { "" },
["Guangchang"] = { "" },
["Anfu"] = { "" },
["Suichuan"] = { "" },
["Wan'an"] = { "" },
["Jing'an"] = { "" },
["Zhangshu"] = { "" },
["Xingan"] = { "" },
["Fenyi"] = { "" },
["Meixian"] = { "" },
["Xingning"] = { "" },
["Dabu"] = { "" },
["Dabu-XH"] = { "" },
["Dabu-TY"] = { "" },
["Dabu-GB"] = { "" },
["Fengshun-TK"] = { "" },
["Fengshun-LH"] = { "" },
["Fengshun-HJ"] = { "" },
["Fengshun-FL"] = { "" },
["Fengshun-PT"] = { "" },
["Huizhou"] = { "" },
["Huizhou-SK"] = { "" },
["Huizhou-HL"] = { "" },
["Huiyang"] = { "" },
["Huidong-PS"] = { "" },
["Huidong-DL"] = { "" },
["Dongguan-H"] = { "" },
["Longmen-PL"] = { "" },
["Longmen-LX"] = { "" },
["Boluo"] = { "" },
["Shenzhen-H"] = { "" },
["Shenzhen-H-LH"] = { "" },
["Shenzhen-HG"] = { "" },
["Zengcheng-ZG"] = { "" },
["Zhongshan-WGS"] = { "" },
["Zhongshan-NLHS"] = { "" },
["Wuhua-SZ"] = { "" },
["Wuhua-HC"] = { "" },
["Wuhua-CB"] = { "" },
["Wuhua-MY"] = { "" },
["Wuhua-ML"] = { "" },
["Heyuan"] = { "" },
["Zijin"] = { "" },
["Zijin-GZ"] = { "" },
["Longchuan-TC"] = { "" },
["Longchuan-SD"] = { "" },
["Heping-LZ"] = { "" },
["Lianping"] = { "" },
["Lianping-ZX"] = { "" },
["Lianping-LJ"] = { "" },
["Wengyuan"] = { "" },
["Nanxiong-ZJ"] = { "" },
["Qujiang"] = { "" },
["Lechang-MH"] = { "" },
["Xinfeng-MT"] = { "" },
["Xinfeng-DX"] = { "" },
["Xiaosanjiang"] = { "" },
["Liannan"] = { "" },
["Conghua-H"] = { "" },
["Jiexi"] = { "" },
["Jiexi-HZ"] = { "" },
["Luhe"] = { "" },
["Raoping-XF"] = { "" },
["Xiuzhuan"] = { "" },
["Pinghe-JF"] = { "" },
["Nanjing-ML"] = { "" },
["Nanjing-BL"] = { "" },
["Changting"] = { "" },
["Shanghang"] = { "" },
["Shanghang-GT"] = { "" },
["Yongding"] = { "" },
["Yongding-XY"] = { "" },
["Yongding-GB"] = { "" },
["Yongding-HK"] = { "" },
["Longyan-WA"] = { "" },
["Wuping"] = { "" },
["Wuping-ZS"] = { "" },
["Wuping-Y"] = { "" },
["Wuping-WD"] = { "" },
["Pingyu"] = { "" },
["Liancheng"] = { "" },
["Liancheng-PT"] = { "" },
["Liancheng-JX"] = { "" },
["Liancheng-ZB"] = { "" },
["Liancheng-LY"] = { "" },
["Ninghua"] = { "" },
["Qingliu"] = { "" },
["Yudu"] = { "" },
["Ningdu"] = { "" },
["Ruijin"] = { "" },
["Shicheng"] = { "" },
["Shangyou"] = { "" },
["Sandu"] = { "" },
["Ganzhou-PL"] = { "" },
["Nankang"] = { "" },
["Dayu"] = { "" },
["Quannan"] = { "" },
["Dingnan"] = { "" },
["Longnan"] = { "" },
["Xunwu"] = { "" },
["Anyuan"] = { "" },
["Huichang"] = { "" },
["Chongyi"] = { "" },
["Xingguo"] = { "" },
["Yunhe-JST"] = { "" },
["Tonggu"] = { "" },
["Fengxin-ZX"] = { "" },
["Taoyuan"] = { "" },
["Miaoli"] = { "" },
["Zaoqiao"] = { "" },
["Touwu"] = { "" },
["Nanzhuang"] = { "" },
["Shitan"] = { "" },
["Sanwan"] = { "" },
["Toufen"] = { "" },
["Gongguan"] = { "" },
["Zhuolan-SX"] = { "" },
["Guanxi"] = { "" },
["Changhua-PT"] = { "" },
["Liudui"] = { "" },
["Wuluo"] = { "" },
["Daluguan"] = { "" },
["Jiadong"] = { "" },
["Meinong"] = { "" },
["Shanlin"] = { "水母" },
["Hsinchu"] = { "" },
["Guanxi-DP"] = { "" },
["Guanxi-LQW"] = { "" },
["Dongshi"] = { "" },
["Raoping"] = { "" },
["Guanxi-RP"] = { "" },
["Hukou-RP"] = { "" },
["Liujia-RP"] = { "" },
["Zhongli-ZB-RP"] = { "" },
["Zhongli-XN-RP"] = { "" },
["Zhongli-GL-RP"] = { "" },
["Pingzhen-NS-RP"] = { "" },
["Xinwu-TZ-RP"] = { "" },
["Guanyin-XP-RP"] = { "" },
["Zhuolan-RP"] = { "" },
["Yunlin"] = { "" },
["Guoxing"] = { "" },
["Hong Kong-H"] = { "" },
["Tangkou"] = { "" },
["Sanjia"] = { "" },
["Sihe"] = { "" },
["Qianpai"] = { "" },
["Xindong"] = { "" },
["Shalang"] = { "" },
["Xin'an"] = { "" },
["Shijiao"] = { "" },
["Qingping"] = { "" },
["Xihe"] = { "" },
["Fumian-XS"] = { "" },
["Luchuan-LC"] = { "" },
["Luchuan-DQ"] = { "" },
["Luchuan-SH"] = { "" },
["Luchuan-WS"] = { "" },
["Bobai-SH"] = { "" },
["Bobai-LT"] = { "" },
["Bobai-LP"] = { "" },
["Bobai-LJ"] = { "" },
["Bobai-CT"] = { "" },
["Tang'an"] = { "" },
["Beiliu-GH"] = { "" },
["Beiliu-MM"] = { "" },
["Xingye-GF"] = { "" },
["Rongxian-XD"] = { "" },
["Mashan-PL"] = { "" },
["Binyang-WL"] = { "" },
["Hengxian-XY"] = { "" },
["Guigang-H-WL"] = { "" },
["Guigang-H-QX"] = { "" },
["Guigang-H-BT"] = { "" },
["Guiping-H-JT"] = { "" },
["Guiping-H-DX"] = { "" },
["Pingnan-H-GA"] = { "" },
["Lingui-H-XJ"] = { "" },
["Lipu-SDT"] = { "" },
["Lipu-DSG"] = { "" },
["Pingle-H"] = { "" },
["Yangshuo-JB"] = { "" },
["Tianlin-GL"] = { "" },
["Qinzhou-H"] = { "" },
["Guidong"] = { "" },
["Rongchang-PL"] = { "" },
["Chengdu-H-LT"] = { "" },
["Longquanyi-H-SL"] = { "" },
["Qingbaijiang-H-LW"] = { "" },
["Xindu-H-SBT"] = { "" },
["Xindu-H-HXC"] = { "" },
["Xindu-H-XD"] = { "" },
["Weiyuan-H"] = { "" },
["Yilong-H"] = { "" },
["Xichang-H"] = { "" },
["Sabah-B"] = { "" },
["Sabah-L"] = { "" },
["Sabah-HY"] = { "" },
["Sabah-HP"] = { "" },
["Kuala Lumpur-H-HY"] = { "" },
["Kuala Lumpur-H"] = { "" },
["Senai"] = { "" },
["Senai-JX"] = { "" },
["Kuching"] = { "" },
["Sungai Tapang"] = { "" },
["Singkawang"] = { "䖳" },
["Pontianak-MX"] = { "" },
["Mempawah"] = { "" },
["Metal"] = { "" },
["Singapore-MX"] = { "" },
["Singapore-DB"] = { "" },
["Belait-H"] = { "" },
["Bangkok-MX"] = { "" },
["Bangkok-FS"] = { "" },
["Bangkok-JX"] = { "" },
["Yangon-H"] = { "" },
["Ho Chi Minh City-H"] = { "" },
["Jixi"] = { "" },
["Shexian"] = { "" },
["Shexian-XG"] = { "" },
["Shexian-DGY"] = { "" },
["Shexian-SY"] = { "" },
["Tunxi"] = { "" },
["Huizhou-HZ"] = { "" },
["Xiuning"] = { "" },
["Yixian"] = { "" },
["Qimen"] = { "" },
["Qimen-AL-Min"] = { "" },
["Wuyuan"] = { "" },
["Wuyuan-QK"] = { "" },
["Wuyuan-JW"] = { "" },
["Fuliang"] = { "" },
["Fuliang-EH"] = { "" },
["Dexing"] = { "" },
["Dexing-ZC"] = { "" },
["Jingde"] = { "" },
["Zhanda"] = { "" },
["Chun'an"] = { "" },
["Sui'an"] = { "" },
["Jiande"] = { "" },
["Shouchang"] = { "" },
["Guangzhou"] = { "白鮓" }, -- written as 白䖳 in 广州方言词典 p. 465
["Hong Kong"] = { "" },
["HK Weitou"] = { "" },
["Kam Tin"] = { "" },
["Shek Pik"] = { "" },
["Ting Kok"] = { "" },
["Tung Ping Chau"] = { "" },
["Sam Mun Tsai"] = { "" },
["Macau"] = { "" },
["Macau-Tanka"] = { "" },
["Guangzhou-XJ"] = { "" },
["Guangzhou-LX"] = { "" },
["Guangzhou-HP"] = { "" },
["Luogang"] = { "" },
["Guangzhou-LH"] = { "" },
["Guangzhou-MT"] = { "" },
["Guangzhou-JS"] = { "" },
["Guangzhou-XS"] = { "" },
["Guangzhou-SJ"] = { "" },
["Guangzhou-JC"] = { "" },
["Guangzhou-LG"] = { "" },
["Guangzhou-RH"] = { "" },
["Guangzhou-ZL"] = { "" },
["Guangzhou-ZLT"] = { "" },
["Guangzhou-JF"] = { "" },
["Panyu"] = { "" },
["Huadu"] = { "" },
["Conghua"] = { "" },
["Zengcheng"] = { "" },
["Zengcheng-XT"] = { "" },
["Foshan"] = { "" },
["Nanhai"] = { "" },
["Shunde"] = { "" },
["Sanshui"] = { "" },
["Gaoming"] = { "" },
["Zhongshan"] = { "" },
["Zhongshan-HC"] = { "" },
["Zhongshan-NL"] = { "" },
["Zhongshan-CKM"] = { "" },
["Zhongshan-XL"] = { "" },
["Zhongshan-DS"] = { "" },
["Zhongshan-TB"] = { "" },
["Zhongshan-HL"] = { "" },
["Zhongshan-DF"] = { "" },
["Zhongshan-NT"] = { "" },
["Zhongshan-FS"] = { "" },
["Zhongshan-SL"] = { "" },
["Zhongshan-GK"] = { "" },
["Zhongshan-HP"] = { "" },
["Zhongshan-SJ"] = { "" },
["Zhongshan-LW"] = { "" },
["Zhongshan-MZ"] = { "" },
["Zhongshan-GZ"] = { "" },
["Zhongshan-BF"] = { "" },
["Zhongshan-TZ"] = { "" },
["Zhongshan-TG"] = { "" },
["Zhuhai"] = { "" },
["Zhuhai-TJW"] = { "" },
["Doumen-T"] = { "" },
["Doumen-S"] = { "" },
["Jiangmen"] = { "" },
["Xinhui"] = { "" },
["Taishan"] = { "" },
["Taishan-GH"] = { "" },
["Kaiping"] = { "" },
["Enping"] = { "" },
["Heshan"] = { "" },
["Heshan-SP"] = { "" },
["Malan"] = { "" },
["Malan-BTQ"] = { "" },
["Malan-MHD"] = { "" },
["Malan-SZP"] = { "" },
["Malan-BLH"] = { "" },
["Dongguan"] = { "" },
["Shenzhen-C-LH"] = { "" },
["Shenzhen-NT"] = { "" },
["Shenzhen-XX"] = { "" },
["Bao'an"] = { "" },
["Yantian"] = { "" },
["Dapeng"] = { "" },
["Shenzhen-PD"] = { "" },
["Pingshan-ZM"] = { "" },
["Ebu-ZM"] = { "" },
["Longmen"] = { "" },
["Qingyuan"] = { "" },
["Fogang"] = { "" },
["Yingde"] = { "" },
["Yangshan"] = { "" },
["Lianshan"] = { "" },
["Lianshan-YH"] = { "" },
["Lianzhou"] = { "" },
["Shaoguan"] = { "" },
["Qujiang-C"] = { "" },
["Renhua"] = { "" },
["Lechang"] = { "" },
["Gaoyao"] = { "" },
["Sihui"] = { "" },
["Guangning"] = { "" },
["Deqing"] = { "" },
["Huaiji"] = { "" },
["Huaiji-LC"] = { "" },
["Fengkai"] = { "" },
["Fengkai-JK"] = { "" },
["Fengkai-LD"] = { "" },
["Yunfu"] = { "" },
["Xinxing"] = { "" },
["Luoding"] = { "" },
["Luoding-SL"] = { "" },
["Yunan"] = { "" },
["Yangjiang"] = { "" },
["Yangdong"] = { "" },
["Yangdong-YS"] = { "" },
["Yangchun"] = { "" },
["Yangxi"] = { "" },
["Xinyi"] = { "" },
["Maoming"] = { "" },
["Maoming-YJ"] = { "" },
["Gaozhou"] = { "" },
["Huazhou"] = { "" },
["Huazhou-CQ"] = { "" },
["Zhanjiang"] = { "" },
["Lianjiang"] = { "" },
["Lianjiang-CB"] = { "" },
["Wuchuan"] = { "" },
["Wuchuan-ML"] = { "" },
["Nanning"] = { "" },
["Nanning-Tanka"] = { "" },
["Wuzhou"] = { "" },
["Wuzhou-LX"] = { "" },
["Cangwu-SQ"] = { "" },
["Cangwu-LB"] = { "" },
["Tengxian"] = { "" },
["Yulin"] = { "" },
["Rongxian"] = { "" },
["Hepu"] = { "" },
["Hepu-ST"] = { "" },
["Guiping"] = { "" },
["Guiping-JT"] = { "" },
["Guiping-JK"] = { "" },
["Guiping-MD"] = { "" },
["Guiping-ML"] = { "" },
["Pingnan-PN"] = { "" },
["Pingnan-DZ"] = { "" },
["Pingnan-GC"] = { "" },
["Mengshan"] = { "" },
["Mengshan-XX"] = { "" },
["Mengshan-CT"] = { "" },
["Guigang-GC"] = { "" },
["Guigang-NJ"] = { "" },
["Guigang-PD"] = { "" },
["Beiliu"] = { "" },
["Beiliu-TL"] = { "" },
["Beiliu-XC"] = { "" },
["Baise"] = { "" },
["Tiandong"] = { "" },
["Tiandong-LF"] = { "" },
["Tianyang"] = { "" },
["Pingguo"] = { "" },
["Pingguo-SX"] = { "" },
["Bobai"] = { "" },
["Lingshan"] = { "" },
["Pubei"] = { "" },
["Qinzhou"] = { "" },
["Qinzhou-XD"] = { "" },
["Qinzhou-CT"] = { "" },
["Qinzhou-NS"] = { "" },
["Qinzhou-XNJ"] = { "" },
["Beihai"] = { "" },
["Beihai-NK"] = { "" },
["Beihai-YP"] = { "" },
["Beihai-QG"] = { "" },
["Beihai-QG-CB"] = { "" },
["Ningming"] = { "" },
["Hengxian"] = { "" },
["Pumen"] = { "" },
["Zhaoping"] = { "" },
["Fangchenggang-FC"] = { "" },
["Dongxing"] = { "" },
["Chongzuo-LT"] = { "" },
["Fusui-QJ"] = { "" },
["Lingchuan-C-YJ"] = { "" },
["Pingle-C-MJ"] = { "" },
["Pingle-C-SS"] = { "" },
["Lipu-ZC"] = { "" },
["Danzhou"] = { "" },
["Sanya-YL"] = { "" },
["Kuala Lumpur"] = { "" },
["Penang-C"] = { "" },
["Ipoh"] = { "" },
["Sarikei-C"] = { "" },
["Singapore-C"] = { "" },
["Jakarta-C"] = { "" },
["Ho Chi Minh City"] = { "" },
["Mong Cai"] = { "" },
["Phnom Penh-C"] = { "" },
["Yangon-C"] = { "" },
["Mandalay-C"] = { "" },
["Bangkok-C"] = { "" },
["Betong"] = { "" },
["Manila-C"] = { "" },
["Nanning-P"] = { "" },
["Nanning-P-SJ"] = { "" },
["Nanning-P-GJY"] = { "" },
["Nanning-P-ZGL"] = { "" },
["Nanning-P-XXJD"] = { "" },
["Nanning-P-SL"] = { "" },
["Nanning-P-XX"] = { "" },
["Nanning-P-SC"] = { "" },
["Binyang"] = { "" },
["Binyang-XQ"] = { "" },
["Hengxian-P"] = { "" },
["Wuxuan-JJ"] = { "" },
["Wuxuan-ZC"] = { "" },
["Chongzuo-P"] = { "" },
["Chongzuo-P-XH"] = { "" },
["Fusui-P"] = { "" },
["Liucheng-P"] = { "" },
["Liucheng-P-GZ"] = { "" },
["Liucheng-P-DP"] = { "" },
["Rongshui"] = { "" },
["Yizhou-P-DS"] = { "" },
["Luocheng-P"] = { "" },
["Baise-P"] = { "" },
["Guilin-P"] = { "" },
["Guilin-P-CY"] = { "" },
["Guilin-P-DBZ"] = { "" },
["Guilin-P-ZY"] = { "" },
["Guilin-P-DB"] = { "" },
["Guilin-P-YJ"] = { "" },
["Guilin-P-QJ"] = { "" },
["Lingui-P-WT"] = { "" },
["Lingui-P-HS"] = { "" },
["Lingui-P-LJ"] = { "" },
["Lingui-P-LT"] = { "" },
["Lingchuan-P"] = { "" },
["Lingchuan-P-GQ"] = { "" },
["Lingchuan-P-GD"] = { "" },
["Lingchuan-P-TX"] = { "" },
["Lingchuan-P-SZ"] = { "" },
["Lingchuan-P-GP"] = { "" },
["Lingchuan-P-LT"] = { "" },
["Guanyang-P"] = { "" },
["Quanzhou-P"] = { "" },
["Pingle-P"] = { "" },
["Pingle-P-XTM"] = { "" },
["Yangshuo-P"] = { "" },
["Yangshuo-P-PT"] = { "" },
["Yongfu-P-JX"] = { "" },
["Yongfu-P-CS"] = { "" },
["Zhongshan-GA"] = { "" },
["Xiamen"] = { "" },
["Xiamen-HS"] = { "" },
["Tong'an"] = { "" },
["Quanzhou"] = { "" },
["Jinjiang"] = { "" },
["Nan'an"] = { "" },
["Shishi"] = { "" },
["Hui'an"] = { "" },
["Anxi"] = { "" },
["Yongchun"] = { "" },
["Dehua"] = { "" },
["Zhangzhou"] = { "" },
["Longhai"] = { "" },
["Changtai"] = { "" },
["Hua'an"] = { "" },
["Nanjing-MN"] = { "" },
["Pinghe"] = { "" },
["Zhangpu"] = { "" },
["Yunxiao"] = { "" },
["Zhao'an"] = { "" },
["Zhao'an-SD"] = { "" },
["Zhao'an-TY"] = { "" },
["Zhao'an-WS"] = { "" },
["Dongshan"] = { "" },
["Taipei"] = { "" },
["Wanhua"] = { "" },
["Tamsui"] = { "" },
["Sanxia"] = { "" },
["Pingxi"] = { "" },
["Kaohsiung"] = { "" },
["Cijin"] = { "" },
["Hongmaogang"] = { "" },
["Dalinpu"] = { "" },
["Tianliao"] = { "" },
["Cieding"] = { "" },
["Yilan"] = { "" },
["Luodong"] = { "" },
["Toucheng"] = { "" },
["Lukang"] = { "" },
["Yongjing-MN"] = { "" },
["Taichung"] = { "" },
["Wuqi"] = { "" },
["Tainan"] = { "䖳", "海䖳", "水母", "石鏡" },
["Anping"] = { "" },
["Shanhua"] = { "" },
["Taitung"] = { "" },
["Green Island"] = { "" },
["Hsinchu-MN"] = { "" },
["Miaoli-MN"] = { "" },
["Mailiao"] = { "" },
["Chiayi"] = { "" },
["Chiayi-TB"] = { "" },
["Chiayi-SS"] = { "" },
["Chiayi-ZP"] = { "" },
["Chiayi-DP"] = { "" },
["Chiayi-ZQ"] = { "" },
["Chiayi-DL"] = { "" },
["Chiayi-XK"] = { "" },
["Chiayi-MX"] = { "" },
["Chiayi-PZ"] = { "" },
["Chiayi-LJ"] = { "" },
["Chiayi-ST"] = { "" },
["Chiayi-FL"] = { "" },
["Chiayi-ALS"] = { "" },
["Chiayi-LC"] = { "" },
["Chiayi-YZ"] = { "" },
["Chiayi-XG"] = { "" },
["Chiayi-MS"] = { "" },
["Chiayi-DS"] = { "" },
["Chiayi-BD"] = { "" },
["Chiayi-WL"] = { "" },
["Baoli"] = { "" },
["Liuqiu"] = { "" },
["Kinmen"] = { "" },
["Jinsha"] = { "" },
["Magong"] = { "" },
["Pengnan"] = { "" },
["Xiyu"] = { "" },
["Huxi"] = { "" },
["Wangan"] = { "" },
["Cimei"] = { "" },
["Huayu"] = { "" },
["Zhongtun"] = { "" },
["Houliao"] = { "" },
["Tongliang"] = { "" },
["Jibei"] = { "" },
["Malaysia-MN"] = { "海䖳" },
["Melaka"] = { "" },
["Labuan"] = { "" },
["Klang"] = { "" },
["Singapore-MN"] = { "" },
["Philippine-MN"] = { "" },
["Medan"] = { "" },
["Seri Begawan"] = { "" },
["Ho Chi Minh City-MN"] = { "" },
["Yangon-MN"] = { "" },
["Longyan"] = { "" },
["Shizhong"] = { "" },
["Zhangping"] = { "" },
["Yongfu"] = { "" },
["Datian"] = { "" },
["Datian-GP"] = { "" },
["Youxi-JM"] = { "" },
["Youxi-XQ"] = { "" },
["Shunchang-PS"] = { "" },
["Xiapu-SS"] = { "" },
["Putian-MN"] = { "" },
["Pingnan"] = { "" },
["Pingnan-PT"] = { "" },
["Pingnan-SJ"] = { "" },
["Guiping-XW"] = { "" },
["Guiping-DS"] = { "" },
["Guilin-MN-BYG"] = { "" },
["Pingle-MN"] = { "" },
["Qinzhou-MN"] = { "" },
["Lechang-TT"] = { "" },
["Renhua-CSB"] = { "" },
["Yingde-YZ"] = { "" },
["Yunan-LT"] = { "" },
["Heyuan-NJ"] = { "" },
["Hangzhou-PF"] = { "" },
["Cangnan-MN"] = { "" },
["Yuhuan-KM"] = { "" },
["Wenling-RS"] = { "" },
["Yixing-SB"] = { "" },
["Guangfeng-NSD"] = { "" },
["Hengfeng-YJ"] = { "" },
["Yushan-ZH"] = { "" },
["Langxi-FL"] = { "" },
["Chaozhou"] = { "" },
["Raoping-MN-T"] = { "" },
["Shantou"] = { "" },
["Chenghai"] = { "" },
["Chenghai-DX"] = { "" },
["Chaoyang"] = { "" },
["Nan'ao-HZ"] = { "" },
["Nan'ao-YA"] = { "" },
["Jieyang"] = { "" },
["Puning"] = { "" },
["Lufeng"] = { "" },
["Haifeng"] = { "" },
["Fengshun-MN-LH"] = { "" },
["Fengshun-MN-HJ"] = { "" },
["Yuen Chau Tsai-MN"] = { "" },
["Sha Tau Kok-MN"] = { "" },
["Thailand-MN-T"] = { "" },
["Chiang Mai-MN-T"] = { "" },
["Hat Yai-MN-T"] = { "" },
["Cambodia-MN-T"] = { "" },
["Ho Chi Minh City-MN-T"] = { "" },
["Vientiane-MN-T"] = { "" },
["Johor Bahru"] = { "" },
["Penang-MN-T"] = { "" },
["Singapore-MN-T"] = { "" },
["Batam-MN-T"] = { "" },
["Pontianak-MN-T"] = { "" },
["Leizhou"] = { "海母" },
["Dianbai-XD"] = { "" },
["Wenchang"] = { "" },
["Haikou"] = { "" },
["Chengmai"] = { "" },
["Qionghai"] = { "" },
["Wanning"] = { "" },
["Tunchang"] = { "" },
["Singapore-MN-H"] = { "" },
["Belait-MN-H"] = { "" },
["Putian"] = { "䖳" },
["Putian-DH"] = { "" },
["Putian-JK"] = { "" },
["Putian-NR"] = { "" },
["Xianyou"] = { "䖳" },
["Xianyou-FT"] = { "" },
["Xianyou-YY"] = { "" },
["Fuding-AY"] = { "" },
["Shaxi"] = { "" },
["Sanxiang"] = { "" },
["Nanlang"] = { "" },
["Fuzhou"] = { "" },
["Changle"] = { "" },
["Lianjiang-MD"] = { "" },
["Minhou"] = { "" },
["Fuqing"] = { "" },
["Pingtan"] = { "" },
["Yongtai"] = { "" },
["Minqing"] = { "" },
["Gutian"] = { "" },
["Pingnan-MD"] = { "" },
["Luoyuan"] = { "" },
["Fu'an"] = { "" },
["Ningde"] = { "" },
["Xiapu"] = { "" },
["Zherong"] = { "" },
["Shouning"] = { "" },
["Zhouning"] = { "" },
["Fuding"] = { "" },
["Youxi"] = { "" },
["Youxi-XY"] = { "" },
["Youxi-YZ"] = { "" },
["Youxi-TC"] = { "" },
["Youxi-ZX"] = { "" },
["Matsu"] = { "" },
["Taishun-MD"] = { "" },
["Cangnan-MD"] = { "" },
["Guanhaiwei"] = { "" },
["Longyou-LS"] = { "" },
["Singapore-MD-FQ"] = { "" },
["Sitiawan-MD-GT"] = { "" },
["Sibu-MD-MQ"] = { "" },
["Jian'ou"] = { "" },
["Dikou"] = { "" },
["Yanping-XY"] = { "" },
["Yanping-XD"] = { "" },
["Songxi"] = { "" },
["Zhenghe"] = { "" },
["Zhenqian"] = { "" },
["Shunchang-YD"] = { "" },
["Jianyang"] = { "" },
["Huangkeng"] = { "" },
["Wuyishan"] = { "" },
["Shibei"] = { "" },
["Yong'an"] = { "" },
["Sanyuan"] = { "" },
["Shaxian"] = { "" },
["Yanping-WT"] = { "" },
["Shaowu"] = { "" },
["Guangze"] = { "" },
["Jiangle"] = { "" },
["Mingxi"] = { "" },
["Shunchang"] = { "" },
["Ningde-She"] = { "" },
["Fu'an-She"] = { "" },
["Fuding-She"] = { "" },
["Zhouning-She"] = { "" },
["Xiapu-She"] = { "" },
["Shouning-She"] = { "" },
["Gutian-She"] = { "" },
["Luoyuan-She"] = { "" },
["Sanming-She"] = { "" },
["Shunchang-She"] = { "" },
["Hua'an-She"] = { "" },
["Zhangping-She"] = { "" },
["Guixi-She"] = { "" },
["Yanshan-She"] = { "" },
["Wuning-She"] = { "" },
["Cangnan-She"] = { "" },
["Jingning-She"] = { "" },
["Jingning-ZK-She"] = { "" },
["Lishui-She"] = { "" },
["Longyou-She"] = { "" },
["Lin'an-She"] = { "" },
["Jiande-She"] = { "" },
["Jinhua-She"] = { "" },
["Ningguo-She"] = { "" },
["Chaozhou-She"] = { "" },
["Fengshun-She"] = { "" },
["Guzhang-WX"] = { "" },
["Yuanling-WX"] = { "" },
["Luxi-WX"] = { "" },
["Luxi-WX-LJT"] = { "" },
["Luxi-WX-LJT-2"] = { "" },
["Chengbu-WX"] = { "" },
["Jiande-JXYM"] = { "" },
["Jinhua-JXYM"] = { "" },
["Lanxi-JXYM"] = { "" },
["Tunxi-JXYM"] = { "" },
["Jiangyong"] = { "" },
["Dong'an"] = { "" },
["Qujiang-DC"] = { "" },
["Wujiang-XY"] = { "" },
["Zhenjiang-SB"] = { "" },
["Renhua-ZT"] = { "" },
["Renhua-ST"] = { "" },
["Ruyuan-GT"] = { "" },
["Lechang-CL"] = { "" },
["Lechang-BX"] = { "" },
["Lechang-HP"] = { "" },
["Lechang-GT"] = { "" },
["Lechang-SX"] = { "" },
["Lianzhou-XZ"] = { "" },
["Lianzhou-BA"] = { "" },
["Lianzhou-YC"] = { "" },
["Lianzhou-XA"] = { "" },
["Lianzhou-FY"] = { "" },
}
return export
8owyjz3jg7ynnz36hw2sce1ikhkz5ib
目出度し目出度し
0
3421305
9739149
2026-04-20T13:43:41Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==日語== {{ja-kanjitab|め|で|た|め|で|た|y=k}} {{ja-see|めでたしめでたし}}」的新頁面
9739149
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|め|で|た|め|で|た|y=k}}
{{ja-see|めでたしめでたし}}
t1vfyksyjgay6hv9d4z1ztkj5bdk200
Category:寫作「度」讀作「た」的日語詞
14
3421306
9739150
2026-04-20T13:44:13Z
TongcyBot
83009
養貓
9739150
wikitext
text/x-wiki
{{auto cat|kun}}
6sgynwa4ww4n7ynr3errc7yhla69lb0
Category:噶瑪蘭語 旋花科植物
14
3421307
9739158
2026-04-20T13:51:17Z
TongcyBot
83009
養貓
9739158
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
新自由主義
0
3421308
9739159
2026-04-20T13:54:18Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==漢語== {{zh-forms|s=新自由主义|type=14}} ===發音=== {{zh-pron |m=xīnzìyóuzhǔyì |c=san1 zi6 jau4 zyu2 ji6 |cat=n }} ===名詞=== {{head|zh|名詞}} # {{lb|zh|政治|經濟學}} 一種基於{{w|新古典經濟學派}}的[[意識形態]],主張[[經濟]][[自由主義]],支持[[貿易]]自由化、放鬆[[金融]][[管制]]、[[小政府]]、[[國營企業]][[私有]]化和自由化、[[被動]]的[[反壟斷]]執法、接…」的新頁面
9739159
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=新自由主义|type=14}}
===發音===
{{zh-pron
|m=xīnzìyóuzhǔyì
|c=san1 zi6 jau4 zyu2 ji6
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|政治|經濟學}} 一種基於{{w|新古典經濟學派}}的[[意識形態]],主張[[經濟]][[自由主義]],支持[[貿易]]自由化、放鬆[[金融]][[管制]]、[[小政府]]、[[國營企業]][[私有]]化和自由化、[[被動]]的[[反壟斷]]執法、接受更大的經濟不平等以及反對[[工會]]化
====翻譯====
{{trans-top|意識形態}}
* 南非語:{{t|af|neoliberalisme|m}}
* 阿拉伯語:{{t|ar|نِيُولِيبِرَالِيَّة|f}}
* 保加利亞語:{{t|bg|неолиберализъм|m}}
* 加泰羅尼亞語:{{t|ca|neoliberalisme|m}}
* 捷克語:{{t|cs|neoliberalizmus|m}}
* 荷蘭語:{{t+|nl|neoliberalisme|n}}
* 英語:{{t|eo|neoliberalism}}
* 世界語:{{t|eo|novliberalismo}}
* 芬蘭語:{{t|fi|neoliberalismi}}、{{t+|fi|uusliberalismi}}
* 法語:{{t+|fr|néolibéralisme|m}}
* 格魯吉亞語:{{t|ka|ნეოლიბერალიზმი}}
* 德語:{{t+|de|Neoliberalismus|m}}
* 希臘語:{{t+|el|νεοφιλελευθερισμός|m}}
* 匈牙利語:{{t+|hu|neoliberalizmus}}、{{t|hu|újliberalizmus}}
* 冰島語:{{t|is|nýfrjálshyggja|f}}
* 因特語:{{t|ia|neoliberalismo}}
* 意大利語:{{t+|it|neoliberismo|m}}
* 哈薩克語:{{t|kk|[[жаңа]] [[либерализм]]}}
* 波蘭語:{{t+|pl|neoliberalizm|m}}
* 葡萄牙語:{{t|pt|neoliberalismo|m}}
* 西班牙語:{{t+|es|neoliberalismo|m}}
* 瑞典語:{{t+|sv|nyliberalism|n}}
* 越南語:{{t|vi|chủ nghĩa tự do mới}}、{{t|vi|chủ nghĩa tân tự do}}
{{trans-bottom}}
6exp5y1k0xv75ecb5ddee7tycjb3u0r
9739160
9739159
2026-04-20T13:54:37Z
TongcyDai
53191
9739160
wikitext
text/x-wiki
==漢語==
{{zh-forms|s=新自由主义|type=14}}
===發音===
{{zh-pron
|m=xīnzìyóuzhǔyì
|c=san1 zi6 jau4 zyu2 ji6
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|政治|經濟學}} 一種基於{{w|新古典經濟學派}}的[[意識形態]],主張[[經濟]][[自由主義]],支持[[貿易]]自由化、放鬆[[金融]][[管制]]、[[小政府]]、[[國營企業]][[私有]]化和自由化、[[被動]]的[[反壟斷]]執法、接受更大的經濟不平等以及反對[[工會]]化
====翻譯====
{{trans-top|意識形態}}
* 南非語:{{t|af|neoliberalisme|m}}
* 阿拉伯語:{{t|ar|نِيُولِيبِرَالِيَّة|f}}
* 保加利亞語:{{t|bg|неолиберализъм|m}}
* 加泰羅尼亞語:{{t|ca|neoliberalisme|m}}
* 捷克語:{{t|cs|neoliberalizmus|m}}
* 荷蘭語:{{t+|nl|neoliberalisme|n}}
* 英語:{{t+|en|neoliberalism}}
* 世界語:{{t|eo|novliberalismo}}
* 芬蘭語:{{t|fi|neoliberalismi}}、{{t+|fi|uusliberalismi}}
* 法語:{{t+|fr|néolibéralisme|m}}
* 格魯吉亞語:{{t|ka|ნეოლიბერალიზმი}}
* 德語:{{t+|de|Neoliberalismus|m}}
* 希臘語:{{t+|el|νεοφιλελευθερισμός|m}}
* 匈牙利語:{{t+|hu|neoliberalizmus}}、{{t|hu|újliberalizmus}}
* 冰島語:{{t|is|nýfrjálshyggja|f}}
* 因特語:{{t|ia|neoliberalismo}}
* 意大利語:{{t+|it|neoliberismo|m}}
* 哈薩克語:{{t|kk|[[жаңа]] [[либерализм]]}}
* 波蘭語:{{t+|pl|neoliberalizm|m}}
* 葡萄牙語:{{t|pt|neoliberalismo|m}}
* 西班牙語:{{t+|es|neoliberalismo|m}}
* 瑞典語:{{t+|sv|nyliberalism|n}}
* 越南語:{{t|vi|chủ nghĩa tự do mới}}、{{t|vi|chủ nghĩa tân tự do}}
{{trans-bottom}}
f219yxa09yu2bspnqyn9tq8wq8uuf4h
novliberalismo
0
3421309
9739161
2026-04-20T13:54:59Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==世界語== {{wikipedia|eo:}} ===詞源=== {{calque|eo|en|neoliberalism}},等價於 {{compound|eo|nova|liberalismo|gloss1=新的|gloss2=自由主義}}。 ===發音=== {{eo-pr|h=nov‧liberal‧ismo}} ===名詞=== {{eo-head|-}} # [[新自由主義]]」的新頁面
9739161
wikitext
text/x-wiki
==世界語==
{{wikipedia|eo:}}
===詞源===
{{calque|eo|en|neoliberalism}},等價於 {{compound|eo|nova|liberalismo|gloss1=新的|gloss2=自由主義}}。
===發音===
{{eo-pr|h=nov‧liberal‧ismo}}
===名詞===
{{eo-head|-}}
# [[新自由主義]]
qxveqwuj06hqw7dqkc6gufcid84pv5j
neoliberalismi
0
3421310
9739163
2026-04-20T13:55:27Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==意大利語== ===名詞=== {{head|it|名詞變格形|g=m}} # {{plural of|it|neoliberalismo}}」的新頁面
9739163
wikitext
text/x-wiki
==意大利語==
===名詞===
{{head|it|名詞變格形|g=m}}
# {{plural of|it|neoliberalismo}}
niki65osqs7h6husytg89q8innz94rf
uusliberalismi
0
3421311
9739164
2026-04-20T13:55:34Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==芬蘭語== ===詞源=== 源自 {{affix|fi|uus-<naf>|liberalismi}}。 ===發音=== {{fi-p|uus-liberalismi}} ===名詞=== {{head|fi|名詞}} # [[新自由主義]] ====變格==== {{fi-decl-risti|n=sg|uusliberalism|||a}} ===延伸閱讀=== * {{R:fi:KTSK|accessdate=2023-07-04}}」的新頁面
9739164
wikitext
text/x-wiki
==芬蘭語==
===詞源===
源自 {{affix|fi|uus-<naf>|liberalismi}}。
===發音===
{{fi-p|uus-liberalismi}}
===名詞===
{{head|fi|名詞}}
# [[新自由主義]]
====變格====
{{fi-decl-risti|n=sg|uusliberalism|||a}}
===延伸閱讀===
* {{R:fi:KTSK|accessdate=2023-07-04}}
2k6gqb7se1282geokqfutc1yryoa4ov
neoliberalismo
0
3421312
9739165
2026-04-20T13:55:49Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==意大利語== ===詞源=== 源自 {{af|it|neo-|liberalismo}}。 ===名詞=== {{it-noun|m}} # [[新自由主義]] ==葡萄牙語== ===詞源=== 源自 {{af|pt|neo-|liberalismo}}。 ===發音=== {{pt-IPA|[neo:néò:]}} * {{hyph|pt|ne|o|li|be|ra|lis|mo}} ===名詞=== {{pt-noun|m}} # {{lb|pt|政治}} [[新自由主義]] ===延伸閱讀=== * {{R:pt:Aulete}} * {{R:pt:Priberam}} ==西班牙語== ===詞源=== 源自 {{af|es|neo-|liberal…」的新頁面
9739165
wikitext
text/x-wiki
==意大利語==
===詞源===
源自 {{af|it|neo-|liberalismo}}。
===名詞===
{{it-noun|m}}
# [[新自由主義]]
==葡萄牙語==
===詞源===
源自 {{af|pt|neo-|liberalismo}}。
===發音===
{{pt-IPA|[neo:néò:]}}
* {{hyph|pt|ne|o|li|be|ra|lis|mo}}
===名詞===
{{pt-noun|m}}
# {{lb|pt|政治}} [[新自由主義]]
===延伸閱讀===
* {{R:pt:Aulete}}
* {{R:pt:Priberam}}
==西班牙語==
===詞源===
源自 {{af|es|neo-|liberalismo}}。
===發音===
{{es-pr}}
===名詞===
{{es-noun|m}}
# [[新自由主義]]
===延伸閱讀===
* {{R:es:DRAE}}
42um1avrlyl7e1h8yhn3rqrzvn9pl1q
Category:Rhymes:西班牙語/ismo/7音節
14
3421313
9739166
2026-04-20T13:55:58Z
TongcyBot
83009
養貓
9739166
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
neoliberalisme
0
3421314
9739168
2026-04-20T13:57:16Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==南非語== ===詞源=== {{bor+|af|nl|neoliberalisme}}。 ===名詞=== 源自 {{af-noun|neoliberalismes}} # [[新自由主義]] ====相關詞彙==== * {{l|af|liberalisme}} * {{l|af|neoliberaal}} ==加泰羅尼亞語== ===詞源=== 源自 {{af|ca|neo-|liberalisme}},或 {{af|ca|neoliberal|-isme}}。 ===發音=== * {{ca-IPA|[néo,ís]}}<!-- per GDLC --> * {{audio|ca|LL-Q7026 (cat)-Marvives-neoliberalisme.wav|a=Barcelona}} * {{rhymes|c…」的新頁面
9739168
wikitext
text/x-wiki
==南非語==
===詞源===
{{bor+|af|nl|neoliberalisme}}。
===名詞===
源自 {{af-noun|neoliberalismes}}
# [[新自由主義]]
====相關詞彙====
* {{l|af|liberalisme}}
* {{l|af|neoliberaal}}
==加泰羅尼亞語==
===詞源===
源自 {{af|ca|neo-|liberalisme}},或 {{af|ca|neoliberal|-isme}}。
===發音===
* {{ca-IPA|[néo,ís]}}<!-- per GDLC -->
* {{audio|ca|LL-Q7026 (cat)-Marvives-neoliberalisme.wav|a=Barcelona}}
* {{rhymes|ca|izme|s=7}}
===名詞===
{{ca-noun|m}}
# [[新自由主義]]
===延伸閱讀===
* {{R:ca:GDLC}}
* {{R:ca:DNV}}
{{C|ca|政治}}
==荷蘭語==
===詞源===
源自 {{af|nl|neo-|liberalisme}}。
===發音===
* {{IPA|nl|/ˌneː.oː.li.bə.raːˈlɪs.mə/}}
* {{audio|nl|Nl-neoliberalisme.ogg}}
* {{hyphenation|nl|neo|li|be|ra|lis|me}}
* {{rhyme|nl|ɪsmə}}
===名詞===
{{nl-noun|n|-en,-s|-}}
# [[新自由主義]]
====相關詞彙====
* {{l|nl|liberalisme}}
* {{l|nl|neoliberaal}}
{{C|nl|政治}}
fgvyfk6akkav6bqvwg3h773y088fipo
Category:Rhymes:加泰羅尼亞語/izme/7音節
14
3421315
9739169
2026-04-20T13:57:34Z
TongcyBot
83009
養貓
9739169
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:含有前綴neo-的加泰羅尼亞語詞
14
3421316
9739170
2026-04-20T13:57:39Z
TongcyBot
83009
養貓
9739170
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
neoliberalizm
0
3421317
9739171
2026-04-20T13:58:04Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==波蘭語== {{wikipedia|pl:}} ===詞源=== 源自 {{af|pl|neo-|liberalizm}}。 ===發音=== {{pl-pr|a=LL-Q809 (pol)-Poemat-neoliberalizm.wav}} ===名詞=== {{pl-noun|m-in}} # {{lb|pl|經濟學}} [[新自由主義]] # {{lb|pl|政治}} [[新自由主義]] ====變格==== {{pl-decl-noun-m-in|tantum=s}} ====相關詞彙==== {{col|pl|title=形容詞|neoliberalny}} {{col|pl|title=名詞|neoliberał}} ===延伸閱讀=== * {{R:pl:PWN}} {{cln…」的新頁面
9739171
wikitext
text/x-wiki
==波蘭語==
{{wikipedia|pl:}}
===詞源===
源自 {{af|pl|neo-|liberalizm}}。
===發音===
{{pl-pr|a=LL-Q809 (pol)-Poemat-neoliberalizm.wav}}
===名詞===
{{pl-noun|m-in}}
# {{lb|pl|經濟學}} [[新自由主義]]
# {{lb|pl|政治}} [[新自由主義]]
====變格====
{{pl-decl-noun-m-in|tantum=s}}
====相關詞彙====
{{col|pl|title=形容詞|neoliberalny}}
{{col|pl|title=名詞|neoliberał}}
===延伸閱讀===
* {{R:pl:PWN}}
{{cln|pl|含有後綴-izm的詞}}
==土耳其語==
===名詞===
{{head|tr|名詞}}
# [[新自由主義]]
==烏茲別克語==
===名詞===
{{head|uz|名詞}}
# [[新自由主義]]
elv9h55ox51smvuuixnxknhburr0riu
nyliberalism
0
3421318
9739172
2026-04-20T13:58:33Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==瑞典語== ===詞源=== 源自 {{af|sv|ny|liberal|-ism}}。 ===名詞=== {{sv-noun|c}} # [[新自由主義]] # [[自由意志主義]] ====變格==== {{sv-noun-unc-irreg-c|2=nyliberalismen}} ====相關詞彙==== * {{l|sv|liberalism}} * {{l|sv|nyliberal}} ====參見==== * {{l|sv|manchesterliberalism}} * {{l|sv|socialliberalism}} ===參考資料=== * {{R:svenska.se|saol}} * {{R:svenska.se|so}} {{C|sv|意識形態}}」的新頁面
9739172
wikitext
text/x-wiki
==瑞典語==
===詞源===
源自 {{af|sv|ny|liberal|-ism}}。
===名詞===
{{sv-noun|c}}
# [[新自由主義]]
# [[自由意志主義]]
====變格====
{{sv-noun-unc-irreg-c|2=nyliberalismen}}
====相關詞彙====
* {{l|sv|liberalism}}
* {{l|sv|nyliberal}}
====參見====
* {{l|sv|manchesterliberalism}}
* {{l|sv|socialliberalism}}
===參考資料===
* {{R:svenska.se|saol}}
* {{R:svenska.se|so}}
{{C|sv|意識形態}}
83irnrrd9u3ccmnu7o5ymoqe71t0bjn
nyliberalisms
0
3421319
9739173
2026-04-20T13:58:45Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==瑞典語== ===名詞=== {{head|sv|名詞變格形}} # {{noun form of|sv|nyliberalism||indef|gen|s}}」的新頁面
9739173
wikitext
text/x-wiki
==瑞典語==
===名詞===
{{head|sv|名詞變格形}}
# {{noun form of|sv|nyliberalism||indef|gen|s}}
kc98dhx0p83susw293nc2nrw267rt5y
nyliberalismens
0
3421320
9739174
2026-04-20T13:58:46Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==瑞典語== ===名詞=== {{head|sv|名詞變格形}} # {{noun form of|sv|nyliberalism||def|gen|s}}」的新頁面
9739174
wikitext
text/x-wiki
==瑞典語==
===名詞===
{{head|sv|名詞變格形}}
# {{noun form of|sv|nyliberalism||def|gen|s}}
najd0r7yp7x348fwbmoo68oxhbly2lw
neoliberismo
0
3421321
9739175
2026-04-20T13:59:06Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==意大利語== {{wikipedia|it:}} ===詞源=== 源自 {{prefix|it|neo|liberismo}}。 ===名詞=== {{it-noun|m}} # {{lb|it|經濟學}} [[新自由主義]]」的新頁面
9739175
wikitext
text/x-wiki
==意大利語==
{{wikipedia|it:}}
===詞源===
源自 {{prefix|it|neo|liberismo}}。
===名詞===
{{it-noun|m}}
# {{lb|it|經濟學}} [[新自由主義]]
j2koxju6d1aqi4ev00sr2r2j5vcffn2
неолиберализъм
0
3421322
9739176
2026-04-20T13:59:25Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==保加利亞語== {{wikipedia|bg:}} ===詞源=== {{rfe|bg}} ===發音=== {{bg-pr|неолиберали́зъм|a=[KK]}} ===名詞=== {{bg-noun|неолиберали́зъм|m}} # {{lb|bg|政治|經濟學}} [[新自由主義]] ====變格==== {{bg-ndecl|неолиберали́зъм<*>}} ===參考資料=== * {{R:bg:RBE}} * {{R:bg:RBE2}}」的新頁面
9739176
wikitext
text/x-wiki
==保加利亞語==
{{wikipedia|bg:}}
===詞源===
{{rfe|bg}}
===發音===
{{bg-pr|неолиберали́зъм|a=[KK]}}
===名詞===
{{bg-noun|неолиберали́зъм|m}}
# {{lb|bg|政治|經濟學}} [[新自由主義]]
====變格====
{{bg-ndecl|неолиберали́зъм<*>}}
===參考資料===
* {{R:bg:RBE}}
* {{R:bg:RBE2}}
h9gvx9ewkf6p8nh9r5ceezw2u73vx0e
Category:Rhymes:保加利亞語/izɐm/7音節
14
3421323
9739177
2026-04-20T13:59:33Z
TongcyBot
83009
養貓
9739177
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
ნეოლიბერალიზმი
0
3421324
9739178
2026-04-20T13:59:50Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==格魯吉亞語== ===發音=== * {{ka-IPA}} * {{ka-hyphen}} ===名詞=== {{ka-noun|-}} # {{lb|ka|政治}} [[新自由主義]] ====變格==== {{ka-decl-noun|-}}」的新頁面
9739178
wikitext
text/x-wiki
==格魯吉亞語==
===發音===
* {{ka-IPA}}
* {{ka-hyphen}}
===名詞===
{{ka-noun|-}}
# {{lb|ka|政治}} [[新自由主義]]
====變格====
{{ka-decl-noun|-}}
aixhbb04nmy1ltjwo8i2yl0smbmvtwu
gadgets
0
3421325
9739185
2026-04-20T16:01:16Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==英語== ===名詞=== {{head|en|名詞變格形}} # {{plural of|en|gadget}} ===異序詞=== * {{anagrams|en|a=adeggst|stagged}} ==荷蘭語== ===發音=== * {{IPA|nl|/ˈɡɛd.ʒəts/}} * {{audio|nl|Nl-gadgets.ogg}} * {{hyphenation|nl|gad|gets}} ===名詞=== {{head|nl|名詞變格形}} # {{plural of|nl|gadget}} ==法語== ===名詞=== {{head|fr|名詞變格形|g=m}} # {{plural of|fr|gadget}} ==西班牙語== ===名詞=== {{head|e…」的新頁面
9739185
wikitext
text/x-wiki
==英語==
===名詞===
{{head|en|名詞變格形}}
# {{plural of|en|gadget}}
===異序詞===
* {{anagrams|en|a=adeggst|stagged}}
==荷蘭語==
===發音===
* {{IPA|nl|/ˈɡɛd.ʒəts/}}
* {{audio|nl|Nl-gadgets.ogg}}
* {{hyphenation|nl|gad|gets}}
===名詞===
{{head|nl|名詞變格形}}
# {{plural of|nl|gadget}}
==法語==
===名詞===
{{head|fr|名詞變格形|g=m}}
# {{plural of|fr|gadget}}
==西班牙語==
===名詞===
{{head|es|名詞變格形}}
# {{plural of|es|gadget}}
i8o86e8vynqkdqqgput5n51mcrunpxi
稲見
0
3421326
9739191
2026-04-20T19:55:29Z
Fglffer
55252
新詞條
9739191
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|いな|み|yomi=k}}
===發音===
{{ja-pron|いなみ}}
===專有名詞===
{{ja-pos|proper|いなみ}}
# {{surname|ja}}
d2smtza2ziotyldwcphgc5zdj8fjba8
9739193
9739191
2026-04-21T01:23:28Z
Sayonzei
40728
/* 日語 */
9739193
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|いな|み|yomi=k}}
===發音===
{{ja-pron|いなみ|acc=1}}
===專有名詞===
{{ja-pos|proper|いなみ}}
# {{surname|ja}}
k7y0ikcm4jchmyyb07k68dfa0tbomhr
estapear
0
3421327
9739200
2026-04-21T04:37:19Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===詞源=== 源自 {{af|pt|es-|tapa|-ear}}。 ===發音=== {{pt-IPA|br=estape^^ar}} ===動詞=== {{pt-verb}} # {{lb|pt|巴西}} [[掌摑]] #: {{syn|pt|esbofetear}} ====變位==== {{pt-conj}} ===延伸閱讀=== * {{R:pt:Aulete}} * {{R:pt:Infopédia}} * {{R:pt:Michaelis}} * {{R:pt:Priberam}}」的新頁面
9739200
wikitext
text/x-wiki
==葡萄牙語==
===詞源===
源自 {{af|pt|es-|tapa|-ear}}。
===發音===
{{pt-IPA|br=estape^^ar}}
===動詞===
{{pt-verb}}
# {{lb|pt|巴西}} [[掌摑]]
#: {{syn|pt|esbofetear}}
====變位====
{{pt-conj}}
===延伸閱讀===
* {{R:pt:Aulete}}
* {{R:pt:Infopédia}}
* {{R:pt:Michaelis}}
* {{R:pt:Priberam}}
phy5k895fhrfgnnkdz4jy93df6u93ov
estapeámos
0
3421328
9739201
2026-04-21T04:37:44Z
Sayonzei
40728
創建葡萄牙語「[[estapear]]」的非詞元形式([[WT:ACCEL|ACCEL]])
9739201
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
esbravejar
0
3421329
9739202
2026-04-21T04:39:05Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===發音=== {{pt-IPA}} * {{hyph|pt|es|bra|ve|jar}} ===動詞=== {{pt-verb}} #(通過咆哮、怒吼等方式)[[表達]]出自己的[[怒氣]] #: {{syn|pt|vociferar}} # [[狂暴]],[[暴怒]] #: {{syn|pt|enfurecer|enervar}} ====變位==== {{pt-conj}} ====相關詞彙==== * {{l|pt|bravo}} ===延伸閱讀=== * {{R:pt:Aulete}} * {{R:pt:Priberam}}」的新頁面
9739202
wikitext
text/x-wiki
==葡萄牙語==
===發音===
{{pt-IPA}}
* {{hyph|pt|es|bra|ve|jar}}
===動詞===
{{pt-verb}}
#(通過咆哮、怒吼等方式)[[表達]]出自己的[[怒氣]]
#: {{syn|pt|vociferar}}
# [[狂暴]],[[暴怒]]
#: {{syn|pt|enfurecer|enervar}}
====變位====
{{pt-conj}}
====相關詞彙====
* {{l|pt|bravo}}
===延伸閱讀===
* {{R:pt:Aulete}}
* {{R:pt:Priberam}}
tb34ktvqgm58kl4nour2v8hdm6k09xz
esbravejado
0
3421330
9739203
2026-04-21T04:39:09Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===分詞=== {{pt-pp}} # {{past participle of|pt|esbravejar}}」的新頁面
9739203
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{pt-pp}}
# {{past participle of|pt|esbravejar}}
anu2f9pv8btudi6pk7b3gne1jhat5p6
esbravejada
0
3421331
9739204
2026-04-21T04:39:25Z
Sayonzei
40728
創建葡萄牙語「[[esbravejado]]」的非詞元形式([[WT:ACCEL|ACCEL]])
9739204
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形}}
# {{feminine singular of|pt|esbravejado}}
i8333tre0fy3qzlo9wh10cb74coh20h
esbravejados
0
3421332
9739205
2026-04-21T04:39:27Z
Sayonzei
40728
創建葡萄牙語「[[esbravejado]]」的非詞元形式([[WT:ACCEL|ACCEL]])
9739205
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形}}
# {{masculine plural of|pt|esbravejado}}
iuifi8u1iv9mv0h9upcybh27iiiznwd
esbravejadas
0
3421333
9739206
2026-04-21T04:39:29Z
Sayonzei
40728
創建葡萄牙語「[[esbravejado]]」的非詞元形式([[WT:ACCEL|ACCEL]])
9739206
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形}}
# {{feminine plural of|pt|esbravejado}}
kmc1rxgtnlvawjukbgwpc7ljx4ydqpg
esbardalhar
0
3421334
9739207
2026-04-21T04:41:13Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===詞源=== {{unknown|pt|notext=1}} 可能{{bor+|pt|gl|esbardallar}}。<ref>{{R:pt:Infopédia}}</ref> ===發音=== {{pt-IPA}} * {{hyphenation|pt|es|bar|da|lhar}} ===動詞=== {{pt-verb}} # {{lb|pt|葡萄牙|口語}} [[摔倒]] #: {{syn|pt|cair|malhar|q2=葡萄牙,口語}} #: {{uxi|pt|Ia-me '''esbardalhando''' à custa do piso molhado.|由于地板湿滑,我差点'''摔倒'''。}} ====變位==== {{pt-conj}} ===參…」的新頁面
9739207
wikitext
text/x-wiki
==葡萄牙語==
===詞源===
{{unknown|pt|notext=1}}
可能{{bor+|pt|gl|esbardallar}}。<ref>{{R:pt:Infopédia}}</ref>
===發音===
{{pt-IPA}}
* {{hyphenation|pt|es|bar|da|lhar}}
===動詞===
{{pt-verb}}
# {{lb|pt|葡萄牙|口語}} [[摔倒]]
#: {{syn|pt|cair|malhar|q2=葡萄牙,口語}}
#: {{uxi|pt|Ia-me '''esbardalhando''' à custa do piso molhado.|由于地板湿滑,我差点'''摔倒'''。}}
====變位====
{{pt-conj}}
===參考資料===
<references/>
===延伸閱讀===
* {{R:pt:Priberam}}
8odaqfvw3whzstymwga0kv2mlicnlcv
esgalhar
0
3421335
9739210
2026-04-21T04:56:57Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===詞源=== 源自 {{af|pt|es-|galho<t:枝条,树枝>|-ar}} ===發音=== {{pt-IPA}} ===動詞=== {{pt-verb}} # {{lb|pt|及物}} [[修剪]][[枝条]] #: {{syn|pt|desgalhar}} # {{lb|pt|不及物|反身}} [[長出]]枝條 # {{lb|pt|不及物|反身|比喻}} [[分岔]];產生[[分支]] ====變位==== {{pt-conj}} ====派生詞彙==== {{col|pt|esgalhar o pessegueiro}} ===延伸閱讀=== * {{R:pt:Priberam}} * {{R:pt:Aul…」的新頁面
9739210
wikitext
text/x-wiki
==葡萄牙語==
===詞源===
源自 {{af|pt|es-|galho<t:枝条,树枝>|-ar}}
===發音===
{{pt-IPA}}
===動詞===
{{pt-verb}}
# {{lb|pt|及物}} [[修剪]][[枝条]]
#: {{syn|pt|desgalhar}}
# {{lb|pt|不及物|反身}} [[長出]]枝條
# {{lb|pt|不及物|反身|比喻}} [[分岔]];產生[[分支]]
====變位====
{{pt-conj}}
====派生詞彙====
{{col|pt|esgalhar o pessegueiro}}
===延伸閱讀===
* {{R:pt:Priberam}}
* {{R:pt:Aulete}}
* {{R:pt:Infopédia}}
* {{R:pt:Michaelis}}
3tsxfqbinemisekb98ijht233e8h679
9739211
9739210
2026-04-21T04:57:32Z
Sayonzei
40728
/* 葡萄牙語 */
9739211
wikitext
text/x-wiki
==葡萄牙語==
===詞源===
源自 {{af|pt|es-|galho<t:枝条,树枝>|-ar}}。
===發音===
{{pt-IPA}}
===動詞===
{{pt-verb}}
# {{lb|pt|及物}} [[修剪]][[枝条]]
#: {{syn|pt|desgalhar}}
# {{lb|pt|不及物|反身}} [[長出]]枝條
# {{lb|pt|不及物|反身|比喻}} [[分岔]];產生[[分支]]
====變位====
{{pt-conj}}
====派生詞彙====
{{col|pt|esgalhar o pessegueiro}}
===延伸閱讀===
* {{R:pt:Priberam}}
* {{R:pt:Aulete}}
* {{R:pt:Infopédia}}
* {{R:pt:Michaelis}}
9bed1waykjg20lvsvrinogl87iyvzpc
desgalhar
0
3421336
9739212
2026-04-21T04:58:04Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===詞源=== 源自 {{af|pt|des-|galho<t:枝条,树枝>|-ar}}。 ===發音=== {{pt-IPA|des^galhar}} ===動詞=== {{pt-verb}} # [[修剪]][[枝条]] ====變位==== {{pt-conj}} ===延伸閱讀=== * {{R:pt:Aulete}} * {{R:pt:Priberam}}」的新頁面
9739212
wikitext
text/x-wiki
==葡萄牙語==
===詞源===
源自 {{af|pt|des-|galho<t:枝条,树枝>|-ar}}。
===發音===
{{pt-IPA|des^galhar}}
===動詞===
{{pt-verb}}
# [[修剪]][[枝条]]
====變位====
{{pt-conj}}
===延伸閱讀===
* {{R:pt:Aulete}}
* {{R:pt:Priberam}}
7hhw1z9cikpqjf71zvs6mlbqkkdacm5
espaçar
0
3421337
9739214
2026-04-21T05:03:29Z
Sayonzei
40728
[[w:WP:AES|←]]建立內容為「==葡萄牙語== ===其他形式=== * {{alt|pt|espacear}} ===詞源=== 源自 {{suffix|pt|espaço|ar|gloss1=空間}},源自{{uder|pt|la|spatium||空間}},源自{{uder|pt|ine-pro|*speh₁-||伸展,拉动}}。 ===發音=== {{pt-IPA}} * {{hyph|pt|es|pa|çar}} ===動詞=== {{pt-verb}} # [[間隔]]開,(空間、時間上)彼此間有間隔 #: {{syn|pt|intervalar|distanciar|espacejar}} #: {{ant|pt|juntar|aproximar}} # [[拓寬]],…」的新頁面
9739214
wikitext
text/x-wiki
==葡萄牙語==
===其他形式===
* {{alt|pt|espacear}}
===詞源===
源自 {{suffix|pt|espaço|ar|gloss1=空間}},源自{{uder|pt|la|spatium||空間}},源自{{uder|pt|ine-pro|*speh₁-||伸展,拉动}}。
===發音===
{{pt-IPA}}
* {{hyph|pt|es|pa|çar}}
===動詞===
{{pt-verb}}
# [[間隔]]開,(空間、時間上)彼此間有間隔
#: {{syn|pt|intervalar|distanciar|espacejar}}
#: {{ant|pt|juntar|aproximar}}
# [[拓寬]],變寬;[[延伸]]
====變位====
{{pt-conj}}
====相關詞彙====
{{col|pt
|espaçado
|espaçamento
|espacejar
|espacial
|espaço
|espaçonave
|espaçoso
}}
===延伸閱讀===
* {{R:pt:Aulete}}
* {{R:pt:Priberam}}
ndptbzydctrfffxv300zfu4u3zoyq29
desgalha
0
3421338
9739217
2026-04-21T05:08:31Z
TongcyBot
83009
半自動導入非詞元形式
9739217
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhado
0
3421339
9739218
2026-04-21T05:08:32Z
TongcyBot
83009
半自動導入非詞元形式
9739218
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{pt-pp}}
# {{past participle of|pt|desgalhar}}
r7n5zqxwruiot3p7nn603meyh8j8p55
desgalhai
0
3421340
9739219
2026-04-21T05:08:33Z
TongcyBot
83009
半自動導入非詞元形式
9739219
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhais
0
3421341
9739220
2026-04-21T05:08:34Z
TongcyBot
83009
半自動導入非詞元形式
9739220
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalham
0
3421342
9739221
2026-04-21T05:08:35Z
TongcyBot
83009
半自動導入非詞元形式
9739221
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhamos
0
3421343
9739222
2026-04-21T05:08:36Z
TongcyBot
83009
半自動導入非詞元形式
9739222
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhando
0
3421344
9739223
2026-04-21T05:08:37Z
TongcyBot
83009
半自動導入非詞元形式
9739223
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動名詞}}
# {{pt-verb form of|desgalhar}}
klxpa4xiw05o4c62jufq43jc58ijz3s
desgalhara
0
3421345
9739224
2026-04-21T05:08:38Z
TongcyBot
83009
半自動導入非詞元形式
9739224
wikitext
text/x-wiki
{{also|desgalhará}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
t7w8fptd9orn9nandot1wb0qte2xbv7
desgalharam
0
3421346
9739225
2026-04-21T05:08:39Z
TongcyBot
83009
半自動導入非詞元形式
9739225
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalharas
0
3421347
9739226
2026-04-21T05:08:40Z
TongcyBot
83009
半自動導入非詞元形式
9739226
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhardes
0
3421348
9739227
2026-04-21T05:08:41Z
TongcyBot
83009
半自動導入非詞元形式
9739227
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalharei
0
3421349
9739228
2026-04-21T05:08:42Z
TongcyBot
83009
半自動導入非詞元形式
9739228
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhareis
0
3421350
9739229
2026-04-21T05:08:43Z
TongcyBot
83009
半自動導入非詞元形式
9739229
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalharem
0
3421351
9739230
2026-04-21T05:08:44Z
TongcyBot
83009
半自動導入非詞元形式
9739230
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalharemos
0
3421352
9739231
2026-04-21T05:08:45Z
TongcyBot
83009
半自動導入非詞元形式
9739231
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhares
0
3421353
9739232
2026-04-21T05:08:46Z
TongcyBot
83009
半自動導入非詞元形式
9739232
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalharia
0
3421354
9739233
2026-04-21T05:08:47Z
TongcyBot
83009
半自動導入非詞元形式
9739233
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhariam
0
3421355
9739234
2026-04-21T05:08:49Z
TongcyBot
83009
半自動導入非詞元形式
9739234
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalharias
0
3421356
9739235
2026-04-21T05:08:50Z
TongcyBot
83009
半自動導入非詞元形式
9739235
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalharmos
0
3421357
9739236
2026-04-21T05:08:51Z
TongcyBot
83009
半自動導入非詞元形式
9739236
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhará
0
3421358
9739237
2026-04-21T05:08:52Z
TongcyBot
83009
半自動導入非詞元形式
9739237
wikitext
text/x-wiki
{{also|desgalhara}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
lripk042p61rw7mwxncq57q4s8rd5zt
desgalharás
0
3421359
9739238
2026-04-21T05:08:53Z
TongcyBot
83009
半自動導入非詞元形式
9739238
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalharão
0
3421360
9739239
2026-04-21T05:08:54Z
TongcyBot
83009
半自動導入非詞元形式
9739239
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalharíamos
0
3421361
9739240
2026-04-21T05:08:55Z
TongcyBot
83009
半自動導入非詞元形式
9739240
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalharíeis
0
3421362
9739241
2026-04-21T05:08:56Z
TongcyBot
83009
半自動導入非詞元形式
9739241
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhas
0
3421363
9739242
2026-04-21T05:08:57Z
TongcyBot
83009
半自動導入非詞元形式
9739242
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhasse
0
3421364
9739243
2026-04-21T05:08:58Z
TongcyBot
83009
半自動導入非詞元形式
9739243
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhassem
0
3421365
9739244
2026-04-21T05:08:59Z
TongcyBot
83009
半自動導入非詞元形式
9739244
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhasses
0
3421366
9739245
2026-04-21T05:09:00Z
TongcyBot
83009
半自動導入非詞元形式
9739245
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhaste
0
3421367
9739246
2026-04-21T05:09:01Z
TongcyBot
83009
半自動導入非詞元形式
9739246
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhastes
0
3421368
9739247
2026-04-21T05:09:02Z
TongcyBot
83009
半自動導入非詞元形式
9739247
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhava
0
3421369
9739248
2026-04-21T05:09:03Z
TongcyBot
83009
半自動導入非詞元形式
9739248
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhavam
0
3421370
9739249
2026-04-21T05:09:04Z
TongcyBot
83009
半自動導入非詞元形式
9739249
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhavas
0
3421371
9739250
2026-04-21T05:09:05Z
TongcyBot
83009
半自動導入非詞元形式
9739250
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhe
0
3421372
9739251
2026-04-21T05:09:06Z
TongcyBot
83009
半自動導入非詞元形式
9739251
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhei
0
3421373
9739252
2026-04-21T05:09:07Z
TongcyBot
83009
半自動導入非詞元形式
9739252
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalheis
0
3421374
9739253
2026-04-21T05:09:08Z
TongcyBot
83009
半自動導入非詞元形式
9739253
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhem
0
3421375
9739254
2026-04-21T05:09:09Z
TongcyBot
83009
半自動導入非詞元形式
9739254
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhemos
0
3421376
9739255
2026-04-21T05:09:10Z
TongcyBot
83009
半自動導入非詞元形式
9739255
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhes
0
3421377
9739256
2026-04-21T05:09:11Z
TongcyBot
83009
半自動導入非詞元形式
9739256
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalho
0
3421378
9739257
2026-04-21T05:09:13Z
TongcyBot
83009
半自動導入非詞元形式
9739257
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhou
0
3421379
9739258
2026-04-21T05:09:14Z
TongcyBot
83009
半自動導入非詞元形式
9739258
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhámos
0
3421380
9739259
2026-04-21T05:09:15Z
TongcyBot
83009
半自動導入非詞元形式
9739259
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalháramos
0
3421381
9739260
2026-04-21T05:09:16Z
TongcyBot
83009
半自動導入非詞元形式
9739260
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalháreis
0
3421382
9739261
2026-04-21T05:09:17Z
TongcyBot
83009
半自動導入非詞元形式
9739261
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhásseis
0
3421383
9739262
2026-04-21T05:09:18Z
TongcyBot
83009
半自動導入非詞元形式
9739262
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhássemos
0
3421384
9739263
2026-04-21T05:09:19Z
TongcyBot
83009
半自動導入非詞元形式
9739263
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalhávamos
0
3421385
9739264
2026-04-21T05:09:20Z
TongcyBot
83009
半自動導入非詞元形式
9739264
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
desgalháveis
0
3421386
9739265
2026-04-21T05:09:21Z
TongcyBot
83009
半自動導入非詞元形式
9739265
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|desgalhar}}
ec6y9n3f9h2r55ljsg99bbqbv6ejknf
esbardalha
0
3421387
9739266
2026-04-21T05:09:22Z
TongcyBot
83009
半自動導入非詞元形式
9739266
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhado
0
3421388
9739267
2026-04-21T05:09:23Z
TongcyBot
83009
半自動導入非詞元形式
9739267
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{pt-pp}}
# {{past participle of|pt|esbardalhar}}
3k3ibe0jls5shxroshl3edxkbz58yne
esbardalhai
0
3421389
9739268
2026-04-21T05:09:24Z
TongcyBot
83009
半自動導入非詞元形式
9739268
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhais
0
3421390
9739269
2026-04-21T05:09:25Z
TongcyBot
83009
半自動導入非詞元形式
9739269
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalham
0
3421391
9739270
2026-04-21T05:09:26Z
TongcyBot
83009
半自動導入非詞元形式
9739270
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhamos
0
3421392
9739271
2026-04-21T05:09:27Z
TongcyBot
83009
半自動導入非詞元形式
9739271
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhando
0
3421393
9739272
2026-04-21T05:09:28Z
TongcyBot
83009
半自動導入非詞元形式
9739272
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動名詞}}
# {{pt-verb form of|esbardalhar}}
3nd5xv7mj7lmc67ztcf03m96uz71m9f
esbardalhara
0
3421394
9739273
2026-04-21T05:09:29Z
TongcyBot
83009
半自動導入非詞元形式
9739273
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalharam
0
3421395
9739274
2026-04-21T05:09:30Z
TongcyBot
83009
半自動導入非詞元形式
9739274
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalharas
0
3421396
9739275
2026-04-21T05:09:31Z
TongcyBot
83009
半自動導入非詞元形式
9739275
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhardes
0
3421397
9739276
2026-04-21T05:09:32Z
TongcyBot
83009
半自動導入非詞元形式
9739276
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalharei
0
3421398
9739277
2026-04-21T05:09:33Z
TongcyBot
83009
半自動導入非詞元形式
9739277
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhareis
0
3421399
9739278
2026-04-21T05:09:34Z
TongcyBot
83009
半自動導入非詞元形式
9739278
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalharem
0
3421400
9739279
2026-04-21T05:09:35Z
TongcyBot
83009
半自動導入非詞元形式
9739279
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalharemos
0
3421401
9739280
2026-04-21T05:09:36Z
TongcyBot
83009
半自動導入非詞元形式
9739280
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhares
0
3421402
9739281
2026-04-21T05:09:37Z
TongcyBot
83009
半自動導入非詞元形式
9739281
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalharia
0
3421403
9739282
2026-04-21T05:09:38Z
TongcyBot
83009
半自動導入非詞元形式
9739282
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhariam
0
3421404
9739283
2026-04-21T05:09:39Z
TongcyBot
83009
半自動導入非詞元形式
9739283
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalharias
0
3421405
9739284
2026-04-21T05:09:41Z
TongcyBot
83009
半自動導入非詞元形式
9739284
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalharmos
0
3421406
9739285
2026-04-21T05:09:42Z
TongcyBot
83009
半自動導入非詞元形式
9739285
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalharás
0
3421407
9739286
2026-04-21T05:09:44Z
TongcyBot
83009
半自動導入非詞元形式
9739286
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhará
0
3421408
9739287
2026-04-21T05:09:43Z
TongcyBot
83009
半自動導入非詞元形式
9739287
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalharão
0
3421409
9739288
2026-04-21T05:09:46Z
TongcyBot
83009
半自動導入非詞元形式
9739288
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalharíamos
0
3421410
9739289
2026-04-21T05:09:47Z
TongcyBot
83009
半自動導入非詞元形式
9739289
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalharíeis
0
3421411
9739290
2026-04-21T05:09:48Z
TongcyBot
83009
半自動導入非詞元形式
9739290
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhas
0
3421412
9739291
2026-04-21T05:09:49Z
TongcyBot
83009
半自動導入非詞元形式
9739291
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhasse
0
3421413
9739292
2026-04-21T05:09:50Z
TongcyBot
83009
半自動導入非詞元形式
9739292
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhassem
0
3421414
9739293
2026-04-21T05:09:51Z
TongcyBot
83009
半自動導入非詞元形式
9739293
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhasses
0
3421415
9739294
2026-04-21T05:09:52Z
TongcyBot
83009
半自動導入非詞元形式
9739294
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhaste
0
3421416
9739295
2026-04-21T05:09:53Z
TongcyBot
83009
半自動導入非詞元形式
9739295
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhastes
0
3421417
9739296
2026-04-21T05:09:54Z
TongcyBot
83009
半自動導入非詞元形式
9739296
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhava
0
3421418
9739297
2026-04-21T05:09:55Z
TongcyBot
83009
半自動導入非詞元形式
9739297
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhavam
0
3421419
9739298
2026-04-21T05:09:56Z
TongcyBot
83009
半自動導入非詞元形式
9739298
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhavas
0
3421420
9739299
2026-04-21T05:09:57Z
TongcyBot
83009
半自動導入非詞元形式
9739299
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhe
0
3421421
9739300
2026-04-21T05:09:58Z
TongcyBot
83009
半自動導入非詞元形式
9739300
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhei
0
3421422
9739301
2026-04-21T05:09:59Z
TongcyBot
83009
半自動導入非詞元形式
9739301
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalheis
0
3421423
9739302
2026-04-21T05:10:00Z
TongcyBot
83009
半自動導入非詞元形式
9739302
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhem
0
3421424
9739303
2026-04-21T05:10:01Z
TongcyBot
83009
半自動導入非詞元形式
9739303
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhemos
0
3421425
9739304
2026-04-21T05:10:03Z
TongcyBot
83009
半自動導入非詞元形式
9739304
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhes
0
3421426
9739305
2026-04-21T05:10:04Z
TongcyBot
83009
半自動導入非詞元形式
9739305
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalho
0
3421427
9739306
2026-04-21T05:10:05Z
TongcyBot
83009
半自動導入非詞元形式
9739306
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhou
0
3421428
9739307
2026-04-21T05:10:06Z
TongcyBot
83009
半自動導入非詞元形式
9739307
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhámos
0
3421429
9739308
2026-04-21T05:10:07Z
TongcyBot
83009
半自動導入非詞元形式
9739308
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalháramos
0
3421430
9739309
2026-04-21T05:10:08Z
TongcyBot
83009
半自動導入非詞元形式
9739309
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalháreis
0
3421431
9739310
2026-04-21T05:10:09Z
TongcyBot
83009
半自動導入非詞元形式
9739310
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhásseis
0
3421432
9739311
2026-04-21T05:10:10Z
TongcyBot
83009
半自動導入非詞元形式
9739311
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhássemos
0
3421433
9739312
2026-04-21T05:10:11Z
TongcyBot
83009
半自動導入非詞元形式
9739312
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalhávamos
0
3421434
9739313
2026-04-21T05:10:12Z
TongcyBot
83009
半自動導入非詞元形式
9739313
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbardalháveis
0
3421435
9739314
2026-04-21T05:10:13Z
TongcyBot
83009
半自動導入非詞元形式
9739314
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbardalhar}}
4ewmfryqzzbmimmomhmtjq0bjcm9igh
esbofeteada
0
3421436
9739315
2026-04-21T05:10:14Z
TongcyBot
83009
半自動導入非詞元形式
9739315
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=f-s}}
# {{feminine singular of|pt|esbofeteado}}
58p34fnihob0mpmf2wq27hh9x4w9ea5
esbofeteadas
0
3421437
9739316
2026-04-21T05:10:15Z
TongcyBot
83009
半自動導入非詞元形式
9739316
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=f-p}}
# {{feminine plural of|pt|esbofeteado}}
tv0uockkfkcxurjh0v5rjnvhlvl91fu
esbofeteado
0
3421438
9739317
2026-04-21T05:10:16Z
TongcyBot
83009
半自動導入非詞元形式
9739317
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{pt-pp}}
# {{past participle of|pt|esbofetear}}
ghxsu1rlmkbdgpzzu7rpn5i4iwctyh6
esbofeteados
0
3421439
9739318
2026-04-21T05:10:17Z
TongcyBot
83009
半自動導入非詞元形式
9739318
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=m-p}}
# {{masculine plural of|pt|esbofeteado}}
cu2kvhwbrph3vti7pvdvxqzm4mgdeaf
esbofeteai
0
3421440
9739319
2026-04-21T05:10:18Z
TongcyBot
83009
半自動導入非詞元形式
9739319
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteais
0
3421441
9739320
2026-04-21T05:10:19Z
TongcyBot
83009
半自動導入非詞元形式
9739320
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteamos
0
3421442
9739321
2026-04-21T05:10:20Z
TongcyBot
83009
半自動導入非詞元形式
9739321
wikitext
text/x-wiki
{{also|esbofeteámos}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
097jyhq3qb73wuggmzocxnmj6xftmfd
esbofeteando
0
3421443
9739322
2026-04-21T05:10:21Z
TongcyBot
83009
半自動導入非詞元形式
9739322
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動名詞}}
# {{gerund of|pt|esbofetear}}
ikdfin0uriih7mhwhva5idvkvjxvekk
esbofeteara
0
3421444
9739323
2026-04-21T05:10:22Z
TongcyBot
83009
半自動導入非詞元形式
9739323
wikitext
text/x-wiki
{{also|esbofeteará}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
hs49lskqezhyv5mtena994loy17u0jo
esbofetearam
0
3421445
9739324
2026-04-21T05:10:23Z
TongcyBot
83009
半自動導入非詞元形式
9739324
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofetearas
0
3421446
9739325
2026-04-21T05:10:24Z
TongcyBot
83009
半自動導入非詞元形式
9739325
wikitext
text/x-wiki
{{also|esbofetearás}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
gijtjpg03m0rnlqc5x6ck9fz45kmx4t
esbofeteardes
0
3421447
9739326
2026-04-21T05:10:25Z
TongcyBot
83009
半自動導入非詞元形式
9739326
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofetearei
0
3421448
9739327
2026-04-21T05:10:26Z
TongcyBot
83009
半自動導入非詞元形式
9739327
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteareis
0
3421449
9739328
2026-04-21T05:10:28Z
TongcyBot
83009
半自動導入非詞元形式
9739328
wikitext
text/x-wiki
{{also|esbofeteáreis}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
dtc061zbhulnauhweuk7zt1o07qyq7o
esbofetearem
0
3421450
9739329
2026-04-21T05:10:29Z
TongcyBot
83009
半自動導入非詞元形式
9739329
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofetearemos
0
3421451
9739330
2026-04-21T05:10:30Z
TongcyBot
83009
半自動導入非詞元形式
9739330
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteares
0
3421452
9739331
2026-04-21T05:10:31Z
TongcyBot
83009
半自動導入非詞元形式
9739331
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofetearia
0
3421453
9739332
2026-04-21T05:10:32Z
TongcyBot
83009
半自動導入非詞元形式
9739332
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteariam
0
3421454
9739333
2026-04-21T05:10:33Z
TongcyBot
83009
半自動導入非詞元形式
9739333
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofetearias
0
3421455
9739334
2026-04-21T05:10:34Z
TongcyBot
83009
半自動導入非詞元形式
9739334
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofetearmos
0
3421456
9739335
2026-04-21T05:10:35Z
TongcyBot
83009
半自動導入非詞元形式
9739335
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteará
0
3421457
9739336
2026-04-21T05:10:36Z
TongcyBot
83009
半自動導入非詞元形式
9739336
wikitext
text/x-wiki
{{also|esbofeteara}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
j6qi5f4wjiobkrzktiwvul65gzh8p8v
esbofetearás
0
3421458
9739337
2026-04-21T05:10:37Z
TongcyBot
83009
半自動導入非詞元形式
9739337
wikitext
text/x-wiki
{{also|esbofetearas}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
bch1xhm4a3md1vsipx5bg86nj6be5m6
esbofetearão
0
3421459
9739338
2026-04-21T05:10:38Z
TongcyBot
83009
半自動導入非詞元形式
9739338
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofetearíamos
0
3421460
9739339
2026-04-21T05:10:39Z
TongcyBot
83009
半自動導入非詞元形式
9739339
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofetearíeis
0
3421461
9739340
2026-04-21T05:10:40Z
TongcyBot
83009
半自動導入非詞元形式
9739340
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteasse
0
3421462
9739341
2026-04-21T05:10:42Z
TongcyBot
83009
半自動導入非詞元形式
9739341
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteassem
0
3421463
9739342
2026-04-21T05:10:43Z
TongcyBot
83009
半自動導入非詞元形式
9739342
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteasses
0
3421464
9739343
2026-04-21T05:10:43Z
TongcyBot
83009
半自動導入非詞元形式
9739343
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteaste
0
3421465
9739344
2026-04-21T05:10:45Z
TongcyBot
83009
半自動導入非詞元形式
9739344
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteastes
0
3421466
9739345
2026-04-21T05:10:46Z
TongcyBot
83009
半自動導入非詞元形式
9739345
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteava
0
3421467
9739346
2026-04-21T05:10:47Z
TongcyBot
83009
半自動導入非詞元形式
9739346
wikitext
text/x-wiki
==葡萄牙語==
===發音===
* {{rhymes|pt|avɐ}}
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
4f5x0idzfe7dhe70uyfgse3gk0vkja7
esbofeteavam
0
3421468
9739347
2026-04-21T05:10:48Z
TongcyBot
83009
半自動導入非詞元形式
9739347
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteavas
0
3421469
9739348
2026-04-21T05:10:49Z
TongcyBot
83009
半自動導入非詞元形式
9739348
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteei
0
3421470
9739349
2026-04-21T05:10:50Z
TongcyBot
83009
半自動導入非詞元形式
9739349
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteeis
0
3421471
9739350
2026-04-21T05:10:51Z
TongcyBot
83009
半自動導入非詞元形式
9739350
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteemos
0
3421472
9739351
2026-04-21T05:10:52Z
TongcyBot
83009
半自動導入非詞元形式
9739351
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteia
0
3421473
9739352
2026-04-21T05:10:53Z
TongcyBot
83009
半自動導入非詞元形式
9739352
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteiam
0
3421474
9739353
2026-04-21T05:10:54Z
TongcyBot
83009
半自動導入非詞元形式
9739353
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteias
0
3421475
9739354
2026-04-21T05:10:55Z
TongcyBot
83009
半自動導入非詞元形式
9739354
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteie
0
3421476
9739355
2026-04-21T05:10:56Z
TongcyBot
83009
半自動導入非詞元形式
9739355
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteiem
0
3421477
9739356
2026-04-21T05:10:57Z
TongcyBot
83009
半自動導入非詞元形式
9739356
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteies
0
3421478
9739357
2026-04-21T05:10:58Z
TongcyBot
83009
半自動導入非詞元形式
9739357
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteio
0
3421479
9739358
2026-04-21T05:10:59Z
TongcyBot
83009
半自動導入非詞元形式
9739358
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteou
0
3421480
9739359
2026-04-21T05:11:00Z
TongcyBot
83009
半自動導入非詞元形式
9739359
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteámos
0
3421481
9739360
2026-04-21T05:11:01Z
TongcyBot
83009
半自動導入非詞元形式
9739360
wikitext
text/x-wiki
{{also|esbofeteamos}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
hhim3o7m5i7itcu1xyjo0p6e67r3sln
esbofeteáramos
0
3421482
9739361
2026-04-21T05:11:02Z
TongcyBot
83009
半自動導入非詞元形式
9739361
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteáreis
0
3421483
9739362
2026-04-21T05:11:03Z
TongcyBot
83009
半自動導入非詞元形式
9739362
wikitext
text/x-wiki
{{also|esbofeteareis}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
qqngybbim8x3d6ms9bf6dacdptsh9ye
esbofeteásseis
0
3421484
9739363
2026-04-21T05:11:04Z
TongcyBot
83009
半自動導入非詞元形式
9739363
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteássemos
0
3421485
9739364
2026-04-21T05:11:05Z
TongcyBot
83009
半自動導入非詞元形式
9739364
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteávamos
0
3421486
9739365
2026-04-21T05:11:07Z
TongcyBot
83009
半自動導入非詞元形式
9739365
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbofeteáveis
0
3421487
9739366
2026-04-21T05:11:08Z
TongcyBot
83009
半自動導入非詞元形式
9739366
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbofetear}}
7fpmmrcyeuyyd1owx9jjaecwtijju8q
esbraveja
0
3421488
9739367
2026-04-21T05:11:09Z
TongcyBot
83009
半自動導入非詞元形式
9739367
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejai
0
3421489
9739368
2026-04-21T05:11:10Z
TongcyBot
83009
半自動導入非詞元形式
9739368
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejais
0
3421490
9739369
2026-04-21T05:11:11Z
TongcyBot
83009
半自動導入非詞元形式
9739369
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejam
0
3421491
9739370
2026-04-21T05:11:12Z
TongcyBot
83009
半自動導入非詞元形式
9739370
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejamos
0
3421492
9739371
2026-04-21T05:11:13Z
TongcyBot
83009
半自動導入非詞元形式
9739371
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejando
0
3421493
9739372
2026-04-21T05:11:14Z
TongcyBot
83009
半自動導入非詞元形式
9739372
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動名詞}}
# {{pt-verb form of|esbravejar}}
4wtitlp3463krqueau8qq5jkrm1bha0
esbravejara
0
3421494
9739373
2026-04-21T05:11:15Z
TongcyBot
83009
半自動導入非詞元形式
9739373
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejaram
0
3421495
9739374
2026-04-21T05:11:16Z
TongcyBot
83009
半自動導入非詞元形式
9739374
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejaras
0
3421496
9739375
2026-04-21T05:11:17Z
TongcyBot
83009
半自動導入非詞元形式
9739375
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejardes
0
3421497
9739376
2026-04-21T05:11:18Z
TongcyBot
83009
半自動導入非詞元形式
9739376
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejarei
0
3421498
9739377
2026-04-21T05:11:19Z
TongcyBot
83009
半自動導入非詞元形式
9739377
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejareis
0
3421499
9739378
2026-04-21T05:11:20Z
TongcyBot
83009
半自動導入非詞元形式
9739378
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejarem
0
3421500
9739379
2026-04-21T05:11:21Z
TongcyBot
83009
半自動導入非詞元形式
9739379
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejaremos
0
3421501
9739380
2026-04-21T05:11:22Z
TongcyBot
83009
半自動導入非詞元形式
9739380
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejares
0
3421502
9739381
2026-04-21T05:11:23Z
TongcyBot
83009
半自動導入非詞元形式
9739381
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejaria
0
3421503
9739382
2026-04-21T05:11:24Z
TongcyBot
83009
半自動導入非詞元形式
9739382
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejariam
0
3421504
9739383
2026-04-21T05:11:25Z
TongcyBot
83009
半自動導入非詞元形式
9739383
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejarias
0
3421505
9739384
2026-04-21T05:11:26Z
TongcyBot
83009
半自動導入非詞元形式
9739384
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejarmos
0
3421506
9739385
2026-04-21T05:11:27Z
TongcyBot
83009
半自動導入非詞元形式
9739385
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejará
0
3421507
9739386
2026-04-21T05:11:28Z
TongcyBot
83009
半自動導入非詞元形式
9739386
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejarás
0
3421508
9739387
2026-04-21T05:11:29Z
TongcyBot
83009
半自動導入非詞元形式
9739387
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejarão
0
3421509
9739388
2026-04-21T05:11:31Z
TongcyBot
83009
半自動導入非詞元形式
9739388
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejaríamos
0
3421510
9739389
2026-04-21T05:11:32Z
TongcyBot
83009
半自動導入非詞元形式
9739389
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejaríeis
0
3421511
9739390
2026-04-21T05:11:33Z
TongcyBot
83009
半自動導入非詞元形式
9739390
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejas
0
3421512
9739391
2026-04-21T05:11:34Z
TongcyBot
83009
半自動導入非詞元形式
9739391
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejasse
0
3421513
9739392
2026-04-21T05:11:35Z
TongcyBot
83009
半自動導入非詞元形式
9739392
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejassem
0
3421514
9739393
2026-04-21T05:11:36Z
TongcyBot
83009
半自動導入非詞元形式
9739393
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejasses
0
3421515
9739394
2026-04-21T05:11:37Z
TongcyBot
83009
半自動導入非詞元形式
9739394
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejaste
0
3421516
9739395
2026-04-21T05:11:38Z
TongcyBot
83009
半自動導入非詞元形式
9739395
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejastes
0
3421517
9739396
2026-04-21T05:11:39Z
TongcyBot
83009
半自動導入非詞元形式
9739396
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejava
0
3421518
9739397
2026-04-21T05:11:40Z
TongcyBot
83009
半自動導入非詞元形式
9739397
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejavam
0
3421519
9739398
2026-04-21T05:11:41Z
TongcyBot
83009
半自動導入非詞元形式
9739398
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejavas
0
3421520
9739399
2026-04-21T05:11:42Z
TongcyBot
83009
半自動導入非詞元形式
9739399
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbraveje
0
3421521
9739400
2026-04-21T05:11:43Z
TongcyBot
83009
半自動導入非詞元形式
9739400
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejei
0
3421522
9739401
2026-04-21T05:11:44Z
TongcyBot
83009
半自動導入非詞元形式
9739401
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejeis
0
3421523
9739402
2026-04-21T05:11:45Z
TongcyBot
83009
半自動導入非詞元形式
9739402
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejem
0
3421524
9739403
2026-04-21T05:11:46Z
TongcyBot
83009
半自動導入非詞元形式
9739403
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejemos
0
3421525
9739404
2026-04-21T05:11:47Z
TongcyBot
83009
半自動導入非詞元形式
9739404
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejes
0
3421526
9739405
2026-04-21T05:11:48Z
TongcyBot
83009
半自動導入非詞元形式
9739405
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejo
0
3421527
9739406
2026-04-21T05:11:49Z
TongcyBot
83009
半自動導入非詞元形式
9739406
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejou
0
3421528
9739407
2026-04-21T05:11:50Z
TongcyBot
83009
半自動導入非詞元形式
9739407
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejámos
0
3421529
9739408
2026-04-21T05:11:51Z
TongcyBot
83009
半自動導入非詞元形式
9739408
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejáramos
0
3421530
9739409
2026-04-21T05:11:52Z
TongcyBot
83009
半自動導入非詞元形式
9739409
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejáreis
0
3421531
9739410
2026-04-21T05:11:53Z
TongcyBot
83009
半自動導入非詞元形式
9739410
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejásseis
0
3421532
9739411
2026-04-21T05:11:54Z
TongcyBot
83009
半自動導入非詞元形式
9739411
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejássemos
0
3421533
9739412
2026-04-21T05:11:55Z
TongcyBot
83009
半自動導入非詞元形式
9739412
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejávamos
0
3421534
9739413
2026-04-21T05:11:56Z
TongcyBot
83009
半自動導入非詞元形式
9739413
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esbravejáveis
0
3421535
9739414
2026-04-21T05:11:57Z
TongcyBot
83009
半自動導入非詞元形式
9739414
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esbravejar}}
g2hquykj4ydatvfml1ujayjixl20h5h
esgalha
0
3421536
9739415
2026-04-21T05:11:58Z
TongcyBot
83009
半自動導入非詞元形式
9739415
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhado
0
3421537
9739416
2026-04-21T05:11:59Z
TongcyBot
83009
半自動導入非詞元形式
9739416
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{pt-pp}}
# {{past participle of|pt|esgalhar}}
97hw72p79nworc8vetz54iwsq2zvl5q
esgalhai
0
3421538
9739417
2026-04-21T05:12:00Z
TongcyBot
83009
半自動導入非詞元形式
9739417
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhais
0
3421539
9739418
2026-04-21T05:12:01Z
TongcyBot
83009
半自動導入非詞元形式
9739418
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalham
0
3421540
9739420
2026-04-21T05:12:02Z
TongcyBot
83009
半自動導入非詞元形式
9739420
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhamos
0
3421541
9739421
2026-04-21T05:12:03Z
TongcyBot
83009
半自動導入非詞元形式
9739421
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhando
0
3421542
9739422
2026-04-21T05:12:04Z
TongcyBot
83009
半自動導入非詞元形式
9739422
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動名詞}}
# {{gerund of|pt|esgalhar}}
4dbgt3zvux0jxcw01482mco21hwx4c8
esgalhara
0
3421543
9739423
2026-04-21T05:12:05Z
TongcyBot
83009
半自動導入非詞元形式
9739423
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalharam
0
3421544
9739424
2026-04-21T05:12:06Z
TongcyBot
83009
半自動導入非詞元形式
9739424
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalharas
0
3421545
9739425
2026-04-21T05:12:07Z
TongcyBot
83009
半自動導入非詞元形式
9739425
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhardes
0
3421546
9739426
2026-04-21T05:12:08Z
TongcyBot
83009
半自動導入非詞元形式
9739426
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalharei
0
3421547
9739427
2026-04-21T05:12:09Z
TongcyBot
83009
半自動導入非詞元形式
9739427
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhareis
0
3421548
9739428
2026-04-21T05:12:11Z
TongcyBot
83009
半自動導入非詞元形式
9739428
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalharem
0
3421549
9739429
2026-04-21T05:12:12Z
TongcyBot
83009
半自動導入非詞元形式
9739429
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalharemos
0
3421550
9739430
2026-04-21T05:12:13Z
TongcyBot
83009
半自動導入非詞元形式
9739430
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhares
0
3421551
9739431
2026-04-21T05:12:14Z
TongcyBot
83009
半自動導入非詞元形式
9739431
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalharia
0
3421552
9739432
2026-04-21T05:12:14Z
TongcyBot
83009
半自動導入非詞元形式
9739432
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhariam
0
3421553
9739433
2026-04-21T05:12:16Z
TongcyBot
83009
半自動導入非詞元形式
9739433
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalharias
0
3421554
9739434
2026-04-21T05:12:17Z
TongcyBot
83009
半自動導入非詞元形式
9739434
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalharmos
0
3421555
9739435
2026-04-21T05:12:18Z
TongcyBot
83009
半自動導入非詞元形式
9739435
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhará
0
3421556
9739436
2026-04-21T05:12:19Z
TongcyBot
83009
半自動導入非詞元形式
9739436
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalharás
0
3421557
9739437
2026-04-21T05:12:20Z
TongcyBot
83009
半自動導入非詞元形式
9739437
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalharão
0
3421558
9739438
2026-04-21T05:12:21Z
TongcyBot
83009
半自動導入非詞元形式
9739438
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalharíamos
0
3421559
9739439
2026-04-21T05:12:22Z
TongcyBot
83009
半自動導入非詞元形式
9739439
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalharíeis
0
3421560
9739440
2026-04-21T05:12:23Z
TongcyBot
83009
半自動導入非詞元形式
9739440
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhas
0
3421561
9739441
2026-04-21T05:12:24Z
TongcyBot
83009
半自動導入非詞元形式
9739441
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhasse
0
3421562
9739442
2026-04-21T05:12:25Z
TongcyBot
83009
半自動導入非詞元形式
9739442
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhassem
0
3421563
9739443
2026-04-21T05:12:26Z
TongcyBot
83009
半自動導入非詞元形式
9739443
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhasses
0
3421564
9739444
2026-04-21T05:12:27Z
TongcyBot
83009
半自動導入非詞元形式
9739444
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhaste
0
3421565
9739445
2026-04-21T05:12:28Z
TongcyBot
83009
半自動導入非詞元形式
9739445
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhastes
0
3421566
9739446
2026-04-21T05:12:29Z
TongcyBot
83009
半自動導入非詞元形式
9739446
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhava
0
3421567
9739447
2026-04-21T05:12:30Z
TongcyBot
83009
半自動導入非詞元形式
9739447
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhavam
0
3421568
9739448
2026-04-21T05:12:31Z
TongcyBot
83009
半自動導入非詞元形式
9739448
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhavas
0
3421569
9739449
2026-04-21T05:12:32Z
TongcyBot
83009
半自動導入非詞元形式
9739449
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhe
0
3421570
9739450
2026-04-21T05:12:33Z
TongcyBot
83009
半自動導入非詞元形式
9739450
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhei
0
3421571
9739451
2026-04-21T05:12:34Z
TongcyBot
83009
半自動導入非詞元形式
9739451
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalheis
0
3421572
9739452
2026-04-21T05:12:35Z
TongcyBot
83009
半自動導入非詞元形式
9739452
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhem
0
3421573
9739453
2026-04-21T05:12:36Z
TongcyBot
83009
半自動導入非詞元形式
9739453
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhemos
0
3421574
9739454
2026-04-21T05:12:37Z
TongcyBot
83009
半自動導入非詞元形式
9739454
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhes
0
3421575
9739455
2026-04-21T05:12:38Z
TongcyBot
83009
半自動導入非詞元形式
9739455
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalho
0
3421576
9739456
2026-04-21T05:12:39Z
TongcyBot
83009
半自動導入非詞元形式
9739456
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhou
0
3421577
9739457
2026-04-21T05:12:40Z
TongcyBot
83009
半自動導入非詞元形式
9739457
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhámos
0
3421578
9739458
2026-04-21T05:12:41Z
TongcyBot
83009
半自動導入非詞元形式
9739458
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalháramos
0
3421579
9739459
2026-04-21T05:12:42Z
TongcyBot
83009
半自動導入非詞元形式
9739459
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalháreis
0
3421580
9739460
2026-04-21T05:12:43Z
TongcyBot
83009
半自動導入非詞元形式
9739460
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhásseis
0
3421581
9739461
2026-04-21T05:12:44Z
TongcyBot
83009
半自動導入非詞元形式
9739461
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhássemos
0
3421582
9739462
2026-04-21T05:12:45Z
TongcyBot
83009
半自動導入非詞元形式
9739462
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalhávamos
0
3421583
9739463
2026-04-21T05:12:46Z
TongcyBot
83009
半自動導入非詞元形式
9739463
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
esgalháveis
0
3421584
9739464
2026-04-21T05:12:47Z
TongcyBot
83009
半自動導入非詞元形式
9739464
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|esgalhar}}
ki7hzbeyrvj63tvds43cto3627ghx08
espacei
0
3421585
9739465
2026-04-21T05:12:48Z
TongcyBot
83009
半自動導入非詞元形式
9739465
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaceis
0
3421586
9739466
2026-04-21T05:12:49Z
TongcyBot
83009
半自動導入非詞元形式
9739466
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espacem
0
3421587
9739467
2026-04-21T05:12:50Z
TongcyBot
83009
半自動導入非詞元形式
9739467
wikitext
text/x-wiki
==葡萄牙語==
===發音===
{{pt-IPA}}
* {{rhymes|pt|asẽj̃|q1=巴西|asɐ̃j̃|q2=葡萄牙|s=3}}
* {{hyph|pt|es|pa|cem}}
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
6m3fcjjgr20d6mykhujcyyii196nwxy
espacemos
0
3421588
9739468
2026-04-21T05:12:51Z
TongcyBot
83009
半自動導入非詞元形式
9739468
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaces
0
3421589
9739469
2026-04-21T05:12:52Z
TongcyBot
83009
半自動導入非詞元形式
9739469
wikitext
text/x-wiki
{{also|espacés}}
==法語==
===發音===
* {{fr-IPA}}
* {{audio|fr|LL-Q150 (fra)-DenisdeShawi-espaces.wav|a=<<Canada>> (<<Shawinigan>>)}}
===名詞===
{{head|fr|名詞變格形|g=m}}
# {{plural of|fr|espace}}
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|espacer||2|s|pres|ind//sub}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
5p5eyzgr2gim13jk2y0crea92p7418g
espaça
0
3421590
9739470
2026-04-21T05:12:53Z
TongcyBot
83009
半自動導入非詞元形式
9739470
wikitext
text/x-wiki
==法語==
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|espacer||3|s|phis}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9e61jmrmk0m0c7dagfjuqtudo5q8sct
espaçada
0
3421591
9739471
2026-04-21T05:12:54Z
TongcyBot
83009
半自動導入非詞元形式
9739471
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=f-s}}
# {{feminine singular of|pt|espaçado}}
jmhtcpza69b9cjdisxfs5jh3zhoxsjd
espaçadas
0
3421592
9739472
2026-04-21T05:12:55Z
TongcyBot
83009
半自動導入非詞元形式
9739472
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=f-p}}
# {{feminine plural of|pt|espaçado}}
2lkihk33z26vg7itwgssm7uk9k2d9pi
espaçado
0
3421593
9739473
2026-04-21T05:12:56Z
TongcyBot
83009
半自動導入非詞元形式
9739473
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{pt-pp}}
# {{past participle of|pt|espaçar}}
rf7x5wyc5ym655ml5iybcylf8yzapuq
espaçados
0
3421594
9739474
2026-04-21T05:12:57Z
TongcyBot
83009
半自動導入非詞元形式
9739474
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=m-p}}
# {{masculine plural of|pt|espaçado}}
k7mwezkkmd7wp5ctx8vb2x68u8eesg5
espaçai
0
3421595
9739475
2026-04-21T05:12:58Z
TongcyBot
83009
半自動導入非詞元形式
9739475
wikitext
text/x-wiki
==法語==
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|espacer||1|s|phis}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
qfkt5rwv70648nh6ihu39zc5fzef3ok
espaçais
0
3421596
9739476
2026-04-21T05:13:00Z
TongcyBot
83009
半自動導入非詞元形式
9739476
wikitext
text/x-wiki
==法語==
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|espacer||1//2|s|impf|indc}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
3y3nwol5ae2uzbif938a7e3sxzgifxr
espaçam
0
3421597
9739477
2026-04-21T05:13:01Z
TongcyBot
83009
半自動導入非詞元形式
9739477
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçamos
0
3421598
9739478
2026-04-21T05:13:02Z
TongcyBot
83009
半自動導入非詞元形式
9739478
wikitext
text/x-wiki
{{also|espaçámos}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
ikrb7l9atthxqd83iqjrc9hhkz19rrt
espaçando
0
3421599
9739479
2026-04-21T05:13:03Z
TongcyBot
83009
半自動導入非詞元形式
9739479
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動名詞}}
# {{pt-verb form of|espaçar}}
b5pr4wmkqt2yum5n0awmyev7p536d6h
espaçara
0
3421600
9739480
2026-04-21T05:13:04Z
TongcyBot
83009
半自動導入非詞元形式
9739480
wikitext
text/x-wiki
{{also|espaçará}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
bz4jz235e6je94gv6ot9922sueawt5u
espaçaram
0
3421601
9739481
2026-04-21T05:13:05Z
TongcyBot
83009
半自動導入非詞元形式
9739481
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçaras
0
3421602
9739482
2026-04-21T05:13:06Z
TongcyBot
83009
半自動導入非詞元形式
9739482
wikitext
text/x-wiki
{{also|espaçarás}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
6kaebpf9sd076tktr1uky3derqejt39
espaçardes
0
3421603
9739483
2026-04-21T05:13:07Z
TongcyBot
83009
半自動導入非詞元形式
9739483
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçarei
0
3421604
9739484
2026-04-21T05:13:08Z
TongcyBot
83009
半自動導入非詞元形式
9739484
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçareis
0
3421605
9739485
2026-04-21T05:13:09Z
TongcyBot
83009
半自動導入非詞元形式
9739485
wikitext
text/x-wiki
{{also|espaçáreis}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
6bys2t3xzal272jdmlur5f2kqasa8f1
espaçarem
0
3421606
9739486
2026-04-21T05:13:10Z
TongcyBot
83009
半自動導入非詞元形式
9739486
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçaremos
0
3421607
9739487
2026-04-21T05:13:11Z
TongcyBot
83009
半自動導入非詞元形式
9739487
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçares
0
3421608
9739488
2026-04-21T05:13:12Z
TongcyBot
83009
半自動導入非詞元形式
9739488
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçaria
0
3421609
9739489
2026-04-21T05:13:13Z
TongcyBot
83009
半自動導入非詞元形式
9739489
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçariam
0
3421610
9739490
2026-04-21T05:13:14Z
TongcyBot
83009
半自動導入非詞元形式
9739490
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçarias
0
3421611
9739491
2026-04-21T05:13:15Z
TongcyBot
83009
半自動導入非詞元形式
9739491
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçarmos
0
3421612
9739492
2026-04-21T05:13:16Z
TongcyBot
83009
半自動導入非詞元形式
9739492
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçará
0
3421613
9739493
2026-04-21T05:13:17Z
TongcyBot
83009
半自動導入非詞元形式
9739493
wikitext
text/x-wiki
{{also|espaçara}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
5vq35iseiglt0e2lumkpu5z4vgbylfk
espaçarás
0
3421614
9739494
2026-04-21T05:13:18Z
TongcyBot
83009
半自動導入非詞元形式
9739494
wikitext
text/x-wiki
{{also|espaçaras}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9wh7srbw26mg673xij4b9mes5axwz5m
espaçarão
0
3421615
9739495
2026-04-21T05:13:19Z
TongcyBot
83009
半自動導入非詞元形式
9739495
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçaríamos
0
3421616
9739496
2026-04-21T05:13:20Z
TongcyBot
83009
半自動導入非詞元形式
9739496
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçaríeis
0
3421617
9739497
2026-04-21T05:13:21Z
TongcyBot
83009
半自動導入非詞元形式
9739497
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaças
0
3421618
9739498
2026-04-21T05:13:22Z
TongcyBot
83009
半自動導入非詞元形式
9739498
wikitext
text/x-wiki
==法語==
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|espacer||2|s|phis}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
bwizivn5e63xfxdkhht07sixaw7j0kt
espaçasse
0
3421619
9739499
2026-04-21T05:13:23Z
TongcyBot
83009
半自動導入非詞元形式
9739499
wikitext
text/x-wiki
==法語==
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|espacer||1|s|impf|subj}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
aykfq7rbmqk0gmcqeagl70jzfc4ofbq
espaçassem
0
3421620
9739500
2026-04-21T05:13:25Z
TongcyBot
83009
半自動導入非詞元形式
9739500
wikitext
text/x-wiki
==葡萄牙語==
===發音===
{{pt-IPA}}
* {{rhymes|pt|asẽj̃|q1=巴西|asɐ̃j̃|q2=葡萄牙|s=4}}
* {{hyph|pt|es|pa|ças|sem}}
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
tfd0rynxbbzu0jm78sr5i3rn81g4wgr
espaçasses
0
3421621
9739501
2026-04-21T05:13:26Z
TongcyBot
83009
半自動導入非詞元形式
9739501
wikitext
text/x-wiki
==法語==
===動詞===
{{head|fr|動詞變位形式}}
# {{inflection of|fr|espacer||2|s|impf|subj}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
30adhzmb80qsa45yh4hachagtf38bri
espaçaste
0
3421622
9739502
2026-04-21T05:13:27Z
TongcyBot
83009
半自動導入非詞元形式
9739502
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçastes
0
3421623
9739503
2026-04-21T05:13:28Z
TongcyBot
83009
半自動導入非詞元形式
9739503
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçava
0
3421624
9739504
2026-04-21T05:13:29Z
TongcyBot
83009
半自動導入非詞元形式
9739504
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçavam
0
3421625
9739505
2026-04-21T05:13:30Z
TongcyBot
83009
半自動導入非詞元形式
9739505
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçavas
0
3421626
9739506
2026-04-21T05:13:31Z
TongcyBot
83009
半自動導入非詞元形式
9739506
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçou
0
3421627
9739507
2026-04-21T05:13:32Z
TongcyBot
83009
半自動導入非詞元形式
9739507
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçámos
0
3421628
9739508
2026-04-21T05:13:33Z
TongcyBot
83009
半自動導入非詞元形式
9739508
wikitext
text/x-wiki
{{also|espaçamos}}
==葡萄牙語==
===其他形式===
* {{qualifier|Brazil}} {{l|pt|espaçamos}}
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
euad48qjmu2t6wpdg6fbyudh3swk87g
espaçáramos
0
3421629
9739509
2026-04-21T05:13:34Z
TongcyBot
83009
半自動導入非詞元形式
9739509
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçáreis
0
3421630
9739510
2026-04-21T05:13:35Z
TongcyBot
83009
半自動導入非詞元形式
9739510
wikitext
text/x-wiki
{{also|espaçareis}}
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
l2xibkgsj4x77pwxo0brfvmklqg8a5s
espaçásseis
0
3421631
9739511
2026-04-21T05:13:36Z
TongcyBot
83009
半自動導入非詞元形式
9739511
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçássemos
0
3421632
9739512
2026-04-21T05:13:37Z
TongcyBot
83009
半自動導入非詞元形式
9739512
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçávamos
0
3421633
9739513
2026-04-21T05:13:38Z
TongcyBot
83009
半自動導入非詞元形式
9739513
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
espaçáveis
0
3421634
9739514
2026-04-21T05:13:39Z
TongcyBot
83009
半自動導入非詞元形式
9739514
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|espaçar}}
9j9k6ke0wgq7x4032gmrij94j3d5dg2
estapeada
0
3421635
9739515
2026-04-21T05:13:40Z
TongcyBot
83009
半自動導入非詞元形式
9739515
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=f-s}}
# {{feminine singular of|pt|estapeado}}
q1krbb15j3i0hflhb3j6l0xpq2vov2u
estapeadas
0
3421636
9739516
2026-04-21T05:13:41Z
TongcyBot
83009
半自動導入非詞元形式
9739516
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=f-p}}
# {{feminine plural of|pt|estapeado}}
najbmmopeu32gg9fqs1ntc0pog0cagi
estapeado
0
3421637
9739517
2026-04-21T05:13:42Z
TongcyBot
83009
半自動導入非詞元形式
9739517
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{pt-pp}}
# {{past participle of|pt|estapear}}
is546f321hzxgdyjpg6axd1wpgfn3q7
estapeados
0
3421638
9739518
2026-04-21T05:13:43Z
TongcyBot
83009
半自動導入非詞元形式
9739518
wikitext
text/x-wiki
==葡萄牙語==
===分詞===
{{head|pt|過去分詞變格形|g=m-p}}
# {{masculine plural of|pt|estapeado}}
sqdb9lmasmqh6ywoaj7kcowomkzreoq
estapeai
0
3421639
9739519
2026-04-21T05:13:44Z
TongcyBot
83009
半自動導入非詞元形式
9739519
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeais
0
3421640
9739520
2026-04-21T05:13:45Z
TongcyBot
83009
半自動導入非詞元形式
9739520
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeamos
0
3421641
9739521
2026-04-21T05:13:46Z
TongcyBot
83009
半自動導入非詞元形式
9739521
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeando
0
3421642
9739522
2026-04-21T05:13:47Z
TongcyBot
83009
半自動導入非詞元形式
9739522
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動名詞}}
# {{pt-verb form of|estapear}}
1z50hjkmscu8unxun91joh5fib60hs6
estapeara
0
3421643
9739523
2026-04-21T05:13:48Z
TongcyBot
83009
半自動導入非詞元形式
9739523
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapearam
0
3421644
9739524
2026-04-21T05:13:49Z
TongcyBot
83009
半自動導入非詞元形式
9739524
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapearas
0
3421645
9739525
2026-04-21T05:13:51Z
TongcyBot
83009
半自動導入非詞元形式
9739525
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeardes
0
3421646
9739526
2026-04-21T05:13:52Z
TongcyBot
83009
半自動導入非詞元形式
9739526
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapearei
0
3421647
9739527
2026-04-21T05:13:53Z
TongcyBot
83009
半自動導入非詞元形式
9739527
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeareis
0
3421648
9739528
2026-04-21T05:13:54Z
TongcyBot
83009
半自動導入非詞元形式
9739528
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapearem
0
3421649
9739529
2026-04-21T05:13:55Z
TongcyBot
83009
半自動導入非詞元形式
9739529
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapearemos
0
3421650
9739530
2026-04-21T05:13:56Z
TongcyBot
83009
半自動導入非詞元形式
9739530
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeares
0
3421651
9739531
2026-04-21T05:13:57Z
TongcyBot
83009
半自動導入非詞元形式
9739531
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapearia
0
3421652
9739532
2026-04-21T05:13:58Z
TongcyBot
83009
半自動導入非詞元形式
9739532
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeariam
0
3421653
9739533
2026-04-21T05:13:59Z
TongcyBot
83009
半自動導入非詞元形式
9739533
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapearias
0
3421654
9739534
2026-04-21T05:14:00Z
TongcyBot
83009
半自動導入非詞元形式
9739534
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapearmos
0
3421655
9739535
2026-04-21T05:14:01Z
TongcyBot
83009
半自動導入非詞元形式
9739535
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeará
0
3421656
9739536
2026-04-21T05:14:02Z
TongcyBot
83009
半自動導入非詞元形式
9739536
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapearás
0
3421657
9739537
2026-04-21T05:14:03Z
TongcyBot
83009
半自動導入非詞元形式
9739537
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapearão
0
3421658
9739538
2026-04-21T05:14:04Z
TongcyBot
83009
半自動導入非詞元形式
9739538
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapearíamos
0
3421659
9739539
2026-04-21T05:14:05Z
TongcyBot
83009
半自動導入非詞元形式
9739539
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapearíeis
0
3421660
9739540
2026-04-21T05:14:06Z
TongcyBot
83009
半自動導入非詞元形式
9739540
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeasse
0
3421661
9739541
2026-04-21T05:14:07Z
TongcyBot
83009
半自動導入非詞元形式
9739541
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeassem
0
3421662
9739542
2026-04-21T05:14:08Z
TongcyBot
83009
半自動導入非詞元形式
9739542
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeasses
0
3421663
9739543
2026-04-21T05:14:09Z
TongcyBot
83009
半自動導入非詞元形式
9739543
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeaste
0
3421664
9739544
2026-04-21T05:14:10Z
TongcyBot
83009
半自動導入非詞元形式
9739544
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeastes
0
3421665
9739545
2026-04-21T05:14:11Z
TongcyBot
83009
半自動導入非詞元形式
9739545
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeava
0
3421666
9739546
2026-04-21T05:14:12Z
TongcyBot
83009
半自動導入非詞元形式
9739546
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeavam
0
3421667
9739547
2026-04-21T05:14:13Z
TongcyBot
83009
半自動導入非詞元形式
9739547
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeavas
0
3421668
9739548
2026-04-21T05:14:14Z
TongcyBot
83009
半自動導入非詞元形式
9739548
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeei
0
3421669
9739549
2026-04-21T05:14:15Z
TongcyBot
83009
半自動導入非詞元形式
9739549
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeeis
0
3421670
9739550
2026-04-21T05:14:16Z
TongcyBot
83009
半自動導入非詞元形式
9739550
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeemos
0
3421671
9739551
2026-04-21T05:14:17Z
TongcyBot
83009
半自動導入非詞元形式
9739551
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeia
0
3421672
9739552
2026-04-21T05:14:18Z
TongcyBot
83009
半自動導入非詞元形式
9739552
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeiam
0
3421673
9739553
2026-04-21T05:14:19Z
TongcyBot
83009
半自動導入非詞元形式
9739553
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeias
0
3421674
9739554
2026-04-21T05:14:20Z
TongcyBot
83009
半自動導入非詞元形式
9739554
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeie
0
3421675
9739555
2026-04-21T05:14:21Z
TongcyBot
83009
半自動導入非詞元形式
9739555
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeiem
0
3421676
9739556
2026-04-21T05:14:22Z
TongcyBot
83009
半自動導入非詞元形式
9739556
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeies
0
3421677
9739557
2026-04-21T05:14:23Z
TongcyBot
83009
半自動導入非詞元形式
9739557
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeio
0
3421678
9739558
2026-04-21T05:14:24Z
TongcyBot
83009
半自動導入非詞元形式
9739558
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeou
0
3421679
9739559
2026-04-21T05:14:25Z
TongcyBot
83009
半自動導入非詞元形式
9739559
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeáramos
0
3421680
9739560
2026-04-21T05:14:27Z
TongcyBot
83009
半自動導入非詞元形式
9739560
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeáreis
0
3421681
9739561
2026-04-21T05:14:27Z
TongcyBot
83009
半自動導入非詞元形式
9739561
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeásseis
0
3421682
9739562
2026-04-21T05:14:29Z
TongcyBot
83009
半自動導入非詞元形式
9739562
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeássemos
0
3421683
9739563
2026-04-21T05:14:30Z
TongcyBot
83009
半自動導入非詞元形式
9739563
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeávamos
0
3421684
9739564
2026-04-21T05:14:30Z
TongcyBot
83009
半自動導入非詞元形式
9739564
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
estapeáveis
0
3421685
9739565
2026-04-21T05:14:32Z
TongcyBot
83009
半自動導入非詞元形式
9739565
wikitext
text/x-wiki
==葡萄牙語==
===動詞===
{{head|pt|動詞變位形式}}
# {{pt-verb form of|estapear}}
2q0fujzcznj32o9q6np7e9lr6rr6r0v
ふつりあい
0
3421686
9739570
2026-04-21T05:36:32Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==日語== {{ja-see|不釣り合い}}」的新頁面
9739570
wikitext
text/x-wiki
==日語==
{{ja-see|不釣り合い}}
of7dwjj9rnai15xjd5twbxijbwqkupx
ふつりあひ
0
3421687
9739571
2026-04-21T05:36:34Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==日語== {{ja-see|不釣り合い}}」的新頁面
9739571
wikitext
text/x-wiki
==日語==
{{ja-see|不釣り合い}}
of7dwjj9rnai15xjd5twbxijbwqkupx
futsuriai
0
3421688
9739572
2026-04-21T05:36:38Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|ふつりあい}}」的新頁面
9739572
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|ふつりあい}}
2clvj0zzl6nx6o4lpo70wt1ykrpq3z3
つりあひ
0
3421689
9739573
2026-04-21T05:36:59Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==日語== {{ja-see|釣り合い}}」的新頁面
9739573
wikitext
text/x-wiki
==日語==
{{ja-see|釣り合い}}
1qi9v3n46bxkow2b8pv477qr6qhzc88
tsuriai
0
3421690
9739574
2026-04-21T05:37:01Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==日語== ===羅馬化=== {{ja-romaji}} # {{ja-romanization of|つりあい}}」的新頁面
9739574
wikitext
text/x-wiki
==日語==
===羅馬化===
{{ja-romaji}}
# {{ja-romanization of|つりあい}}
3xdrr2b7015orz4flte8m2sgo6bk08h
釣合い
0
3421691
9739575
2026-04-21T05:37:09Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==日語== {{ja-kanjitab|つり|あ|yomi=k}} {{ja-see|釣り合い|type=alt}}」的新頁面
9739575
wikitext
text/x-wiki
==日語==
{{ja-kanjitab|つり|あ|yomi=k}}
{{ja-see|釣り合い|type=alt}}
1x2pqpiqnwbllicpd9hewh45rzeg7uk
Category:寫作「釣」讀作「つり」的日語詞
14
3421692
9739577
2026-04-21T05:38:03Z
TongcyBot
83009
養貓
9739577
wikitext
text/x-wiki
{{auto cat|kun}}
6sgynwa4ww4n7ynr3errc7yhla69lb0
Category:讀作「つり」的日語詞
14
3421693
9739578
2026-04-21T05:38:09Z
TongcyBot
83009
養貓
9739578
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
spal.
0
3421694
9739583
2026-04-21T05:43:37Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==立陶宛語== ===名詞=== {{lt-noun|m}} # {{abbr of|lt|spalis,spalio||十月}} #: {{cot|lt|saus.|vas.|kov.|bal.|geg.|birž.|liep.|rugp.|rugs.|lapkr.|gruod.}}」的新頁面
9739583
wikitext
text/x-wiki
==立陶宛語==
===名詞===
{{lt-noun|m}}
# {{abbr of|lt|spalis,spalio||十月}}
#: {{cot|lt|saus.|vas.|kov.|bal.|geg.|birž.|liep.|rugp.|rugs.|lapkr.|gruod.}}
8sxoggptmtzcfvsva5tqbwj6jq2y4wk
9739584
9739583
2026-04-21T05:44:26Z
TongcyDai
53191
9739584
wikitext
text/x-wiki
==立陶宛語==
===名詞===
{{lt-noun|m}}
# {{abbr of|lt|spãlis,spãlio||十月}}
#: {{cot|lt|saus.|vas.|kov.|bal.|geg.|birž.|liep.|rugp.|rugs.|lapkr.|gruod.}}
7kbff83cq3wmshpk7q0quvfdbcbum4g
spalio
0
3421695
9739586
2026-04-21T05:48:18Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==塞爾維亞-克羅地亞語== ===分詞=== {{sh-part}} # {{participle of|sh|spaliti||act|past}}」的新頁面
9739586
wikitext
text/x-wiki
==塞爾維亞-克羅地亞語==
===分詞===
{{sh-part}}
# {{participle of|sh|spaliti||act|past}}
9801muew8wltxdlwxl1fo2th6bcjo30
Thesaurus:出庭
110
3421696
9739593
2026-04-21T06:09:22Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「{{ws header}} ==漢語== ===動詞=== ===={{ws sense|zh|出席法庭,參加庭審}}==== =====近義詞===== {{col3|zh|出庭|到庭|到案|上庭<qq:粵語>}}」的新頁面
9739593
wikitext
text/x-wiki
{{ws header}}
==漢語==
===動詞===
===={{ws sense|zh|出席法庭,參加庭審}}====
=====近義詞=====
{{col3|zh|出庭|到庭|到案|上庭<qq:粵語>}}
l3uon944hk8r1ltjb53j02911oyajlh
Category:立陶宛語 錦葵科植物
14
3421697
9739599
2026-04-21T06:14:57Z
TongcyBot
83009
養貓
9739599
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:立陶宛語 錦葵目植物
14
3421698
9739600
2026-04-21T06:15:02Z
TongcyBot
83009
養貓
9739600
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
saus.
0
3421699
9739608
2026-04-21T06:29:03Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==立陶宛語== ===名詞=== {{lt-noun|m}} # {{abbr of|lt|saũsis,saũsio||一月}} #: {{cot|lt|vas.|kov.|bal.|geg.|birž.|liep.|rugp.|rugs.|spal.|lapkr.|gruod.}}」的新頁面
9739608
wikitext
text/x-wiki
==立陶宛語==
===名詞===
{{lt-noun|m}}
# {{abbr of|lt|saũsis,saũsio||一月}}
#: {{cot|lt|vas.|kov.|bal.|geg.|birž.|liep.|rugp.|rugs.|spal.|lapkr.|gruod.}}
cg881viintpma00mhqal98tjgesdxso
Template:Demo2c
10
3421700
9739610
2026-04-21T06:35:25Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「<includeonly>{{#invoke:demo|main|fmt=twocol}}</includeonly><noinclude>{{documentation}}</noinclude>」的新頁面
9739610
wikitext
text/x-wiki
<includeonly>{{#invoke:demo|main|fmt=twocol}}</includeonly><noinclude>{{documentation}}</noinclude>
4s9p1lwsh0b8dhkv5mp6olij0nyt1el
Category:Rhymes:波蘭語/ufkɔw̃/3音節
14
3421701
9739621
2026-04-21T07:17:47Z
TongcyBot
83009
養貓
9739621
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:世界語/anɡu
14
3421702
9739622
2026-04-21T07:18:21Z
TongcyBot
83009
養貓
9739622
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:他加祿語/ak/1音節
14
3421703
9739623
2026-04-21T07:18:26Z
TongcyBot
83009
養貓
9739623
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:他加祿語/ala/2音節
14
3421704
9739624
2026-04-21T07:18:32Z
TongcyBot
83009
養貓
9739624
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:他加祿語/alat
14
3421705
9739625
2026-04-21T07:18:38Z
TongcyBot
83009
養貓
9739625
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:他加祿語/alat/2音節
14
3421706
9739626
2026-04-21T07:18:44Z
TongcyBot
83009
養貓
9739626
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:他加祿語/alaʔ/2音節
14
3421707
9739627
2026-04-21T07:18:50Z
TongcyBot
83009
養貓
9739627
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:他加祿語/awis
14
3421708
9739628
2026-04-21T07:18:55Z
TongcyBot
83009
養貓
9739628
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:他加祿語/awis/2音節
14
3421709
9739629
2026-04-21T07:19:01Z
TongcyBot
83009
養貓
9739629
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:他加祿語/ea/6音節
14
3421710
9739630
2026-04-21T07:19:07Z
TongcyBot
83009
養貓
9739630
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:他加祿語/ukaw
14
3421711
9739631
2026-04-21T07:19:12Z
TongcyBot
83009
養貓
9739631
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:他加祿語/ukaw/2音節
14
3421712
9739632
2026-04-21T07:19:18Z
TongcyBot
83009
養貓
9739632
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:卡舒比語/ak
14
3421713
9739633
2026-04-21T07:19:23Z
TongcyBot
83009
養貓
9739633
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:卡舒比語/ak/1音節
14
3421714
9739634
2026-04-21T07:19:29Z
TongcyBot
83009
養貓
9739634
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:印尼語/ala
14
3421715
9739635
2026-04-21T07:19:34Z
TongcyBot
83009
養貓
9739635
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:印尼語/ala/2音節
14
3421716
9739636
2026-04-21T07:19:39Z
TongcyBot
83009
養貓
9739636
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:印尼語/apas
14
3421717
9739637
2026-04-21T07:19:45Z
TongcyBot
83009
養貓
9739637
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:印尼語/apas/2音節
14
3421718
9739638
2026-04-21T07:19:51Z
TongcyBot
83009
養貓
9739638
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:印尼語/uŋkuŋ
14
3421719
9739639
2026-04-21T07:19:56Z
TongcyBot
83009
養貓
9739639
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:印尼語/uŋkuŋ/2音節
14
3421720
9739640
2026-04-21T07:20:02Z
TongcyBot
83009
養貓
9739640
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:古英語/ɑ.su
14
3421721
9739641
2026-04-21T07:20:07Z
TongcyBot
83009
養貓
9739641
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:古英語/ɑ.su/2音節
14
3421722
9739642
2026-04-21T07:20:13Z
TongcyBot
83009
養貓
9739642
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:坎卡奈語/a
14
3421723
9739643
2026-04-21T07:20:18Z
TongcyBot
83009
養貓
9739643
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:坎卡奈語/a/2音節
14
3421724
9739644
2026-04-21T07:20:23Z
TongcyBot
83009
養貓
9739644
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:坎卡奈語/ala
14
3421725
9739645
2026-04-21T07:20:29Z
TongcyBot
83009
養貓
9739645
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:坎卡奈語/ala/2音節
14
3421726
9739646
2026-04-21T07:20:34Z
TongcyBot
83009
養貓
9739646
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:坎卡奈語/ara
14
3421727
9739647
2026-04-21T07:20:40Z
TongcyBot
83009
養貓
9739647
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:坎卡奈語/ara/2音節
14
3421728
9739648
2026-04-21T07:20:45Z
TongcyBot
83009
養貓
9739648
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:意大利語/un/2音節
14
3421729
9739649
2026-04-21T07:20:50Z
TongcyBot
83009
養貓
9739649
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:捷克語/oːza/4音節
14
3421730
9739650
2026-04-21T07:20:58Z
TongcyBot
83009
養貓
9739650
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:捷克語/ɪnu/2音節
14
3421731
9739651
2026-04-21T07:21:04Z
TongcyBot
83009
養貓
9739651
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:波蘭語/ajstɛr
14
3421732
9739652
2026-04-21T07:21:09Z
TongcyBot
83009
養貓
9739652
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:波蘭語/ajstɛr/3音節
14
3421733
9739653
2026-04-21T07:21:15Z
TongcyBot
83009
養貓
9739653
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:波蘭語/ut͡su
14
3421734
9739654
2026-04-21T07:21:21Z
TongcyBot
83009
養貓
9739654
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:波蘭語/ut͡su/2音節
14
3421735
9739655
2026-04-21T07:21:26Z
TongcyBot
83009
養貓
9739655
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:波蘭語/ɔmjɛw̃
14
3421736
9739656
2026-04-21T07:21:32Z
TongcyBot
83009
養貓
9739656
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:波蘭語/ɔmjɛw̃/4音節
14
3421737
9739657
2026-04-21T07:21:37Z
TongcyBot
83009
養貓
9739657
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:波蘭語/ɘfkɔw̃
14
3421738
9739658
2026-04-21T07:21:42Z
TongcyBot
83009
養貓
9739658
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:波蘭語/ɘfkɔw̃/3音節
14
3421739
9739659
2026-04-21T07:21:47Z
TongcyBot
83009
養貓
9739659
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:波蘭語/ɘfkɛw̃
14
3421740
9739660
2026-04-21T07:21:53Z
TongcyBot
83009
養貓
9739660
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:波蘭語/ɘfkɛw̃/3音節
14
3421741
9739661
2026-04-21T07:21:58Z
TongcyBot
83009
養貓
9739661
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:波蘭語/ɘft͡sɛ
14
3421742
9739662
2026-04-21T07:22:04Z
TongcyBot
83009
養貓
9739662
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:波蘭語/ɘft͡sɛ/3音節
14
3421743
9739663
2026-04-21T07:22:09Z
TongcyBot
83009
養貓
9739663
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:潘諾尼亞盧森尼亞語/ɔt͡ʃka
14
3421744
9739664
2026-04-21T07:22:15Z
TongcyBot
83009
養貓
9739664
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:潘諾尼亞盧森尼亞語/ɔt͡ʃka/3音節
14
3421745
9739665
2026-04-21T07:22:21Z
TongcyBot
83009
養貓
9739665
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:芬蘭語/erpeːni
14
3421746
9739666
2026-04-21T07:22:27Z
TongcyBot
83009
養貓
9739666
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:芬蘭語/erpeːni/3音節
14
3421747
9739667
2026-04-21T07:22:33Z
TongcyBot
83009
養貓
9739667
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:英語/iːə/6音節
14
3421748
9739668
2026-04-21T07:22:38Z
TongcyBot
83009
養貓
9739668
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:英語/ɑːlə/2音節
14
3421749
9739669
2026-04-21T07:22:45Z
TongcyBot
83009
養貓
9739669
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:英語/ɒtɪsaɪz
14
3421750
9739670
2026-04-21T07:22:51Z
TongcyBot
83009
養貓
9739670
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:英語/ɒtɪsaɪz/4音節
14
3421751
9739671
2026-04-21T07:22:57Z
TongcyBot
83009
養貓
9739671
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:荷蘭語/eː/4音節
14
3421752
9739672
2026-04-21T07:23:02Z
TongcyBot
83009
養貓
9739672
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:葡萄牙語/aki/4音節
14
3421753
9739673
2026-04-21T07:23:08Z
TongcyBot
83009
養貓
9739673
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:葡萄牙語/aku/4音節
14
3421754
9739674
2026-04-21T07:23:14Z
TongcyBot
83009
養貓
9739674
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:葡萄牙語/akɐ/4音節
14
3421755
9739675
2026-04-21T07:23:20Z
TongcyBot
83009
養貓
9739675
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:葡萄牙語/akɨ/4音節
14
3421756
9739676
2026-04-21T07:23:25Z
TongcyBot
83009
養貓
9739676
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:葡萄牙語/alɐ/2音節
14
3421757
9739677
2026-04-21T07:23:30Z
TongcyBot
83009
養貓
9739677
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:葡萄牙語/iʃu/3音節
14
3421758
9739678
2026-04-21T07:23:36Z
TongcyBot
83009
養貓
9739678
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:西班牙語/ala/2音節
14
3421759
9739679
2026-04-21T07:23:41Z
TongcyBot
83009
養貓
9739679
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:西班牙語/eʝa/6音節
14
3421760
9739680
2026-04-21T07:23:46Z
TongcyBot
83009
養貓
9739680
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:西班牙語/eʝiko
14
3421761
9739681
2026-04-21T07:23:52Z
TongcyBot
83009
養貓
9739681
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:西班牙語/eʝiko/7音節
14
3421762
9739682
2026-04-21T07:23:58Z
TongcyBot
83009
養貓
9739682
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:陶蘇格語/as
14
3421763
9739683
2026-04-21T07:24:03Z
TongcyBot
83009
養貓
9739683
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:陶蘇格語/as/2音節
14
3421764
9739684
2026-04-21T07:24:09Z
TongcyBot
83009
養貓
9739684
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:陶蘇格語/il
14
3421765
9739685
2026-04-21T07:24:15Z
TongcyBot
83009
養貓
9739685
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:陶蘇格語/il/2音節
14
3421766
9739686
2026-04-21T07:24:20Z
TongcyBot
83009
養貓
9739686
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:馬京達瑙語/ak
14
3421767
9739687
2026-04-21T07:24:26Z
TongcyBot
83009
養貓
9739687
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:馬京達瑙語/ak/1音節
14
3421768
9739688
2026-04-21T07:24:31Z
TongcyBot
83009
養貓
9739688
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:馬京達瑙語/asu
14
3421769
9739689
2026-04-21T07:24:37Z
TongcyBot
83009
養貓
9739689
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:Rhymes:馬京達瑙語/asu/2音節
14
3421770
9739690
2026-04-21T07:24:42Z
TongcyBot
83009
養貓
9739690
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:引用缺失詞源的冰島語詞條
14
3421771
9739691
2026-04-21T07:24:47Z
TongcyBot
83009
養貓
9739691
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:引用缺失詞源的加泰羅尼亞語詞條
14
3421772
9739692
2026-04-21T07:24:53Z
TongcyBot
83009
養貓
9739692
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:引用缺失詞源的噶瑪蘭語詞條
14
3421773
9739693
2026-04-21T07:24:58Z
TongcyBot
83009
養貓
9739693
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:引用缺失詞源的威爾士語詞條
14
3421774
9739694
2026-04-21T07:25:03Z
TongcyBot
83009
養貓
9739694
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:引用缺失詞源的帕盧拉語詞條
14
3421775
9739695
2026-04-21T07:25:09Z
TongcyBot
83009
養貓
9739695
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:引用缺失詞源的蘇龍語詞條
14
3421776
9739696
2026-04-21T07:25:15Z
TongcyBot
83009
養貓
9739696
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:蘇龍語詞條維護
14
3421777
9739697
2026-04-21T07:25:20Z
TongcyBot
83009
養貓
9739697
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:蘇龍語
14
3421778
9739698
2026-04-21T07:25:27Z
TongcyBot
83009
養貓
9739698
wikitext
text/x-wiki
{{auto cat|中國|印度}}
jjk53nkak43dnkwtbrjxu33efu1nerh
Category:威爾士語棄用形式
14
3421779
9739699
2026-04-21T07:26:33Z
TongcyBot
83009
養貓
9739699
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:威爾士語棄用用語
14
3421780
9739700
2026-04-21T07:26:38Z
TongcyBot
83009
養貓
9739700
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:威爾士語 骨骼
14
3421781
9739701
2026-04-21T07:33:12Z
TongcyBot
83009
養貓
9739701
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:威爾士語 藜亞科
14
3421782
9739702
2026-04-21T07:33:19Z
TongcyBot
83009
養貓
9739702
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:威爾士語 莧科
14
3421783
9739703
2026-04-21T07:33:24Z
TongcyBot
83009
養貓
9739703
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:威爾士語 石竹目
14
3421784
9739704
2026-04-21T07:33:29Z
TongcyBot
83009
養貓
9739704
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:威爾士語 楊柳科植物
14
3421785
9739705
2026-04-21T07:33:36Z
TongcyBot
83009
養貓
9739705
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:威爾士語 金虎尾目植物
14
3421786
9739706
2026-04-21T07:33:42Z
TongcyBot
83009
養貓
9739706
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:威爾士語 宗教場所
14
3421787
9739707
2026-04-21T07:33:48Z
TongcyBot
83009
養貓
9739707
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:威爾士語 嗅覺
14
3421788
9739708
2026-04-21T07:33:54Z
TongcyBot
83009
養貓
9739708
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:壯語 攀登
14
3421789
9739709
2026-04-21T07:36:18Z
TongcyBot
83009
養貓
9739709
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:壯語 運動
14
3421790
9739710
2026-04-21T07:36:23Z
TongcyBot
83009
養貓
9739710
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:壯語 說話
14
3421791
9739711
2026-04-21T07:36:34Z
TongcyBot
83009
養貓
9739711
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:壯語 龜
14
3421792
9739712
2026-04-21T07:36:42Z
TongcyBot
83009
養貓
9739712
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:壯語 爬行動物
14
3421793
9739713
2026-04-21T07:36:47Z
TongcyBot
83009
養貓
9739713
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:塞爾維亞-克羅地亞語發音模板
14
3421794
9739714
2026-04-21T07:36:55Z
TongcyBot
83009
養貓
9739714
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:含有後綴-inas的立陶宛語詞
14
3421795
9739715
2026-04-21T07:37:16Z
TongcyBot
83009
養貓
9739715
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:含有後綴-ication的英語詞
14
3421796
9739716
2026-04-21T07:37:22Z
TongcyBot
83009
養貓
9739716
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:含有後綴-itol的英語詞
14
3421797
9739717
2026-04-21T07:37:28Z
TongcyBot
83009
養貓
9739717
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:含有後綴-poeia的英語詞
14
3421798
9739718
2026-04-21T07:37:35Z
TongcyBot
83009
養貓
9739718
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:含有後綴-zepine的英語詞
14
3421799
9739719
2026-04-21T07:37:44Z
TongcyBot
83009
養貓
9739719
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:含有後綴-ային的古典亞美尼亞語詞
14
3421800
9739720
2026-04-21T07:37:51Z
TongcyBot
83009
養貓
9739720
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Category:含有後綴-та的烏克蘭語詞
14
3421801
9739721
2026-04-21T07:37:57Z
TongcyBot
83009
養貓
9739721
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
Staten
0
3421802
9739731
2026-04-21T08:41:58Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==英語== ===專有名詞=== {{en-proper noun|s}} # {{surname|en}}。 ====派生詞彙==== * {{l|en|Statenville}} ====統計==== * {{U:en:2010 US Census|rank=4430|pop=8021|race1=非裔美國人|pct1=47.91|race2=白人|pct2=46.88}} ===異序詞=== * {{anagrams|en|a=aenstt|nattes}}」的新頁面
9739731
wikitext
text/x-wiki
==英語==
===專有名詞===
{{en-proper noun|s}}
# {{surname|en}}。
====派生詞彙====
* {{l|en|Statenville}}
====統計====
* {{U:en:2010 US Census|rank=4430|pop=8021|race1=非裔美國人|pct1=47.91|race2=白人|pct2=46.88}}
===異序詞===
* {{anagrams|en|a=aenstt|nattes}}
n4v26bsbaqkmtlvraajm5t42g0paup3
Statens
0
3421803
9739732
2026-04-21T08:42:10Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==英語== ===專有名詞=== {{head|en|專有名詞變格形}} # {{plural of|en|Staten}}」的新頁面
9739732
wikitext
text/x-wiki
==英語==
===專有名詞===
{{head|en|專有名詞變格形}}
# {{plural of|en|Staten}}
ocgya1noshyyq3ms69o7bfm9hmhbrcm
打靶鬼
0
3421804
9739733
2026-04-21T08:55:03Z
TongcyDai
53191
[[w:WP:AES|←]]建立內容為「==漢語== {{zh-forms|type=21}} ===發音=== {{zh-pron |c=daa2 baa2 gwai2 |h=gd=da3 ba3 gui3 |cat=n }} ===名詞=== {{head|zh|名詞}} # {{lb|zh|粵語|客家語|粗俗}} [[該死]]的人,該[[槍斃]]的人」的新頁面
9739733
wikitext
text/x-wiki
==漢語==
{{zh-forms|type=21}}
===發音===
{{zh-pron
|c=daa2 baa2 gwai2
|h=gd=da3 ba3 gui3
|cat=n
}}
===名詞===
{{head|zh|名詞}}
# {{lb|zh|粵語|客家語|粗俗}} [[該死]]的人,該[[槍斃]]的人
6dfrdijqndxjsvdikeck98bnf10g22d
Thesaurus:身體
110
3421805
9739746
2026-04-21T09:59:16Z
明瑤
132921
[[w:WP:AES|←]]建立內容為「{{ws header|lang=zh}} ==漢語== ===名詞=== ===={{ws sense|zh|身體}}==== =====近義詞===== {{col3|zh|身體|yue:身|yue:身子|hak:身仔|hak:膚身|hak:圓身|nan:身軀}}」的新頁面
9739746
wikitext
text/x-wiki
{{ws header|lang=zh}}
==漢語==
===名詞===
===={{ws sense|zh|身體}}====
=====近義詞=====
{{col3|zh|身體|yue:身|yue:身子|hak:身仔|hak:膚身|hak:圓身|nan:身軀}}
hy8scmfgb6495xu5hkq9nzby1v0566o
膴身
0
3421806
9739747
2026-04-21T10:00:00Z
明瑤
132921
[[w:WP:AES|←]]建立內容為「== 漢語 == {{Zh-forms|s=𰮇身}} === 發音 === {{Zh-pron |cat=n |h=hrs=h:vu shinˋ }} === 名詞 === {{Head|zh|名詞}} # {{Label|zh|主要用於|客家語}} [[身體]] ==== 近義詞 ==== {{Syn-saurus|zh|身體}} ==== 同義詞 ==== {{Zh-dial|身體}}」的新頁面
9739747
wikitext
text/x-wiki
== 漢語 ==
{{Zh-forms|s=𰮇身}}
=== 發音 ===
{{Zh-pron
|cat=n
|h=hrs=h:vu shinˋ
}}
=== 名詞 ===
{{Head|zh|名詞}}
# {{Label|zh|主要用於|客家語}} [[身體]]
==== 近義詞 ====
{{Syn-saurus|zh|身體}}
==== 同義詞 ====
{{Zh-dial|身體}}
csxy1w85vvej8u8ub1khlnbv9lk51iu
9739748
9739747
2026-04-21T10:01:26Z
明瑤
132921
9739748
wikitext
text/x-wiki
== 漢語 ==
{{Zh-forms|s=𰮇身}}
=== 發音 ===
{{Zh-pron
|cat=n
|h=hrs=h:vu shinˋ
}}
=== 名詞 ===
{{Head|zh|名詞}}
# {{Label|zh|主要用於|客家語}} [[身體]]
==== 同義詞 ====
{{Zh-dial|身體}}
thqvtwjfjpbz3kh9ymsi6hj083hedr2
臭豆
0
3421807
9739749
2026-04-21T10:42:25Z
明瑤
132921
[[w:WP:AES|←]]建立內容為「== 漢語 == {{維基百科}}{{Zh-forms}} === 讀音 === {{Zh-pron |m=chòudòu |ma=y |cat=n }} === 名詞 === {{Head|zh|名詞}} # [[豆科]]球花豆屬[[木本植物]](''[[Parkia speciosa]]'')」的新頁面
9739749
wikitext
text/x-wiki
== 漢語 ==
{{維基百科}}{{Zh-forms}}
=== 讀音 ===
{{Zh-pron
|m=chòudòu
|ma=y
|cat=n
}}
=== 名詞 ===
{{Head|zh|名詞}}
# [[豆科]]球花豆屬[[木本植物]](''[[Parkia speciosa]]'')
mwctng3few60lyzzgvteff6m7h5h5af
9739751
9739749
2026-04-21T10:54:28Z
Sayonzei
40728
/* 漢語 */
9739751
wikitext
text/x-wiki
==漢語==
{{Zh-forms}}
{{zh-wp}}
===發音===
{{Zh-pron
|m=chòudòu
|cat=n
}}
===名詞===
{{Head|zh|名詞}}
# [[豆科]]球花豆屬[[木本植物]](''[[Parkia speciosa]]'')
{{c|zh|豆科}}
hdjxc6tkykpn7x8hbow3jgobwrzhg02
chòudòu
0
3421808
9739750
2026-04-21T10:48:41Z
明瑤
132921
[[w:WP:AES|←]]建立內容為「== 官話 == === 羅馬化 === '''chòudòu''' ([[注音]] '''ㄔㄡˋ ㄉㄡˋ''') # {{Cmn-pinyin of|臭豆}}」的新頁面
9739750
wikitext
text/x-wiki
== 官話 ==
=== 羅馬化 ===
'''chòudòu''' ([[注音]] '''ㄔㄡˋ ㄉㄡˋ''')
# {{Cmn-pinyin of|臭豆}}
czyqt4vo9nzrn9r9z7fqymh4gutaj5b