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 = " +&lrm; ", 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 = " +&lrm; ", 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>&lt;/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>&lt;/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>&lt;/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>&lt;/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>&lt;/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 &gt; to appear in the output, if &amp;gt; is supplied in the input. -- Otherwise this isn't possible because > and &gt; both end up as &gt; when placed inside of <nowiki>...</nowiki> -- and passed through unstrip_nowiki(), and can't be distinguished. As a result, the code below converts &gt; back -- to >, and there's no way to get a literal &gt; in the output since &amp;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("&amp;", "&") 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