Wiktionary
jawiktionary
https://ja.wiktionary.org/wiki/Wiktionary:%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8
MediaWiki 1.47.0-wmf.14
case-sensitive
メディア
特別
トーク
利用者
利用者・トーク
Wiktionary
Wiktionary・トーク
ファイル
ファイル・トーク
MediaWiki
MediaWiki・トーク
テンプレート
テンプレート・トーク
ヘルプ
ヘルプ・トーク
カテゴリ
カテゴリ・トーク
付録
付録・トーク
TimedText
TimedText talk
モジュール
モジュール・トーク
Event
Event talk
テンプレート:mkd
10
1541
2313228
1378268
2026-08-08T23:30:19Z
Kuroco2k
84207
[[テンプレート:mk]] へのリダイレクトを解除しました
2313228
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:mk]]を使用してください。'''|廃止=n}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly><noinclude>[[カテゴリ:言語表記テンプレート|{{PAGENAME}}]][[カテゴリ:ISO 639-2|{{PAGENAME}}]][[カテゴリ:ISO 639-3|{{PAGENAME}}]]</noinclude>
ikaa94rtkdhc47xhgjsto65ecfszhzt
テンプレート:Nl
10
3796
2313393
1599057
2026-08-09T07:57:15Z
Kuroco2k
84207
[[テンプレート:nl]] へのリダイレクトを解除しました
2313393
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:nl]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
se6zyi2wfhhnsvf099ebnfryznuko6x
テンプレート:La
10
3865
2313255
1599035
2026-08-08T23:48:13Z
Kuroco2k
84207
[[テンプレート:la]] へのリダイレクトを解除しました
2313255
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:la]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
d9gmc2keo5ioe8s5wgjorkdm9oeux0r
テンプレート:Lo
10
3866
2313253
1599038
2026-08-08T23:48:12Z
Kuroco2k
84207
[[テンプレート:lo]] へのリダイレクトを解除しました
2313253
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:lo]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
8zymbhe7uh8nyvzgnb6fmhf44xtc9bv
テンプレート:Lt
10
3867
2313252
1599039
2026-08-08T23:48:12Z
Kuroco2k
84207
[[テンプレート:lt]] へのリダイレクトを解除しました
2313252
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:lt]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
ryxiwqg6h6i43j0muazidfvk19sqdra
テンプレート:Mdf
10
3868
2313238
14627
2026-08-08T23:43:42Z
Kuroco2k
84207
[[テンプレート:mdf]] へのリダイレクトを解除しました
2313238
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:mdf]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
8q3drdsbihijwabb6rqmkx5n10lbib7
テンプレート:Mn
10
3869
2313243
1599045
2026-08-08T23:44:23Z
Kuroco2k
84207
[[テンプレート:mn]] へのリダイレクトを解除しました
2313243
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:mn]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
cc2k0cphwc2fmx6bnhm0ywz2hv8kva2
テンプレート:Mnc
10
3870
2313241
14629
2026-08-08T23:44:22Z
Kuroco2k
84207
[[テンプレート:mnc]] へのリダイレクトを解除しました
2313241
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:mnc]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
fah1cg95flig7v7g85wmqpd7lr8ng7p
テンプレート:Mo
10
3871
2313240
14630
2026-08-08T23:44:22Z
Kuroco2k
84207
[[テンプレート:mo]] へのリダイレクトを解除しました
2313240
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:mo]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
7he9spqbu3osbrf4ba9dqis5rpjnn1i
テンプレート:Mr
10
3872
2313248
1599046
2026-08-08T23:45:23Z
Kuroco2k
84207
[[テンプレート:mr]] へのリダイレクトを解除しました
2313248
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:mr]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
behm4zhhbdhnjdb0lh01ey1l4s9akq5
テンプレート:Ms
10
3873
2313247
1599047
2026-08-08T23:45:22Z
Kuroco2k
84207
[[テンプレート:ms]] へのリダイレクトを解除しました
2313247
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:ms]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
1ns770kwxyfvqp9fy0iwt9u285fatep
テンプレート:Mt
10
3874
2313246
1599048
2026-08-08T23:45:22Z
Kuroco2k
84207
[[テンプレート:mt]] へのリダイレクトを解除しました
2313246
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:mt]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
sdm8ztzugi1jjiggy8cshbidd6j2b2z
テンプレート:Myv
10
3875
2313244
14634
2026-08-08T23:45:22Z
Kuroco2k
84207
[[テンプレート:myv]] へのリダイレクトを解除しました
2313244
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:myv]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
ri2ioevdyq7wstg066kgbzingsqcg44
テンプレート:Na
10
3876
2313400
1599050
2026-08-09T07:57:18Z
Kuroco2k
84207
[[テンプレート:na]] へのリダイレクトを解除しました
2313400
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:na]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
a4obm1r8r663b2nrsbhu8vthb8gdw4o
テンプレート:Nah
10
3877
2313399
14636
2026-08-09T07:57:17Z
Kuroco2k
84207
[[テンプレート:nah]] へのリダイレクトを解除しました
2313399
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:nah]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
oyi747ds388fhefjdluj2ep24rvldak
テンプレート:Nav
10
3878
2313397
1599051
2026-08-09T07:57:17Z
Kuroco2k
84207
[[テンプレート:nv]] へのリダイレクトを解除しました
2313397
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:nv]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
9n1j09vegzsmnw0ecu120hls8irfdp2
テンプレート:Ne
10
3879
2313396
1599055
2026-08-09T07:57:16Z
Kuroco2k
84207
[[テンプレート:ne]] へのリダイレクトを解除しました
2313396
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:ne]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
nziqk9hmrcsqz985ecr5p7qmx5zc4o4
テンプレート:Nd
10
3880
2313395
1599054
2026-08-09T07:57:16Z
Kuroco2k
84207
[[テンプレート:nd]] へのリダイレクトを解除しました
2313395
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:nd]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
33vfqrvgqvil2sxtc3h01eywmsj4gix
テンプレート:Ng
10
3881
2313394
1599056
2026-08-09T07:57:15Z
Kuroco2k
84207
[[テンプレート:ng]] へのリダイレクトを解除しました
2313394
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:ng]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
jgt6qg4lyjy1lgdtsw57dvb2spbsvrq
テンプレート:Nn
10
3883
2313392
1599058
2026-08-09T07:57:15Z
Kuroco2k
84207
[[テンプレート:nn]] へのリダイレクトを解除しました
2313392
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:nn]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
3cjp4n50ma4pr2u9z7qcoeqneme3xm5
テンプレート:No
10
3884
2313391
1599059
2026-08-09T07:57:14Z
Kuroco2k
84207
[[テンプレート:no]] へのリダイレクトを解除しました
2313391
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:nb]]、[[テンプレート:nn]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
44abhve87xixg9jyqrgasbpp1rv76ga
テンプレート:Nr
10
3885
2313390
1599060
2026-08-09T07:57:14Z
Kuroco2k
84207
[[テンプレート:nr]] へのリダイレクトを解除しました
2313390
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:nr]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
bbd8xej84s7v2a5h1mrobw2ppmzm2sv
テンプレート:Nv
10
3886
2313389
1599061
2026-08-09T07:57:14Z
Kuroco2k
84207
[[テンプレート:nv]] へのリダイレクトを解除しました
2313389
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:nv]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
9n1j09vegzsmnw0ecu120hls8irfdp2
テンプレート:Ny
10
3888
2313388
1983715
2026-08-09T07:57:14Z
Kuroco2k
84207
[[テンプレート:ny]] へのリダイレクトを解除しました
2313388
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:ny]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
c18riuy0mh5izrdlitdir9yelldterx
テンプレート:Ma
10
3938
2313231
1599041
2026-08-08T23:34:54Z
Kuroco2k
84207
[[テンプレート:mk]] へのリダイレクトを解除しました
2313231
wikitext
text/x-wiki
{| class="sakujo" style="border:solid gray 1px; padding:0 0.5em; margin:1ex auto; font-size: small; width:80%"
|-
| [[ファイル:Icono aviso borrar.svg|50px|削除依頼に提出されています]]
|
このページは'''[[Wiktionary:削除の方針|削除の方針]]'''に従い'''[[Wiktionary:削除依頼|削除依頼]]'''に出されています。[[{{TALKSPACE}}:{{PAGENAME}}|このページのノート]]も参照してください。
この項目の削除可否についての議論が<span class="sakujo-request">[[Wiktionary:削除依頼/2026年8月/テンプレート:ma|該当する削除依頼]]</span>で進行中です。
この項目は'''まだ削除されていません'''。削除に異議のある方は<span class="sakujo-request">[[Wiktionary:削除依頼/2026年8月/テンプレート:ma|該当する削除依頼]]</span>に是非ご参加ください。該当する削除依頼が終了するまで'''このメッセージを剥がさないでください。'''
[[カテゴリ:削除依頼中のページ]]
|}
8mqzy3ykghcm04heafluo8t6j3b3v4f
テンプレート:Li
10
3950
2313254
1599037
2026-08-08T23:48:12Z
Kuroco2k
84207
[[テンプレート:li]] へのリダイレクトを解除しました
2313254
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:li]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
3jb0m5mk1lma3ihdiehfrddl4eqwtta
テンプレート:Lv
10
3951
2313251
1599040
2026-08-08T23:48:12Z
Kuroco2k
84207
[[テンプレート:lv]] へのリダイレクトを解除しました
2313251
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:lv]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
lqq1t4yy7mrd1jloldsc2gyzidcoq83
テンプレート:Mi
10
3952
2313237
1599042
2026-08-08T23:43:42Z
Kuroco2k
84207
[[テンプレート:mi]] へのリダイレクトを解除しました
2313237
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:mi]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
1jg5kb309hvea3j1vs4h9js7vqq4ldc
テンプレート:My
10
3953
2313245
1599049
2026-08-08T23:45:22Z
Kuroco2k
84207
[[テンプレート:my]] へのリダイレクトを解除しました
2313245
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:my]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
01i8dcmphynjcuke8dusk4ljmjk47rq
テンプレート:Nb
10
3954
2313398
1599052
2026-08-09T07:57:17Z
Kuroco2k
84207
[[テンプレート:nb]] へのリダイレクトを解除しました
2313398
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:nb]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
s94vr5x4fkcw2uj67td4knscknfq2j1
テンプレート:Ml
10
3969
2313242
1599044
2026-08-08T23:44:22Z
Kuroco2k
84207
[[テンプレート:ml]] へのリダイレクトを解除しました
2313242
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:ml]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly>
erpq70ihikijp6r4apzy7pic3syql6a
テンプレート:Mk
10
3970
2313229
1599043
2026-08-08T23:30:19Z
Kuroco2k
84207
[[テンプレート:mk]] へのリダイレクトを解除しました
2313229
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:mk]]を使用してください。'''|廃止=y}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly><noinclude>[[カテゴリ:言語表記テンプレート|{{PAGENAME}}]]</noinclude>
7qwm5nh7axrgw6vihc9uw56osnctpi7
Wiktionary:削除依頼
4
7780
2313233
2312939
2026-08-08T23:35:15Z
Kuroco2k
84207
/* 2026年8月 */
2313233
wikitext
text/x-wiki
{{kana-DEFAULTSORT|さくじょいらい}}
{{Wiktionary:削除依頼/説明}}
== 2020年9月 ==
{{/2020年9月/テンプレート:日本語五段活用}}
{{/2020年9月/テンプレート:日本語形容詞活用}}
== 2021年4月 ==
{{/2021年4月/テンプレート:en-simple}}
== 2021年10月 ==
{{Wiktionary:削除依頼/2021年10月/テンプレート:日本語変格活用}}
== 2023年8月 ==
{{/2023年8月/झोल}}
== 2024年5月 ==
{{/2024年5月/ファイル:凵-bw.png}}
{{/2024年5月/ファイル:筆順 揮.png}}
{{/2024年5月/ファイル:筆順 朗.png}}
{{/2024年5月/ファイル:筆順 論.png}}
{{/2024年5月/ファイル:冬.png}}
== 2024年8月 ==
{{/2024年8月/ファイル:卵.png}}
{{/2024年8月/ファイル:私.png}}
{{/2024年8月/ファイル:鬚.png}}
{{/2024年8月/ファイル:金文-者.PNG}}
{{/2024年8月/ファイル:金文-楽.PNG}}
{{/2024年8月/ファイル:藍 (字形).png}}
{{/2024年8月/ファイル:筆順 あ.png}}
{{/2024年8月/ファイル:筆順 花.png}}
== 2024年10月 ==
{{/2024年10月/テンプレート:挨拶カテゴリ}}
== 2024年12月 ==
{{/2024年12月/テンプレート:CategoryTOC/曜日}}
== 2025年5月 ==
{{/2025年5月/テンプレート:ふりがな-}}
== 2025年10月 ==
{{/2025年10月/朝鮮語の文字別の執筆依頼}}
== 2025年12月 ==
{{/2025年12月/カテゴリ:英語 名詞 定形}}
== 2026年1月 ==
{{/2026年1月/hỏa thuyển}}
== 2026年2月 ==
{{/2026年2月/無震帯}}
{{/2026年2月/テンプレート:quote-journal}}
== 2026年3月 ==
{{/2026年3月/カテゴリ:婉曲}}
{{/2026年3月/Unicode付録類}}
{{/2026年3月/テンプレート:sort-ja}}
{{/2026年3月/kosma}}
{{/2026年3月/BlockCategory}}
== 2026年4月 ==
{{/2026年4月/幾微}}
{{/2026年4月/幾希}}
{{/2026年4月/幾望}}
== 2026年6月 ==
{{/2026年6月/旧式ラテン語項目}}
{{/2026年6月/古典ギリシア語の発音テンプレート}}
{{/2026年6月/テンプレート:火星衛星}}
{{/2026年6月/部首の曖昧さ回避ページ}}
{{/2026年6月/テンプレート:accentの関連テンプレート}}
{{/2026年6月/古式分野テンプレート}}
{{/2026年6月/ドイツ語動詞活用表}}
{{/2026年6月/テンプレート:英語 活用 be}}
== 2026年7月 ==
{{/2026年7月/テンプレート:Genomics}}
== 2026年8月 ==
{{/2026年8月/テンプレート:etyl:言語名}}
{{/2026年8月/テンプレート:ma}}
==ログ==
===検索===
<inputbox>
type=fulltext
prefix=Wiktionary:削除依頼
break=no
width=30
searchbuttonlabel=ログを検索
</inputbox>
===年別===
*[[Wiktionary:削除依頼/2007年以前|2007年以前の依頼]]
*[[特別:前方一致ページ一覧/Wiktionary:削除依頼/2008年|2008年の依頼]]
*[[特別:前方一致ページ一覧/Wiktionary:削除依頼/2009年|2009年の依頼]]
*[[特別:前方一致ページ一覧/Wiktionary:削除依頼/2010年|2010年の依頼]]
*[[特別:前方一致ページ一覧/Wiktionary:削除依頼/2011年|2011年の依頼]]
*[[特別:前方一致ページ一覧/Wiktionary:削除依頼/2012年|2012年の依頼]]
*[[特別:前方一致ページ一覧/Wiktionary:削除依頼/2013年|2013年の依頼]]
*[[特別:前方一致ページ一覧/Wiktionary:削除依頼/2014年|2014年の依頼]]
*[[特別:前方一致ページ一覧/Wiktionary:削除依頼/2015年|2015年の依頼]]
*[[特別:前方一致ページ一覧/Wiktionary:削除依頼/2016年|2016年の依頼]]
*[[特別:前方一致ページ一覧/Wiktionary:削除依頼/2017年|2017年の依頼]]
*[[特別:前方一致ページ一覧/Wiktionary:削除依頼/2018年|2018年の依頼]]
*[[特別:前方一致ページ一覧/Wiktionary:削除依頼/2019年|2019年の依頼]]
*[[特別:前方一致ページ一覧/Wiktionary:削除依頼/2020年|2020年の依頼]]
*[[特別:前方一致ページ一覧/Wiktionary:削除依頼/2021年|2021年の依頼]]
*[[特別:前方一致ページ一覧/Wiktionary:削除依頼/2022年|2022年の依頼]]
*[[特別:前方一致ページ一覧/Wiktionary:削除依頼/2023年|2023年の依頼]]
*[[特別:前方一致ページ一覧/Wiktionary:削除依頼/2024年|2024年の依頼]]
*[[特別:前方一致ページ一覧/Wiktionary:削除依頼/2025年|2025年の依頼]]
*[[特別:前方一致ページ一覧/Wiktionary:削除依頼/2026年|2026年の依頼]]
[[カテゴリ:削除関連|いらい]]
cvlwd30i4tcr9ird2lq2r172gjlxxg0
風
0
10541
2313311
2216083
2026-08-09T01:31:00Z
Jiba1219
100610
/* {{L|zh}} */
2313311
wikitext
text/x-wiki
{{kana-DEFAULTSORT|ふう}}
==漢字==
{{kanji|風|0}}
{{kanji variants|风=[[簡体字]]|凮|飌|凬=[[古字]]}}
===字源===
*[[形声文字|形声]]。「[[虫]]」 + 声符「[[凡]]/*[b]rom/」。 「かぜ」を意味する漢語{風/*prəm/}を表す字。もと「[[鳳]]」字が{風}を表していたが([[仮借]])、数百年の空白を経て戦国時代に「虫」に従う「風」字が現れた。「虫」に従う理由は、有力な説として以下の2つがある。
# 西周金文の「鳳」字の、尾羽末端の飾り羽根が変化して「虫」になったという説(字形の演変を参考)。<ref group="字源">曾憲通《談談怎樣考釋古文字》『古文字論壇』第一輯.中山大学古文字研究所. 2016-11-04.</ref><br>音韻学的には、「風/*prəm/」の原字は「凡/*[b]rom/」を声符にしていたが、「風」の発音が*prəm > *prum > *pruŋと変化したため、「鳳」の飾り羽根の部分が(不完全な)声符化を起こして「虫(蟲の省体)/*C.lruŋ/」になったと説明される。<ref group="字源">Laurent Sagart《[https://stan.hypotheses.org/1221 What is an insect doing in the Chinese character for “wind”?]》2021-1-28</ref><br>※文字の一部が変化して声符化する現象「音化」は珍しくない。
# 「風」は、{[[堸]]/虫の巣}または{[[𧍯]]/虫の巣穴}の[[表意文字]]で、{風/かぜ}の意は[[仮借]]という説。<ref group="字源">白於藍《釋”風”——兼説”空穴來風”》『[https://journals.sagepub.com/doi/10.1177/2513850218760276 Journal of Chinese Writing Systems]』Vol 2, Issue 2, pp. 79 - 89⇒[https://mp.weixin.qq.com/s?search_click_id=7583231276846959121-1726588296205-9383024127&__biz=MzA5MjEyMTMyNQ==&mid=2650997525&idx=1&sn=51ffa8f03399c885779c034fda133128&chksm=8b865297bcf1db81186fad692641cd69789435c26f0027b7b2c1e879252348aa819293a7b7fd&scene 概要]</ref>
{{字源}}
===参考文献===
<references group="字源" />
<!--根拠に欠ける俗説のため、いったん控えます 嵐も「あらし」の意は国訓のため風とは無関係→ *[[形声文字|形声]]。「[[虫]]」([[蛇]]、[[竜]]) + 音符「[[凡]]」を合わせた字で、「[[かぜ]]」を起こすと見なされた蛇が原義(「[[虹]]」も同様で意符が「虫」)。「凡」は「[[盤]]」の原字で、[[盥]]盤の側面の象形。「虫」に代えて「[[鳥]]」を用いた文字が「[[鳳]]」であり、両方とも「かぜ」の使いとされた。
**古くは頭子音 pl- をもち、l の残った語が[[嵐]]である。 -->
===意義===
#[[かぜ]]。
#[[病気]]。
#*[[中風]]、[[痛風]]
#ある地域などの様子をもった。
#*[[和風]]、[[洋風]]
=={{L|ja}}==
{{ja-kanji|常用=フウ,フ,かぜ,かざ|施策=教育:2|呉音=フウ,フ|漢音=ホウ|唐音=ホ|訓=かぜ,かざ,い,え,すがた,ならわし,ふり}}
==={{noun}}===
{{wikipedia|風}}
[[Category:{{ja}} {{noun}}|かせ かぜ]]
[[Category:{{ja}} 風|*]]
#('''[[かぜ]]''')[[空気]]の流れ。
#('''[[かぜ]]''')ある勢力の勢い
#('''[[フウ]]''')[[風習]]。[[気風]]。[[慣習]]。[[雰囲気]]。
#*江戸の風を伝える屋敷。
#('''[[フウ]]''')[[風体]]。[[恰好]]。
#*僧侶の風をなす。
#('''[[フウ]]''')[[様子]]。[[ふり]]。
#*家でもだらけた風をしない。
#*知らないふうを装う。
#('''[[フウ]]''')[[性向]]。[[性格]]。[[傾向]]。[[きらい]]。
#*狷介の風がある。
#('''[[フウ]]''')[[体裁]]。聞こえ。
#*風が悪い。
#('''[[フウ]]''')[[様態]]。感じ。
#*そんなふうに言う。そんなふうに思えた。
#*かつおぶしはどういうふうに選択し、どういうふうにして削るか。(北大路魯山人『だしの取り方』)
#*映画における音楽の位置をうんぬんするとき、だれしも口をそろえて重大だという。/なぜ重大なのか。どういうふうに重大なのか。だれもそれについて私に説明してくれた人はない。(伊丹万作『映画と音楽』)
#*誰かに紹介をして貰ふつもりだつたが、それよりも直接にお庭拝見といふふうに名刺を通じた。(室生犀星『名園の落水』)
===={{trans}}====
{{trans-see|かぜ}}
==={{suffix}}===
[[Category:{{ja}} {{suffix}}|かせ かぜ]]
#('''[[フウ]]''')(とくにある[[地域]]の)[[特徴]]を有したさま。[[風味]]。
#*[[スリランカ]]風、[[広東]]風、[[京]]風
#('''フウ''')そのような[[雰囲気]]のあるさま。似ているさま。
#*[[アニメ]]風、[[純正]]風、[[町人]]風、[[日記]]風のエッセイ、[[スパゲティ]]風[[うどん]]
#('''[[かぜ]]''')(多く「〜風を吹かす」の形で)ある[[身分]]に[[仮託]]して、[[いたけだか|居丈高]]になる[[様子]]。
#*[[先輩風]]、役人風
===={{syn}}====
* [[ウィンド]]
===={{rel}}====
* {{ふりがな|嵐|あらし}}
===熟語===
{{top5}}
* [[風圧]]
* [[風雲]]
* [[風化]]
* [[風雅]]
* [[風害]]
* [[風格]]
* [[風紀]]
* [[風景]]
* [[風月]]
* [[風車]]
* [[風習]]
* [[風塵]]
* [[風水]]
* [[風雪]]
* [[風葬]]
* [[風俗]]
* [[風袋]]
* [[風潮]]
* [[風体]]
* [[風土]]
* [[風物]]
* [[風貌]]
* [[風防]]
* [[風味]]
* [[風流]]
* [[風邪]]
* [[風呂]]
* [[神風]]
* [[気風]]
* [[台風]]
* [[痛風]]
* [[中風]]
* [[微風]]
* [[暴風]]
{{bottom}}
=={{L|okm}}==
{{okm-han|tg=포ᇰ|tg2=포ᇰ〮|hm=푸ᇰ|hmj=ᄇᆞᄅᆞᆷ}}
=={{L|zh}}==
{{zh-cat|feng1|名詞|固有名詞|姓}}
{{topcat|zh|風}}
{{trans_link|zh|{{PAGENAME}}}} (簡体字: '''{{l|zh|风}}''')
* '''ローマ字表記'''
** '''[[普通話]]'''
*** '''[[ピンイン]]''': [[fēng]] ([[feng1]])
*** '''[[ウェード式]]''': feng<sup>1</sup>
** '''[[広東語]]'''
*** '''[[イェール式]]''': fung1
** '''[[閩南語]]'''
*** '''[[POJ]]''': hong
** '''[[客家語]]'''
*** '''[[白話字]]''': fûng
** '''[[呉語]]'''
*** '''[[ピンイン]]''': fon1
** '''[[中古音]]''': *pjuwng
** '''[[上古音]]''': *prəm
==={{noun}}===
#{{ふりがな|風|かぜ}}
#{{ふりがな|噂|うわさ}}
==={{name}}===
#中国人の[[姓]]のひとつ。
=={{L|ko}}==
{{ko-han|풍|eumhun=[[바람]] 풍}}
==={{prov}}===
{{top}}
* {{l|ko|소풍}} <[[消風]]>, <[[逍風]]>
* {{l|ko|태풍}} <[[颱風]]>
* {{l|ko|풍경}} <[[風磬]]>
* {{l|ko|풍금}} <[[風琴]]>
* {{l|ko|풍로}} <[[風爐]]>
* {{l|ko|풍문}} <[[風聞]]>
* {{l|ko|풍설}} <[[風說]]>
* {{l|ko|풍편}} <[[風便]]>
* {{l|ko|허풍}} <[[虛風]]>
{{bottom}}
=={{L|vi}}==
{{vi-han|phong}}
[[Category:風|*]]
=={{コード}}==
{{文字コード|jis=1-41-87|mj={{mjmoji|028294}}|gb=EF4C|cns=1-5378|big5=ADB7|ksx=1001-7926}}
{{検字|倉頡=HNHLI,HNMLI|四角=7721.0}}
{{字典|dj=1930.200|hdz=74480.010|大字源=11302|大漢語林=12897|康煕=1411.010|新大字典=19085|新潮漢字=14215|諸橋=43756}}
2rrrcjtjq945j6o5nb55l4uwk0txx6g
anger
0
10556
2313124
1819881
2026-08-08T14:47:24Z
鍼灸
112313
2313124
wikitext
text/x-wiki
=={{en}}==
==={{pron}}===
* {{a|UK}} {{IPA|lang=en|/ˈæŋɡə(ɹ)/}}
* {{a|US}} {{IPA|lang=en|/ˈæŋɡɚ/}}
* {{audio|en|en-us-anger.ogg|音声 (米)}}
=== {{noun}} ===
{{en-noun|~}}
#[[いかり|怒り]]
==== {{rel}} ====
*{{adj}}: [[angry]]
=== {{tranverb}} ===
[[category:{{en}}_{{tranverb}}]]
anger ([[angers]], [[angering]], [[angered]])
#怒らせる
l2pupet1c0i8i3eq6blukm2xy3yes92
2313126
2313124
2026-08-08T14:50:15Z
鍼灸
112313
2313126
wikitext
text/x-wiki
=={{en}}==
==={{pron}}===
* {{a|UK}} {{IPA|lang=en|/ˈæŋɡə(ɹ)/}}
* {{a|US}} {{IPA|lang=en|/ˈæŋɡɚ/}}
* {{audio|en|en-us-anger.ogg|音声 (米)}}
=== {{noun}} ===
{{en-noun|~}}
#[[いかり|怒り]]
==== {{rel}} ====
*{{adj}}: [[angry]]
=== {{verb}} ===
{{en-verb}}
#{{context|transitive|lang=en}}怒らせる
#{{context|intransitive|lang=en}}怒る
2sr53j5016hjuh6nix9ym8tob84kqi0
cop
0
10751
2313155
1809442
2026-08-08T22:38:16Z
Kuroco2k
84207
2313155
wikitext
text/x-wiki
{{also|COP|còp|côp|cöp|cọp|çöp|čop|чоп}}
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|cop}}
=={{L|cy}}==
==={{etym}}===
{{bor+|cy|enm|coppe}} < {{etyl|ang|cy}} {{m|ang|copp}} < {{etyl|gmw-pro|cy}} {{m|gmw-pro|*kopp}}
==={{pron}}===
* {{IPA|lang=cy|kɔp}}
==={{noun}}===
{{cy-noun|m|copynnod|pl2=copynnau}}
#{{context|obsolete|animal|lang=cy}}{{ふりがな|蜘蛛|くも}}。
===={{syn}}====
* {{l|cy|copyn}}, {{l|cy|corryn}}, {{l|cy|pryf cop}}, {{l|cy|pryf copyn}}
===={{drv}}====
* {{l|cy|copyn}}
* {{l|cy|pryf cop}}
* {{l|cy|pryf copyn}}
{{cy-mut|op|c|g|ngh|ch}}
----
=={{L|vo}}==
==={{noun}}===
{{vo-noun}}
#{{context|tool|lang=vo}}{{ふりがな|鍬|くわ}}。
{{vo-decl-noun}}
----
=={{L|en}}==
==={{pron}}===
* {{a|RP}} {{IPA|lang=en|/kɒp/}}
* {{a|GenAm}} {{IPA|lang=en|/kɑp/}}
* {{音声|en|En-au-cop.ogg|音声 (豪)}}
==={{etym}}1===
不詳。恐らく{{etyl|enm}} {{m|enm|*coppen}}, {{m|enm|*copen}} < {{etyl|ang}} {{m|ang|copian}} 又は{{etyl|frm}} {{m|frm|caper}} < {{etyl|la}} {{m|la|capere}} 又は{{etyl|nl}} {{m|nl|kapen}} < {{etyl|ofs}} {{m|ofs|kāpia}} か。
===={{verb}}====
{{en-verb}}
#{{context|transitive|formerly|dialect|now|informal|lang=en}}{{おくりがな2|捕|と|らえる|とらえる}}、[[獲得]]する。
#{{context|transitive|罰・責任などを|lang=en}}{{おくりがな2|受|う|ける|うける}}、{{おくりがな2|負|お|う|おう}}。
#{{context|transitive|lang=en}}{{おくりがな2|盗|ぬす|む|ぬすむ}}。
#{{context|transitive|lang=en}}[[養子]]にする。
# {{lb|en|intransitive|通常、“to”を伴って|slang|悪事などを|lang=en}}{{おくりがな2|認|みと|める|みとめる}}。
====={{drv}}=====
{{top}}
* {{l|en|cop a feel}}
* [[cop a load of|cop a load]]
* {{l|en|cop a look}}
* {{l|en|cop a plea}}
* {{l|en|cop off}}
* {{l|en|cop on}}
* [[cop out]], [[cop-out]]
* {{l|en|cop and blow}}
* {{l|en|cop it}}
* {{l|en|cop off with}}
* {{l|en|cop one's whack}}
* {{l|en|cop oneself on}}
* {{l|en|cop the bun}}
* {{l|en|cop the needle}}
{{bottom}}
==={{etym}}2===
{{m|en|copper}} の短縮 < 動詞 {{m|en|cop}}
===={{noun}}====
{{en-noun}}
#{{context|slang|lang=en}}[[警察]]。
===={{rel}}====
*[[police]]
====={{drv}}=====
{{top}}
* {{l|en|copless}}
* {{l|en|coppish}}
* {{l|en|coppy}}
* {{l|en|cop shop}}
* {{l|en|copaganda}}
* {{l|en|cophouse}}
* {{l|en|copicide}}
* {{l|en|cops and robbers}}
* {{l|en|copwise}}
* {{l|en|death by cop}}
* {{l|en|fair cop}}
* {{l|en|kotong cop}}
* {{l|en|ninja cop}}
* {{l|en|rent-a-cop}}
* {{l|en|robocop}}
* {{l|en|suicide by cop}}
* {{l|en|telecop}}
* {{l|en|beat cop}}
* {{l|en|contempt of cop}}
* {{l|en|cop car}}
* {{l|en|cop knock}}
* {{l|en|cop-killer}}
* {{l|en|cop-wise}}
* {{l|en|fish cop}}
* {{l|en|good cop bad cop}}
* {{l|en|grammar cop}}
* {{l|en|gravel road cop}}
* {{l|en|mall cop}}
* {{l|en|motor cop}}
* {{l|en|silent cop}}
{{bottom}}
==={{etym}}3===
{{etyl|enm}} {{m|enm|coppe}} < {{etyl|ang}} {{m|ang|*coppe}} < {{m|ang|copp}} < {{etyl|gmw-pro}} {{m|gmw-pro|*kopp}} < {{etyl|gem-pro}} {{m|gem-pro|*kuppaz}} < {{etyl|ine-pro}} {{m|ine-pro|*gew-}}
===={{noun}}====
{{en-noun}}
#{{context|obsolete|spider|lang=en}}{{ふりがな|蜘蛛|くも}}。
==={{etym}}4===
{{etyl|enm}} {{m|enm|cop}}, {{m|enm|coppe}} < {{etyl|ang}} {{m|ang|cop}}, {{m|ang|copp}} < {{etyl|gmw-pro}} {{m|gmw-pro|*kopp}} < {{etyl|gem-pro}} {{m|gem-pro|*kuppaz}} < {{etyl|ine-pro}} {{m|ine-pro|*gew-}}
===={{noun}}====
{{en-noun}}
#{{context|obsolete|丘などの|lang=en}}{{ふりがな|頂|いただき}}、[[頂上]]。
#{{context|obsolete|lang=en}}{{ふりがな|頭|あたま}}、[[頭頂]]。{{defdate|14|15世紀}}
==={{anag}}===
* {{anagrams|en|a=cop|CPO|OCP|OPC|PCO|POC|PoC}}
----
=={{L|apq}}==
==={{etym}}===
{{etyl|qfa-adm-pro|apq}} {{m|qfa-adm-pro|*cup}}
==={{noun}}===
{{head|apq|noun}}
#{{context|container|lang=apq}}{{ふりがな|籠|かご}}。
----
=={{L|oc}}==
==={{noun}}===
{{oc-noun|m}}
#[[còp]]の異綴。
----
=={{L|ca}}==
==={{alter}}===
* {{l|ca|colp}} (方言)
==={{etym}}===
{{etyl|roa-oca|ca}} {{m|roa-oca|colp}} < {{etyl|LL.|ca}} {{m|la|colpus}} < {{etyl|la|ca}} {{m|la|colaphus}}
==={{pron}}===
* {{ca-IPA|ò}}
==={{noun}}===
{{ca-noun|m}}
#[[打撃]]。
#[[時機]]、[[機会]]。
===={{syn}}====
* (語義2) {{l|ca|vegada}}, {{l|ca|volta}}
===={{drv}}====
* {{l|ca|copejar}}
* {{l|ca|cop de gràcia}}
* {{l|ca|cop baix}}
* {{l|ca|cop d'estat}}
* {{l|ca|cop d'ull}}
* {{l|ca|de cop}}
* {{l|ca|un cop}}
----
=={{L|fro}}==
==={{noun}}===
{{fro-noun|m}}
#[[colp]]の異形。
----
=={{L|gd}}==
==={{etym}}===
{{etyl|mga|gd}} {{m|mga|copp}} < {{etyl|ang|gd}} {{m|ang|copp}} 又は{{etyl|enm|gd}} {{m|enm|copp}} < {{etyl|gmw-pro|gd}} {{m|gmw-pro|*kopp}}
==={{pron}}===
* {{IPA|lang=gd|kʰɔhp}}
==={{noun}}===
{{gd-noun|g=m|gen=coip|pl=coip}}
#{{ふりがな|泡|あわ}}。
===={{drv}}====
* {{l|gd|copach}}
* {{l|gd|cop na mara}}
* {{l|gd|copraich}}
* {{l|gd|cop ri do bheul}}
==={{verb}}===
{{gd-verb|past=chop|fut=copidh|vn=copadh|pp=copte}}
#{{context|nautical|lang=gd}}[[転覆]]する。
#{{おくりがな3|泡|あわ||立|だ|つ|あわだつ}}。
{{gd-mut-cons|c|op}}
----
=={{L|enm}}==
==={{alter}}===
* {{l|enm|cope}}, {{l|enm|coppe}}
==={{etym}}===
{{etyl|ang|enm}} {{m|ang|cop}} < {{etyl|gmw-pro|enm}} {{m|gmw-pro|*kopp}}
==={{pron}}===
* {{IPA|lang=enm|kɔp}}
==={{noun}}===
{{enm-noun|pl=coppes}}
#[[山頂]]。
#{{ふりがな|頂|いただき}}、[[頂上]]。
#{{context|anatomy|lang=enm}}{{ふりがな|頭|あたま}}、[[頭頂]]。
===={{desc}}====
* {{desc|cy|copa|bor=1}}
* {{desc|en|cop}}
* {{desc|sco|cop}}, {{l|sco|coppe}}
* {{desc|yol|kappas}}
----
=={{L|fr}}==
==={{etym}}===
[[copain]]の短縮
==={{pron}}===
* {{fr-IPA|coppe}}
==={{noun}}===
{{fr-noun|m}}
#{{context|informal|lang=fr}}{{ふりがな|友達|ともだち}}。
lsjhxkbc3eclz2kydi4066oc9zb98rw
ねる
0
11411
2313373
2001064
2026-08-09T06:23:43Z
ちょこれ゚いとみんと
129959
2313373
wikitext
text/x-wiki
{{also|ネル}}
=={{L|ja}}==
==={{verb}}:寝る===
{{ja-verb}}【[[寝]]る、[[寐]]る】
#[[睡眠]]をとる。[[ねむる]]。
#*「私は今夜寝る所もないので、どうしたものかと考えているのです」と、恐る恐る返事をしました。([[w:芥川龍之介|芥川龍之介]] 『杜子春』)
#横たわる。
#*[[横臥]]したいと思ったが'''寝る'''所がないから机の上に[[つっぷす|突伏し]]て右に左に頭をもたせてみたが胸苦しさは増すばかりで全身は[[あせばむ|汗ばん]]で来た。([[w:寺田寅彦|寺田寅彦]] 『病中記』)
#{{タグ|ja|婉曲}}(「〜とねる」の形で)[[性交]]する。
#*[[行状]]だってちっとも自慢することはない、素人の娘、ひとの[[かみさん]]、[[なか]](新吉原)には[[なじみ|馴染]]もいたし品川も知っている、酔ったときには[[けころ]]と'''寝た'''こともあるくらいで、ただ、[[しんそこ]][[ほれる|惚れ]]た相手がなかった、というのが[[とりえ|取り得]]といえばいえたかもしれない。([[w:山本周五郎|山本周五郎]]『おさん』)
#[[活用]]されないままである。
===={{conjug}}====
{{日本語下一段活用}}
===={{ant}}====
*[[おきる]]
===={{rel}}====
語義1
*他動詞形:[[ねかす]]、[[ねかせる]]、[[ねせる]]
*[[ねいる]]、[[ねこむ]]、[[ねちがえる]]、[[ねつく]]、[[ねむる]]
*[[ねおき]]、[[ねごと]]、[[ねざめ]]、[[ねたきり]]、[[ねちがえ]]、[[ねつき]]、[[ねびえ]]、[[ねものがたり]]
===={{idiom}}====
語義1
*[[ねてもさめても]]
語義3
*[[時代と寝る]]
===={{pron}}====
{{ja-pron|acc=2}}
{{ja-accent-common|region=京阪|h||ねる}}
===={{trans}}====
{{trans-top|眠る}}
*{{T|en}}: [[sleep]], [[go to bed]]
*{{T|eo}}: [[dormi]]
*{{T|fi}}: [[nukkua]], [[käydä nukkumaan]]
*{{T|no}}:
*:{{T|nb}}: [[sove]]
{{trans-bottom}}
{{trans-top|横たわる}}
*{{T|en}}: [[lie]]
*{{T|eo}}: [[kuŝiĝi]]
*{{T|tr}}: [[yatmak]]
*{{T|fi}}: [[maata]]
{{trans-bottom}}
{{trans-top|性交する}}
*{{T|eo}}: [[koiti]]
*{{T|fi}}: [[maata]]
{{trans-bottom}}
===={{desc}}====
* {{desc|ycr|neru}}
==={{verb}}:練る===
'''ねる'''【[[練]]る [[錬]]る、[[煉]]る、[[邌]]る】
# [[ひ|火]]にかけるなどして、[[時間]]をかけて、[[むら]]のないように[[こねる|こね]][[かためる|固める]]。
#*小児が外に遊ぶ時は土を'''煉り'''て、様様の物を作る(新保磐次『日本読本』1887)
# [[金属]]を[[やく|焼いて]][[硬質]]なものに[[きたえる]]。
# [[人格]]、[[学問]]、[[技能]]を鍛える。修行する。[[修養]]する。
#*先ず心境を'''練る'''ことをしないで、ただ先へとばかり進みたがるのは、多くの未成大家の弊である。([[w:豊島与志雄|豊島与志雄]]『旅人の言』「野に声なし」1924)<!--1955年没-->
# よりよくするために[[内容]]を[[検討]]したり、[[て|手]]を[[くわえる|加え]]たりする。
#*美妙巧緻の文章をもて其の模範となし師表となしもて其文を'''練る'''べきなり(坪内逍遙『小説神髄』上「小説の裨益」1886)
# [[海水]]を[[にる|煮て]][[しお|塩]]を[[精製]]する。
# [[行列]]を[[つくる|作って]][[ゆっくり]][[すすむ|進む]]。
#*太夫とおなじ顔して、'''練っ'''てゆくもおかし(浮世草子・傾城色三味線、1701)
===={{conjug}}====
{{日本語五段活用}}
===={{drv}}====
* [[ねりきり|練り切り]]{{wp|練り切り}}、[[ねりもの|練り物]]{{wp|練り物}}
====={{syn}}=====
語義1
*{{おくりがな2|捏|こ|ねる|こねる}}
語義2
*[[錬成]]する、[[鍛錬]]する
語義3
*[[錬成]]する、[[鍛錬]]する、[[修練]]する。
====={{prov}}=====
語義1
*{{おくりがな3|捏|ね|り|固|かた|める|ねりかためる}}
*{{おくりがな3|練|ね|り|固|かた|める|ねりかためる}}
語義4
*{{おくりがな3|練|ね|り|上|あ|げる|ねりあげる}}
語義6
*{{おくりがな3|練|ね|り|歩|ある|く|ねりあるく}}
===={{pron}}====
{{ja-pron|acc=1}}
{{ja-accent-common|region=京阪|h|ね|る}}
===={{trans}}====
{{trans-top|語義1:こねる}}
*{{T|eo}}: [[knedi]]
{{trans-bottom}}
{{trans-top|語義2:(金属を)鍛える}}
*{{T|eo}}: [[forĝi]], [[hardi]]
*{{T|en}}:{{t|en|forge}}
{{trans-bottom}}
{{trans-top|語義3:修養する}}
*{{T|eo}}: [[forĝi]], [[hardi]]
*{{T|en}}:{{t|en|train}}、{{t|en|polish}}
{{trans-bottom}}
{{trans-top|語義4:検討する}}
*{{T|en}}:{{t|en|polish}}、{{t|en|elaborate}}、{{t|en|gestate}}
{{trans-bottom}}
f90hzo8pyaa4ezl6g6yps6uj6ksx1q4
plumbum
0
11842
2313118
1544957
2026-08-08T14:05:31Z
M-30722
1202
2313118
wikitext
text/x-wiki
=={{L|ms}}==
==={{alter}}===
* {{l|ms|pelambam}}
* {{l|ms|ڤلومبوم|sc=Arab}}
* {{l|ms|ڤلمبم|sc=Arab}}
==={{etym}}===
{{etyl|la|ms}} {{m|la|plumbum}}
==={{pron}}===
* {{IPA|lang=ms|[plumbom]|[plumbəm]|[plambəm]}}
* {{rhymes|umbom|bom|om}}
==={{noun}}===
{{ms-noun|j=ڤلومبوم}}
#{{context|chemical element|metal|lang=ms}}{{ふりがな|鉛|なまり}}。
===={{syn}}====
* {{l|ms|timah hitam}} / {{l|ms|تيمه هيتم|sc=Arab}}
* {{l|ms|timbel}} / {{l|ms|تيمبل|sc=Arab}}
=={{L|la}}==
==={{etym}}===
{{etyl|grc|la}} {{m|grc|μόλυβδος}}
==={{pron}}===
* {{la-IPA|plumbum}}
==={{noun}}===
{{la-noun+|plumbum<2>}}
#{{context|chemical element|metal|uncountable|lang=la}}{{ふりがな|鉛|なまり}}。
# 鉛玉([[銃弾]])。
#{{context|tool|lang=la}}[[鉛筆]]。
{{la-ndecl|plumbum<2>}}
===={{drv}}====
* {{l|la|plumbum album}}
* {{l|la|plumbum nigrum}}
* 元素記号:[[Pb]]
===={{rel}}====
{{top}}
* {{l|la|plumbāgo}}
* {{l|la|plumbāre}}
* {{l|la|plumbārium}}
* {{l|la|plumbārius}}
* {{l|la|plumbātūra}}
* {{l|la|plumbātus}}
* {{l|la|plumbea}}
* {{l|la|plumbeum}}
* {{l|la|plumbeus}}
* {{l|la|plumbōsus}}
{{bottom}}
===={{desc}}====
{{top}}
* {{desc|ast|plomu}}
* {{desc|rup|pliumbu}}, {{l|rup|pljumbu}}
* {{desc|sq|plumb}}
* {{desc|it|piombo}}
* {{desc|cy|plwm}}
* {{desc|vec|piònbo}}
* {{desc|en|plumb}}, {{l|en|plumber}}, {{l|en|plumbing}}
* {{desc|oc|plomb}}
* {{desc|ca|plom}}
* {{desc|gl|chumbo}}
* {{desc|co|piombu}}
* {{desc|sc|peumu}}, {{l|sc|piumbu}}, {{l|sc|piumu}}, {{l|sc|plumbu}}
* {{desc|scn|chiummu}}
* {{desc|es|plomo}}
* {{desc|nap|cchiummo}}
* {{desc|fr|plomb}}, {{l|fr|plombe}}
** {{desc|de|Plombe|bor=1}}
* {{desc|fur|plomp}}, {{l|fur|plomb}}
* {{desc|pt|chumbo}}, {{l|pt|prumo}}
* {{desc|li|plómb}}
* {{desc|ro|plumb}}
* {{desc|rm|plum}}, {{l|rm|plùn|g=m}}, {{l|rm|plùm|g=m}}, {{l|rm|plom|g=m}}
{{bottom}}
norkk02hpwpbikk3822wmpcrz8pj5px
重
0
13047
2313357
2183945
2026-08-09T04:29:17Z
Jiba1219
100610
/* {{L|zh}} */
2313357
wikitext
text/x-wiki
{{kana-DEFAULTSORT|じゅう}}
==漢字==
{{kanji|里|2}}
{{kanji variants|𫟯=[[俗字]]}}
{{筆順}}
===字源===
* [[象形文字|象形]]。荷物(音符「[[東]] {{phoneme|*TONG}}」を兼ねる)を背負った人物を象る<ref group="字源">丁山 『説文闕義箋』 中央研究院歴史語言研究所、1930年、28頁。<br>柯昌濟 『韡華閣集古録跋尾』 余園叢刻、1935年。<br>張世超、孫凌安、金国泰、馬如森 『金文形義通解』 中文出版社、1996年、2058頁。<br>林志強等評注 『《文源》評注』 中国社会科学出版社、2017年、564頁。</ref>。「[[おもい]]」を意味する[[漢語]]{重 {{phoneme|*drongɁ}}}を表す字。のち仮借して「[[かさねる]]」を意味する漢語{重 {{phoneme|*drong}}}にも用いる。
<references group="字源" />
===音===
{| class="wikitable" style="text-align:center"
|+ 字音一覧
! rowspan=2 | !! colspan=4 | [[:w:中古音|中古音]] !! [[#中国語|現代中国語]] !! colspan=2|[[#日本語|日本語]] !! [[#朝鮮語|朝鮮語]] !! [[#ベトナム語|ベトナム語]]
|-
! [[:w:三十六字母|三十六字母]] !! 中古音の[[四声]] !! 『[[w:広韻|広韻]]』 !! 『[[:s:zh:平水韻|平水韻]]』 !! [[普通話]] !! [[漢音]] !! [[呉音]] !! [[:w:朝鮮漢字音|朝鮮漢字音]] !! [[:w:チュハン|漢越語]]
|-
! rowspan=2 | [[#A: 上声腫韻あるいは去声宋(用)韻|A]]
| rowspan=3 | [[:w:zh:澄母|澄母]] || [[:w:四声|上声]] || colspan=2 | 腫韻 || rowspan=2 | zhòng || rowspan=3 | チョウ || rowspan=3 | ヂウ<br>ヂュウ || rowspan=3 | 중 || rowspan=2 | trọng
|-
| [[:w:四声|去声]] || 用韻 || 宋韻
|-
! [[#B: 平声冬(錘)韻|B]]
| [[:w:四声|平声]] || 錘韻 || 冬韻 || rowspan="2" | chóng || trùng
|}
<span style="font-size:smaller;">(呉音を「ヂウ」とする字書も「ヂュウ」とする字書もある。)</span>
===意義===
(括弧内は『広韻』、外は『平水韻』に従う。一致する場合括弧は記さず。)
====A: 上声腫韻あるいは去声宋(用)韻====
===== {{adj}} =====
#<span id="omoi">'''[[おもい]]'''</span>。
#*{{ant}}: 「'''[[軽]]'''」
#[[おもおもしい]]。
#*「[[厳重]]」、「[[丁重]]」、「[[慎重]]」、「[[重罪]]」、「{{ふりがな|自重|じちょう}}」
#([[:w:目的語|賓語]]を伴って)'''[[おもんじる]]'''。[[とうとぶ]]。大切にする。
#*{{drv}}: 「[[尊重]]」「[[丁重]]」
#*{{ant}}: 「'''[[軽]]'''」
====={{noun}}=====
#'''[[おもさ]]'''。
#*{{drv}}: 「[[軽重]]」、「{{ふりがな|自重|じじゅう}}」
#*{{ant}}: 「'''[[軽]]'''」
#[[ベトナム語]]の[[声調]]の一つ「'''[[:w:zh:越南語音系#聲調|重声]]'''」。[[thanh nặng]]のこと。
#[[:w:zh:日本漢字音的聲調#漢音的聲調|日本漢字音]]において[[四声]]の下位分類。低く始まる[[声調]]と推定されている。「重」<span style="font-size:smaller;">(全濁字)</span>など[[:w:声母|声母]]が[[:w:清濁|全濁]]または[[:w:清濁|次濁]]である字の[[漢音]]に確認される。
#*「平聲直低、有<sub>㆑</sub>輕有<sub>㆑</sub>'''重'''。」({{ふりがな|平聲|ひゃうしゃう|yomi2=へいせい|yomilink=n}}は直低にして、{{ふりがな|輕|けい|yomilink=n}}有りて{{ふりがな|重|ちょう|yomilink=n}}有り。)
#*:[[:w:四声|平声]]は平らで低く、[[軽]]があるとともに'''重'''がある。<span style="font-size:smaller;">([[:w:安然|安然]]『悉曇藏』)</span>
#*{{ant}}: 「'''[[軽]]'''」
#*{{rel}}: 「[[陽]]」
====B: 平声冬(錘)韻====
===== {{verb}} =====
#<span id="kasanaru">'''[[かさなる]]'''</span>。<span id="kasaneru">'''[[かさねる]]'''</span>。
#*「[[重複]]」、「[[重畳]]」、「[[重層的]]」
#*「'''重'''山'''重'''水'''重'''慶府」
#*:重なった山、重なった河川、{{ふりがな|[[w:重慶市|重慶府]]|ぢゅうけいふ|yomilink=n}}。<span style="font-size:smaller;">([[:w:zh:蒋一葵|蔣一葵]]『堯山堂外紀』)</span>
===== {{adv}} =====
#'''[[かさねて]]'''。[[ふたたび]]。
#*「爾時二子欲<sub>三</sub>重宣<sub>二</sub>其意<sub>一</sub>、」({{おくりがな2|爾|そ|の|その}}時に二子{{おくりがな2|重|かさ|ね|かさぬ}}て{{おくりがな2|其|そ|の|その}}意を{{おくりがな2|宣|の|べ|のぶ}}むと欲して、)
#*:そのときに二人の子は''もう一度'' 自分の([[沙門]]になるという)意思を(母親に)告げようと思って、<span style="font-size:smaller;">([[:s:zh:妙法蓮華經/27|『妙法蓮華經』「妙莊嚴王本事品第二十七」]])</span>
===== 量詞 =====
#<span id="e">'''[[え]]'''</span>。どれほどかさなったかを表す。
#*「[[十重二十重]]」。
#*「輕舟已過萬'''重'''山」({{ふりがな|[[軽舟|輕舟]]|けいしゅう}}{{おくりがな2|已|すで|に|すでに}}{{おくりがな2|過|す|ぐ|すぐ}}{{ふりがな|[[万重|萬重]]|ばんちょう|yomilink=n}}の山)
#*:(私の乗る)軽くて速く進む小舟がすでに幾重もの山の間を通り過ぎた。<span style="font-size:smaller;">(『[[:q:ja:李白|早發<sub>二</sub>白帝城<sub>一</sub>]]』)</span>
=={{L|ja}}==
[[Category:{{ja}}]]
{{ja-kanji|常用=ジュウ,チョウ,え,おも-い,かさ-ねる,かさ-なる|施策=教育:3|呉音=ジュウ|漢音=チョウ|訓=え,おも-い,かさ-ねる,かさ-なる,しげ,おも-なう,おも-り,しげ-る,さね}}
==={{noun}}===
[[category:{{ja}}_{{noun}}]]
#(ジュウ)[[重箱]]。お重。また重箱に入った料理。
==={{suffix}}===
[[category:{{ja}}_{{suffix}}]]
'''重'''(ジュウ、え)
#(ジュウ)[[音読み]]の[[基数詞]]とともに、ものが重なり合っている状況の語を構成する。
#*{{ruby|[[二重顎]]|にじゅうあご}}、{{ruby|[[三重苦]]|さんじゅうく}}、{{ruby|[[四重奏]]|しじゅうそう}}、{{ruby|[[五重塔]]|ごじゅうのとう}}など。
#(え)「[[え#接尾辞]]」を参照のこと。
==={{prov}}===
{{top}}
*[[重重]]
*[[重圧]]
*[[重音]]
*[[重荷]]
*[[重金属]]
*[[重元素]]
*[[重言]]
*[[重合]]
*[[重婚]]
*[[重重]]
*[[重唱]]
*[[重心]]
*[[重臣]]
*[[重水]]
*[[重奏]]
*[[重大]]
*[[重点]]
*[[重任]]
*[[重版]]
*[[重文]]
*[[重用]]
*[[重要]]
*[[重量]]
*[[重力]]
*[[重傷]]
*[[重厚]]
*[[重刷]]
*[[重度]]
*[[重役]]
*[[重刑]]
*[[重箱]]
*[[重犯]]
*[[重複]]
*[[重罰]]
*[[重視]]
*[[重機]]
{{bottom}}
{{top}}
*[[自重]]
*[[持重]]
*[[加重]]
*[[荷重]]
*[[過重]]
*[[比重]]
*[[貴重]]
*[[多重]]
*[[厳重]]
*[[鰻重]]
*[[軽重]]
*[[敬重]]
*[[愛重]]
*[[深重]]
*[[慎重]]
*[[体重]]
{{bottom}}
=={{L|zh}}==
{{zh-cat|zhong4|常=1|adjective|noun|verb|adverb|hsk=甲|hsk2=5}}
{{zh-han
|m=zhòng,chóng
|c=cung4 / cung5 / zung6
|mn=tāng/tiōng/têng/tiông
|pfs=chhùng / chhûng / Tshùng
|w-mini=zon1 / zon2
}}
** '''[[中古音]]''': *drjowngX, *drjowngH, *drjowng
** '''[[上古音]]''': *N-t‹r›oŋʔ, *N-t‹r›oŋʔ-s, *m-troŋ {*[m]-troŋ}
==={{adjective}}===
zhòng
#{{おくりがな2|重|おも|い|おもい}}。
#{{おくりがな2|甚|はなは|だしい|はなはだしい}}。
==={{noun}}===
zhòng
#[[重量]]。
==={{verb}}===
chóng
#[[重複]]する。
zhòng
#[[重視]]する。
==={{adverb}}===
#(広東語 jung6)[[まだ]]。
#(広東語 jung6)[[もっと]]。
chóng
#{{おくりがな2|再|ふたた|び|ふたたび}}。
===量詞===
[[Category:{{zh}}_量詞|chong2]]
chóng
#[[層]]。
[[Category:{{yue}}|jung6]]
[[Category:{{yue}}_{{adjective}}|chung5]]
[[Category:{{yue}}_{{adverb}}|jung6]]
==={{prov}}===
{{rel-top}}
*{{l|zh|重逢}}
*{{l|zh|重印}}
*{{l|zh|重演}}
*{{l|zh|重温}}
*{{l|zh|重温旧梦}}
*{{l|zh|重活}}, {{l|zh|重活儿}}
*{{l|zh|重刊}}
*{{l|zh|重机关枪}}
*{{l|zh|重起炉灶}}
*{{l|zh|重金}}
*{{l|zh|重九}}
*{{l|zh|重沓}}
*{{l|zh|重型}}
*{{l|zh|重建}}
*{{l|zh|重午}}, {{l|zh|重五}}
*{{l|zh|重孝}}
*{{l|zh|重工业}}
*{{l|zh|重行}}
*{{l|zh|重彩}}
*{{l|zh|重施故技}}
*{{l|zh|重修}}
*{{l|zh|重修旧好}}
*{{l|zh|重出}}
*{{l|zh|重床叠屋}}
*{{l|zh|重振}}
*{{l|zh|重新}}
*{{l|zh|重新做人}}
*{{l|zh|重申}}
*{{l|zh|重整旗鼓}}
*{{l|zh|重生}}
*{{l|zh|重生父母}}
*{{l|zh|重足而立}}
*{{l|zh|重托}}
*{{l|zh|重担}}
*{{l|zh|重地}}
*{{l|zh|重提}}
*{{l|zh|重播}}
*{{l|zh|重犯}}
*{{l|zh|重武器}}
*{{l|zh|重文}}
*{{l|zh|重兵}}
*{{l|zh|重返}}
*{{l|zh|重望}}
*{{l|zh|重油}}
*{{l|zh|重洋}}
*{{l|zh|重来}}
*{{l|zh|重炮}}
*{{l|zh|重臂}}
*{{l|zh|重蹈覆辙}}
*{{l|zh|重霄}}
*{{l|zh|重伤}}
*{{l|zh|重创}}
*{{l|zh|重剑}} (zhòngjiàn)
*{{l|zh|重办}}
*{{l|zh|重压}}
*{{l|zh|重叠}}
*{{l|zh|重围}}
*{{l|zh|重圆}}
*{{l|zh|重处}}
*{{l|zh|重复}}
*{{l|zh|重头戏}}
*{{l|zh|重奖}}
*{{l|zh|重孙}}
*{{l|zh|重孙女}}, {{l|zh|重孙女儿}}
*{{l|zh|重审}}
*{{l|zh|重峦叠嶂}}
*{{l|zh|重张}}
*{{l|zh|重弹老调}}
*{{l|zh|重惩}}
*{{l|zh|重样}}
*{{l|zh|重氢}}
*{{l|zh|重现}}
*{{l|zh|重茬}}
*{{l|zh|重见天日}}
*{{l|zh|重规叠矩}}
*{{l|zh|重视}}
*{{l|zh|重译}}
*{{l|zh|重话}}
*{{l|zh|重读}}
*{{l|zh|重负}}
*{{l|zh|重责}}
*{{l|zh|重镇}}
*{{l|zh|重阳}}
*{{l|zh|繁重}} (fánzhòng)
{{rel-bottom}}
=={{L|ko}}==
{{ko-han|중|eumhun=[[무겁다|무거울]] 중}}
==={{prov}}===
* {{l|ko|삼중살}} <[[三重殺]]>
* {{l|ko|소중}} <[[所重]]>
=={{L|vi}}==
{{vi-han|trọng|trùng|pos=verb|pos2=name|cat2=人名}}
==={{verb}}===
trọng
#{{おくりがな2|重|おも|んじる|おもんじる}}。
trùng
#[[同時]]に{{おくりがな2|起|お|こる|おこる}}。
==={{name}}===
[[Trọng]]
#ベトナム人のミドルネームのひとつ。
=={{コード}}==
{{文字コード|jis=1-29-37|mj={{mjmoji|026593|060258}}|gb=D6D8|cns=1-536C|big5=ADAB|ksx=1001-716C}}
{{検字|倉頡=HJWG|四角=2010.4}}
{{字典|dj=1791.070|hdz=63680.020|大字源=10482|大漢語林=11883|康煕=1291.030|新大字典=17651|新潮漢字=13167|諸橋=40132}}
lbfw97tt5t5479mxq4lqn3wyoq433ew
haw
0
15723
2313153
2111945
2026-08-08T22:38:16Z
Kuroco2k
84207
2313153
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|haw}}
----
=={{ain}}==
[[File:MapOfAinuLanguage-Voice.svg|thumb|400px|アイヌ語地図:声]]
{{ain-kana}}
==={{pron}}===
* {{ain-IPA}}
==={{noun}}===
{{head|ain|noun|概念形||所属形|hawe|所属形|hawehe}}
#(人間や動物の)[[声]];(バイオリンなどの)[[音]]。
====派生語====
*[[hawas]] ハワㇱ 声がする、言っているのが聞こえる
*[[hawe]] ハウェ ~と言うこと
*[[hawean]] ハウェアン (単数)言う
*[[hawekoyki]] ハウェコイキ 怒鳴りつける
*[[haweoka]] ハウェオカ (沙流方言などで。複数)言う
*[[haweokay]] ハウェオカイ (多くの方言で。複数)言う
*[[hawkoas]] ハウコアㇱ 問題になる
*[[hawkor]] ハウコㇿ 声を出す、ものを言う、しゃべる
*[[hawpis]] ハウピㇱ 何か言う
*[[hawsak]] ハウサㇰ 黙る、声を立てない
===={{syn}}====
* [[hum]] フㇺ (太鼓など一般の)音
----
==英語==
[[Category:英語]]
[[Category:英語 名詞]]
===発音===
*{{IPA|hɔː}}
* {{audio|en|LL-Q1860 (eng)-Vealhurl-haw.wav|音声 (英)}}
===名詞===
# [[さんざし]]の実
===関連語===
*[[hawthorn]]
pkrjsp2xoordtefr1tgroel71qdlny6
愛情
0
15819
2313330
2148294
2026-08-09T02:45:22Z
Jiba1219
100610
2313330
wikitext
text/x-wiki
{{kana-DEFAULTSORT|あいじょう}}
=={{L|ja}}==
{{ja-kanjitab|あい|じょう|yomi=o,goon}}
==={{pron}}===
{{ja-pron|あいじょう|acc=0}}
{{ja-accent-common|region=京阪|h||あいじょー}}
==={{noun}}===
{{ja-noun|[[あいじょう]]}}
# 対象を[[いつくしむ]][[気持ち]]。
===={{rel}}====
*[[愛情表現]]
===={{trans}}====
{{trans-top}}
*{{T|is}}: [[elska]], [[ást]]
*{{T|ga}}: [[grá]]
*{{T|af}}: [[liefde]]
*{{T|ar}}: {{ARchar|[[حب]]}} (ħubb)
*{{T|sq}}: [[dashuri]] {{f}}
*{{T|hy}}: [[սեր]] (ser)
*{{T|it}}: [[amore]] {{m}}
*{{T|ia}}: [[amor]]
*{{T|id}}: [[cinta]]
*{{T|cy}}: [[cariad]] {{m}}
*{{T|uk}}: [[кохання]] (kokhannja), [[любов]] (ljubov)
*{{T|ur}}: {{URchar|[[محبت]]}} (muhabbat) {{f}}, {{URchar|[[عشق]]}} ('išq) {{m}}, {{URchar|[[پیار]]}} (pyār) {{m}}
*{{T|en}}: [[love]], [[affection]]
*{{T|ee}}: [[lɔlɔ̃]]
*{{T|eo}}: [[amo]]
*{{T|et}}: [[armastus]]
*{{T|nl}}: [[liefde]] {{f}}
*{{T|ca}}: [[amor]] {{m}}
*{{T|el}}: [[αγάπη]] (agápi)
*{{T|ky}}: [[сүйүү]] (süyüü), [[макаббат]] (maqabbat)
*{{T|sm}}: [[alofa]]
*{{T|sv}}: [[kärlek]] {{c}}
*{{T|gd}}: [[gràdh]] {{m}}, [[spèis]] {{f}}
*{{T|es}}: [[amor]] {{m}}
*{{T|sk}}: [[láska]] {{f}}
*{{T|sl}}: [[ljubezen]] {{f}}
*{{T|sh}}:
*:キリル文字: {{t|sh|љубав|f}}
*:ラテン文字: {{t|sh|ljubav|f}}
*{{T|th}}: {{lang|th|[[รัก]]}}、{{THchar|[[ความรัก]]}} (khwamrak)
*{{T|tl}}: [[pag-ibig]]
*{{T|tt}}: [[ярату]]
*{{T|ta}}: [[காதல்]] (Kadhal, 男女間の性愛), [[அன்பு]], [[பாசம்]]
*{{T|cs}}: [[láska]] {{f}}
*{{T|cv}}: [[юрату]]
*{{T|te}}: [[ప్రేమ]] (prEma)
*{{T|da}}: [[kærlighed]]
*{{T|de}}: [[Liebe]] {{f}}
*{{T|tr}}: [[sevgi]]
*{{T|no}}: [[kjærlighet]]
*{{T|haw}}: [[aloha]]
*{{T|hu}}: [[szeretet]]
*{{T|hi}}: [[प्यार]] (pyār) {{m}}, [[प्रेम]] (prem) {{m}}, [[इश्क़]] (išq) {{m}}, [[मुहब्बत]] (muhabbat) {{f}}
*{{T|fi}}: [[rakkaus]]
*{{T|fr}}: [[amour]] {{m}}
*{{T|br}}: [[karantez]] {{f}}
*{{T|vi}}: [[tình yêu]]
*{{T|he}}: {{he-translation|אהבה|ahavá}} {{f}}
*{{T|fa}}: {{FAchar|[[عشق]]}} (‘eshq), {{FAchar|[[مهر]]}} (mehr),[[محبت]] (mahabbat), [[عاطفه]] (‘ātefe)
*{{T|pl}}: [[miłość]] {{f}}
*{{T|pt}}: [[amor]]
*{{T|mi}}: [[aroha]]
*{{T|mn}}: [[хайр]]
*{{T|la}}: [[amor]] {{m}}, [[caritas]] {{f}}
*{{T|lv}}: [[mīlestība]] {{f}}, [[mīla]] {{f}}
*{{T|lt}}: [[meilė]]
*{{T|ro}}: [[iubire]], [[dragoste]], [[amor]]
*{{T|lb}}: [[Léift]]
*{{T|ru}}: [[любовь]] (ljubóv’) {{f}}
{{trans-bottom}}
=={{L|zh}}==
==={{pron}}===
{{cmn-pron|àiqíng|a=y}}
{{yue-pron|oi3 cing4}}
{{nan-pron|ài-chêng|t=ain3 cêng5}}
{{cpx-pron|pt,xy:ai4 *zing2}}
{{hak-pron|oi-chhìn|h=oiˇ cin|gd=oi4 qin2}}
{{wuu-pron|sh:5e zhin}}
==={{noun}}===
{{zhchars|s=爱情}}
#(日本語に同じ。ただし特に男女間のものを言う)愛情。
{{zh-cat|ai4qing2|名詞}}
{{yue-cat|ngoi3ching4|名詞}}
{{nan-cat|ai3cheng5|名詞}}
{{nan-tws-cat|ain3ceng5|名詞}}
{{cpx-cat|ai4zing2|名詞}}
{{hak-cat|oi4chhin2|名詞}}
{{wuu-cat|e3zhin3|名詞}}
=={{L|ko}}==
==={{noun}}===
{{ko-head|noun|애정}}
#(日本語に同じ)愛情。
===={{syn}}====
* {{l|ko|사랑}}
=={{L|vi}}==
==={{noun}}===
{{vi-head|noun|ái|tình}}
#(日本語に同じ)愛情。
4bzwmy2xta94m9j819pu7z9efqfyrrn
2313333
2313330
2026-08-09T02:48:44Z
Jiba1219
100610
/* {{L|zh}} */
2313333
wikitext
text/x-wiki
{{kana-DEFAULTSORT|あいじょう}}
=={{L|ja}}==
{{ja-kanjitab|あい|じょう|yomi=o,goon}}
==={{pron}}===
{{ja-pron|あいじょう|acc=0}}
{{ja-accent-common|region=京阪|h||あいじょー}}
==={{noun}}===
{{ja-noun|[[あいじょう]]}}
# 対象を[[いつくしむ]][[気持ち]]。
===={{rel}}====
*[[愛情表現]]
===={{trans}}====
{{trans-top}}
*{{T|is}}: [[elska]], [[ást]]
*{{T|ga}}: [[grá]]
*{{T|af}}: [[liefde]]
*{{T|ar}}: {{ARchar|[[حب]]}} (ħubb)
*{{T|sq}}: [[dashuri]] {{f}}
*{{T|hy}}: [[սեր]] (ser)
*{{T|it}}: [[amore]] {{m}}
*{{T|ia}}: [[amor]]
*{{T|id}}: [[cinta]]
*{{T|cy}}: [[cariad]] {{m}}
*{{T|uk}}: [[кохання]] (kokhannja), [[любов]] (ljubov)
*{{T|ur}}: {{URchar|[[محبت]]}} (muhabbat) {{f}}, {{URchar|[[عشق]]}} ('išq) {{m}}, {{URchar|[[پیار]]}} (pyār) {{m}}
*{{T|en}}: [[love]], [[affection]]
*{{T|ee}}: [[lɔlɔ̃]]
*{{T|eo}}: [[amo]]
*{{T|et}}: [[armastus]]
*{{T|nl}}: [[liefde]] {{f}}
*{{T|ca}}: [[amor]] {{m}}
*{{T|el}}: [[αγάπη]] (agápi)
*{{T|ky}}: [[сүйүү]] (süyüü), [[макаббат]] (maqabbat)
*{{T|sm}}: [[alofa]]
*{{T|sv}}: [[kärlek]] {{c}}
*{{T|gd}}: [[gràdh]] {{m}}, [[spèis]] {{f}}
*{{T|es}}: [[amor]] {{m}}
*{{T|sk}}: [[láska]] {{f}}
*{{T|sl}}: [[ljubezen]] {{f}}
*{{T|sh}}:
*:キリル文字: {{t|sh|љубав|f}}
*:ラテン文字: {{t|sh|ljubav|f}}
*{{T|th}}: {{lang|th|[[รัก]]}}、{{THchar|[[ความรัก]]}} (khwamrak)
*{{T|tl}}: [[pag-ibig]]
*{{T|tt}}: [[ярату]]
*{{T|ta}}: [[காதல்]] (Kadhal, 男女間の性愛), [[அன்பு]], [[பாசம்]]
*{{T|cs}}: [[láska]] {{f}}
*{{T|cv}}: [[юрату]]
*{{T|te}}: [[ప్రేమ]] (prEma)
*{{T|da}}: [[kærlighed]]
*{{T|de}}: [[Liebe]] {{f}}
*{{T|tr}}: [[sevgi]]
*{{T|no}}: [[kjærlighet]]
*{{T|haw}}: [[aloha]]
*{{T|hu}}: [[szeretet]]
*{{T|hi}}: [[प्यार]] (pyār) {{m}}, [[प्रेम]] (prem) {{m}}, [[इश्क़]] (išq) {{m}}, [[मुहब्बत]] (muhabbat) {{f}}
*{{T|fi}}: [[rakkaus]]
*{{T|fr}}: [[amour]] {{m}}
*{{T|br}}: [[karantez]] {{f}}
*{{T|vi}}: [[tình yêu]]
*{{T|he}}: {{he-translation|אהבה|ahavá}} {{f}}
*{{T|fa}}: {{FAchar|[[عشق]]}} (‘eshq), {{FAchar|[[مهر]]}} (mehr),[[محبت]] (mahabbat), [[عاطفه]] (‘ātefe)
*{{T|pl}}: [[miłość]] {{f}}
*{{T|pt}}: [[amor]]
*{{T|mi}}: [[aroha]]
*{{T|mn}}: [[хайр]]
*{{T|la}}: [[amor]] {{m}}, [[caritas]] {{f}}
*{{T|lv}}: [[mīlestība]] {{f}}, [[mīla]] {{f}}
*{{T|lt}}: [[meilė]]
*{{T|ro}}: [[iubire]], [[dragoste]], [[amor]]
*{{T|lb}}: [[Léift]]
*{{T|ru}}: [[любовь]] (ljubóv’) {{f}}
{{trans-bottom}}
=={{L|zh}}==
==={{pron}}===
{{cmn-pron|àiqíng|a=y}}
{{yue-pron|oi3 cing4}}
{{nan-pron|ài-chêng|t=ain3 cêng5}}
{{cpx-pron|pt,xy:ai4 *zing2}}
{{hak-pron|oi-chhìn|h=oiˇ cin|gd=oi4 qin2}}
{{wuu-pron|sh:5e zhin}}
==={{noun}}===
{{zhchars|s=爱情}}
#(日本語に同じ。ただし特に男女間のものを言う)愛情。
{{zh-cat|ai4qing2|名詞}}
{{yue-cat|oi3ching4|名詞}}
{{nan-cat|ai3cheng5|名詞}}
{{nan-tws-cat|ain3ceng5|名詞}}
{{cpx-cat|ai4zing2|名詞}}
{{hak-cat|oi4chhin2|名詞}}
{{wuu-cat|e3zhin3|名詞}}
=={{L|ko}}==
==={{noun}}===
{{ko-head|noun|애정}}
#(日本語に同じ)愛情。
===={{syn}}====
* {{l|ko|사랑}}
=={{L|vi}}==
==={{noun}}===
{{vi-head|noun|ái|tình}}
#(日本語に同じ)愛情。
hdqzrs7bqi0y2h7chgk7v6983038wfr
2313337
2313333
2026-08-09T02:50:37Z
Jiba1219
100610
/* {{L|zh}} */ wikipediaリンク追加
2313337
wikitext
text/x-wiki
{{kana-DEFAULTSORT|あいじょう}}
=={{L|ja}}==
{{ja-kanjitab|あい|じょう|yomi=o,goon}}
==={{pron}}===
{{ja-pron|あいじょう|acc=0}}
{{ja-accent-common|region=京阪|h||あいじょー}}
==={{noun}}===
{{ja-noun|[[あいじょう]]}}
# 対象を[[いつくしむ]][[気持ち]]。
===={{rel}}====
*[[愛情表現]]
===={{trans}}====
{{trans-top}}
*{{T|is}}: [[elska]], [[ást]]
*{{T|ga}}: [[grá]]
*{{T|af}}: [[liefde]]
*{{T|ar}}: {{ARchar|[[حب]]}} (ħubb)
*{{T|sq}}: [[dashuri]] {{f}}
*{{T|hy}}: [[սեր]] (ser)
*{{T|it}}: [[amore]] {{m}}
*{{T|ia}}: [[amor]]
*{{T|id}}: [[cinta]]
*{{T|cy}}: [[cariad]] {{m}}
*{{T|uk}}: [[кохання]] (kokhannja), [[любов]] (ljubov)
*{{T|ur}}: {{URchar|[[محبت]]}} (muhabbat) {{f}}, {{URchar|[[عشق]]}} ('išq) {{m}}, {{URchar|[[پیار]]}} (pyār) {{m}}
*{{T|en}}: [[love]], [[affection]]
*{{T|ee}}: [[lɔlɔ̃]]
*{{T|eo}}: [[amo]]
*{{T|et}}: [[armastus]]
*{{T|nl}}: [[liefde]] {{f}}
*{{T|ca}}: [[amor]] {{m}}
*{{T|el}}: [[αγάπη]] (agápi)
*{{T|ky}}: [[сүйүү]] (süyüü), [[макаббат]] (maqabbat)
*{{T|sm}}: [[alofa]]
*{{T|sv}}: [[kärlek]] {{c}}
*{{T|gd}}: [[gràdh]] {{m}}, [[spèis]] {{f}}
*{{T|es}}: [[amor]] {{m}}
*{{T|sk}}: [[láska]] {{f}}
*{{T|sl}}: [[ljubezen]] {{f}}
*{{T|sh}}:
*:キリル文字: {{t|sh|љубав|f}}
*:ラテン文字: {{t|sh|ljubav|f}}
*{{T|th}}: {{lang|th|[[รัก]]}}、{{THchar|[[ความรัก]]}} (khwamrak)
*{{T|tl}}: [[pag-ibig]]
*{{T|tt}}: [[ярату]]
*{{T|ta}}: [[காதல்]] (Kadhal, 男女間の性愛), [[அன்பு]], [[பாசம்]]
*{{T|cs}}: [[láska]] {{f}}
*{{T|cv}}: [[юрату]]
*{{T|te}}: [[ప్రేమ]] (prEma)
*{{T|da}}: [[kærlighed]]
*{{T|de}}: [[Liebe]] {{f}}
*{{T|tr}}: [[sevgi]]
*{{T|no}}: [[kjærlighet]]
*{{T|haw}}: [[aloha]]
*{{T|hu}}: [[szeretet]]
*{{T|hi}}: [[प्यार]] (pyār) {{m}}, [[प्रेम]] (prem) {{m}}, [[इश्क़]] (išq) {{m}}, [[मुहब्बत]] (muhabbat) {{f}}
*{{T|fi}}: [[rakkaus]]
*{{T|fr}}: [[amour]] {{m}}
*{{T|br}}: [[karantez]] {{f}}
*{{T|vi}}: [[tình yêu]]
*{{T|he}}: {{he-translation|אהבה|ahavá}} {{f}}
*{{T|fa}}: {{FAchar|[[عشق]]}} (‘eshq), {{FAchar|[[مهر]]}} (mehr),[[محبت]] (mahabbat), [[عاطفه]] (‘ātefe)
*{{T|pl}}: [[miłość]] {{f}}
*{{T|pt}}: [[amor]]
*{{T|mi}}: [[aroha]]
*{{T|mn}}: [[хайр]]
*{{T|la}}: [[amor]] {{m}}, [[caritas]] {{f}}
*{{T|lv}}: [[mīlestība]] {{f}}, [[mīla]] {{f}}
*{{T|lt}}: [[meilė]]
*{{T|ro}}: [[iubire]], [[dragoste]], [[amor]]
*{{T|lb}}: [[Léift]]
*{{T|ru}}: [[любовь]] (ljubóv’) {{f}}
{{trans-bottom}}
=={{L|zh}}==
{{wikipedia|lang=zh}}
{{wikipedia|lang=yue}}
==={{pron}}===
{{cmn-pron|àiqíng|a=y}}
{{yue-pron|oi3 cing4}}
{{nan-pron|ài-chêng|t=ain3 cêng5}}
{{cpx-pron|pt,xy:ai4 *zing2}}
{{hak-pron|oi-chhìn|h=oiˇ cin|gd=oi4 qin2}}
{{wuu-pron|sh:5e zhin}}
==={{noun}}===
{{zhchars|s=爱情}}
#(日本語に同じ。ただし特に男女間のものを言う)愛情。
{{zh-cat|ai4qing2|名詞}}
{{yue-cat|oi3ching4|名詞}}
{{nan-cat|ai3cheng5|名詞}}
{{nan-tws-cat|ain3ceng5|名詞}}
{{cpx-cat|ai4zing2|名詞}}
{{hak-cat|oi4chhin2|名詞}}
{{wuu-cat|e3zhin3|名詞}}
=={{L|ko}}==
==={{noun}}===
{{ko-head|noun|애정}}
#(日本語に同じ)愛情。
===={{syn}}====
* {{l|ko|사랑}}
=={{L|vi}}==
==={{noun}}===
{{vi-head|noun|ái|tình}}
#(日本語に同じ)愛情。
1oos3708tjsw7vc9bwjwecfvt3zik1p
体
0
19845
2313381
2276748
2026-08-09T06:59:36Z
Jiba1219
100610
/* {{L|zh}} */
2313381
wikitext
text/x-wiki
{{kana-DEFAULTSORT|たい}}
==漢字==
{{kanji|人|5}}
{{kanji variants|體=[[旧字体]]/[[繁体字]]|躰=[[別体字]]|軆=[[別体字]]}}
{{筆順}}
===字源===
「体」には二種類の字が存在する(別字衝突)。
# 「ホン」と読まれる字。
#:[[形声文字|形声]]。「[[人]]」+音符「[[本]] {{phoneme|*PƏN}}」。「[[笨]]」の[[異体字]]。
# 「タイ」と読まれる字。
#:[[会意文字|会意]]。「[[人]]」+「[[本]]」(もと、基礎)。「[[體]]」の略体。宋の時代から用例が記録されている。
===意義===
#[[からだ]]。
#[[かたち]]、[[すがた]]。
=={{L|ja}}==
{{wikipedia}}
{{Wikipedia|体 (数学)}}
{{ja-kanji|常用=タイ,テイ,からだ|施策=教育:2|呉音=タイ|漢音=テイ|唐音=タ|訓=からだ,かたち,もと,すがた}}
==={{noun}}===
[[Category:{{ja}} {{noun}}]]
'''体'''(からだ・タイ・テイ)
#('''からだ''')「[[からだ]]」を参照。
#('''[[タイ]]''')(スポーツや武道などにおいて)[[身体]]。[[胴]]。[[体勢]]。
#*'''体'''さばき。'''体'''を入れかえる。
#('''タイ''')物事の[[本質]]。
#*[[名は体を現す|名は'''体'''を現す]]。
#('''タイ''')そのようなすがたのもの。接尾辞的にも使用される。
#*連続'''体'''、集合'''体'''、複合'''体'''、事業'''体'''
[[Category:{{ja}} 助数詞|たい]]
#('''タイ'''){{タグ|ja|代数学}}[[零]]による[[除算]]を除き、[[加減乗除]]が自由にできる[[代数系]]。[[加法単位元]]を除く[[任意]]の[[元]]に対して[[乗法]]における[[逆元]]が唯一存在するという性質を満たす[[可換環]]。[[実数]]や[[有理数]]の全体は体の一例で、実数に対して加減乗除を行う一般的な計算は、体の一種を扱っていることに相当する。
#('''[[テイ]]''')[[外見]]。[[みせかけ|見せかけ]]。[[様子]]。[[かたち]]。
#*[[満足]]の[[体]]
#*[[事業]]の[[体]](タイ、テイ)をなしていない。
#*[[体]]のいい言い訳
====語源====
*語義6:ドイツ語[[Körper]]の直訳より。
===={{usage}}====
*語義6:記号としては、ドイツ語や英語の頭文字である K や F がよく使われる。
===={{trans}}====
語義6
*{{T|en}}: {{t|en|field}}
*{{T|de}}: {{t|de|Körper|m}}
==={{suffix}}===
[[Category:{{ja}}_{{suffix}}]]
[[category:{{ja}}_助数詞]]
'''体'''(タイ)
#('''[[タイ]]''')[[遺体]]、[[仏像]]等を数える時の[[助数詞]]。
==={{drv}}===
*[[体する]]
==={{prov}}===
{{top||12em}}
*[[体位]]
*[[体育]]
*[[体液]]
*[[体温]]
*[[体外]]
*[[体格]]
*[[体感]]
*[[体技]]
*[[体協]]
*[[体躯]]
*[[体刑]]
*[[体型]]
*[[体形]]
*[[体系]]
*[[体験]]
*[[体現]]
*[[体言]]
*[[体腔]]
*[[体質]]
*[[体臭]]
*[[体重]]
*[[体術]]
*[[体制]]
*[[体勢]]
*[[体積]]
*[[体操]]
*[[体中]]
*[[体調]]
*[[体長]]
*[[体得]]
*[[体内]]
*[[体認]]
*[[体熱]]
*[[体罰]]
*[[体表]]
*[[体貌]]
*[[体面]]
*[[体毛]]
*[[体様]]
*[[体要]]
*[[体量]]
*[[体力]]
*[[体裁]]
*[[異体]]
*[[液体]]
*[[遺体]]
*[[気体]]
*[[機体]]
*[[客体]]
*[[固体]]
*[[個体]]
*[[抗体]]
*[[鋼体]]
*[[国体]]
*[[錯体]]
*[[死体]]
*[[肢体]]
*[[主体]]
*[[正体]]
*[[身体]]
*[[錐体]]
*[[生体]]
*[[政体]]
*[[素体]]
*[[単体]]
*[[団体]]
*[[柱体]]
*[[椎体]]
*[[同体]]
*[[胴体]]
*[[変体]]
*[[本体]]
*[[融体]]
*[[容体]]
*[[立体]]
*[[巨体]]
*[[人体]]
*[[風体]]
*[[母体]]
*[[車体]]
*[[五体]]
*[[図体]]
*[[連体]]
*[[屍体]]
*[[媒体]]
*[[天体]]
*[[文体]]
*[[女体]]
*[[男体]]
*[[黒体]]
*[[共同体]]
*[[病原体]]
*[[筆記体]]
*[[有機体]]
*[[複合体]]
*[[八面体]]
*[[直方体]]
*[[同位体]]
*[[被写体]]
*[[不導体]]
*[[固溶体]]
*[[六面体]]
*[[多様体]]
*[[染色体]]
*[[拡大体]]
*[[有限体]]
*[[実数体]]
*[[順序体]]
*[[絶縁体]]
*[[複素数体]]
*[[有理数体]]
{{bottom}}
=={{L|zh}}==
{{zh-cat|ti3|名詞|hsk=丁|常=1}}
{{zh-han
|m=tǐ|z=n
|ma=Zh-ti.ogg
|m-s=ti3
|m-x=tì
|m-nj=tǐ
}}
** '''[[広東語]]'''
*** '''[[ピンイン]]''': [[ban6]], [[tai2]]
*** '''[[イェール式]]''': tai2
** '''[[閩南語]]'''
*** '''[[POJ]]''': thái, thóe, thúiⁿ, thé
** '''[[閩東語]]'''
*** '''[[平話字]]''': tā̤
** '''[[閩北語]]'''
*** '''[[KCR]]''': tǐ
** '''[[客家語]]'''
*** '''[[白話字]]''': thí
** '''[[呉語]]'''
*** '''[[ピンイン]]''': thi2, ben2
** '''[[贛語]]''': ti3
** '''[[晋語]]''': ti2
** '''[[湘語]]''': ti3
==={{noun}}===
#[[書体]]。
#{{タグ|zh|文法|sort=ti3}}[[相]]、[[アスペクト]]。
===={{prov}}====
{{top}}
*[[体察]]
*[[体尝]]
*[[体词]]
*[[体大思精]]
*[[体罚]]
*[[体会]]
*[[体积]]
*[[体检]]
*[[体力劳动]]
*[[体例]]
*[[体谅]]
*[[体貌]]
*[[体念]]
*[[体膨胀]]
*[[体魄]]
*[[体腔]]
*[[体式]]
*[[体态]]
*[[体坛]]
*[[体贴]]
*[[体统]]
*[[体味]]
*[[体温表]]
*[[体温计]]
*[[体无完肤]]
*[[体惜]]
*[[体现]]
*[[体刑]]
*[[体恤]]
*[[体癣]]
*[[体循环]]
*[[体验]]
*[[体育场]]
*[[体育馆]]
*[[体育运动]]
*[[体征]]
*[[体质]]
{{bottom}}
=={{L|ko}}==
{{ko-han|체|분|eumhun=[[용렬하다|용렬할]] 분}}
=={{L|vi}}==
{{vi-han|thể}}
=={{コード}}==
{{文字コード|jis=1-34-46|mj={{mjmoji|006637|006638}}|gb=CCE5|cns=2-227E|big5=CA5E|ksx=1002-624D}}
{{検字|倉頡=ODM|四角=2523.0}}
{{字典|dj=0208.030|hdz=10130.010|大字源=203|大漢語林=258/260|康煕=0098.130|新大字典=399/401|新潮漢字=279/284|諸橋=509/540}}
==脚注==
<references/>
ipd88qhjmddb1mj3xggy4ar47iz9awh
desertification
0
21471
2313132
1103948
2026-08-08T17:03:47Z
20041027 tatsu
59964
[[en:desertification]] 2026-08-06T14:05:56(UTC)版より追加
2313132
wikitext
text/x-wiki
{{also|désertification}}
=={{L|en}}==
{{wikipedia|lang=en}}
==={{etym}}===
{{affix|en|desert|-ification}}
==={{pron}}===
* {{IPA|lang=en|/dɪˌzɜː.tɪ.fɪˈkeɪ.ʃən/|a=UK}}
** {{audio|en|LL-Q1860 (eng)-Vealhurl-desertification.wav|a=Southern England}}
* {{IPA|lang=en|/dɪˌzɝ.tɪ.fɪˈkeɪ.ʃən/|a=US}}
** {{audio|en|LL-Q1860 (eng)-Wodencafe-desertification.wav|a=US}}
* {{hyph|en|de|sert|i|fi|ca|tion}}
* {{rhymes|lang=en|eɪʃən|s=6}}
==={{noun}}===
{{en-noun|-}}
#{{context|環境|lang=en}} [[砂漠化]]。
===={{syn}}====
* {{l|en|desertization}}
* {{l|en|land degradation}}
===={{ant}}====
* {{l|en|afforestation}}
* {{l|en|reforestation}}
* {{l|en|regreening}}
===={{drv}}====
* {{l|en|antidesertification}}
===={{rel}}====
* {{l|en|desert}}
* {{l|en|desertify}}
cupwnkqqxmrnwx6gtrmxtgbdt0unpo5
こと
0
23384
2313372
2215020
2026-08-09T06:21:55Z
ちょこれ゚いとみんと
129959
/* 日本語 */
2313372
wikitext
text/x-wiki
{{also|こど|ごと|ごど}}
=={{L|ja}}==
==={{noun}}・事===
{{ja-noun|事}}
#ある一[[時期]]におこる、まとまったひとつらなりの{{おくりがな2|動|うご|き|うごき}}。[[ことがら]]。[[できごと]]。
#*'''こと'''ここに至ってはやむを得ない。
#*'''こと'''古美術に関しては該博な知識を持っている。
#*'''こと'''が'''こと'''だけに心配だ。
#*落ち込んでいる人に何か元気が出るような'''こと'''をしてあげたい。
#*いつも話の種になる'''こと'''を探している。
#[[動詞]]に付いて、[[行為]]を[[あらわす]][[体言]]を[[つくる|作る]]。
#*言う'''こと'''とする'''こと'''が違う人。
#*やる'''こと'''がえげつない。
#形容詞などに付いて、性状をあらわす[[体言]]を作る。
#*楽しい'''こと'''。静かな'''こと'''。確実な'''こと'''。当然の'''こと'''。
#*非効率な'''こと'''はなはだしい。
#*そんな'''こと'''はありません。(=そうではない、の意)
#*そんな'''こと'''ではいけません。
#*たいした'''こと'''はない。
#*都会ではもちろんの'''こと'''、地方でもよく見かけるようになった。
#関連する案件、できごと、事情、状況。
#*その'''こと'''で話がある。
#*阿鼻叫喚とはまさにこの'''こと'''かと思った。
#*父との'''こと'''では誤解もありました。
#*泉鏡花先生の'''こと'''
#*私'''こと'''このたび転勤を命ぜられ名古屋支社に着任いたしました。
#事実。実際に起きた、あるいは起きているできごと。
#*その人がもう日本にいない'''こと'''はご存知ですか。
#*絵を見て特に感動する'''こと'''もなかった。
#*待つ'''こと'''五時間、ようやく救助された。
##(「のこと」「のことだ」などの形で)時を表す。
##*ところがその次の日の'''こと'''だ。あの畜産の担任が、助手を連れて又やって来た。(宮沢賢治「フランドン農学校の豚」)
#[[事業]]、[[作業]]、[[行動]]など。
#*'''こと'''にあたる。
#*'''こと'''を行う。
#[[戦争]]、[[あらそい]]など。
#*'''こと'''を構える。
#{{タグ|ja|婉曲}}[[性交]]、[[犯罪]]など。
#*'''こと'''に及ぶ。
#[[おおごと]]。[[一大事]]。厄介事。
#*これは'''こと'''だな。
#(…ことがある/ない) 過去の経験を表す。
#*アメリカに行った'''こと'''があります。
#(…ことがある/ない) 起こり得るできごと、可能性などを表す。
#*私は電車に傘を忘れる'''こと'''がよくある。
#*X線検査で腫瘍が判明する'''こと'''もある。
#…についての話。…の意味。…という事情。
#*「すごく高いビルが中東にあるでしょ?」「ブルジュ・ハリファの'''こと'''?」
#*「積ん読って何?」「本を買ってきても読まないで放置する'''こと'''だよ」
#*「打てば響く」というのは山田くんの'''こと'''だね。
#*警察がここにいるという'''こと'''は、事件か事故でもあったのだろう。
#*「結局あいつが嘘をついていたって'''こと'''か」「そういう'''こと'''だ」
#(…のこと) 思考、知識、好き嫌い、動作などの対象として示す。
#*君の'''こと'''が好きだ。
#*仕事の'''こと'''ばかり考えている。
#*私の'''こと'''をばかにしてるんだから。
#*ぼくの'''こと'''、なぐったな。
#指摘や主張の趣旨を表す。
#*きつい'''こと'''を言ってしまった。
#*入試改革の背景には利権があるというような'''こと'''が書いてあった。
#(…とのこと、…ということ) …そうだ。伝聞を表す。
#*明日は晴れるとの'''こと'''だ。
#*議員からお話したいことがあるとの'''こと'''です。
#*結局会えなかったという'''こと'''だ。
#[[通称]]と[[正式]]な[[なまえ|名前]]を続いて言うときに間に入れる語。[[すなわち]]。
#*火付盗賊改方、鬼平'''こと'''長谷川平蔵。
#軽い命令、適切性などを表す。
#*宿題を忘れた者は立つ'''こと'''。
#*困った時は早めに相談する'''こと'''だな。
#(打消しを伴い)必要性などを表す。
#* 遅刻した者を待つ'''こと'''はない。
#(ことにする、ことになる、など) 意志や未来、必然など表す。
#*プールで泳ぐ'''こと'''にしよう。
#*出かける'''こと'''にしよう。
#*暴風雨の場合は中止される'''こと'''になります。
#(ことにする、ことになる、など) 意志による措定や、規則などによる同定などを表す。
#*見なかった'''こと'''にしてやるから早く行け。
#*数値を指定してもしなくても結果は同じ'''こと'''になる。
#(こととする、ことにしている、ことになっている、など) 習慣や、しくみ、制度などを表す。
#*あらかじめ警察に届け出る'''こと'''とする。
#*毎日ジョギングする'''こと'''にしている。
#*かの国では、厳然たる歴史的事実の多くが実際にはなかった'''こと'''になっている。
#詠嘆を表す。
#*どれほどうれしかった'''こと'''だろう。
#*まあ実に呆れた'''こと'''だ。
#*仲のよろしい'''こと'''で。
#*まったく何をやっている'''こと'''やら。
#*どれだけ心配させられた'''こと'''か。
#(…こと…こと、…ことといったら、…ことといったらない、など) とても…だ。強調を表す。
#*その恰好のおかしい'''こと'''おかしい'''こと'''。
#(…こと、…ことで、…ことだ、…ことだから、…ことだし、など) 接続助詞的に、当然に想定される事情や理由などを表す。
#*あいつの'''こと'''だ、今日も遅れて来るだろう。
#*お腹も空いた'''こと'''だし、レストランにでも行きましょうか。
#(…ことに、…ことには) 文修飾副詞的な機能を表す。
#*困った'''こと'''に彼はまだ未成年だ。
#*関係者の言う'''こと'''には、近く企業合併があるらしい。
#(…ないことには、…しないことには…しない)…なければ…しない、…してはじめて…する。
#*それは見てみない'''こと'''には何とも言えない。
#*ドライバーがない'''こと'''にはネジも外せない。
#{{タグ|ja|口語}}否定文中で、用言の連体形に付いて、動詞は未然形、他は連用形に相当する語句を形成する。
#*最近仕事が辛い'''こと'''はないか。(=辛くはないか)
#*寒い'''こと'''ない?(=寒くない?)
#*どうもうまい'''こと'''行かないな。(=うまく行かないな)
#*接客の仕事ってけっこう疲れる'''こと'''ない?(=疲れない?)
===={{pron}}====
{{ja-pron|acc=2}}
{{ja-accent-common|region=京阪|a|こ|と}}
===={{drv}}====
*[[ことがら]]
*[[できごと]]
*[[ものごと]]
====={{idiom}}=====
{{top3}}
*[[事にしている]]
*[[事になっている]]
*[[事とする]]
*[[事によると]]
*[[事が足りる]]
*[[事を運ぶ]]
*[[事を起こす]]
*[[事を好む]]
*[[事を分ける]]
*[[事を成し遂げる]]
*[[事事しい]]
*[[事と次第で]]
*[[事も無げ]]
*[[事改めて]]
*[[事寄す]]
*[[ことかく|事欠く]]
*[[事誤り]]
*[[事細か]]
*[[事新しい]]
*[[事切れる]]
*[[ことたりる|事足りる]], [[ことたる|事足る]]
*[[事珍しく]]
*[[事無し]]
*[[事無く]]
*[[事勿れ主義]]
*[[事立てる]]
*[[ことほどさように]]
*[[としたことが]]
{{bottom}}
===={{trans}}====
*{{T|id}}: {{t|id|hal}}
*{{T|de}}: {{t|de|Ding|n}}, {{t|de|Sache|f}}
*{{T|en}}: {{t|en|thing}}, {{t|en|incident}}, {{t|en|event}}, {{t|en|affair}}
*{{T|fr}}: {{t|fr|chose|f}}
{{trans-top|体言をつくる}}
*{{T|en}}: {{t|en|to}} + 動詞, {{t|en|-ing}}
*{{T|ki}}: {{t|ki|kũ-}},(c、k、t、th の前で){{t|ki|gũ-}};(動詞語幹が o や u で始まる場合){{l|ki|ku-}}(動詞語幹が a や e で始まる場合){{t|ki|kw-}}, {{t|ki|gw-}}
*{{T|pl}}: {{t|pl|-anie|n}}, {{t|pl|-enie}}, {{t|pl|-cie|n}}
*{{T|li}}: {{t|lt|-imas|m}}, {{t|lt|-ymas|m}}
{{trans-bottom}}
{{trans-top|話}}
*{{T|en}}: {{t|en|matter}}
*{{T|kam}}: {{t|kam|ũvoo}}
*{{T|ki}}: {{t|ki|ũhoro}}
{{trans-bottom}}
==={{noun}}・言===
{{ja-noun|言}}
#(主として複合語で)[[ことば]]。
===={{pron}}====
{{ja-pron|acc=2}}
{{ja-accent-common|region=京阪|a|こ|と}}
===={{rel}}====
*{{prov}}: {{おくりがな3|一|ひと||言|こと||ひとこと}}、{{おくりがな3|泣|な|き|言|ごと||なきごと}}、{{おくりがな3|詫|わ|び|言|ごと||わびごと}}、{{おくりがな3|言|こと||問|と|い|こととい}}
==={{noun}}・琴===
{{ja-noun|琴|筝}}
#{{タグ|ja|楽器}}[[弦]]が並べられている[[楽器]]。
#{{タグ|ja|楽器}}(もっとも一般的には)[[箏]]。
#*琴(きん)は、いわゆる「こと」である[[箏]]とは別の楽器である。
===={{pron}}====
{{ja-pron|acc=1}}
{{ja-accent-common|region=京阪|o|こ|と}}
===={{rel}}====
*{{ふりがな|琴柱|ことじ}}
*{{ふりがな|平調子|ひらぢょうし}}
==={{noun}}・異===
{{ja-noun|異|殊}}
#[[差異]]。[[別個]]。[[同一]]ではない[[状態]]。{{ふりがな|他|ほか}}と[[区別]]されている状態。
#*雰囲気を'''異'''にする
#*[[幽明界を異にする|幽明界を'''異'''にする]]
===={{drv}}====
*[[ことなる]]
*[[幽明界を異にする]]
===={{ant}}====
*[[つね]]
==={{adverb}}===
{{ja-adv|殊}}
#[[ことに]]、[[特]]に、とりたてて。
#*彼は普段から饒舌なのだが、'''殊'''、趣味の話となると誰も止められない。
#*犯人として疑われているが、'''殊'''彼女に限ってそんなことはしないだろう。
(これらは形容動詞の語幹を副詞的に用いたものとも考えられる。例、「'''当然'''しなければらなない」の当然。当然という語も'''当然なり'''という形容動詞の語幹である)
===={{drv}}====
*[[ことさら]]
*[[ことに]]
*[[ことのほか]]
==={{parti}}===
{{ja-parti}} {{タグ|ja|終助詞}}
#{{タグ|ja|格式ばった表現}}活用語の終止形(連体形)、または、サ変動詞語幹になるような動作性のある名詞と格助詞「[[の]]」の組み合わせの後に付いて、[[命令]]や[[決定]][[事項]]を表す。~[[せよ]]。~[[しろ]]。~であるようにしろ。主に、箇条書きや補足のような一文で完結する様式の文で使う。
#*1946年、日本国憲法<ref>日本国憲法 第5章第73条1項、昭和21年11月3日公布 http://www.shugiin.go.jp/internet/itdb_annai.nsf/html/statics/shiryo/dl-constitution.htm</ref>
#*:一 法律を誠実に執行し、国務を総理する'''こと'''。
#*1999年、文部科学省「盲学校,聾学校及び養護学校施設整備指針」<ref>『盲学校,聾学校及び養護学校施設整備指針』「第2章3節 平面計画」(文部科学省ホームページ)政府標準利用規約(第2.0版)公開 https://www.mext.go.jp/b_menu/shingi/chousa/shisetu/001/toushin/940401/02-3.htm#top 2020年10月11日参照。</ref>
#*:日常生活技能の指導等で利用できる実習のための空間を計画することも有効である'''こと'''。
#*2016年、大西健介、第192回国会衆議院<ref>「第192回国会 衆議院 予算委員会 第3号 平成28年10月3日」国会会議録検索システム https://kokkai.ndl.go.jp/#/detail?minId=119205261X00320161003&spkNum=121&single 2020年10月11日参照。</ref>
#*:いずれにしろ、立候補ファイルには、保証については保証ファイル参照の'''こと'''と書いてあるんですけれども、この保証ファイルを開示していただけませんでしょうか。
#女性の古風で上品な口調を表す。
#*素敵な眺めだ'''こと'''。
#*「お願いできます'''こと'''?」「ええ、かまいません'''こと'''よ」
==={{kangokana}}===
{{ja-kangokana}}
{{ja-k|糊塗|t=一時凌ぎに上辺だけを取り繕うこと。}}
=={{L|ojp}}==
[[Category:{{ojp}}]]
==={{noun}}・事===
[[Category:{{ojp}}_{{noun}}]]
'''こと'''【[[事]]】
#{{ふりがな|出来事|できごと}}。[[事件]]。
#[[行為]]。
#[[行事]]。[[儀式]]。
#{{ふりがな|訳|わけ}}。[[事情]]。
#{{ふりがな|仕事|しごと}}。[[任務]]。
#(活用語の連体形に付いて)〜すること。
#文末に用いて感嘆の意を表す。〜ことだなあ。
===={{etym}}====
古代日本語: [[kötö]] < {{etyl|jpx-pro|ojp}} {{m|jpx-pro|*kətə}}
===={{pron}}====
{{ojp-pron-noun-2-3|こ|と}}
==={{noun}}・言===
'''こと'''【[[言]]】
#[[言語]]活動。[[ことば]]。
#{{ふりがな|噂|うわさ}}。[[評判]]。
#[[和歌]]。
===={{etym}}====
古代日本語: [[kötö]] < {{etyl|jpx-pro|ojp}} {{m|jpx-pro|*kətə}}
===={{pron}}====
{{ojp-pron-noun-2-3|こ|と}}
==={{noun}}・琴===
'''こと'''【[[琴]]】
#{{context|musical instrument|lang=ojp}}[[琴]]。[[筝]]。
#琴の[[奏法]]。
===={{pron}}====
{{ojp-pron-noun-2-5|こ|と}}
==={{adjectivenoun}}===
'''こと'''【[[異]]、[[殊]]】
#[[例外的]]なさま。[[特殊]]なさま。
#*見るに'''異'''なることなきものの、文字に書きてことことしきもの。 (『枕草子』)
{{古典日本語ナリ活用}}
==={{prefix}}===
{{head|ojp|prefix}}【[[異]]】
#名詞に付いて「[[別]]の」「[[ちがう|違っ]]た」などの意を表す接頭辞。
==註==
<references/>
nme095f89qrnr3zriwg5iq5jde4xrcu
他
0
23428
2313380
2218146
2026-08-09T06:56:27Z
Jiba1219
100610
/* {{L|zh}} */
2313380
wikitext
text/x-wiki
{{kana-DEFAULTSORT|た}}
==漢字==
{{kanji|人|3}}
{{筆順}}
===字源===
* [[形声文字|形声]]。「[[人]]」+音符「[[它]] {{phoneme|*LAJ}}」。「[[ほか]]」を意味する[[漢語]]{[[他]] {{phoneme|*hlaaj}}}を表す字。
===意義===
#[[ほか]]/ほかの、[[別]]
#[[三人称]]
=={{L|ja}}==
{{ja-kanji|常用=タ,ほか|施策=教育:3|呉音=タ|漢音=タ|訓=ほか,あだ-し,ひと|名乗=おさ}}
==={{noun}}===
[[Category:{{ja}} {{noun}}|ほか]]
#('''[[ほか]]'''/'''[[タ]]''')別のもの、それを除くもの、それ以外のもの。
==={{prov}}===
{{top}}
*[[他愛]]
*[[他意]]
*[[他界]]
*[[他覚症]]
*[[他覚的]]
*[[他郷]]
*[[他家]]
*[[他見]]
*[[他言]]
*[[他行]]
*[[他国]]
*[[他殺]]
*[[他山]]
*[[他山之石]](他山の石)
*[[他事]]
*[[他日]]
*[[他社]]
*[[他者]]
*[[他出]]
*[[他所]]
*[[他称]]
*[[他心]]
*[[他生]]
*[[他薦]]
*[[他動詞]]
*[[他人]]
*[[他念]]
*[[他派]]
*[[他物]]
*[[他聞]]
*[[他方]]
*[[他面]]
*[[他律]]
*[[他流]]
*[[他力]]
*[[他力本願]]
{{bottom}}
=={{L|zh}}==
{{zh-cat|ta1|代名詞|形容詞|hsk=甲|hsk2=1|常=1}}
{{trans_link|zh|{{PAGENAME}}}}
* '''ローマ字表記'''
** '''[[普通話]]'''
*** '''[[ピンイン]]''': [[tā]] ([[ta1]]), [[tuō]] ([[tuo1]])
*** '''[[ウェード式]]''': [[t'a1|t'a<sup>1</sup>]]
*** '''[[注音符号]]''': ㄊㄚ,ㄊㄨㄛ
** '''[[広東語]]'''
*** '''[[イェール式]]''': [[ta1]]
==={{pronoun}}===
'''他''' (ピンイン: tā)
#(三人称男性){{ふりがな|彼|かれ}}。
#*[[他们]](三人称複数彼ら)
#*{{rel}}:[[她]]、[[它]]/[[牠]](tā)
#別のもの
==={{adjective}}===
'''他''' (ピンイン: tā)
#別の。
==={{prov}}===
{{top}}
*{{l|zh|他杀}}
*{{l|zh|他乡}}
*{{l|zh|吉他}}
{{bottom}}
=={{L|ko}}==
{{ko-han|타|eumhun=[[다르다|다를]] 타|pos=noun}}
==={{noun}}===
#[[他人]]。
=={{L|vi}}==
{{vi-han|tha}}
=={{コード}}==
{{文字コード|jis=1-34-30|mj={{mjmoji|006517}}|gb=CBFB|cns=1-456C|big5=A54C|ksx=1001-7662}}
{{検字|倉頡=OPD|四角=2421.2}}
{{字典|dj=0195.120|hdz=10115.060|大字源=151|大漢語林=187|康煕=0092.090|新大字典=305|新潮漢字=218|諸橋=370}}
l9ics0zx8r1kfldpmkf5pzc8e7v7ryt
爱情
0
25576
2313332
1575153
2026-08-09T02:48:26Z
Jiba1219
100610
2313332
wikitext
text/x-wiki
{{DEFAULTSORT:ai4qing2}}
=={{L|zh}}==
==={{pron}}===
{{cmn-pron|àiqíng|a=y|z=n}}
{{yue-pron|oi3 cing4|h=n}}
{{nan-pron|ml:ài-chêng|t=ain3 cêng5}}
{{cpx-pron|pt,xy:ai4 *zing2}}
{{hak-pron|h=oiˇ cin|gd=oi4 qin2}}
{{wuu-pron|sh:5e zhin}}
==={{noun}}===
{{zhchars|t=愛情}}
#[[愛情]]。
{{zh-cat|ai4qing2|名詞|hsk=乙|hsk2=4}}
{{yue-cat|oi3ching4|名詞}}
{{nan-cat|ai3cheng5|名詞}}
{{nan-tws-cat|ain3ceng5|名詞}}
{{cpx-cat|ai4zing2|名詞}}
{{wuu-cat|e3zhin3|名詞}}
kfy84o5p1tftf7rp9q3yoi01ot87bym
2313338
2313332
2026-08-09T02:51:05Z
Jiba1219
100610
/* {{L|zh}} */ wikipediaリンク追加
2313338
wikitext
text/x-wiki
{{DEFAULTSORT:ai4qing2}}
=={{L|zh}}==
{{wikipedia|lang=zh|愛情}}
==={{pron}}===
{{cmn-pron|àiqíng|a=y|z=n}}
{{yue-pron|oi3 cing4|h=n}}
{{nan-pron|ml:ài-chêng|t=ain3 cêng5}}
{{cpx-pron|pt,xy:ai4 *zing2}}
{{hak-pron|h=oiˇ cin|gd=oi4 qin2}}
{{wuu-pron|sh:5e zhin}}
==={{noun}}===
{{zhchars|t=愛情}}
#[[愛情]]。
{{zh-cat|ai4qing2|名詞|hsk=乙|hsk2=4}}
{{yue-cat|oi3ching4|名詞}}
{{nan-cat|ai3cheng5|名詞}}
{{nan-tws-cat|ain3ceng5|名詞}}
{{cpx-cat|ai4zing2|名詞}}
{{wuu-cat|e3zhin3|名詞}}
3ixmgghevjlu8x4zui8kzmr76mt8irp
危険
0
26011
2313353
2206875
2026-08-09T04:10:25Z
Jiba1219
100610
2313353
wikitext
text/x-wiki
{{kana-DEFAULTSORT|きけん}}
{{also|危險|危险}}
=={{L|ja}}==
{{wikipedia}}
==={{pron}}===
{{ja-pron|きけん|acc=0}}
===名詞・形容動詞===
{{ja-noun|[[きけん]]|kyu=危險}}
[[Category:日本語_形容動詞]]
#{{おくりがな2|危|あぶ|ない|あぶない}}こと、{{おくりがな2|危|あや|うい|あやうい}}こと。[[将来]]において、[[事故]]や[[故障]]が発生する[[可能性]]があり、かつその[[確率]]が高いこと。
#*しかし[[安全]]も'''危険'''も実は[[相対的]]の言葉である。安全地帯の危険率も、危険地帯の安全率もゼロではない。({{w|寺田寅彦}} 『KからQまで』)
#*警察官は、人の[[生命]][[若しくは]][[身体]]に'''危険'''を及ぼし、[[又は]]財産に重大な損害を及ぼす虞のある[[天災]]、[[事変]]、[[工作物]]の[[損壊]]、[[交通事故]]、危険物の[[爆発]]、[[狂犬]]、[[奔馬]]の類等の出現、[[極端]]な[[雑踏]]等'''危険な'''[[事態]]がある場合においては({{w|警察官職務執行法}}第4条)
===={{conjug}}====
{{日本語ダ活用|kana=きけん}}
===={{syn}}====
*[[リスク]](同義語ではないので注意)
===={{ant}}====
*[[安全]]
===={{trans}}====
名詞
{{top}}
*{{T|ain}}: {{t|ain|iyaykipte}}
*{{T|it}}: {{t|it|pericolo|m}}
*{{T|en}}: {{t|en|danger}}, {{t|en|hazard}}, {{t|en|jeopardy}}
*{{T|nl}}: {{t+|nl|gevaar|n}}
*{{T|ki}}: {{t-|ki|ũgwati|g=c14}}
*{{T|es}}: {{t|es|peligro|m}}
*{{T|zh}}: {{t|zh|危险}} / {{t|zh|危險}}
*{{T|ko}}: {{t|ko|위험(危險)}}
*{{T|de}}: {{t+|de|Gefahr|f}}
*{{T|no}}:
:*{{T|nb}}: {{t+|no|fare|m}}
*{{T|fi}}: [[vaara]]
*{{T|fr}}: {{t|fr|danger|m}}
*{{T|pl}}: {{t|pl|niebezpieczeństwo|n}}
*{{T|pt}}: {{t|pt|perigo|m}}
*{{T|lt}}: {{t-|lt|pavojus|m}}
*{{T|ro}}: {{t|ro|pericol}}, {{t|ro|primejdie}}
*{{T|ru}}: {{t|ru|опасность|alt=опа́сность|tr=opásnost'|f}}
{{bottom}}
形容表現
* ''「'''[[あぶない]]'''」を参照。''
cyn7djqxbppl3schlacwnxsrbzjf4d8
2313354
2313353
2026-08-09T04:12:58Z
Jiba1219
100610
2313354
wikitext
text/x-wiki
{{kana-DEFAULTSORT|きけん}}
{{also|危險|危险}}
=={{L|ja}}==
{{wikipedia}}
==={{pron}}===
{{ja-pron|きけん|acc=0|dev=1}}
===名詞・形容動詞===
{{ja-noun|[[きけん]]|kyu=危險}}
[[Category:日本語_形容動詞]]
#{{おくりがな2|危|あぶ|ない|あぶない}}こと、{{おくりがな2|危|あや|うい|あやうい}}こと。[[将来]]において、[[事故]]や[[故障]]が発生する[[可能性]]があり、かつその[[確率]]が高いこと。
#*しかし[[安全]]も'''危険'''も実は[[相対的]]の言葉である。安全地帯の危険率も、危険地帯の安全率もゼロではない。({{w|寺田寅彦}} 『KからQまで』)
#*警察官は、人の[[生命]][[若しくは]][[身体]]に'''危険'''を及ぼし、[[又は]]財産に重大な損害を及ぼす虞のある[[天災]]、[[事変]]、[[工作物]]の[[損壊]]、[[交通事故]]、危険物の[[爆発]]、[[狂犬]]、[[奔馬]]の類等の出現、[[極端]]な[[雑踏]]等'''危険な'''[[事態]]がある場合においては({{w|警察官職務執行法}}第4条)
===={{conjug}}====
{{日本語ダ活用|kana=きけん}}
===={{syn}}====
*[[リスク]](同義語ではないので注意)
===={{ant}}====
*[[安全]]
===={{trans}}====
名詞
{{top}}
*{{T|ain}}: {{t|ain|iyaykipte}}
*{{T|it}}: {{t|it|pericolo|m}}
*{{T|en}}: {{t|en|danger}}, {{t|en|hazard}}, {{t|en|jeopardy}}
*{{T|nl}}: {{t+|nl|gevaar|n}}
*{{T|ki}}: {{t-|ki|ũgwati|g=c14}}
*{{T|es}}: {{t|es|peligro|m}}
*{{T|zh}}: {{t|zh|危险}} / {{t|zh|危險}}
*{{T|ko}}: {{t|ko|위험(危險)}}
*{{T|de}}: {{t+|de|Gefahr|f}}
*{{T|no}}:
:*{{T|nb}}: {{t+|no|fare|m}}
*{{T|fi}}: [[vaara]]
*{{T|fr}}: {{t|fr|danger|m}}
*{{T|pl}}: {{t|pl|niebezpieczeństwo|n}}
*{{T|pt}}: {{t|pt|perigo|m}}
*{{T|lt}}: {{t-|lt|pavojus|m}}
*{{T|ro}}: {{t|ro|pericol}}, {{t|ro|primejdie}}
*{{T|ru}}: {{t|ru|опасность|alt=опа́сность|tr=opásnost'|f}}
{{bottom}}
形容表現
* ''「'''[[あぶない]]'''」を参照。''
3s3ld297rvso5p9yvy9t0qo1hucsgl4
ふとい
0
26225
2313431
2072013
2026-08-09T10:04:57Z
M-30722
1202
2313431
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
=={{L|ja}}==
==={{adj}}===
{{ja-adj}}【[[太]]い】
# [[胴回り]]が[[おおきい]]。肉付きがよく肥えている。
# [[はば|幅]]や[[直径]]などが大きい。
# 声が低く大きい。
# 物事に動じない。[[大胆]]である。
#*[[肝が太い]]
# [[ずうずうしい|図々しい]]。[[ふてぶてしい]]。[[とんでもない]]。
#*ふとい野郎だ。
# [[金額]]が大きい。金払いが良い。
===={{conjug}}====
{{日本語形容詞活用}}
===={{ant}}====
* {{おくりがな2|細|ほそ|い|ほそい}}
===={{drv}}====
*{{noun}}: [[ふとさ]]、動詞:[[ふとまる]]、[[ふとめる]]
===={{trans}}====
*{{T|en}}:[[big]]、[[thick]]、[[bold]]
==={{noun}}===
{{wikipedia|フトイ}}
{{ja-noun}}【[[太]][[藺]]】【[[莞]]】
#{{タグ|ja|草}}イネ目カヤツリグサ科の多年草。
{{stub|ja}}
g192z55t9h8fa8tp20vklwndjko6wz7
わかる
0
26977
2313313
2025402
2026-08-09T01:34:28Z
Jiba1219
100610
水平線の削除、およびテンプレート適用
2313313
wikitext
text/x-wiki
=={{L|ja}}==
==={{etym}}===
*「{{おくりがな2|分|わ|く|わく}}(>{{おくりがな2|分|わ|ける|わける}})」より。
==={{verb}}===
{{head|ja|verb}}【[[分]](か)る、[[解]]る、[[判]]る】
# (分かる、判る)(調べたことによって)[[事実]]が明らかになる、[[情報]]が得られる。[[判明]]する。[[知識]]がある。
#*捜査によって被害者の身元が'''わかる'''。
#*その件についてはよく'''わかり'''ません。
# (分かる、解る)ものごとの[[解釈]]などについて[[納得]]する、[[理解]]する、あるいはその[[能力]]がある。
#*大人になれば'''わかる'''だろうさ。
#*ヒンディー語は駄目だがタミル語なら'''わかる'''。
#*このあたり土地勘がなくて道がよく'''わから'''ないから案内してくれ。
# [[世情]]に通じ納得しやすい、ものわかりがよい、受容的で意地を張らない。
#*話の'''わかる'''人。
#*いつまでも'''わから'''ないことを言うんじゃない。
#*こいつはこうでもしないと'''わから'''ないんだよ。
# (多く逆接や譲歩を導いて)[[了解]]や[[納得]]ができる。[[説得力]]がある。一定の[[正当性]]がある。[[容認]]される。
#*軽食程度ならまだ'''わかる'''が、なぜこの時期に大人数で集まって深夜まで宴会したのか。
#*送別会は'''わかる'''がリモート開催する方法もあっただろう。
# [[予測]]がつく、[[推測]]できる。
#*首相は答弁がワンパターンだから次に何を言うかだいたい'''わかる'''。
#*このままいくとどうなるか'''わから'''ないぞ。
#*同点ホームランが出て試合は'''わから'''なくなった。
#*急に何を言い出すやら'''わから'''ないやつだな。
#*こんなことになるなんて、人生は'''わから'''ないものだ。
#*言うことをきかないと'''わかってる'''だろうな。(=「大変なことになるぞ」と脅す表現)
# (否定語とともに)[[事情]]が[[ことなる]]かもしれない。[[可能性]]がありそうだ。
#*地元は不景気だが都会は'''わからない'''と思って東京に出た。
# (「かもわからない」などの形で)[[可能性]]を表す。かもしれない。
#{{context|colloquial|lang=ja}}(「わかる」の形で)共感を表す。
#*「自信を、お持ちになつていいのよ。あたし、うれしいの。泣きたいくらゐ。」嘘は、なかつた。/「'''わかる'''。'''わかる'''。」(太宰治『火の鳥』)
#{{context|colloquial|lang=ja}}(「わかった」の形で)了解や[[同意]]を表す。
#*太陽は笑って、水草の訴えを聞いていましたが、「'''わかった'''、'''わかった'''。」と、その頭を振ってみせました。(小川未明『太陽とかわず』)
##相手の言い分を了解した上で、提案や行動を行うニュアンス。
##*わかりました。ではこうしませんか。
##これ以上話を聞きたくないというニュアンス。
##*もういいもういい。わかったわかった。
===={{conjug}}====
{{日本語五段活用}}
===={{syn}}====
*[[判明]]する
*[[理解]]する
===={{trans}}====
*{{T|en}}: [[understand]], [[see]]
*{{T|ko}}: {{l|ko|알다}}
*{{T|zh}}: [[懂]], [[明白]]
=={{L|ojp}}==
==={{pron}}===
{{ojp-pron-verb-4-2|わ|か|る|}}
==={{verb}}===
{{head|ojp|verb}}【[[分]]かる、[[別]]る】
#[[区別]]される、[[別別]]になる。
#[[離別]]する、[[死別]]する。
===={{conjug}}====
{{古典日本語下二段活用|わか|る}}
===={{desc}}====
*現代{{ja}}: [[わかれる]]
7qy8fw4nprnmpia8piw1rgaji74yhnc
ice
0
28516
2313197
2128141
2026-08-08T23:01:01Z
Kuroco2k
84207
2313197
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2B|is}}
=={{L|en}}==
==={{etym}}===
{{etyl|enm}} {{m|enm|is}} < {{etyl|ang}} {{m|ang|īs}} < {{etyl|gmw-pro}} {{m|gmw-pro|*īs}} < {{etyl|gem-pro}} {{m|gem-pro|*īsą}} < {{etyl|ine-pro}} {{m|ine-pro|*h₁eyH-}}
==={{pron}}===
* {{IPA|lang=en|aɪs}}
* {{音声|en|en-us-ice.ogg|a=米}}
* {{音声|en|LL-Q1860 (eng)-Back ache-ice.wav|a=英}}
==={{noun}}===
{{en-noun}}
#{{ふりがな|氷|こおり}}。
#{{context|菓子|lang=en}}[[氷菓子]]。
===={{comp}}・{{idiom}}====
{{top}}
*[[break the ice]]
*[[dry ice]]
*[[ice barrier]]
*[[ice cap]] / [[icecap]]
*[[ice cream]]
*[[ice cube]]
*[[ice dam]]
*[[ice dancing]]
*[[ice diving]]
*[[ice field]]
*[[ice fishing]]
*[[ice floe]]
*[[ice fog]]
*[[ice foot]]
*[[ice fractal]]
*[[ice hockey]]
*[[ice kachang]]
*[[ice milk]]
*[[ice needle]]
*[[ice nucleus]]
*[[ice-out]]
*[[ice pack]]
*[[ice palace]]
*[[ice pick]]
*[[ice plant]]
*[[ice racing]]
*[[ice rink]]
*[[ice scour]]
*[[ice scraper]]
*[[ice sculpture]]
*[[ice sheet]]
*[[ice shelf]]
*[[ice show]]
*[[ice skate]]
*[[ice skating]]
*[[ice water]]
*[[ice wedge]]
*[[ice wine]]
*[[ice worm]]
*[[ice yachting]]
*[[on thin ice]]
{{bottom}}
===={{rel}}====
*[[deicer]]
*[[icicle]]
==={{verb}}===
{{en-verb|ic|ing}}
#氷で{{おくりがな2|冷|ひ|やす|ひやす}}。
#氷で{{おくりがな2|覆|おお|う|おおう}}。
#[[砂糖]]の{{ふりがな|衣|ころも}}をつける。
[[カテゴリ:ベーシック英語 850単語]]
=={{L|ang}}==
==={{pron}}===
* {{ang-IPA|īċe}}
==={{verb}}===
{{head|ang|verb form|head=īċe}}
#{{l|ang|īċan}}の直説法現在第一人称単数形。
#{{l|ang|īċan}}の接続法現在単数形。
=={{L|slr}}==
==={{pron}}===
* {{IPA|lang=slr|[eʝɑ]|a=Mengda|a2=Xunhua|a3=Qinghai}}
==={{noun}}===
{{slr-noun|si|ler}}
#{{l|slr|ica}}の異形。
=={{L|sco}}==
==={{noun}}===
{{sco-noun}}
#{{ふりがな|氷|こおり}}
#{{context|菓子|lang=sco}}[[アイスクリーム]]。
==={{verb}}===
{{head|sco|verb}}
#{{context|スポーツ|lang=sco}}カーリングをする。
=={{L|es}}==
==={{pron}}===
{{es-pr}}
==={{verb}}===
{{es-verb-form|izar}}
#{{l|es|izar}}の接続法現在第一人称単数形。
#{{l|es|izar}}の接続法現在第三人称単数形。
#{{l|es|izar}}の命令法第三人称単数形。
=={{L|enm}}==
==={{noun}}===
{{head|enm|noun}}
#{{l|enm|is}}の異形。
=={{L|ha}}==
==={{pron}}===
* {{ha-IPA|icḕ}}
==={{noun}}===
{{ha-noun|m|icḕ}}
#[[木材]]。
#{{タグ|ha|木|label=no|sort=*}}{{ふりがな|木|き}}。
#木の{{ふりがな|枝|えだ}}。
=={{L|pt}}==
==={{verb}}===
{{head|pt|verb form}}
#{{l|pt|içar}}の接続法現在第一人称単数形。
#{{l|pt|içar}}の接続法現在第三人称単数形。
#{{l|pt|içar}}の命令法第三人称単数形。
=={{L|la}}==
==={{verb}}===
{{la-verb-form|īce}}
#{{l|la|īcere}}の命令法能相現在第二人称単数形。
stiq0e7588qxztarlz1dyfb84p6a49u
付
0
30675
2313312
2245687
2026-08-09T01:32:57Z
Jiba1219
100610
/* {{L|zh}} */
2313312
wikitext
text/x-wiki
{{kana-DEFAULTSORT|ふ}}
==漢字==
{{kanji|人|3}}
{{kanji variants|附=別字}}
===字源===
* [[会意文字|会意]]。「[[人]]」+「[[寸]]」(手)、持っている物を人に与える様子。「与える」を意味する[[漢語]]{付 {{phoneme|*p(r)os}}}を表す字。<ref group="字源">何琳儀 『戦国古文字典』 中華書局、1998年、391頁。<br>黄徳寛主編 『古文字譜系疏証』 商務印書館、2007年、1070-1071頁。<br>林志強等評注 『《文源》評注』 中国社会科学出版社、2017年、258-259頁。</ref>
* また一説に、背後から人を前に押して倒すさまを象った字。「押す」を意味する[[漢語]]{[[拊]] {{phoneme|*ph(r)oʔ}}}を表す字。のち仮借して{付}に用いる。<ref group="字源">張世超、孫凌安、金国泰、馬如森 『金文形義通解』 中文出版社、1996年、2000-2002頁。<br>陳剣 「釈殷墟甲骨文的“付”字」 『古文字研究』第31輯 中国古文字研究会等編、中華書局、2016年、35-41頁。</ref>
{{字源}}
<references group="字源" />
===関連字===
{| class="wikitable"
|+ 「[[付]]」を音符とする[[形声文字]] (諧声域=*PO)
|-
! !! !! 幫母 !! 滂母 !! 並母
|-
! rowspan="4" | 一、二等 || 平声 侯韻
| - || - || [[𩚭]]
|-
! 上声 厚韻
| || ||
|-
! 去声 候韻
| - || || (暮韻:[[䒀]])
|-
! 入声 屋韻
| || ||
|-
! !! !! 幫母 !! 滂母 !! 並母
|-
! rowspan="4" | 三等 || 平声 虞韻
| [[跗]][[𩿧]][[柎]][[𩬙]] || [[怤]][[𥹃]][[泭]][[䒀]][[姇]][[紨]] || [[符]][[苻]][[坿]][[泭]][[𣻜]][[𣘧]]<br>(尤韻:[[鉜]])
|-
! 上声 麌韻
| [[俯]][[府]][[腑]] || [[弣]][[拊]] || [[腐]][[㾈]]
|-
! 去声 遇韻
| [[付]][[𩬙]] || || [[附]][[坿]][[祔]][[駙]][[鮒]][[䠵]][[蚹]][[跗]][[胕]]
|-
! 入声 燭韻
| || - ||
|}
===意義===
# (附)[[つく]]、[[つける]]。
# (付)[[てわたす|手渡す]]、[[あたえる|与える]]、[[さずける|授ける]]。
# (付)[[とどける|届ける]]。
# (付)[[ゆだねる|委ねる]]、[[まかせる|任せる]]。
=={{L|ja}}==
{{ja-kanji|常用=フ,つ-ける,つ-く|施策=教育:4|呉音=フ|漢音=フ|訓=つ-く,つ-ける,あた-える}}
==={{prov}}===
{{top}}
*{{ふりがな|受け付け|うけつけ}}
*{{ふりがな|付け入り|つけいり}}
*{{ふりがな|付け込み|つけこみ}}
*{{ふりがな|付け届け|つけとどけ}}
*{{ふりがな|取り付け|とりつけ}}
*{{ふりがな|下付|かふ}}
*{{ふりがな|寄付|きふ}}(寄附)
*{{ふりがな|給付|きゅうふ}}
*{{ふりがな|嘱付|しょくふ}}
*{{ふりがな|付火|つけび}}
*{{ふりがな|付梓|ふし}}
*{{ふりがな|付属|ふしょく}}(←[[付嘱]])
*{{ふりがな|付帯|ふたい}}([[附帯]])
*{{ふりがな|付託|ふたく}}([[附託]]、[[付托]])
*{{ふりがな|付与|ふよ}}([[附与]])
*{{ふりがな|分付|ぶんぷ}}(←[[吩咐]])
{{bottom}}
===代用字===
「[[附]]」の代用字として使われる。過去、付は「与える、委ねる」、附は「くっつける、添える」で使い分けるとしていたが、混同されることもあった。
*{{ふりがな|添付|てんぷ}}←[[添附]]
*{{ふりがな|貼付|ちょうふ}}←[[貼附]]
*{{ふりがな|付加|ふか}}←[[附加]]
*{{ふりがな|付箋|ふせん}}←[[附箋]]
*{{ふりがな|付属|ふぞく}}←[[附属]]
*{{ふりがな|付表|ふひょう}}←[[附表]]
*{{ふりがな|付和雷同|ふわらいどう}}←[[附和雷同]]
=={{L|zh}}==
{{zh-cat|fu4|hsk=乙|常=1}}
{{zh-han
|m=fù,tòng
|c=fu6
}}
=={{L|ko}}==
{{ko-han|부}}
=={{L|vi}}==
{{vi-han|phó}}
=={{コード}}==
{{文字コード|jis=1-41-53|mj={{mjmoji|006520}}|gb=B8B6|cns=1-4569|big5=A549|ksx=1001-5C75}}
{{検字|倉頡=ODI|四角=2420.0}}
{{字典|dj=0196.020|hdz=10112.050|大字源=154|大漢語林=191|康煕=0092.120|新大字典=309|新潮漢字=220|諸橋=373}}
s43qw06ischgx22prl8f11mivslovfv
挫
0
35699
2313096
2276463
2026-08-08T12:57:51Z
うーむ
129171
/* 熟語 */
2313096
wikitext
text/x-wiki
{{kana-DEFAULTSORT|ざ}}
==漢字==
{{kanji|手3|7}}
===字源===
* [[形声文字|形声]]。「[[手]]」+音符「[[坐]] {{phoneme|*TSOJ}}」。「[[おさえつける]]」「[[くじく]]」「[[くじける]]」を意味する[[漢語]]{[[挫]] {{phoneme|*tsoojs}}}を表す字。
===意義===
#足などの関節を不自然に曲げて痛める。[[くじく]]、[[くじける]]。
#*[[捻挫]]、[[挫傷]]
#障害にあって進行が止まる。
#*[[挫折]]、[[頓挫]]
===語源===
* ビルマ語 [[စွဲ]](取り付ける、固定する)と同根。
=={{L|ja}}==
{{ja-kanji|常用=ザ|施策=常用追加:2010,表外字体:印刷標準:ザ|呉音=サ|漢音=サ|慣用音=ザ|訓=くじ-く,くじ-ける}}
==={{prov}}===
*[[挫傷]]
*[[挫折]]
*[[摧挫]]
*[[頓挫]]
*[[捻挫]]
=={{L|zh}}==
{{zh-cat|cuo4|常=2}}
{{trans_link|zh|{{PAGENAME}}}}
* '''ローマ字表記'''
** '''[[普通話]]'''
*** '''[[ピンイン]]''': [[cuò]] (cuo4), [[zhēn]] (zhen1), [[zhěn]] (zhen3)
*** '''[[ウェード式]]''': [[ts'o]]<sup>4</sup>, [[chen]]<sup>1</sup>, chen<sup>3</sup>
** '''[[広東語]]'''
*** '''[[イェール式]]''': [[cho3]]
=={{L|ko}}==
{{ko-han|좌|eumhun=꺽을 좌}}
=={{L|vi}}==
{{vi-han|doạ}}
=={{コード}}==
{{文字コード|jis=1-26-35|mj={{mjmoji|012356}}|gb=B4EC|cns=1-5562|big5=AEC0|ksx=1001-7129}}
{{検字|倉頡=QOOG|四角=5801.4}}
{{字典|dj=0780.290|hdz=31885.030|大字源=3359|大漢語林=3975|康煕=0431.220|新大字典=5558|新潮漢字=4061|諸橋=12087}}
07er8pmcirdcmbqyu64kf5ohrk1l0gy
誚
0
39461
2313376
2038094
2026-08-09T06:42:10Z
ちょこれ゚いとみんと
129959
2313376
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しょう}}
==漢字==
{{kanji|言|7}}
{{kanji variants|诮=[[簡体字]]|譙}}
===字源===
*[[形声文字|形声]]。「[[言]]」+音符「[[肖]] {{phoneme|*SEW}}」。
{{字源}}
===字義===
#しっかり咎める。
=={{L|ja}}==
{{ja-kanji|呉音=ジョウ<ゼウ|漢音=ショウ<セウ|訓=しか-る,せ-める,そし-る}}
==={{prov}}===
*[[誚譲]]
*[[誚責]]
*[[責誚]]
=={{L|zh}}==
{{zh-cat|qiao4}}
{{yue-cat|chiu3}}
{{zh-han|m=qiào|c=chiu3}}
=={{L|ko}}==
{{ko-han|초}}
=={{コード}}==
{{文字コード|jis=1-75-55|mj={{mjmoji|024510|024511}}|gb=D556|big5=BBA6|cns=1-6B2E|全={{全字庫|92974}}|ksx=1002-6F78|kps=10721-765D}}
{{検字|四角=0962.7|倉頡=YRFB}}
{{字典|康煕=1163.030|広韻=414.23|vt=B04670|諸橋=35529|新潮漢字=11957|大字源=9354|新大字典=15776|大漢語林=10717|dj=1627.160|ch=1247.204|hdz=63975.110}}
1kaermkrgasngsw9klr16635j6572qc
2313377
2313376
2026-08-09T06:43:30Z
ちょこれ゚いとみんと
129959
2313377
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しょう}}
==漢字==
{{kanji|言|7}}
{{kanji variants|诮=[[簡体字]]|譙}}
===字源===
*[[形声文字|形声]]。「[[言]]」+音符「[[肖]] {{phoneme|*SEW}}」。
{{字源}}
===字義===
#しっかり咎める。
=={{L|ja}}==
{{ja-kanji|呉音=ジョウ<ゼウ|漢音=ショウ<セウ|訓=しか-る,せ-める,そし-る}}
==={{prov}}===
{{prov-top}}
*[[誚譲]]
*[[誚責]]
*[[責誚]]
*[[譏誚]]
{{prov-bottom}}
=={{L|zh}}==
{{zh-cat|qiao4}}
{{yue-cat|chiu3}}
{{zh-han|m=qiào|c=chiu3}}
=={{L|ko}}==
{{ko-han|초}}
=={{コード}}==
{{文字コード|jis=1-75-55|mj={{mjmoji|024510|024511}}|gb=D556|big5=BBA6|cns=1-6B2E|全={{全字庫|92974}}|ksx=1002-6F78|kps=10721-765D}}
{{検字|四角=0962.7|倉頡=YRFB}}
{{字典|康煕=1163.030|広韻=414.23|vt=B04670|諸橋=35529|新潮漢字=11957|大字源=9354|新大字典=15776|大漢語林=10717|dj=1627.160|ch=1247.204|hdz=63975.110}}
t0ldjoxwdd3puhlgkba81fkuflvukny
駸
0
39620
2313352
2135878
2026-08-09T04:09:43Z
Keikei kanji
129888
自明な形声文字だけに対する記述はほぼないです。漢字は形声文字が8~9割ですから基本的に形声文字と考える方が合理的です
2313352
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しん}}
== 漢字 ==
{{kanji|馬|7}}
{{kanji variants|骎=[[簡体字]]}}
===字源===
* [[形声文字|形声]]。「[[馬]]」 + [[音符]]「[[侵]]{{phoneme|*TSƏM}}」。「[[すすむ]]」「[[はしる]]」を[[意味]]する[[漢語]]{[[駸]]{{phoneme|*tsʰəm}}}を表す字。
==== 参考文献 ====
* [[上古音]]は布之道『[http://www.kaom.net/sgy_bzd.php 廣韻形聲考]』による。
===意義===
# [[すすむ]]。[[はしる]]。
=={{L|ja}}==
[[Category:{{ja}}]]
{{ja-kanji|呉音=シン<シム|漢音=シン<シム}}
===={{prov}}====
* {{ふりがな|駸駸|しんしん|yomilink=no}}
=={{L|zh}}==
[[Category:{{zh}}|qin1]]
{{trans_link|zh|{{PAGENAME}}}}
* '''ローマ字表記'''
** '''[[普通話]]'''
*** '''[[ピンイン]]''': [[qīn]] (qin1)
*** '''[[ウェード式]]''': ch'in<sup>1</sup>
** '''[[広東語]]'''
*** '''[[イェール式]]''': cham1
=={{L|ko}}==
[[Category:{{ko}}|침]]
{{ko-hanja|hangeul=[[침]]|eumhun=말 몰아 달릴 침|rv=chim|mr=ch'im|y=chim}}
=={{L|vi}}==
{{vi-han|xăm}}
== {{コード}} ==
{{文字コード|jis=1-81-52|mj={{mjmoji|028705|028706}}|gb=F19F|cns=2-6069|big5=EF5D|ksx=1002-7129}}
{{検字|倉頡=SFSME|四角=7734.7}}
{{字典|dj=1963.210|hdz=74558.180|大字源=11518|大漢語林=13106|康煕=1439.100|新大字典=19498|新潮漢字=14443|諸橋=44759}}
ddhootlnbcc7fkjhl8inmqqp76ktokm
2313447
2313352
2026-08-09T11:07:06Z
ふゆくれ
95641
2313447
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しん}}
==漢字==
{{kanji|馬|7}}
{{kanji variants|骎=[[簡体字]]|𩤿|浸=字義3|𩤨=[[同字]]}}
===字源===
* [[形声文字|形声]]。「[[馬]]」 + [[音符]]「[[侵]]{{phoneme|*TSƏM}}<ref group="字源" name="上古音">{{R:och:GYXSK}}</ref>」。「[[すすむ]]」「[[はしる]]」を[[意味]]する[[漢語]]{[[駸]]{{phoneme|*tsʰəm}}}を表す字。
====参考文献====
<references group="字源"/>
===字義===
#[[すすむ]]。[[はしる]]。
#馬が走り集まるさま。
#「[[浸]]」の[[通字]](『字統网』掲載)。物事が段階的に進むさま。
=={{L|ja}}==
{{ja-kanji|呉音=*|漢音=シン<シム}}
==={{prov}}===
*[[駸駸]]
===参考文献===
{{書誌・コトバンク|word={{PAGENAME}}|author=普及版 {{w|字通}}|accessdate=2026-08-09}}
=={{L|zh}}==
{{zh-cat|qin1}}
{{yue-cat|cham1}}
{{hak-cat|chhim1}}
{{nan-cat|chhim1}}
{{cpx-cat|cing1}}
{{ltc-cat|tshim1}}
{{och-cat|tshem}}
{{zh-han|m=qīn|c=cam1|pfs=chhîm|hrs=cimˋ|gd=cim1|mn=chhim|px=pt,xy:cing1}}
**'''[[中古音]]''': tshim, tsrhim
**'''[[上古音]]'''
***'''Baxter–Sagart''': /*[tsʰ][i]m/, /*[tsʰ]r[i]m/
***'''鄭張''': /*sʰim/, /*sʰrim/
***'''布之道''': /*tsʰəm/, /*tsʰrəm/
==={{prov}}===
*{{zh-l|駸駸}}
=={{L|ko}}==
{{ko-han|침|eumhun=말 몰아 달릴 침}}
=={{L|vi}}==
{{vi-han|xăm|xâm|nghiệm}}
=={{コード}}==
{{文字コード|jis=1-81-52|mj={{mjmoji|028705|028706}}|gb=F19F|cns=2-6069|全={{全字庫|155753}}|big5=EF5D|ksx=1002-7129|tcvn=6056-6C45}}
{{検字|倉頡=SFSME|四角=7734.7}}
{{字典|dj=1963.210|hdz=74558.180|大字源=11518|大漢語林=13106|康煕=1439.100|新大字典=19498|新潮漢字=14443|諸橋=44759|ch=1507.103|広韻=216.31/220.44|matthews=1111|mw=3266b|nelson=5214|vt=B05802}}
5pyygu655bh97lyavqu67tioh3w747v
2313448
2313447
2026-08-09T11:08:04Z
ふゆくれ
95641
/* {{L|ja}} */
2313448
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しん}}
==漢字==
{{kanji|馬|7}}
{{kanji variants|骎=[[簡体字]]|𩤿|浸=字義3|𩤨=[[同字]]}}
===字源===
* [[形声文字|形声]]。「[[馬]]」 + [[音符]]「[[侵]]{{phoneme|*TSƏM}}<ref group="字源" name="上古音">{{R:och:GYXSK}}</ref>」。「[[すすむ]]」「[[はしる]]」を[[意味]]する[[漢語]]{[[駸]]{{phoneme|*tsʰəm}}}を表す字。
====参考文献====
<references group="字源"/>
===字義===
#[[すすむ]]。[[はしる]]。
#馬が走り集まるさま。
#「[[浸]]」の[[通字]](『字統网』掲載)。物事が段階的に進むさま。
=={{L|ja}}==
{{ja-kanji|呉音=*|漢音=シン<シム|訓=すす-む,はし-る|古訓=ゆく;{{w|名義抄}},はやきうま;{{w|字鏡集}}}}
==={{prov}}===
*[[駸駸]]
===参考文献===
{{書誌・コトバンク|word={{PAGENAME}}|author=普及版 {{w|字通}}|accessdate=2026-08-09}}
=={{L|zh}}==
{{zh-cat|qin1}}
{{yue-cat|cham1}}
{{hak-cat|chhim1}}
{{nan-cat|chhim1}}
{{cpx-cat|cing1}}
{{ltc-cat|tshim1}}
{{och-cat|tshem}}
{{zh-han|m=qīn|c=cam1|pfs=chhîm|hrs=cimˋ|gd=cim1|mn=chhim|px=pt,xy:cing1}}
**'''[[中古音]]''': tshim, tsrhim
**'''[[上古音]]'''
***'''Baxter–Sagart''': /*[tsʰ][i]m/, /*[tsʰ]r[i]m/
***'''鄭張''': /*sʰim/, /*sʰrim/
***'''布之道''': /*tsʰəm/, /*tsʰrəm/
==={{prov}}===
*{{zh-l|駸駸}}
=={{L|ko}}==
{{ko-han|침|eumhun=말 몰아 달릴 침}}
=={{L|vi}}==
{{vi-han|xăm|xâm|nghiệm}}
=={{コード}}==
{{文字コード|jis=1-81-52|mj={{mjmoji|028705|028706}}|gb=F19F|cns=2-6069|全={{全字庫|155753}}|big5=EF5D|ksx=1002-7129|tcvn=6056-6C45}}
{{検字|倉頡=SFSME|四角=7734.7}}
{{字典|dj=1963.210|hdz=74558.180|大字源=11518|大漢語林=13106|康煕=1439.100|新大字典=19498|新潮漢字=14443|諸橋=44759|ch=1507.103|広韻=216.31/220.44|matthews=1111|mw=3266b|nelson=5214|vt=B05802}}
t114n83zc3xoftvhgpvnwcfdcky48i1
viande
0
40354
2313460
1834359
2026-08-09T11:45:40Z
Kuroco2k
84207
/* {{desc}} */
2313460
wikitext
text/x-wiki
{{also|viànde}}
=={{L|fro}}==
==={{alter}}===
* {{l|fro|vïande}}
==={{etym}}===
{{etyl|VL.|fro}} {{m|VL.|*vīvanda}} < {{etyl|la|fro}} {{m|la|vīvenda}} < {{m|la|vivo|vīvō, vīvere}}
==={{noun}}===
{{fro-noun|f}}
[[カテゴリ:{{fro}}_食品|*]]
#[[食品]]。
===={{usage}}====
* 16世紀までは「肉」としての意味では使われていなかった。
===={{desc}}====
* {{desc|en|viand|bor=1}}
* {{desc|roa-opt|vianda|bor=1}}
** {{desc|gl|vianda}}
* {{desc|frm|viande}}
** {{desc|fr|viande}}
* {{desc|nrf|viande|viànde}}
----
=={{L|frm}}==
==={{etym}}===
{{etyl|fro|frm}} {{m|fro|viande}} < {{etyl|VL.|frm}} {{m|VL.|*vīvanda}} < {{etyl|la|frm}} {{m|la|vīvenda}} < {{m|la|vivo|vīvō, vīvere}}
==={{noun}}===
{{frm-noun|f}}
[[カテゴリ:{{frm}}_食品|*]]
[[カテゴリ:{{frm}}_肉|*]]
#[[食品]]。
#(16世紀以降){{ふりがな|肉|にく}}。
===={{usage}}====
* 16世紀までは「肉」としての意味では使われていなかった。
===={{desc}}====
* {{desc|fr|viande}}
----
=={{L|nrf}}==
==={{alter}}===
* {{l|nrf|viànde}} {{qualifier|ガーンジー島語}}
* {{l|nrf|vyãd}} {{qualifier|サーク島語}}
==={{etym}}===
{{etyl|fro|nrf}} {{m|fro|viande}} < {{etyl|VL.|nrf}} {{m|VL.|*vīvanda}} < {{etyl|la|nrf}} {{m|la|vīvenda}} < {{m|la|vivo|vīvō, vīvere}}
==={{pron}}===
* {{音声|nrf|Jer-viande.ogg|音声 (ジャージー)}}
==={{noun}}===
{{nrf-noun|f}}
#{{context|Jersey|lang=nrf}}{{ふりがな|肉|にく}}。
===={{drv}}====
* {{l|nrf|viande dé vaque}}
* {{l|nrf|viande au fou}}
----
=={{L|fr}}==
==={{etym}}===
{{etyl|fro|fr}} {{m|fro|viande}} < {{etyl|VL.|fr}} {{m|VL.|*vīvanda}} < {{etyl|la|fr}} {{m|la|vīvenda}} < {{m|la|vivo|vīvō, vīvere}}
==={{pron}}===
* {{fr-IPA}}
* {{音声|fr|Fr-viande.ogg|音声 (フランス)}}
* {{音声|fr|LL-Q150 (fra)-Guilhelma-viande.wav|音声}}
* {{音声|fr|LL-Q150 (fra)-Roll-Morton-viande.wav|音声 (フランス)}}
* {{音声|fr|LL-Q150 (fra)-X-Javier-viande.wav|音声 (フランス)}}
* {{音声|fr|LL-Q150 (fra)-Fhala.K-viande.wav|音声 (フランス)}}
* {{音声|fr|LL-Q150 (fra)-GrandCelinien-viande.wav|音声 (フランス)}}
* {{音声|fr|LL-Q150 (fra)-Nattes à chat-viande.wav|音声 (スイス)}}
* {{音声|fr|LL-Q150 (fra)-Lepticed7-viande.wav|音声 (フランス)}}
* {{音声|fr|LL-Q150 (fra)-GAllegre-viande.wav|音声 (フランス)}}
* {{音声|fr|LL-Q150 (fra)-Penegal-viande.wav|音声 (フランス)}}
* {{音声|fr|LL-Q150 (fra)-DSwissK-viande.wav|音声 (スイス)}}
* {{音声|fr|LL-Q150 (fra)-Justforoc-viande.wav|音声}}
* {{音声|fr|LL-Q150 (fra)-Poslovitch-viande.wav|音声 (フランス)}}
* {{音声|fr|LL-Q150 (fra)-Ash Crow-viande.wav|音声 (フランス)}}
* {{音声|fr|LL-Q150 (fra)-LoquaxFR-viande.wav|音声 (フランス)}}
* {{音声|fr|LL-Q150 (fra)-Madehub-viande.wav|音声}}
* {{音声|fr|LL-Q150 (fra)-T. Le Berre-viande.wav|音声 (フランス)}}
* {{音声|fr|LL-Q150 (fra)-Eihel-viande.wav|音声 (スイス)}}
* {{音声|fr|LL-Q150 (fra)-Kaderousse-viande.wav|音声}}
* {{音声|fr|LL-Q150 (fra)-val (Eavq)-viande.wav|音声 (フランス)}}
* {{音声|fr|LL-Q150 (fra)-WikiLucas00-viande.wav|音声 (フランス)}}
* {{音声|fr|LL-Q150 (fra)-Mecanautes-viande.wav|音声 (フランス)}}
* {{音声|fr|LL-Q150 (fra)-Loizbec-viande.wav|音声 (フランス)}}
* {{音声|fr|LL-Q150 (fra)-Fabe56-viande.wav|音声}}
* {{音声|fr|LL-Q150 (fra)-Vampiro (ClasseNoes)-viande.wav|音声}}
* {{音声|fr|LL-Q150 (fra)-Mathieu Kappler-viande.wav|音声 (フランス)}}
* {{音声|fr|LL-Q150 (fra)-Sagnamadr-viande.wav|音声}}
* {{音声|fr|LL-Q150 (fra)-Opsylac-viande.wav|音声 (フランス)}}
==={{noun}}===
{{fr-noun|f}}
[[カテゴリ:{{fr}}_肉|*]]
#{{ふりがな|肉|にく}}。
#{{context|food|lang=fr}}[[食肉]]。
#{{context|slang|lang=fr}}[[豊満]]な[[肉体]]を持つ人。
===={{drv}}====
{{top}}
* [[coupe de viande]]
* [[couteau à viande]]
* [[hachoir à viande]]
* [[marchand de viande]]
* [[mettre la viande dans le torchon]]
* [[mouche à viande]]
* [[moulin à viande]]
* [[pain de viande]]
* [[pièce de viande]]
* [[sac à viande]]
* [[viandard]]
* [[viande à bagne]]
* [[viande à chien]]
* [[viande à pneu]]
* [[viande blanche]]
* [[viande cellulaire]]
* [[viande creuse]]
* [[viande de brousse]]
* [[viande des Grisons]]
* [[viande froide]]
* [[viande hachée]]
* [[viande noire]]
* [[viande rouge]]
* [[viande saoule]]
* [[viander]]
* [[viandox]]
{{bottom}}
===={{syn}}====
* [[barbac]]
* [[barbaque]]
* [[bidoche]]
* [[carne]]
* [[chair]]
----
=={{L|roa-brg}}==
==={{etym}}===
{{etyl|la|roa-brg}} {{m|la|vivenda}}
==={{noun}}===
{{head|roa-brg|noun|g=f|複数|viandes}}
[[カテゴリ:{{roa-brg}}_肉|*]]
#{{ふりがな|肉|にく}}。
===={{syn}}====
* [[châr]]
* [[carne]]
----
=={{L|la}}==
==={{participle}}===
{{la-part-form|viande}}
#{{l|la|viandus}}の男性単数呼格。
hxgw3cwhsadgip839hps3mjkivnuw7i
ごとう
0
41790
2313235
2140765
2026-08-08T23:42:18Z
鍼灸
112313
2313235
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|ことう|こどう|ごどう}}
=={{ja}}==
==={{kangokana}}===
{{ja-kangokana}}
*【[[五島]]】:五つの島。
*【[[後唐]]】:中国五代の国の一つ。
*【[[後藤]]】:姓の一つ。
*【[[御灯]]】:灯火の丁寧語。
*【[[梧桐]]】:あおぎり。
*【[[語頭]]】[[語]]の[[はじめ|始め]]の[[文字]]または[[おと|音]]。
*【[[誤答]]】:間違った答え。
*【[[五等]]】:第五位
*【[[五頭]]】:(動物が)五匹。
{{stub|homonym}}
raoxq26lnro9amj1dpyyi65hfa0uuri
哀韻
0
42469
2313384
1468653
2026-08-09T07:07:54Z
Jiba1219
100610
2313384
wikitext
text/x-wiki
{{kana-DEFAULTSORT|あいいん}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[あいいん]]}}
# [[詩]]や[[音楽]]の、もの[[かなしい|悲しく]]て、[[あわれみ|哀れみ]]を[[さそう]]ような[[調子]]。
<!--発音 (日本語) アクセントや発音記号の記載のない限りコメントアウト
===={{pron|jpn}}====
;(アクセント等の記載)
:{{IPA|??}}
:{{X-SAMPA|??}}
-->
===={{trans}}====
*{{en}}: [[sad]] [[rhythm]]
*{{zh}}: {{zh-ts|[[#{{zh}}|哀韻]]|哀韵}}
===={{rel}}====
* {{syn}}: [[哀歌]], [[哀感]], [[哀愁]], [[哀調]], [[悲調]]
=={{L|zh}}==
{{zh-cat|ai1yun4|noun}}
==={{noun}}===
{{zh-ts|哀韻|哀韵}}
# もの[[かなしい|悲しく]]て、[[あわれみ|哀れみ]]を[[さそう]]ような[[調子]]。
iki0zkbwma6b80l3y2vbx283e5lmxp3
危险
0
50747
2313356
1575849
2026-08-09T04:20:56Z
Jiba1219
100610
2313356
wikitext
text/x-wiki
=={{L|zh}}==
{{zh-cat|wei1xian3|noun|adj|hsk=甲|hsk2=4}}
{{yue-cat|ngai4him2|noun|adj}}
{{nan-cat|gui5hiam2|noun|adj}}
{{nan-tws-cat|nguin5hiam2|noun|adj}}
{{hak-cat|ngui2hiam3|noun|adj}}
{{wuu-cat|ngue3shi3|noun|adj}}
==={{pron}}===
{{cmn-pron|wēixiǎn|wéixiǎn|a=y|z=n}}
{{yue-pron|ngai4 him2|h=n}}
{{nan-pron|ml:gûi-hiám|t=nguin5 hiam2}}
{{hak-pron|h=ngui hiamˊ|gd=ngui2 hiam3}}
{{wuu-pron|sh:6we shi5,6ngue shi5;sj:2ngue shi3;cm:2nguei shie3;sz:2we shie3;cz:2wai shie3;tx:2wi shie3;hz:2wei shien3}}
==={{noun}}===
{{zhchars|t=危險}}
#[[危険]]。
==={{adjective}}===
{{zhchars|t=危險}}
#危険な。
25k71fmfglnrfsf6lrd9i5uolsppd9m
危險
0
50748
2313351
1507877
2026-08-09T04:01:54Z
Jiba1219
100610
2313351
wikitext
text/x-wiki
{{kana-DEFAULTSORT|きけん}}
=={{L|ja}}==
==={{kyujitai}}===
{{ja-kyujitai|きけん}}
#{{kyujitai of|危険}}
=={{L|zh}}==
{{zh-cat|wei1xian3|noun|adj}}
{{yue-cat|ngai4him2|noun|adj}}
{{nan-cat|gui5hiam2|noun|adj}}
{{nan-tws-cat|nguin5hiam2|noun|adj}}
{{hak-cat|ngui2hiam3|noun|adj}}
{{wuu-cat|ngue3shi3|noun|adj}}
==={{pron}}===
{{cmn-pron|wēixiǎn|wéixiǎn|a=y}}
{{yue-pron|ngai4 him2}}
{{nan-pron|gûi-hiám|t=nguin5 hiam2}}
{{hak-pron|ngùi-hiám|h=ngui hiamˊ|gd=ngui2 hiam3}}
{{wuu-pron|sh:6we shi5,6ngue shi5;sj:2ngue shi3;cm:2nguei shie3;sz:2we shie3;cz:2wai shie3;tx:2wi shie3;hz:2wei shien3}}
==={{noun}}===
{{zhchars|s=危险}}
#[[危険]]。
==={{adjective}}===
{{zhchars|s=危险}}
#危険な。
=={{L|ko}}==
==={{noun}}===
{{ko-head|noun|위험}}
#[[危険]]。
=={{L|vi}}==
==={{noun}}===
{{vi-head|noun|nguy|hiểm}}
#[[危険]]。
==={{adjective}}===
{{vi-head|adjective|nguy|hiểm}}
#危険な。
prtr7jbcfh37fi10klbclkmcgp7w8vj
침
0
51812
2313451
1830335
2026-08-09T11:16:31Z
M-30722
1202
2313451
wikitext
text/x-wiki
==ハングル==
{{ハングル|ㅊ|ㅣ|ㅁ}}
=={{L|ko}}==
==={{pron}}===
{{ko-IPA}}
==={{noun}}===
{{head|ko|noun}}
#{{context|physiology|lang=ko}}{{ふりがな|唾|つば}}。
#: {{ux|ko|'''침'''[[을]] [[뱉다]]|唾を吐く}}
===漢字音===
[[Category:{{ko}} 漢字音]]
[[侵]][[針]][[沈]][[浸]][[寢]][[枕]][[鍼]][[砧]][[琛]][[寖]][[忱]][[椹]][[沉]][[郴]][[鋟]][[駸]]
=={{コード}}==
{{ハングルコード}}
1w20xxjuonjqajbm4on7kum11enk1gd
爱惜
0
53020
2313358
1576108
2026-08-09T05:02:26Z
Jiba1219
100610
2313358
wikitext
text/x-wiki
{{DEFAULTSORT:ai4xi1}}
=={{L|zh}}==
{{zh-cat|ai4xi1|動詞|hsk=丁|hsk2=5}}
{{yue-cat|oi3sik1|動詞}}
{{nan-cat|ai3sioh4|動詞}}
{{nan-tws-cat|ain3sioh4|動詞}}
{{hak-cat|oi4siak5|動詞}}
{{wuu-cat|e3sih4|動詞}}
{{hsn-cat|ngai4si6|動詞}}
==={{pron}}===
{{cmn-pron|àixī|àixí|a=Zh-àixi.ogg|z=n}}
{{yue-pron|oi3 sik1,oi3 sek3|h=n}}
{{nan-pron|ml:ài-sioh|t=ain3 sioh4}}
{{hak-pron|oi-siak}}
{{wuu-pron|sz:1e5 siq7}}
{{hsn-pron|ngai4 si6}}
==={{verb}}===
{{zhchars|t=愛惜}}
#[[大切]]にする。
dxtc2q9vynytb6jyqy65v1tjdaa8au7
2313361
2313358
2026-08-09T05:06:09Z
Jiba1219
100610
2313361
wikitext
text/x-wiki
{{DEFAULTSORT:ai4xi1}}
=={{L|zh}}==
{{zh-cat|ai4xi1|動詞|hsk=丁|hsk2=5}}
{{yue-cat|oi3sik1|動詞}}
{{nan-cat|ai3sioh4|動詞}}
{{nan-tws-cat|ain3sioh4|動詞}}
{{wuu-cat|e3sih4|動詞}}
{{hsn-cat|ngai4si6|動詞}}
==={{pron}}===
{{cmn-pron|àixī|àixí|a=Zh-àixi.ogg|z=n}}
{{yue-pron|oi3 sik1,oi3 sek3|h=n}}
{{nan-pron|ml:ài-sioh|t=ain3 sioh4}}
{{wuu-pron|sz:1e5 siq7}}
{{hsn-pron|ngai4 si6}}
==={{verb}}===
{{zhchars|t=愛惜}}
#[[大切]]にする。
r4x6ewf9td5nc84fwzrfu9flvlatz4s
テンプレート:ma
10
54742
2313230
1599139
2026-08-08T23:34:54Z
Kuroco2k
84207
[[テンプレート:mk]] へのリダイレクトを解除しました
2313230
wikitext
text/x-wiki
{| class="sakujo" style="border:solid gray 1px; padding:0 0.5em; margin:1ex auto; font-size: small; width:80%"
|-
| [[ファイル:Icono aviso borrar.svg|50px|削除依頼に提出されています]]
|
このページは'''[[Wiktionary:削除の方針|削除の方針]]'''に従い'''[[Wiktionary:削除依頼|削除依頼]]'''に出されています。[[{{TALKSPACE}}:{{PAGENAME}}|このページのノート]]も参照してください。
この項目の削除可否についての議論が<span class="sakujo-request">[[Wiktionary:削除依頼/2026年8月/テンプレート:ma|該当する削除依頼]]</span>で進行中です。
この項目は'''まだ削除されていません'''。削除に異議のある方は<span class="sakujo-request">[[Wiktionary:削除依頼/2026年8月/テンプレート:ma|該当する削除依頼]]</span>に是非ご参加ください。該当する削除依頼が終了するまで'''このメッセージを剥がさないでください。'''
[[カテゴリ:削除依頼中のページ]]
|}
8mqzy3ykghcm04heafluo8t6j3b3v4f
テンプレート:mac
10
54743
2313227
1599140
2026-08-08T23:30:18Z
Kuroco2k
84207
[[テンプレート:mk]] へのリダイレクトを解除しました
2313227
wikitext
text/x-wiki
{{非推奨のテンプレート|メッセージ='''このテンプレートは使用されるべきではありません。代わりに[[テンプレート:mk]]を使用してください。'''|廃止=n}}
<includeonly>[[カテゴリ:非推奨のテンプレートを使用しているページ]]</includeonly><noinclude>[[カテゴリ:言語表記テンプレート|{{PAGENAME}}]][[カテゴリ:ISO 639-2|{{PAGENAME}}]]</noinclude>
tnd5i9pdxew7ywh5a4x6jk77jovb9ta
moteriškas
0
55048
2313442
2044707
2026-08-09T10:44:45Z
Kuroco2k
84207
2313442
wikitext
text/x-wiki
{{DEFAULTSORT:moteriskas moteriškas}}
=={{L|lt}}==
==={{pron}}===
{{lt-pr|móteriškas}}
*{{kanahyoki|lt|'''モー'''テリシュカス}}
==={{adjective}}===
{{head|lt|adjective|g=m|head=moteriškas|中性:|[[moteriška|móteriška]]|sort=moteriskas moteriškas}}
#[[女性]]の。[[おんな|女]]の。
===={{inflection}}====
;原級:
非限定形(アクセント型: '''1'''<ref>村田郁夫・編『リトアニア語基礎一五〇〇語』大学書林、1994年、44頁。ISBN 4-475-01112-4</ref>):
{{lt-infl-adj|男性単数主格=moteriškas|男性単数主格表示=móteriškas|女性単数主格=moteriška|女性単数主格表示=móteriška|男性複数主格=moteriški|男性複数主格表示=móteriški|女性複数主格=moteriškos|女性複数主格表示=móteriškos|男性単数属格=moteriško|男性単数属格表示=móteriško|女性単数属格=moteriškos|女性単数属格表示=móteriškos|男性複数属格=moteriškų|男性複数属格表示=móteriškų|女性複数属格=moteriškų|女性複数属格表示=móteriškų|男性単数与格=moteriškam|男性単数与格表示=móteriškam|女性単数与格=moteriškai|女性単数与格表示=móteriškai|男性複数与格=moteriškiems|男性複数与格表示=móteriškiems|女性複数与格=moteriškoms|女性複数与格表示=móteriškoms|男性単数対格=moterišką|男性単数対格表示=móterišką|女性単数対格=moterišką|女性単数対格表示=móterišką|男性複数対格=moteriškus|男性複数対格表示=móteriškus|女性複数対格=moteriškas|女性複数対格表示=móteriškas|男性単数具格=moterišku|男性単数具格表示=móterišku|女性単数具格=moteriška|女性単数具格表示=móteriška|男性複数具格=moteriškais|男性複数具格表示=móteriškais|女性複数具格=moteriškomis|女性複数具格表示=móteriškomis|男性単数位格=moteriškame|男性単数位格表示=móteriškame|女性単数位格=moteriškoje|女性単数位格表示=móteriškoje|男性複数位格=moteriškuose|男性複数位格表示=móteriškuose|女性複数位格=moteriškose|女性複数位格表示=móteriškose|男性単数呼格=moteriškas|男性単数呼格表示=móteriškas|女性単数呼格=moteriška|女性単数呼格表示=móteriška|男性複数呼格=moteriški|男性複数呼格表示=móteriški|女性複数呼格=moteriškos|女性複数呼格表示=móteriškos}}
限定形:
{{lt-infl-adj|男性単数主格=moteriškasis|女性単数主格=moteriškoji|男性複数主格=moteriškieji|女性複数主格=moteriškosios|男性単数属格=moteriškojo|女性単数属格=moteriškosios|男性複数属格=moteriškųjų|女性複数属格=moteriškųjų|男性単数与格=moteriškajam|女性単数与格=moteriškajai|男性複数与格=moteriškiesiems|女性複数与格=moteriškosioms|男性単数対格=moteriškąjį|女性単数対格=moteriškąją|男性複数対格=moteriškuosius|女性複数対格=moteriškąsias|男性単数具格=moteriškuoju|女性単数具格=moteriškąja|男性複数具格=moteriškaisiais|女性複数具格=moteriškosiomis|男性単数位格=moteriškajame|女性単数位格=moteriškojoje|男性複数位格=moteriškuosiuose|女性複数位格=moteriškosiose|男性単数呼格=moteriškasis|女性単数呼格=moteriškoji|男性複数呼格=moteriškieji|女性複数呼格=moteriškosios}}
{{lt-infl-adj-comp-super|moterišk|moterišk}}
===={{comp}}====
{{top}}
非限定・女性・単数・主格:
*[[moteriška giminė|'''moteriška''' giminė]] - 《[[文法]]》 [[女性|'''女'''性]]
{{bottom}}
===={{trans}}====
{{trans-see|女性}}
===={{ant}}====
*[[vyriškas]]
===={{rel}}====
;{{noun}}:
*[[moteris]] '''{{f}}'''
*[[motina]] {{f}}
===脚注===
<references />
9kkho8m1jw3vaii53ap96guf5xz254l
2313445
2313442
2026-08-09T10:47:23Z
Kuroco2k
84207
/* {{inflection}} */
2313445
wikitext
text/x-wiki
{{DEFAULTSORT:moteriskas moteriškas}}
=={{L|lt}}==
==={{pron}}===
{{lt-pr|móteriškas}}
*{{kanahyoki|lt|'''モー'''テリシュカス}}
==={{adjective}}===
{{head|lt|adjective|g=m|head=moteriškas|中性:|[[moteriška|móteriška]]|sort=moteriskas moteriškas}}
#[[女性]]の。[[おんな|女]]の。
===={{inflection}}====
{{lt-adj-as-1|moterišk|móterišk}}
===={{comp}}====
{{top}}
非限定・女性・単数・主格:
*[[moteriška giminė|'''moteriška''' giminė]] - 《[[文法]]》 [[女性|'''女'''性]]
{{bottom}}
===={{trans}}====
{{trans-see|女性}}
===={{ant}}====
*[[vyriškas]]
===={{rel}}====
;{{noun}}:
*[[moteris]] '''{{f}}'''
*[[motina]] {{f}}
===脚注===
<references />
11omm4db04tizfuob2vjuohexurigoy
jij
0
67746
2313382
2091107
2026-08-09T07:00:50Z
Jiba1219
100610
水平線の除去
2313382
wikitext
text/x-wiki
=={{L|nl}}==
==={{etym}}===
{{etyl|dum|nl}} ''[[ji]]'' < {{etyl|odt|nl}} {{m|odt|gī}} < {{etyl|gem-pro|nl}} {{m|gem-pro|*jīz}} < {{etyl|ine-pro|nl}} {{m|ine-pro|*yū́}}
==={{pron}}===
* {{rhymes|ɛi̯}}
* {{IPA|lang=nl|jɛi̯}} (強勢あり), {{IPA|lang=nl|jə}} (強勢なし)
* {{SAMPA|jEi}}
* {{音声|nl|Nl-jij.ogg}}
==={{pronoun}}===
{{head|nl|pronoun}}
#二人称単数主格。[[あなた]]。
{{nl-decl-personal pronouns}}
===={{rel}}====
* {{l|nl|je}}
* {{l|nl|jullie}}
===={{desc}}====
*{{desc|af|jy}}
==={{verb}}===
{{nl-verb-form}}
#[[jijen]]の直説法現在第一人称単数形。
#jijenの命令法。
=={{L|jbo}}==
===Rafsi===
{{jbo-rafsi}}
#[[jijnu]]のrafsi。
cq0e4bhc4y6lggb4aie5ye4w8qpw5ez
諸処
0
71702
2313101
1921442
2026-08-08T13:10:19Z
うーむ
129171
/* 別表記 */
2313101
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しょしょ}}
=={{L|ja}}==
{{ja-kanjitab|しょ|しょ|yomi=o}}
===別表記===
*[[諸所]]
*[[所所]]
==={{pron}}===
{{ja-pron|しょしょ|acc=1}}
==={{noun}}===
{{ja-noun|[[しょしょ]]}}
#{{ふりがな|諸諸|もろもろ}}の[[場所]]。[[いろいろ|色々]]な場所。
#*[[われら]][[三年]]の[[あいだ|間]]、'''諸処'''を[[へる|経]][[めぐる|めぐっ]]た[[こと|事]]が[[ござる]]。({{w|芥川龍之介}}『じゅりあの・吉助』)
===={{syn}}====
*[[あちこち]]、[[あちらこちら]]、[[ここかしこ]]、[[ところどころ]]、[[方方]]
0u6sbjp7ecb7sjde1dkseve929rv6u8
mac
0
74323
2313199
2306932
2026-08-08T23:01:01Z
Kuroco2k
84207
2313199
wikitext
text/x-wiki
=={{symb}}==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2B|mk}}
=={{L|ga}}==
==={{etym}}===
{{etyl|mga|ga}} {{m|mga|mac}} < {{etyl|sga|ga}} {{m|sga|macc}} < {{etyl|pgl|ga}} {{m|pgl|ᚋᚐᚊᚊᚔ|pos=属格}} < {{etyl|cel-pro|ga}} {{m|cel-pro|*makkʷos}} ( {{m|cel-pro|*makʷos}} の異形) < {{etyl|ine-pro|ga}} {{m|ine-pro|*meh₂ḱ-}}
==={{pron}}===
* {{IPA|lang=ga|mˠak|mˠɑk}}
==={{noun}}===
{{ga-noun|g=m|mic|mic}}
#{{タグ|ga|家族}}{{ふりがな|息子|むすこ}}。
{{ga-decl-m1|m|ac|ic|datpl=yes}}
===={{coor}}====
* {{l|ga|iníon}}
* {{l|ga|Nic}}
===={{drv}}====
{{col3|lang=ga|garmhac|leasmhac|mac léinn|mac rí|mac tíre|millteán mic|leanbh mic|oidhre mic|páiste mic|Dia an Mac|An t[[Athair-Mhac]]|macra|mac an daba|macghníomh|Mac|macasamhail}}
{{ga-mut}}
=={{L|en}}==
==={{pron}}===
* {{enPR|măk}}, {{IPA|lang=en|mæk}}
* {{音声|en|LL-Q1860 (eng)-Vealhurl-mac.wav|a=Southern England}}
* {{rhymes|lang=en|æk|s=1}}
* {{homophones|lang=en|Mac|mack|Mack}}
==={{etym}}1===
{{m|en|mackintosh}} の短縮。
===={{noun}}====
{{en-noun}}
#{{タグ|en|略語}}{{l|en|mackintosh}}の短縮。
#{{タグ|en|UK|US|Canada|Australia|俗語|offensive|derogatory|民族差別}}[[スコットランド]]系の人。
====={{drv}}=====
* [[pac-a-mac]]
==={{etym}}2===
{{m|en|macaroni}} の短縮。
===={{noun}}====
{{en-noun|-}}
#{{タグ|en|North America|略語|俗語}}{{l|en|macaroni}}の短縮。
====={{drv}}=====
* [[chili mac]]
* {{l|en|mac and cheese}}, {{l|en|mac 'n' cheese}}
* {{l|en|mac salad}}
==={{anag}}===
* {{anagrams|en|a=acm|ACM|AMC|C.M.A.|CAM|CMA|Cam|MCA|cam}}
=={{L|csb}}==
==={{etym}}===
{{etyl|sla-pro|csb}} {{m|sla-pro|*màti}}
==={{noun}}===
{{csb-noun|f}}
#{{タグ|csb|家族}}{{ふりがな|母|はは}}、{{ふりがな|母親|ははおや}}。
=={{L|ca}}==
==={{pron}}===
* {{ca-IPA}}
==={{noun}}===
{{ca-noun|m}}
#{{ふりがな|小石|こいし}}。
#: {{syn|ca|còdol}}
===={{drv}}====
* {{l|ca|mac de torrent}}
* {{l|ca|macar}}
=={{L|quc}}==
==={{noun}}===
{{head|quc|noun}}
#{{タグ|quc|Classical K'iche'|宗教}}{{ふりがな|罪|つみ}}、[[罪悪]]。
=={{L|sga}}==
==={{noun}}===
{{sga-noun|m|maic|maic|gen2=meic|pl2=meic}}
#{{l|sga|macc}}の異綴。
{{sga-decl-o-masc|maic|gen_sg2=meic}}
=={{L|gd}}==
==={{etym}}===
{{etyl|mga|gd}} {{m|mga|mac}} < {{etyl|sga|gd}} {{m|sga|macc}} < {{etyl|pgl|gd}} {{m|pgl|ᚋᚐᚊᚊᚔ|pos=属格}} < {{etyl|cel-pro|gd}} {{m|cel-pro|*makkʷos}} ( {{m|cel-pro|*makʷos}} の異形) < {{etyl|ine-pro|gd}} {{m|ine-pro|*meh₂ḱ-}}
==={{pron}}===
* {{IPA|lang=gd|maʰk|a=Lewis|a2=Wester Ross}}
* {{IPA|lang=gd|maxk|a=Southern Hebridean|a2=Skye}}
* {{hyph|gd|mac}}
==={{noun}}===
{{gd-noun|g=m|gen=mic|pl=mic}}
#{{タグ|gd|家族}}{{ふりがな|息子|むすこ}}。
{{gd-decl-noun-m1|m|ac|ic}}
===={{drv}}====
* {{l|gd|macail}}
* {{l|gd|mac-an-aba}}
* {{l|gd|uchd-mhac}}
{{gd-mut-cons|m|ac}}
=={{L|zlw-slv}}==
==={{etym}}===
{{etyl|sla-pro|zlw-slv}} {{m|sla-pro|*màti}}
==={{noun}}===
{{head|zlw-slv|noun|g=f}}
#{{タグ|zlw-slv|家族}}{{ふりがな|母|はは}}、{{ふりがな|母親|ははおや}}。
=={{L|so}}==
==={{adjective}}===
{{head|so|adj}}
#{{おくりがな2|甘|あま|い|あまい}}。
===={{drv}}====
*{{l|so|macaan}}
==={{seealso}}===
*{{l|so|qadhaadh}}
=={{L|enm}}==
==={{noun}}===
{{head|enm|noun}}
#{{l|enm|make}}の異形。
=={{L|mga}}==
==={{pron}}===
* {{IPA|lang=mga|mak}}
==={{etym}}1===
{{etyl|sga|mga}} {{m|sga|macc}} < {{etyl|pgl|mga}} {{m|pgl|ᚋᚐᚊᚊᚔ|pos=属格}} < {{etyl|cel-pro|mga}} {{m|cel-pro|*makkʷos}} ( {{m|cel-pro|*makʷos}} の異形) < {{etyl|ine-pro|mga}} {{m|ine-pro|*meh₂ḱ-}}
===={{noun}}====
{{mga-noun|m|mic|mic}}
#{{タグ|mga|家族}}{{ふりがな|息子|むすこ}}。
====={{desc}}=====
* {{desc|ga|mac}}
* {{desc|gd|mac}}
* {{desc|gv|mac}}
==={{etym}}2===
{{etyl|cel-pro|mga}} {{m|cel-pro|*makkos}}
===={{noun}}====
{{mga-noun|m}}
#[[保証]]。
{{mga-mutation|m|ac}}
=={{L|dik}}==
==={{noun}}===
{{head|dik|noun|plural|mɛ̈c}}
#{{ふりがな|火|ひ}}。
#[[刑務所]]、[[監獄]]。
=={{L|fr}}==
==={{pron}}===
* {{fr-IPA}}
* {{音声|fr|LL-Q150 (fra)-LoquaxFR-mac.wav|a=Vosges}}
==={{etym}}1===
===={{noun}}====
{{fr-noun|m}}
#{{タグ|fr|略語|口語|俗語}}{{l|fr|maquereau}}の短縮。
==={{etym}}2===
===={{noun}}====
{{fr-noun|m}}
#{{タグ|fr|略語|口語|情報技術}}{{l|fr|Macintosh}}の短縮。
=={{L|gv}}==
==={{etym}}===
{{etyl|sga|gv}} {{m|sga|macc}} < {{etyl|pgl|gv}} {{m|pgl|ᚋᚐᚊᚊᚔ|pos=属格}} < {{etyl|cel-pro|gv}} {{m|cel-pro|*makkʷos}} ( {{m|cel-pro|*makʷos}} の異形) < {{etyl|ine-pro|gv}} {{m|ine-pro|*meh₂ḱ-}}
==={{noun}}===
{{gv-noun|m|mec|mic}}
#{{タグ|gv|家族}}{{ふりがな|息子|むすこ}}。
===={{drv}}====
* {{l|gv|mac-}}
{{gv-mut-cons|m|ac}}
=={{L|ro}}==
==={{pron}}===
* {{IPA|lang=ro|ˈmak}}
* {{rhymes|lang=ro|ak|s=1}}
==={{etym}}1===
{{bor|ro|cu||*макъ}} < {{etyl|sla-pro|ro}} {{m|sla-pro|*makъ}}
===={{noun}}====
{{ro-noun|m|maci}}
#{{タグ|ro|可算|草}}{{ふりがな|芥子|けし}}、[[ポピー]]。
#{{タグ|ro|不可算}}芥子の{{ふりがな|実|み}}。
{{ro-noun-m}}
====={{drv}}=====
* {{l|ro|mac cornut}}
==={{etym}}2===
オノマトペ
===={{interjection}}====
{{head|ro|interjection}}
#{{タグ|ro|オノマトペ}}アヒルの鳴き声。くぁっ。
=={{L|jbo}}==
===Rafsi===
{{jbo-rafsi}}
#{{l|jbo|manci}}のrafsi。
6sl5om9ir2hhmgs62kbgjhvlilq991g
常识
0
75561
2313383
2273470
2026-08-09T07:03:11Z
Jiba1219
100610
2313383
wikitext
text/x-wiki
=={{L|zh}}==
{{zh-cat|chang2shi2|noun|hsk=丙|hsk2=5}}
{{yue-cat|seung4sik1|noun}}
{{nan-cat|siong5sek4|noun}}
{{nan-tws-cat|sion5seg4|noun}}
==={{pron}}===
{{cmn-pron|chángshí|chángshì|z=n}}
{{yue-pron|soeng4 sik1|a=LL-Q9186 (yue)-Justinrleung-常識.wav|h=n}}
{{nan-pron|xm:siông-sek/qz:siông-siak/zz:siâng-sit/ly:chhâng-sit|t=sion5 sêg4}}
{{hak-pron|h=shong shid}}
==={{noun}}===
{{zhchars|t=常識}}
#[[常識]]。
0p9if8o1acft3pdsfhnxlfbkkb5halv
はけん
0
77820
2313455
1474869
2026-08-09T11:28:18Z
M-30722
1202
2313455
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[派遣]]】[[命令]]して[[他]]の[[地]]へ[[いく|行か]]せること。
*【[[覇権]]】[[覇者]]としての[[権力]]。
ceh4bya944uz0925ebed1pceq461cha
仔細
0
79693
2313462
2212244
2026-08-09T11:46:59Z
Kuroco2k
84207
/* {{desc}} */
2313462
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しさい}}
=={{L|ja}}==
{{ja-kanjitab|し|さい|yomi=o}}
==={{alter}}===
*[[子細]]
==={{pron}}===
{{ja-pron|しさい|acc=0|acc2=1}}
==={{noun}}===
{{ja-noun|[[しさい]]}}
#{{おくりがな2|細|こま|かい|こまかい}}こと。{{おくりがな2|詳|くわ|しい|くわしい}}こと。
#詳しい[[事情]]。
#{{おくりがな3|差|さ|し|支|つか|え|さしつかえ}}。
==={{adjectivenoun}}===
{{ja-adjectival noun|しさい}}
{{日本語ダ活用}}
=={{L|zh}}==
{{拡大|仔|細|lang=zh}}
==={{alter}}===
*{{ZHtra|[[子細]]}}
==={{pron}}===
{{cmn-pron|zǐxì|a=zh-zixì.ogg}}
{{yue-pron|zi2 sai3|a=LL-Q9186-Luilui6666-仔细.wav|a2=LL-Q9186 (yue)-Justinrleung-仔細.wav|t=du2 lhai1}}
{{hak-pron|chṳ́-se}}
{{nan-pron|xm,zz,kh:chú-sè/tp:chú-sòe/qz:chír-sè|t=ze2 soi3}}
{{wuu-pron|sh:5tsy shi}}
==={{adj}}===
{{zh-cat|zi3xi4|adj|verb}}
{{yue-cat|ji2sai3|adj|verb}}
{{hak-cat|chii3se3|adj|verb}}
{{nan-cat|chu2soe3|adj|verb}}
{{nan-tws-cat|ze2soi3|adj|verb}}
{{wuu-cat|tsy2si3|adj|verb}}
{{zhchars}} ({{zh-ts||'''[[仔细]]'''}} )
#[[注意深い]]。
#{{q|官話}} [[質素]]な。[[倹約的]]な。
==={{verb}}===
{{zhchars}} ({{zh-ts||'''[[仔细]]'''}} )
#[[注意]]する。[[用心]]する。
==={{desc}}===
{{CJKV|仔細,子細|子細|j=しさい|j2=仔細|[[자세]]|tử tế|v=仔細}}
[[Category:日中で意味が大きく異なる漢語]]
=={{L|ko}}==
==={{noun}}===
{{ko-head|noun|자세}}
#(日本語語義1に同じ)仔細。
===={{alter}}====
*{{l|ko|子細}}
=={{L|vi}}==
==={{adj}}===
{{vi-head|adj|tử|tế}}
#[[礼儀正しい]]。[[親切]]な。
[[Category:日越で意味が大きく異なる漢語]]
5j7mpiwwvc0u3gihw8m7met9utgdc73
上面
0
81668
2313308
1714405
2026-08-09T01:24:09Z
Jiba1219
100610
2313308
wikitext
text/x-wiki
{{kana-DEFAULTSORT|じょうめん}}
=={{L|ja}}==
[[Category:{{ja}}]]
==={{noun}}===
[[Category:{{ja}}_{{noun}}]]
{{jachars}}
#(じょうめん) [[もの|物]]の[[うえ|上]]を[[むく|向いた]]面。
#([[うわつら]]、[[うわっつら]])
##[[表面]]。
##外から見える表面的な部分。
===={{ant}}====
語義1
*[[下面]]
=={{L|zh}}==
{{zh-cat|shang4mian|方位詞|noun|hsk=乙}}
{{yue-cat|seung6min6|noun}}
{{nan-cat|chiunn76bin7|noun}}
{{hak-cat|song4mien4|noun}}
{{wuu-cat|zaon3mi3|noun}}
{{hsn-cat|shan5mienn|noun}}
==={{pron}}===
{{cmn-pron|shàngmian|a=LL-Q9192 (cmn)-Luilui6666-上面.wav}}
{{yue-pron|soeng6 min6|a=LL-Q9186 (yue)-Justinrleung-上面.wav|t=siang5 men5}}
{{nan-pron|xm,qz:siōng-bīn/xm:siōng-biān/zz:siāng-bīn/zz:siāng-biān}}
{{hak-pron|song-mien}}
{{wuu-pron|sh:6zaon mi}}
{{hsn-pron|shan5 mienn}}
===方位詞===
{{zhchars}}
#{{ふりがな|上|うえ}}(に、で)。
#(順序){{ふりがな|前|まえ}}(に、で)。
==={{noun}}===
{{zhchars}}
#(物の)[[表面]]。
#[[方面]]。
#[[上級]][[機関]]、[[上司]]。
=={{L|ko}}==
==={{noun}}===
{{ko-head|noun|상면}}
#[[もの|物]]の[[うえ|上]]を[[むく|向いた]]面。
dct1l66z53z0o4ff9l1go7qgh9fsxj6
상면
0
81671
2313310
2207078
2026-08-09T01:27:42Z
Jiba1219
100610
2313310
wikitext
text/x-wiki
=={{L|ko}}==
==={{pron}}1===
{{ko-IPA|l=y}}
===={{noun}}====
{{head|ko|noun}}
{{ko-h|上|面|hom=y}}
#[[上面]]。
==={{pron}}2===
{{ko-IPA}}
===={{noun}}====
{{head|ko|noun}}
{{ko-h|相|面}}
#[[対面]]。
#[[初対面]]の[[挨拶]]。
n5pkwyfa5h4634m7yfzpu2bcsf7ui16
波涛
0
83989
2313363
2097179
2026-08-09T05:18:49Z
Jiba1219
100610
2313363
wikitext
text/x-wiki
{{kana-DEFAULTSORT|はとう}}
=={{L|ja}}==
{{ja-kanjitab|は|とう|yomi=o}}
===={{pron}}====
{{ja-pron|はとう|acc=h}}
==={{noun}}===
{{ja-noun|[[はとう]]|yomi=o}}
#「[[波濤]]」の[[拡張新字体]]を用いた表記。
=={{L|zh}}==
{{zh-cat|bo1tao1|noun}}
{{yue-cat|boi1tou4|noun}}
{{nan-cat|pho1to5|noun}}
==={{pron}}===
{{cmn-pron|bōtāo|bōtáo|z=n}}
{{yue-pron|bo1 tou4|h=n}}
{{nan-pron|qz:pho-tô͘/xm,zz:pho-tô/xm:po-tô}}
==={{noun}}===
{{zhchars|t=波濤}}
#[[波濤]]。
lnbq5ktrjz8qe05sdkrc1ev4f2mv0av
波濤
0
83990
2313362
2097180
2026-08-09T05:18:06Z
Jiba1219
100610
2313362
wikitext
text/x-wiki
{{kana-DEFAULTSORT|はとう}}
=={{L|ja}}==
{{ja-kanjitab|は|とう|yomi=o}}
===={{pron}}====
{{ja-pron|はとう|acc=h}}
==={{noun}}===
{{ja-noun|[[はとう]]|yomi=o}}
#{{ふりがな|大波|おおなみ}}。
===={{alter}}====
*[[波涛]]([[拡張新字体]]を用いた表記)
=={{L|zh}}==
{{zh-cat|bo1tao1|noun}}
{{yue-cat|boi1tou4|noun}}
{{nan-cat|pho1to5|noun}}
==={{pron}}===
{{cmn-pron|bōtāo|bōtáo}}
{{yue-pron|bo1 tou4}}
{{nan-pron|qz:pho-tô͘/tw,xm,zz:pho-tô/xm:po-tô}}
==={{noun}}===
{{zhchars|s=波涛}}
#(日本語に同じ)波濤。
=={{L|ko}}==
==={{noun}}===
{{ko-head|noun|파도}}
#(日本語に同じ)波濤。
=={{L|vi}}==
==={{noun}}===
{{vi-head|noun|ba|đào}}
#(日本語に同じ)波濤。
#*「波濤,ba đào.」(阮秉『五千字譯國語』)
0brunhyh5bgvs0k0oea3hwh3spza6fr
堕落
0
88529
2313349
1923199
2026-08-09T03:16:38Z
Jiba1219
100610
2313349
wikitext
text/x-wiki
{{kana-DEFAULTSORT|だらく}}
{{wikipedia}}
=={{L|ja}}==
==={{pron}}===
{{ja-pron|だらく|acc=0}}
==={{noun}}===
{{ja-noun-suru|だらく|kyu=墮落}}
#[[健全]]な[[状態]]・[[態度]]を[[うしなう|失って]][[劣悪]]な状態・態度になること。
#{{context|Buddhism|lang=ja}}[[道心]]を失って[[欲]]に[[みちる|満ちた]][[生活]]をすること。
===={{syn}}====
* [[腐敗]]、[[退廃]]、<small>(語義1・語義2、に共通で使える{{syn}})</small>
語義1
*[[いやしい|卑しい]]、[[転落]]、[[廃退]]
語義2
*[[不健全]]、[[背徳]]
===={{ant}}====
* [[健全]]<small>(語義1・語義2、に共通で使える{{ant}})</small>
語義1
* [[更生]]
語義2
* [[清廉]]
===={{rel}}====
*[[腐敗]]、[[退廃]] [[利権構造]]
===={{prov}}====
*[[堕落僧]]
===={{trans}}====
*{{T|en}}: {{t|en|corruption}}
==={{verb}}===
{{日本語サ変活用}}
===={{trans}}====
*{{T|en}}: {{t|en|corrupt}}
=={{L|zh}}==
{{zh-cat|duo4luo4|verb|hsk=丁|hsk2=6}}
{{yue-cat|do6lok6|verb}}
==={{pron}}===
*ピンイン: duòluò
*{{yue}}: do{{supra|6}}lok{{supra|6}}
==={{verb}}===
{{zhchars|t=墮落}}
#堕落する。
dsnohh4zjd4g9l4he01jf6ioxnqp3eu
墮落
0
88530
2313348
1511914
2026-08-09T03:12:34Z
Jiba1219
100610
2313348
wikitext
text/x-wiki
{{kana-DEFAULTSORT|だらく}}
=={{L|ja}}==
==={{kyujitai}}===
{{ja-kyujitai|だらく}}
#{{kyujitai of|堕落}}
=={{L|zh}}==
{{zh-cat|duo4luo4|verb}}
{{yue-cat|do6lok6|verb}}
{{nan-cat|tui7loh8|verb}}
==={{pron}}===
*ピンイン: duòluò
*注音符号: ㄉㄨㄛˋ ㄌㄨㄛˋ
*{{yue}}: do{{supra|6}}lok{{supra|6}}
*{{nan}}: tūi-lo̍h
==={{verb}}===
{{zhchars|s=堕落}}
#[[堕落]]する。
=={{L|ko}}==
==={{noun}}===
{{ko-head|noun|타락}}
#[[堕落]]。
k145bl1dcswdv5002j5u2y4jonj3c0g
テンプレート:pt-verb
10
105659
2313385
1808778
2026-08-09T07:12:46Z
Kuroco2k
84207
内容の置換:「<onlyinclude>{{head|pt|verb}}</onlyinclude> [[カテゴリ:{{pt}} テンプレート|verb]]」
2313385
wikitext
text/x-wiki
<onlyinclude>{{head|pt|verb}}</onlyinclude>
[[カテゴリ:{{pt}} テンプレート|verb]]
k9dk5k5nf2waueic5gtappsz4b9kg7i
流氓
0
106570
2313466
2185616
2026-08-09T11:53:53Z
Kuroco2k
84207
/* {{desc}} */
2313466
wikitext
text/x-wiki
{{kana-DEFAULTSORT|りゅうぼう}}
=={{L|ja}}==
{{ja-kanjitab|りゅう|ぼう|yomi=o}}
==={{pron}}===
{{ja-pron|りゅうぼう|acc=0}}
{{ja-accent-common|region=京阪|h||りゅーぼー}}
==={{noun}}===
{{ja-noun|[[りゅうぼう]]}}
#[[流浪]]の{{ふりがな|民|たみ}}。[[流民]]。
=={{L|zh}}==
{{zh-cat|liu2mang2|noun|古語・廃語|hsk=丙|hsk2=6}}
{{yue-cat|lau4man4|noun|古語・廃語}}
{{nan-cat|liu5bin5|noun|古語・廃語}}
{{nan-tws-cat|liu5mang5|noun|古語・廃語}}
{{cpx-cat|liu2morng2|noun|古語・廃語}}
{{wuu-cat|lieu3maon1|noun}}
==={{pron}}===
{{cmn-pron|liúmáng|a=Zh-liúmáng.ogg}}
{{yue-pron|lau4 man4,lau4 mong4,lau4 mang4,lau4 maang4|a=LL-Q9186-Luilui6666-流氓.wav}}
{{nan-pron|qz,xm:liû-bâng/tw,zz:liû-bîn|t=liu5 mang5}}
{{cpx-pron|pt,xy:liu2 morng2}}
{{wuu-pron|sh:6lieu maon}}
==={{noun}}===
{{zhchars}}
#{{context|古語・廃語|lang=wuu|skey=lieu3maon1}}(日本語に同じ)流氓。
#[[やくざ]]、[[ちんぴら]]。
#[[迷惑]][[行為]]。
[[Category:日中で意味が大きく異なる漢語]]
==={{desc}}===
{{CJKV||j=りゅうぼう|流氓|유맹,류맹}}
=={{L|ko}}==
==={{noun}}===
{{ko-head|noun|유맹|류맹}}
#(日本語に同じ)流氓。
e4f2i2pkgus68u3g2phf7z6mtczkoi4
くず
0
111591
2313283
2204783
2026-08-09T00:23:43Z
鍼灸
112313
2313283
wikitext
text/x-wiki
{{半保護S}}{{kana-DEFAULTSORT}}
{{also|くす|ぐず}}
=={{L|ja}}==
==={{noun}}:屑===
{{ja-noun|屑}}
# [[よい]]ところを[[とる|とった]][[あと]]に[[のこる|のこった]]もの。[[本体]]からこぼれおちて[[不要]]になったもの。[[ごみ]]。
#*パンくず。かんなくず。消しゴムのくず。
# [[一面]]に散らばった、[[微小]]にみえるもの。
#*星屑。
# [[こわれる|こわれて]]、[[つかう|つかわなく]]なったもの。
# [[なに|なん]]の[[役にたつ|役にもたたない]]もの。
#{{context|derogatory|lang=ja}}倫理的、道義的に[[問題]]のある人。またその[[行為]]。
===={{etym}}====
{{etyl|ojp|ja}}「{{m|ojp|くづ}}」の変化
===={{pron}}====
{{ja-pron|acc=1}}
{{ja-accent-common|region=京阪|o|く|ず}}
===={{syn}}====
* [[かす]]
* [[ごみ]]
* [[廃品]]
* [[廃物]]
===={{drv}}====
* [[くずかご]]
* [[くずかみ]]
===={{trans}}====
{{trans-top|つかわないもの}}
{{T|en}}: {{t|en|rubbish}}
{{trans-bottom}}
{{trans-top|役にたたないもの}}
{{T|en}}: {{t|en|trash}}
{{trans-bottom}}
{{trans-top|のこりもの}}
{{T|en}}: {{t|en|waste}}
{{trans-bottom}}
==={{noun}}:葛===
{{wikipedia|クズ}}
{{ja-noun|葛}}
#{{context|grass|秋|lang=ja}}大型の[[つる]]性[[多年草]]。[[まめ|マメ科]]に属する。[[秋の七草]]のひとつ。
===={{etym}}====
地名「{{topo|ja|国栖}}」より。
===={{pron}}====
{{ja-pron|acc=1}}
{{ja-accent-common|region=京阪|o|く|ず}}
===={{rel}}====
* [[葛根]]
* [[くずこ]]
* [[くずもち]]
* [[くずゆ]]
==={{name}}===
{{ja-proper noun|国栖|国樔|国巣}}
# かつて{{ふりがな|大和|やまと}}国吉野郡にあったとされる[[むら|村]]。その[[住民]]。
#*此者吉野'''国巣'''之祖(『{{w|古事記}}』中巻(神武天皇))
#*:これは吉野の'''くず'''の祖先
# {{ふりがな|常陸|ひたち}}国{{ruby|[[茨城]]|いばらき}}郡の[[土着]]民。
# 能の演目のひとつ。
==={{kangokana}}===
{{ja-kangokana}}
*【[[九頭]]】:九つの[[頭部]]。
g3kuwefai324n4m57mv07lkgn8i3ynp
contributes
0
113799
2313458
2238618
2026-08-09T11:40:14Z
M-30722
1202
2313458
wikitext
text/x-wiki
=={{L|en}}==
==={{verb}}===
{{head|en|verb form}}
#{{l|en|contribute}}の直説法現在第三人称単数形。
t568phl28ahmha3glotuhrenyi80ior
contributing
0
113800
2313457
2238619
2026-08-09T11:39:36Z
M-30722
1202
2313457
wikitext
text/x-wiki
=={{L|en}}==
==={{pron}}===
* {{IPA|lang=en|kənˈtɹɪbjuːtɪŋ|ˈkɒntɹɪˌbjuːtɪŋ|a=RP}}
* {{音声|en|LL-Q1860 (eng)-Vealhurl-contributing.wav|a=Southern England}}
* {{音声|en|LL-Q1860 (eng)-Vealhurl-contributing2.wav|a=Southern England}}
* {{IPA|lang=en|kənˈtɹɪbjutɪŋ|kənˈtɹɪbjətɪŋ|a=GA}}
* {{hyph|en|con|trib|ut|ing}}
==={{verb}}===
{{head|en|verb form}}
#{{l|en|contribute}}の動名詞又は現在分詞。
8cdbos818f4epq642gdlnv90td7wt75
contributed
0
113801
2313456
2238620
2026-08-09T11:38:31Z
M-30722
1202
2313456
wikitext
text/x-wiki
=={{L|en}}==
==={{pron}}===
* {{IPA|lang=en|kənˈtɹɪbjuːtɪd}}
* {{IPA|lang=en|ˈkɒntɹɪˌbjuːtɪd|a=less common|a2=UK}}
==={{verb}}===
{{head|en|verb form}}
#{{l|en|contribute}}の過去形・過去分詞。
nl3ai8bzwirlgulvpf2eb80fy4k8bym
しっとう
0
113988
2313322
1479969
2026-08-09T01:52:46Z
鍼灸
112313
2313322
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|じっとう}}
=={{ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[失投]]】- [[野球]]の[[投手]]が[[失敗]]した[[投球]]をしたこと。
*【[[執刀]]】- [[手術]]などで[[メス]]をとること。
*【[[失当]]】- [[道理]]から[[はずす|はずれた]][[言動]]のこと。
2y44s45buiqagxi2wyby8nxaai4nuqg
2313346
2313322
2026-08-09T03:06:10Z
うーむ
129171
/* */
2313346
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|じっとう|じつどう}}
=={{ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[失投]]】- [[野球]]の[[投手]]が[[失敗]]した[[投球]]をしたこと。
*【[[執刀]]】- [[手術]]などで[[メス]]をとること。
*【[[失当]]】- [[道理]]から[[はずす|はずれた]][[言動]]のこと。
ip9dgyz0qkrihz2q6i07xllcm9z2ppn
力量
0
115485
2313467
2156154
2026-08-09T11:53:53Z
Kuroco2k
84207
/* {{desc}} */
2313467
wikitext
text/x-wiki
{{kana-DEFAULTSORT|りきりょう}}
=={{L|ja}}==
{{ja-kanjitab|りき|りょう|yomi=o}}
==={{pron}}===
{{ja-pron|りきりょう|acc=0}}
==={{noun}}===
{{ja-noun|りきりょう}}
#[[能力]]。
#*元来人間というものは自己の'''力量'''に慢じてみんな増長している。([[w:夏目漱石|夏目漱石]] 『[[w:吾輩は猫である|吾輩は猫である]]』)
===={{trans}}====
*{{T|en}}: [[ability]], [[competence]], [[biceps]],(英)[[calibre]]/ (米)[[caliber]]
*{{T|zh}}: [[能力]]
=={{L|zh}}==
==={{pron}}===
{{cmn-pron|lìliang|dg=ли1лён1}}
{{yue-pron|lik6 loeng6|a=LL-Q9186-Luilui6666-力量.wav}}
{{nan-pron|xm,tw,km:le̍k-liōng/qz:lia̍k-liōng/zz:le̍k-liāng/xm,qz:la̍t-liōng|t=lag8 liang6}}
{{cpx-pron|pt:lih7 lyorng5/xy:lih7 lyoeng5}}
{{cdo-pron|lĭk-liông}}
{{hak-pron|li̍t-liong|h=lidˋ liong˖}}
{{gan-pron|lit6 liong}}
==={{noun}}===
{{zhchars}}
# {{ふりがな|力|ちから}}、[[ちからづよさ|ちからづよさ]]。
#*{{zh-l|化悲痛為力量}}
#*: 悲しみを力とする。
{{zh-cat|li4liang|名詞|hsk=乙|hsk2=5}}
{{yue-cat|lik6leung6|名詞}}
{{nan-cat|lek8liang7|名詞}}
{{nan-tws-cat|lag8liang6|名詞}}
{{cpx-cat|lih7lyorng5|名詞}}
{{cdo-cat|lik7liong6|名詞}}
{{hak-cat|lit6liong4|名詞}}
{{gan-cat|lit6liong|名詞}}
{{dng-cat|лилён|名詞}}
==={{desc}}===
{{CJKV||力量|역량,력량|lực lượng}}
=={{L|ko}}==
==={{noun}}===
{{ko-head|noun|역량|력량}}
#力量、[[器量]]。
=={{L|vi}}==
==={{noun}}===
{{vi-head|noun|lực|lượng}}
#力量、[[勢力]]。
cuthockwk2mfhjqtacohj6ilwt2e9dk
suy
0
117011
2313151
2087596
2026-08-08T22:38:16Z
Kuroco2k
84207
2313151
wikitext
text/x-wiki
{{DEFAULTSORT:suy1 suy}}
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|3|suy}}
=={{L|ain}}==
{{ain-kana}}
==={{pron}}===
* {{ain-IPA}}
==={{adv}}===
{{head|ain|adv}}
# また。{{おくりがな2|再|ふたた|び|ふたたび}}。
#* {{quote|ain|“[[i=]][[ekari]] [[suy]] [[arki]] [[yan]]” [[sekor]] [[kane]] [[hawean]] [[kor]].|「それを作るのに'''また'''来てください」と、言っていました。|ref=<ref>{{citation|author=平賀さだも|title=7-2 ウエペケㇾ 「ケソラㇷ゚ カムイ イレス」(孔雀の神に育てられた)|publisher=文化庁 アイヌ語の保存・継承に必要なアーカイブ化に関する調査研究事業|journal=第2年次調査研究報告書1/3|year=1969|publication-date=2015年3月}}</ref>}}
#* {{quote|ain|[[ukaun]] [[ukaun]] [[honkor]] [[hine]] [[suy]] [[matkaci]] [[kor]].|重ねて妊娠して、'''また'''女の子を産んだ。|ref=<ref>{{citation|author=平賀さだも|title=11-1 ウエペケㇾ「ウラユシウンクㇽ」(ウラユシの人)|publisher=文化庁 アイヌ語の保存・継承に必要なアーカイブ化に関する調査研究事業|journal=第2年次調査研究報告書1/3|year=1969|publication-date=2015年3月}}</ref>}}
#* {{quote|ain|[[ayne]] [[sine]] [[pa]] [[he]] [[turano]] [[oka]][[=an]] [[kor]] [[suy]] [[nea]] [[a=]][[maci]] [[suy]] [[a=]][[rayke]] [[rusuy]], [[neun]] [[a=]][[eyaynita]] [[yakka]] [[a=]][[eyaynita]] [[ka]] [[koyaykus]].|そうして1年ほど一緒に過ごしたのですが、やはりその嫁も、'''また'''殺したくなりました。いくら我慢しようとしても我慢できません。|ref=<ref>{{citation|author=平目よし|title=18-4 ウエペケㇾ「ウッコッナイ アイヌ アネ」途中でテープ切れ(好色が元で死んだ男の話)|publisher=文化庁 アイヌ語の保存・継承に必要なアーカイブ化に関する調査研究事業|journal=第2年次調査研究報告書1/3|year=1969|publication-date=2015年3月}}</ref>}}
#* {{quote|ain|[[ora]] [[ne]] [[ancikari]] [[wentarap]][[=an]] [[ak]] [[u]] [[suy]] [[kawkaw]] [[noka]] [[o]] [[kosonte]] [[mi]] [[kur]] [[an]] [[wa]] [[puyar]] [[orikekatt]] [[a]] [[hine]] [[ene]] [[hawean]] [[hi]].|そうしてその夜、私は夢を見たところ、'''再び'''霰の模様が入った小袖を着た人が窓のところをグイと引き上げ、このように言いました。|ref=<ref>{{citation|author=木村きみ|title=20-4 ウエペケㇾ「カウカウ ノカ オマ コソンテ ミ カムイ アオナハ ネ」(霰模様の小袖を着た神が私の父だった)|publisher=文化庁 アイヌ語の保存・継承に必要なアーカイブ化に関する調査研究事業|journal=第2年次調査研究報告書1/3|year=1969|publication-date=2015年3月}}</ref>}}
#* {{quote|ain|[[nep]] [[a=]][[e]] [[rusuy]] [[nep]] [[a=]][[kor]] [[rusuy]] [[ka]] [[somo]] [[ki]] [[ora]] [[nea]] [[a=]][[saha]] [[tu]] [[suy]] [[re]] [[suy]] [[i=]][[soyke]] [[ta]] [[ek]].|何を食べたい、何を欲しいとも思わずにいて姉は二'''度'''三'''度'''、私の家の外に来ていた。|ref=<ref>{{citation|author=木村きみ|title=21-2 ウエペケㇾ「アサハ セタネ イカㇻ」(姉が私を犬にした)|publisher=文化庁 アイヌ語の保存・継承に必要なアーカイブ化に関する調査研究事業|journal=第2年次調査研究報告書1/3|year=1969|publication-date=2015年3月}}</ref>}}
===参考文献===
{{Reflist}}
=={{L|vi}}==
[[Category:{{vi}}]]
==={{pron}}===
{{vi-pron}}
==={{verb}}===
[[Category:{{vi}}_{{verb}}]]
'''{{PAGENAME}}'''【[[推]]】
#[[推察]]する。
'''{{PAGENAME}}'''【[[衰]]】
#[[低下]]する、[[衰弱]]する。
bk2bcatpifrddt4zjuouzktzsw8v2hv
テンプレート:ca-conj
10
121391
2313411
2308022
2026-08-09T09:28:51Z
Kuroco2k
84207
内容の置換:「{{#invoke:ca-verb|show}}<noinclude>{{documentation}}</noinclude>」
2313411
wikitext
text/x-wiki
{{#invoke:ca-verb|show}}<noinclude>{{documentation}}</noinclude>
05auau6232h31xuuoeo71ynl9lag0fy
2313413
2313411
2026-08-09T09:30:16Z
Kuroco2k
84207
2313413
wikitext
text/x-wiki
{{#invoke:ca-verb|show}}<noinclude>{{documentation}}[[Category:{{ca}}_テンプレート]]</noinclude>
a5ffjqp9qc11oylqiiwz2j3xdekswgo
2313419
2313413
2026-08-09T09:39:54Z
Kuroco2k
84207
[[poder]]で不具合が...。
2313419
wikitext
text/x-wiki
{{ca-conj-table<!--
-->| {{{title|{{{verb|{{{infinitive}}}}}}}}}<!--
-->| {{{infinitive|{{{verb}}}}}}<!--
-->| [[{{{pres_part}}}#カタルーニャ語|{{{pres_part}}}]]<!--
-->| [[{{{past_part}}}#カタルーニャ語|{{{past_part}}}]]<!--
-->| [[{{{pres_ind_1_sg}}}#カタルーニャ語|{{{pres_ind_1_sg}}}]]<!--
-->| [[{{{pres_ind_2_sg}}}#カタルーニャ語|{{{pres_ind_2_sg}}}]]<!--
-->| [[{{{pres_ind_3_sg}}}#カタルーニャ語|{{{pres_ind_3_sg}}}]]<!--
-->| [[{{{pres_ind_1_pl}}}#カタルーニャ語|{{{pres_ind_1_pl}}}]]<!--
-->| [[{{{pres_ind_2_pl}}}#カタルーニャ語|{{{pres_ind_2_pl}}}]]<!--
-->| [[{{{pres_ind_3_pl}}}#カタルーニャ語|{{{pres_ind_3_pl}}}]]<!--
-->| [[{{{impf_ind_1_sg}}}#カタルーニャ語|{{{impf_ind_1_sg}}}]]<!--
-->| [[{{{impf_ind_2_sg}}}#カタルーニャ語|{{{impf_ind_2_sg}}}]]<!--
-->| [[{{{impf_ind_3_sg}}}#カタルーニャ語|{{{impf_ind_3_sg}}}]]<!--
-->| [[{{{impf_ind_1_pl}}}#カタルーニャ語|{{{impf_ind_1_pl}}}]]<!--
-->| [[{{{impf_ind_2_pl}}}#カタルーニャ語|{{{impf_ind_2_pl}}}]]<!--
-->| [[{{{impf_ind_3_pl}}}#カタルーニャ語|{{{impf_ind_3_pl}}}]]<!--
-->| [[{{{futr_ind_1_sg}}}#カタルーニャ語|{{{futr_ind_1_sg}}}]]<!--
-->| [[{{{futr_ind_2_sg}}}#カタルーニャ語|{{{futr_ind_2_sg}}}]]<!--
-->| [[{{{futr_ind_3_sg}}}#カタルーニャ語|{{{futr_ind_3_sg}}}]]<!--
-->| [[{{{futr_ind_1_pl}}}#カタルーニャ語|{{{futr_ind_1_pl}}}]]<!--
-->| [[{{{futr_ind_2_pl}}}#カタルーニャ語|{{{futr_ind_2_pl}}}]]<!--
-->| [[{{{futr_ind_3_pl}}}#カタルーニャ語|{{{futr_ind_3_pl}}}]]<!--
-->| [[{{{pret_ind_1_sg}}}#カタルーニャ語|{{{pret_ind_1_sg}}}]]<!--
-->| [[{{{pret_ind_2_sg}}}#カタルーニャ語|{{{pret_ind_2_sg}}}]]<!--
-->| [[{{{pret_ind_3_sg}}}#カタルーニャ語|{{{pret_ind_3_sg}}}]]<!--
-->| [[{{{pret_ind_1_pl}}}#カタルーニャ語|{{{pret_ind_1_pl}}}]]<!--
-->| [[{{{pret_ind_2_pl}}}#カタルーニャ語|{{{pret_ind_2_pl}}}]]<!--
-->| [[{{{pret_ind_3_pl}}}#カタルーニャ語|{{{pret_ind_3_pl}}}]]<!--
-->| [[{{{cond_1_sg}}}#カタルーニャ語|{{{cond_1_sg}}}]]<!--
-->| [[{{{cond_2_sg}}}#カタルーニャ語|{{{cond_2_sg}}}]]<!--
-->| [[{{{cond_3_sg}}}#カタルーニャ語|{{{cond_3_sg}}}]]<!--
-->| [[{{{cond_1_pl}}}#カタルーニャ語|{{{cond_1_pl}}}]]<!--
-->| [[{{{cond_2_pl}}}#カタルーニャ語|{{{cond_2_pl}}}]]<!--
-->| [[{{{cond_3_pl}}}#カタルーニャ語|{{{cond_3_pl}}}]]<!--
-->| [[{{{pres_sub_1_sg}}}#カタルーニャ語|{{{pres_sub_1_sg}}}]]<!--
-->| [[{{{pres_sub_2_sg}}}#カタルーニャ語|{{{pres_sub_2_sg}}}]]<!--
-->| [[{{{pres_sub_3_sg}}}#カタルーニャ語|{{{pres_sub_3_sg}}}]]<!--
-->| [[{{{pres_sub_1_pl}}}#カタルーニャ語|{{{pres_sub_1_pl}}}]]<!--
-->| [[{{{pres_sub_2_pl}}}#カタルーニャ語|{{{pres_sub_2_pl}}}]]<!--
-->| [[{{{pres_sub_3_pl}}}#カタルーニャ語|{{{pres_sub_3_pl}}}]]<!--
-->| [[{{{impf_sub_1_sg}}}#カタルーニャ語|{{{impf_sub_1_sg}}}]]<!--
-->| [[{{{impf_sub_2_sg}}}#カタルーニャ語|{{{impf_sub_2_sg}}}]]<!--
-->| [[{{{impf_sub_3_sg}}}#カタルーニャ語|{{{impf_sub_3_sg}}}]]<!--
-->| [[{{{impf_sub_1_pl}}}#カタルーニャ語|{{{impf_sub_1_pl}}}]]<!--
-->| [[{{{impf_sub_2_pl}}}#カタルーニャ語|{{{impf_sub_2_pl}}}]]<!--
-->| [[{{{impf_sub_3_pl}}}#カタルーニャ語|{{{impf_sub_3_pl}}}]]<!--
-->| [[{{{impr_2_sg}}}#カタルーニャ語|{{{impr_2_sg}}}]]<!--
-->| [[{{{impr_3_sg}}}#カタルーニャ語|{{{impr_3_sg}}}]]<!--
-->| [[{{{impr_1_pl}}}#カタルーニャ語|{{{impr_1_pl}}}]]<!--
-->| [[{{{impr_2_pl}}}#カタルーニャ語|{{{impr_2_pl}}}]]<!--
-->| [[{{{impr_3_pl}}}#カタルーニャ語|{{{impr_3_pl}}}]]<!--
-->| infinitive_irreg={{{infinitive_irreg|}}}<!--
-->| pres_part_irreg={{{pres_part_irreg|}}}<!--
-->| past_part_irreg={{{past_part_irreg|}}}<!--
-->| pres_ind_1_sg_irreg={{{pres_ind_1_sg_irreg|}}}<!--
-->| pres_ind_2_sg_irreg={{{pres_ind_2_sg_irreg|}}}<!--
-->| pres_ind_3_sg_irreg={{{pres_ind_3_sg_irreg|}}}<!--
-->| pres_ind_1_pl_irreg={{{pres_ind_1_pl_irreg|}}}<!--
-->| pres_ind_2_pl_irreg={{{pres_ind_2_pl_irreg|}}}<!--
-->| pres_ind_3_pl_irreg={{{pres_ind_3_pl_irreg|}}}<!--
-->| impf_ind_1_sg_irreg={{{impf_ind_1_sg_irreg|}}}<!--
-->| impf_ind_2_sg_irreg={{{impf_ind_2_sg_irreg|}}}<!--
-->| impf_ind_3_sg_irreg={{{impf_ind_3_sg_irreg|}}}<!--
-->| impf_ind_1_pl_irreg={{{impf_ind_1_pl_irreg|}}}<!--
-->| impf_ind_2_pl_irreg={{{impf_ind_2_pl_irreg|}}}<!--
-->| impf_ind_3_pl_irreg={{{impf_ind_3_pl_irreg|}}}<!--
-->| futr_ind_1_sg_irreg={{{futr_ind_1_sg_irreg|}}}<!--
-->| futr_ind_2_sg_irreg={{{futr_ind_2_sg_irreg|}}}<!--
-->| futr_ind_3_sg_irreg={{{futr_ind_3_sg_irreg|}}}<!--
-->| futr_ind_1_pl_irreg={{{futr_ind_1_pl_irreg|}}}<!--
-->| futr_ind_2_pl_irreg={{{futr_ind_2_pl_irreg|}}}<!--
-->| futr_ind_3_pl_irreg={{{futr_ind_3_pl_irreg|}}}<!--
-->| pret_ind_1_sg_irreg={{{pret_ind_1_sg_irreg|}}}<!--
-->| pret_ind_2_sg_irreg={{{pret_ind_2_sg_irreg|}}}<!--
-->| pret_ind_3_sg_irreg={{{pret_ind_3_sg_irreg|}}}<!--
-->| pret_ind_1_pl_irreg={{{pret_ind_1_pl_irreg|}}}<!--
-->| pret_ind_2_pl_irreg={{{pret_ind_2_pl_irreg|}}}<!--
-->| pret_ind_3_pl_irreg={{{pret_ind_3_pl_irreg|}}}<!--
-->| cond_1_sg_irreg={{{cond_1_sg_irreg|}}}<!--
-->| cond_2_sg_irreg={{{cond_2_sg_irreg|}}}<!--
-->| cond_3_sg_irreg={{{cond_3_sg_irreg|}}}<!--
-->| cond_1_pl_irreg={{{cond_1_pl_irreg|}}}<!--
-->| cond_2_pl_irreg={{{cond_2_pl_irreg|}}}<!--
-->| cond_3_pl_irreg={{{cond_3_pl_irreg|}}}<!--
-->| pres_sub_1_sg_irreg={{{pres_sub_1_sg_irreg|}}}<!--
-->| pres_sub_2_sg_irreg={{{pres_sub_2_sg_irreg|}}}<!--
-->| pres_sub_3_sg_irreg={{{pres_sub_3_sg_irreg|}}}<!--
-->| pres_sub_1_pl_irreg={{{pres_sub_1_pl_irreg|}}}<!--
-->| pres_sub_2_pl_irreg={{{pres_sub_2_pl_irreg|}}}<!--
-->| pres_sub_3_pl_irreg={{{pres_sub_3_pl_irreg|}}}<!--
-->| impf_sub_1_sg_irreg={{{impf_sub_1_sg_irreg|}}}<!--
-->| impf_sub_2_sg_irreg={{{impf_sub_2_sg_irreg|}}}<!--
-->| impf_sub_3_sg_irreg={{{impf_sub_3_sg_irreg|}}}<!--
-->| impf_sub_1_pl_irreg={{{impf_sub_1_pl_irreg|}}}<!--
-->| impf_sub_2_pl_irreg={{{impf_sub_2_pl_irreg|}}}<!--
-->| impf_sub_3_pl_irreg={{{impf_sub_3_pl_irreg|}}}<!--
-->| impr_2_sg_irreg={{{impr_2_sg_irreg|}}}<!--
-->| impr_3_sg_irreg={{{impr_3_sg_irreg|}}}<!--
-->| impr_1_pl_irreg={{{impr_1_pl_irreg|}}}<!--
-->| impr_2_pl_irreg={{{impr_2_pl_irreg|}}}<!--
-->| impr_3_pl_irreg={{{impr_3_pl_irreg|}}}<!--
-->| bottom={{{bottom|}}}<!--
-->}}<!--
--><noinclude>{{documentation}}
[[Category:{{ca}}_テンプレート]]</noinclude>
tpko3iwlnw4cyn88ntocbpwozua2uq9
モジュール:ca-verb
828
121393
2313408
1835428
2026-08-09T09:25:55Z
Kuroco2k
84207
[[:en:Module:ca-verb]]。500件くらいエラーが出ると思うが、数日我慢してほしい。
2313408
Scribunto
text/plain
--[=[
This module implements {{ca-conj}} and provides the underlying conjugation functions for {{ca-verb}}
(whose actual formatting is done in [[Module:ca-headword]]).
Authorship: Ben Wing <benwing2>
]=]
local export = {}
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "pres_1s" (present indicative first-person singular), "pres_sub_2s" (present
subjunctive second-person singular) "impf_sub_3p" (imperfect subjunctive third-person plural).
Each slot is filled with zero or more forms.
-- "form" = The conjugated Catalan form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Catalan term. For Catalan, always the infinitive.
]=]
--[=[
FIXME:
--]=]
local lang = require("Module:languages").getByCode("ca")
local m_string_utilities = require("Module:string utilities")
local m_links = require("Module:links")
local m_table = require("Module:table")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local com = require("Module:ca-common")
local force_cat = false -- set to true for debugging
local check_for_red_links = false -- set to false for debugging
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local rsubn = mw.ustring.gsub
local rsub = com.rsub
local u = mw.ustring.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
-- version of rsubn() that returns a 2nd argument boolean indicating whether a substitution was made.
local function rsubb(term, foo, bar)
local retval, nsubs = rsubn(term, foo, bar)
return retval, nsubs > 0
end
local function link_term(term, display, face)
return m_links.full_link({ lang = lang, term = term, alt = display }, face)
end
local front_vowel = "eèéiíï"
local front_vowel_c = "[" .. front_vowel .. "]"
local V = com.V -- vowel regex class
local C = com.C -- consonant regex class
-- IS_USER_STEM_OVERRIDE is prepended to user-supplied stem overrides to prevent `base.prefix` from being prepended.
-- IS_USER_FORM_OVERRIDE is similar but also prevents final devoicing (cf. Balearic pres_1s 'trob' of [[trobar]]).
-- Don't use 0xFFF0 in case we call a [[Module:parse-utilities]] function that uses it temporarily.
local IS_USER_STEM_OVERRIDE = u(0xFFF1)
local IS_USER_FORM_OVERRIDE = u(0xFFF2)
--[=[
Irregular verbs:
-ldre/-ndre verbs:
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
caldre - cal [calent] calia caldrà calgué calgui - calgut,-
coldre colc col colem colia coldré colguí colgui colguem colt,colta
doldre dolc dol dolem dolia doldré dolguí dolgui dolguem dolgut,dolguda
moldre molc mol molem molia moldré molguí molgui molguem molt,molta
oldre olc ol olem olia oldré olguí olgui olguem olgut,olguda
-soldre -solc -sol -solem -solia -soldré -solguí -solgui -solguem -solt,-solta
(absoldre, dissoldre, resoldre)
toldre tolc tol tolem tolia toldré tolguí tolgui tolguem tolt,tolta
romandre romanc roman romanem romania romandré romanguí romangui romanguem romàs,romasa,romasos
encendre encenc encén encenem encenia encendré encenguí encengui encenguem encès,encesa,encesos
fendre fenc fen/-fèn fenem fenia fendré fenguí fengui fenguem fes/-fès,fesa,fesos
(defendre, ofendre)
-pendre -depenc -pèn -penem -penia -pendré -penguí -pengui -penguem -pès,-pesa,-pesos
(dependre,despendre,expendre,suspendre)
prendre prenc pren/-prèn prenem prenia prendré prenguí prengui prenguem pres/-près,presa,presos
(aprendre, comprendre, desprendre, emprendre, reprendre, sorprendre)
-tendre -tenc -tén -tenem -tenia -tendré -tenguí -tengui -tenguem -tès,-tesa,-tesos
(pres2s: atens, pres3p: atenen)
(atendre, contendre, distendre, entendre, estendre, pretendre)
vendre venc ven venem venia vendré venguí vengui venguem venut,venuda
(malvendre, revendre)
fondre fonc fon fonem fonia fondré fonguí fongui fonguem fos/-fós,fosa,fosos
(confondre, difondre, infondre, refondre)
enfondre enfonc enfon enfonem enfonia enfondré enfonguí enfongui enfonguem enfús,enfusa,enfusos
pondre ponc pon ponem ponia pondré ponguí pongui ponguem post,posta,postos
(compondre, correspondre, descompondre, respondre)
tondre tonc ton tonem tonia tondré tonguí tongui tonguem tos,tosa,tosos
cerndre cerno cern cernem cernia cerndré cerní cerni cernem cernut,cernuda
-ler verbs (mostly like -ldre verbs):
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
caler (var. of caldre)
doler (var. of doldre)
soler solc sol solem solia soldré solguí solgui solguem solgut,solguda
valer/valdre valc val valem valia valdré valguí valgui valguem valgut,valguda
(prevaler, equivaler)
other -dre/-tre verbs (regular except sometimes pp):
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
batre bato bat batem batia batré batí bati batem batut,batuda
-metre -meto -met -metem -metia -metré -metí -meti -metem -mès,-mesa,-mesos
(ad-, co-, compro-, e-, entremetre's, mal-, o-, per-, pro-, read-, re-, retrans-, sot-, tra-, trans-)
perdre perdo perd perdem perdia perdré perdí perdi perdem perdut,perduda
-ure verbs
infinitive pres1s pres3s pres1p impf1s impf1p fut1s pret1s sub1s sub1p pp
caure caic cau caiem queia quèiem cauré caiguí caigui caiguem caigut,caiguda
(decaure, recaure)
plaure plac plau plaem plaïa plaíem plauré plaguí plagui plaguem plagut,plaguda
(complaure)
raure rac rau raem raïa raíem rauré raguí ragui raguem ragut,raguda
beure bec beu bevem bevia bevíem beuré beguí begui beguem begut,beguda
(embeure)
creure crec creu creiem creia crèiem creuré creguí cregui creguem cregut,creguda
deure dec deu devem devia devíem deuré deguí degui deguem degut,deguda
jeure jec jeu jaiem jeia jèiem jauré jaguí jegui jaguem jagut,jaguda
(ajeure)
lleure - lleu [-] llevia - lleurà llegué llegui - llegut,-
seure sec seu seiem seia sèiem seuré seguí segui seguem segut,seguda
(asseure)
treure trec treu traiem treia trèiem trauré traguí tregui traguem tret,treta
(abstreure, atreure, contreure, distreure, extreure, retreure, sostreure)
veure veig veu veiem veia vèiem veuré viu,veieres/veres, vegi vegem vist,vista,vists/vistos
(entreveure, preveure, reveure) veié/veu,veiérem/vérem
riure ric riu riem reia rèiem riuré riguí rigui riguem rigut,riguda
(somriure)
(e)scriure escric escriu escrivim escrivia escrivíem escriuré escriví/escriguí escrigui escriguem escrit,escrita
(circumscriure, descriure, inscriure, prescriure, proscriure, subscriure, transcriure)
viure visc viu vivim vivia vivíem viuré visquí visqui visquem viscut,viscuda
(conviure, sobreviure)
cloure cloc clou cloem cloïa cloíem clouré cloguí clogui cloguem clos,closa,closos
(concloure, descloure, encloure, excloure, incloure, recloure)
encloure encloc enclou encloem encloïa encloíem enclouré encloguí enclogui encloguem enclòs,enclosa,enclosos
coure coc cou coem coïa coíem couré coguí cogui coguem cuit/cogut,cuita/coguda
moure moc mou movem movia movíem mouré moguí mogui moguem mogut,moguda
(promoure)
noure noc nou noem noïa noíem nouré noguí nogui noguem nogut,noguda
ploure - plou [plovent] plovia - plourà plogué plogui - plogut,ploguda
-nyer verbs (regular except pp)
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
atènyer atenyo ateny atenyem atenyia atenyeré atenyí atenyi atenyem atès,atesa,atesos
empènyer empenyo empeny empenyem empenyia empenyeré empenyí empenyi empenyem empès,empesa,empesos
estrènyer estrenyo estreny estrenyem estrenyia estrenyeré estrenyí estrenyi estrenyem estret,estreta
estrènyer
(constrènyer,restrènyer)
fènyer fenyo feny fenyem fenyia fenyeré fenyí/fenguí fenyi fenyem fenyut/fengut,fenyuda/fenguda
pertànyer pertanyo pertany pertanyem pertanyia pertanyeré pertanyí/pertanguí pertanyi pertanyem pertanyut/pertangut,pertanyuda/pertanguda
plànyer planyo plany planyem planyia planyeré planyí/planguí planyi planyem plangut/planyut,planguda/planyuda
-xer verbs (NOTE: pres2s in -xes)
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
créixer creixo creix creixem creixia creixeré creixí/cresquí creixi creixem crescut,crescuda
(acréixer,decréixer)
conèixer conec coneix coneixem coneixia coneixeré coneguí conegui coneguem conegut,coneguda
(desconèixer,reconèixer)
merèixer mereixo mereix mereixem mereixia mereixeré mereixí/meresquí mereixi mereixem merescut,merescuda
néixer/ neixo/ neix/ naixem naixia naixeré naixí/nasquí neixi/ naixem/nasquem nascut,nascuda
nàixer naixo naix naixi
(renéixer)
parèixer parec pareix pareixem pareixia pareixeré pareguí paregui pareguem paregut,pareguda
(aparèixer,comparèixer,desaparèixer,reaparèixer)
péixer peixo peix paixem paixia paixeré paixí peixi paixem pascut,pascuda
misc. -er verbs
infinitive pres1s pres3s pres1p impf1s impf1p fut1s pret1s sub1s sub1p pp
córrer corro corre correm corria corríem correré correguí corri correm corregut,correguda
fúmer fumo fum fumem fumia fumíem fumeré fumí fumi fumem fumut,fumuda
prémer premo prem premem premia premíem premeré premí premi premem premut,premuda
(es-, re-)
témer temo tem temem temia temíem temeré temí temi temem temut,temuda
trémer [regular]
tòrcer torço torç torcem torcia torcíem torceré torcí torci torcem torçut,torçuda
(des-) [pres2s torces]
vèncer venço venç vencem vencia vencíem venceré vencí venci vencem vençut,vençuda
(con-, re-) [pres2s vences]
cabre/caber cabo cap cabem cabia cabíem cabré cabí càpiga capiguem cabut,cabuda
[sub2s càpigues]
haver he/haig ha havem/hem havia havíem hauré haguí hagi hàgim/haguem hagut,haguda
[noimp] [cond1s hauria/haguera; impsub2s haguessis/haguesses]
poder puc pot podem podia podíem podré poguí pugui puguem pogut,poguda
saber sé sap sabem sabia sabíem sabré sabí sàpiga sapiguem sabut,sabuda
[imp2s sàpigues, imp2p sapigueu]
voler vull vol volem volia volíem voldré volguí vulgui vulguem volgut,volguda
ser/ésser soc és som era érem seré fui sigui siguem estat/sigut,estada/siguda
[ger sent/essent] [cond1s seria/fora]
[pres: soc,ets,éts,som,sou,són; pret: fui,fores,fou,fórem,fóreu,foren; impsub: fos,fossis,fos,fóssim,fóssiu,fossin]
[imp: sigues,sigueu]
fer faig fa fem feia fèiem faré fiu faci fem fet,feta
[pres3p fan]
[pret: fiu,feres,feu,férem,féreu,feren]
]=]
local all_persons_numbers = {
["1s"] = "1|s",
["2s"] = "2|s",
["3s"] = "3|s",
["1p"] = "1|p",
["2p"] = "2|p",
["3p"] = "3|p",
}
local person_number_list = {"1s", "2s", "3s", "1p", "2p", "3p"}
local imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
local neg_imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
proclitic_non_elided_person_number_to_reflexive_pronoun = {
["1s"] = "em ",
["2s"] = "et ",
["3s"] = "es ",
["1p"] = "ens ",
["2p"] = "us ",
["3p"] = "es ",
}
proclitic_elided_person_number_to_reflexive_pronoun = {
["1s"] = "m'",
["2s"] = "t'",
["3s"] = "s'",
["1p"] = "ens ",
["2p"] = "us ",
["3p"] = "s'",
}
enclitic_non_elided_person_number_to_reflexive_pronoun = {
["1s"] = "-me",
["2s"] = "-te",
["3s"] = "-se",
["1p"] = "-nos",
["2p"] = "-vos",
["3p"] = "-se",
}
enclitic_elided_person_number_to_reflexive_pronoun = {
["1s"] = "'m",
["2s"] = "'t",
["3s"] = "'s",
["1p"] = "'ns",
["2p"] = "-us",
["3p"] = "'s",
}
local indicator_flags = m_table.listToSet {
"no_pres_stressed",
"only3s", "only3sp", "only3p", "noimp",
"pp_inv", "irreg", "no_built_in",
}
-- Initialize all the slots for which we generate forms.
local function add_slots(alternant_multiword_spec)
-- "Basic" slots: All slots that go into the regular table (not the reflexive form-of table).
alternant_multiword_spec.verb_slots_basic = {
{"infinitive", "inf"},
{"infinitive_linked", "inf"},
{"gerund", "ger"},
{"pp_ms", "m|s|past|part"},
{"pp_fs", "f|s|past|part"},
{"pp_mp", "m|p|past|part"},
{"pp_fp", "f|p|past|part"},
}
-- Special slots used to handle non-reflexive parts of reflexive verbs in {{ca-verb form of}}. For example, for a
-- reflexive-only verb like [[arrepentirse]], we want to be able to use {{ca-verb form of}} on [[arrepinta]] (which
-- should mention that it is a part of 'me arrepinta', first-person singular present subjunctive, and
-- 'se arrepinta', third-person singular present subjunctive) or on [[arrepentimos]] (which should mention that it
-- is a part of 'arrepentímonos', first-person plural present indicative or preterite). Similarly, we want to use
-- {{ca-verb form of}} on [[arrepentindo]] (which should mention that it is a part of 'se ... arrepentindo',
-- syntactic variant of [[arrepentíndose]], which is the gerund of [[arrepentirse]]). To do this, we need to be
-- able to map non-reflexive parts like [[arrepinta]], [[arrepentimos]], [[arrepentindo]], etc. to their reflexive
-- equivalent(s), to the tag(s) of the equivalent(s), and, in the case of forms like [[arrepentindo]],
-- [[arrepentir]] and imperatives, to the separated syntactic variant of the verb+clitic combination. We do this by
-- creating slots for the non-reflexive part equivalent of each basic reflexive slot, and for the separated
-- syntactic-variant equivalent of each basic reflexive slot that is formed of verb+clitic. We use slots in this
-- way to deal with multiword lemmas. Note that we run into difficulties mapping between reflexive verbs,
-- non-reflexive part equivalents, and separated syntactic variants if a slot contains more than one form. To
-- handle this, if there are the same number of forms in two slots we're trying to match up, we assume the forms
-- match one-to-one; otherwise we don't match up the two slots (which means {{ca-verb form of}} won't work in this
-- case, but such a case is extremely rare and not worth worrying about). Alternatives that handle this "properly"
-- are significantly more complicated and require non-trivial modifications to [[Module:inflection utilities]].
local need_special_verb_form_of_slots = alternant_multiword_spec.source_template == "ca-verb form of" and
alternant_multiword_spec.refl
if need_special_verb_form_of_slots then
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {
{"infinitive_non_reflexive", "-"},
{"infinitive_variant", "-"},
{"gerund_non_reflexive", "-"},
{"gerund_variant", "-"},
}
else
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {}
end
-- Add entries for a slot with person/number variants.
-- `verb_slots` is the table to add to.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(verb_slots, slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local slot = slot_prefix .. "_" .. persnum
local accel = tag_suffix .. "|" .. persnum_tag
table.insert(verb_slots, {slot, accel})
end
end
-- Add a personal slot (i.e. a slot with person/number variants) to `verb_slots_basic`.
local function add_basic_personal_slot(slot_prefix, tag_suffix, person_number_list, no_special_verb_form_of_slot)
add_personal_slot(alternant_multiword_spec.verb_slots_basic, slot_prefix, tag_suffix, person_number_list)
-- Add special slots for handling non-reflexive parts of reflexive verbs in {{ca-verb form of}}.
-- See comment above in `need_special_verb_form_of_slots`.
if need_special_verb_form_of_slots and not no_special_verb_form_of_slot then
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local basic_slot = slot_prefix .. "_" .. persnum
local accel = tag_suffix .. "|" .. persnum_tag
table.insert(alternant_multiword_spec.verb_slots_reflexive_verb_form_of, {basic_slot .. "_non_reflexive", "-"})
end
end
end
add_basic_personal_slot("pres", "直説法|現在", person_number_list)
add_basic_personal_slot("impf", "直説法|不完全過去", person_number_list)
add_basic_personal_slot("pret", "直説法|完全過去", person_number_list)
add_basic_personal_slot("fut", "直説法|未来", person_number_list)
add_basic_personal_slot("cond", "可能法", person_number_list)
add_basic_personal_slot("pres_sub", "接続法|現在", person_number_list)
add_basic_personal_slot("impf_sub", "接続法|過去", person_number_list)
add_basic_personal_slot("imp", "命令法", imp_person_number_list)
-- Don't need special non-reflexive-part slots because the negative imperative is multiword, of which the
-- individual words are 'no' + subjunctive.
add_basic_personal_slot("neg_imp", "命令法|禁止", neg_imp_person_number_list, "no special verb form of")
-- Don't need special non-reflexive-part slots because we don't want [[arrependendo]] mapping to [[arrependendo-me]]
-- (only [[arrependendo-se]]) or [[arrepender]] mapping to [[arrepender-me]] (only [[arrepender-se]]).
add_basic_personal_slot("infinitive", "inf", person_number_list, "no special verb form of")
add_basic_personal_slot("gerund", "ger", person_number_list, "no special verb form of")
-- Generate the list of all slots.
alternant_multiword_spec.all_verb_slots = {}
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_basic) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_reflexive_verb_form_of) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
alternant_multiword_spec.verb_slots_basic_map = {}
for _, slotaccel in ipairs(alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
alternant_multiword_spec.verb_slots_basic_map[slot] = accel
end
end
local overridable_stems = {}
local function allow_multiple_values_for_override(separated_groups, data, is_form_override)
local retvals = {}
for _, separated_group in ipairs(separated_groups) do
local footnotes = data.fetch_footnotes(separated_group)
local form = separated_group[1]
-- Prepend marker to prevent prefixing with `base.prefix`, and (in the case of form overrides) prevent
-- final devoicing.
if is_form_override then
form = IS_USER_FORM_OVERRIDE .. form
else
form = IS_USER_STEM_OVERRIDE .. form
end
local retval = {form = form, footnotes = footnotes}
table.insert(retvals, retval)
end
return retvals
end
for _, overridable_stem in ipairs {
"stem",
"stressed_stem",
"unstressed_stem",
"pres_unstressed",
"pres_stressed",
"pres3s", -- overrides just pres_2s and pres_3s
-- Don't include pres1s, pres3p; use pres_1s etc. if you need to override just those forms
"impf1",
"impf2",
"pret",
"fut",
"cond",
"pres_sub_stressed",
"pres_sub_unstressed",
"impf_sub",
"pp",
"g_infix",
"eix_infix",
} do
-- Written so we can substitute a different validator; parallel code in [[Module:es-verb]] and [[Module:pt-verb]]
-- has simple_choice validators.
overridable_stems[overridable_stem] = allow_multiple_values_for_override
end
-- Useful as the value of the `match` property of a built-in verb. `main_verb_spec` is a Lua pattern that should match
-- the non-prefixed part of a verb, and `prefix_specs` is a list of Lua patterns that should match the prefixed part of
-- a verb. If a prefix spec is preceded by ^, it must match exactly at the beginning of the verb; otherwise, additional
-- prefixes (e.g. re-, des-) may precede. Return the prefix and main verb.
local function match_against_verbs(main_verb_spec, prefix_specs)
return function(verb)
for _, prefix_spec in ipairs(prefix_specs) do
if prefix_spec:find("^%^") then
-- must match exactly
prefix_spec = prefix_spec:gsub("^%^", "")
if prefix_spec == "" then
-- We can't use the second branch of the if-else statement because an empty () returns the current position
-- in rmatch().
local main_verb = rmatch(verb, "^(" .. main_verb_spec .. ")$")
if main_verb then
return "", main_verb
end
else
local prefix, main_verb = rmatch(verb, "^(" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
else
local prefix, main_verb = rmatch(verb, "^(.*" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
end
return nil
end
end
--[=[
Built-in (usually irregular) conjugations.
Each entry is processed in turn and consists of an object with two fields:
1. match=: Specifies the built-in verbs that match this object.
2. forms=: Specifies the built-in stems and forms for these verbs.
The value of match= is either a string beginning with "^" (match only the specified verb), a string not beginning
with "^" (match any verb ending in that string), or a function that is passed in the verb and should return the prefix
of the verb if it matches, otherwise nil. The function match_against_verbs() is provided to facilitate matching a set
of verbs with a common ending and specific prefixes (e.g. [[ter]] and [[ater]] but not [[abater]], etc.).
The value of forms= is a table specifying stems and individual override forms. Each key of the table names either a
stem (e.g. `pres_stressed`), a stem property (e.g. `g_infix`) or an individual override form (e.g. `pres_1s`).
Each value of a stem can either be a string (a single stem), a list of strings, or a list of objects of the form
{form = STEM, footnotes = {FOONOTES}}. Each value of an individual override should be of exactly the same form except
that the strings specify full forms rather than stems. The values of a stem property depend on the specific property
but are generally strings or booleans.
In order to understand how the stem specifications work, it's important to understand the phonetic modifications done
by combine_stem_ending(). In general, the complexities of predictable prefix, stem and ending modifications are all
handled in this function. In particular:
1. Spelling-based modifications (c/qu, ç/c, g/gu, j/g, gu/gü, qu/qü) occur automatically as appropriate for the ending.
2. If the ending begins with an asterisk, this is a signal to delete the accent on the last syllable of the stem, e.g.
veié -> veierem.
3. If ending begins with i, it may turn into í or ï after an unstressed vowel (in some but not all cases) to prevent the
two merging into a diphthong. See combine_stem_ending() for specifics.
The following stems are recognized [FIXME: This is not correct for Catalan, needs rewriting]:
-- pres_unstressed: The present indicative unstressed stem (1p, 2p). Also controls the imperative 2p
and gerund. Defaults to the infinitive stem (minus the ending -ar/-er/-ir/-or).
-- pres_stressed: The present indicative stressed stem (1s, 2s, 3s, 3p). Also controls the imperative 2s.
Default is empty if indicator `no_pres_stressed`, else a vowel alternation if such an indicator is given
(e.g. `ue`, `ì`), else the infinitive stem.
-- pres1: Special stem for 1s present indicative. Normally, do not set this explicitly. If you need to specify an
irregular 1s present indicative, use the form override pres_1s= to specify the entire form. Defaults to
pres_stressed.
-- pres_sub_unstressed: The present subjunctive unstressed stem (1p, 2p). Defaults to the infinitive stem.
-- pres_sub_stressed: The present subjunctive stressed stem (1s, 2s, 3s, 1p). Defaults to pres1.
-- impf: The imperfect stem (not including the -av-/-i- stem suffix, which is determined by the conjugation). Defaults
to the infinitive stem.
-- pret: The full preterite stem missing only the endings (-ste, -mos, etc.), e.g. 'fige', 'fo'. Only used for verbs
with irregular preterites (pret_conj == "irreg") such as [[facer]], [[poder]], [[traer]], etc. Defaults to
`pret_base` + the conjugation vowel.
-- fut: The future stem. Defaults to the infinitive stem + the conjugation vowel.
-- cond: The conditional stem. Defaults to `fut`.
-- impf_sub: The imperfect subjunctive stem. Defaults to `pret`.
-- pp: The masculine singular past participle. Default is based on the verb conjugation: infinitive stem + '-ado' for
-ar verbs, otherwise infinitive stem + '-ido'.
-- pp_inv: `true` if the past participle exists only in the masculine singular.
]=]
local built_in_conjugations = {
--------------------------------------------------------------------------------------------
-- -ar --
--------------------------------------------------------------------------------------------
-- Orthographic consonant alternations in endings are handled automatically in combine_stem_ending().
{
-- [[aguar]]:
-- pres agúo, agúes, agúa, agüem, agüeu, agúen
-- pres_sub aguï, aguïs, aguï, agüem, agüeu, aguïn
-- contrast a more typical verb in -guar, [[enaiguar]]:
-- pres enaiguo, enaigües, enaigua, enaigüem, enaigüeu, enaigüen
-- pres_sub enaigüi, enaigüis, enaigüi, enaigüem, enaigüeu, enaigüin
match = "^aguar",
forms = {
pres_stressed = "agú",
pres_sub_stressed = "aguï",
irreg = true,
}
},
{
-- [[anar]] (full verb); highly irregular
match = "^anar",
var = "full",
forms = {
fut = "anir",
pres_1s = "vaj", -- will be converted to 'vaig'; 'vaig' gets converted to 'vaic'
pres_2s = "vas",
pres_3s = "va",
pres_3p = "van",
pres_sub_stressed = "vagi",
imp_2s = "ves",
irreg = true,
}
},
{
-- [[anar]] (auxiliary); highly irregular
match = "^anar",
var = "aux",
forms = {
pres_1s = "vaj", -- will be converted to 'vaig'; 'vaig' gets converted to 'vaic'
pres_2s = {"vas", "vares"},
pres_3s = "va",
pres_1p = {"vam", "vàrem"},
pres_2p = {"vau", "vàreu"},
pres_3p = {"van", "varen"},
pres_sub_stressed = "vagi",
pres_sub_unstressed = "vàgi",
impf1 = {},
impf2 = {},
fut = {},
pret = {},
pp = {},
gerund = {},
noimp = true,
irreg = true,
}
},
{
-- [[dar]]
match = "^dar",
forms = {
pres_1s = {form = "do", footnotes = {"[obsolete]"}},
pres_2s = {form = "das", footnotes = {"[obsolete]"}},
pres_3s = {form = "da", footnotes = {"[obsolete]"}},
pres_3p = {form = "dan", footnotes = {"[obsolete]"}},
pres_sub_1s = {form = "de", footnotes = {"[obsolete]"}},
pres_sub_2s = {form = "des", footnotes = {"[obsolete]"}},
pres_sub_3s = {form = "de", footnotes = {"[obsolete]"}},
pres_sub_3p = {form = "den", footnotes = {"[obsolete]"}},
pret_1s = "di", -- regular except for lack of accent
pret_3s = "da", -- regular except for lack of accent
impf_sub_1s = "des", -- regular except for lack of accent
impf_sub_3s = "des", -- regular except for lack of accent
irreg = true,
}
},
{
-- [[estar]]; highly irregular
match = "^estar",
forms = {
pres_2s = "estàs",
pres_3s = "està",
pres_3p = "estan",
g_infix = "estig",
imp_2s = "estigues",
imp_2p = "estigueu",
pp = "estad",
}
},
--------------------------------------------------------------------------------------------
-- -er/-re --
--------------------------------------------------------------------------------------------
-- Regular verbs not needing entries here:
--
-- [[rebre]], [[concebre]], [[decebre]], [[percebre]]
-- [[rompre]]
-- [[fúmer]], [[prémer]], [[témer]], [[trémer]]
-- [[perdre]], [[batre]], [[botre]], [[fotre]], [[retre]]
-- [[tòrcer]], [[vèncer]]
-- etc.
------------------------------------------- -ldre/-ler/-lre --------------------------------------
{
-- [[caldre]], [[doldre]], [[condoldre's]], [[oldre]]
match = match_against_verbs("ldre", {"ca", "do", "^o"}),
forms = {
-- g_infix implies irreg = true
-- g_infix adds -g to pres_1s, sub, pret and pp stems; combine_stem_ending() changes final -g to -c
g_infix = "+",
}
},
{
-- [[caler]]
match = "caler",
like = "caldre",
},
{
-- [[doler]] and compounds
match = "doler",
like = "doldre",
},
{
-- [[dolre]]
match = "dolre",
forms = {
-- see above for g_infix effects
g_infix = "+",
}
},
{
-- [[valer]], [[equivaler]], [[prevaler]], [[sobrevaler]]
match = "valer",
forms = {
-- see above for g_infix effects
fut = "valdr",
g_infix = "+",
}
},
{
-- [[valdre]] and compounds
match = "valdre",
like = "valer",
},
{
-- [[soler]]
match = "^soler", -- this must precede -oldre rule below for alt form [[soldre]]
forms = {
-- see above for g_infix effects
fut = {},
pret = {},
impf_sub = "solgué", -- regular, but we disabled the preterite, which would normally disable impf_sub too
g_infix = "+",
pp = {},
noimp = true,
}
},
{
-- [[soldre]]
match = "^soldre", -- this must precede -oldre rule below
like = "soler",
},
{
-- [[coldre]], [[moldre]], [[absoldre]], [[dissoldre]], [[resoldre]], [[toldre]]
match = "oldre", -- this must follow [[doldre]]/[[oldre]] rule above
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "olt",
}
},
{
-- [[voler]], [[malvoler]]
match = "voler",
forms = {
fut = "voldr",
pres_1s = "vull",
pres_sub_stressed = "vulgui",
pres_sub_unstressed = "vulgue",
g_infix = "+",
imp_2s = "vulgues",
imp_2p = "vulgueu",
}
},
--------------------------------------------- -ndre ----------------------------------------
{
-- [[romandre]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("mandre", {"^ro"}),
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "màs#",
}
},
{
-- [[encendre]], [[atendre]], [[contendre]], [[desentendre's]], [[distendre]], [[entendre]], [[estendre]],
-- [[pretendre]]
match = match_against_verbs("endre", {"enc", "t"}),
forms = {
pres_3s = "én#", -- remove final accent without prefix with vowel; also removed when adding a suffix
-- see above for g_infix effects
g_infix = "+",
pp = "ès#", -- see above for effect of final #
}
},
{
-- [[vendre]], [[malvendre]], [[revendre]]
match = "vendre",
forms = {
pres_3s = "vèn#", -- see above for effect of final #
-- see above for g_infix effects
g_infix = "+",
pp = "venud", -- g_infix would normally make it vengud
}
},
{
-- [[fendre]], [[defendre]], [[ofendre]], [[dependre]], [[despendre]], [[expendre]], [[suspendre]], [[prendre]],
-- [[aprendre]], [[comprendre]], [[desprendre]], [[emprendre]], [[reprendre]], [[sorprendre]]
match = "endre", -- this must follow previous -endre rules above
forms = {
pres_3s = "èn#", -- see above for effect of final #
-- see above for g_infix effects
g_infix = "+",
pp = "ès#", -- see above for effect of final #
}
},
{
-- [[enfondre]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("fondre", {"^en"}),
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "fús#",
}
},
{
-- [[pondre]], [[compondre]], [[correspondre]], [[descompondre]], [[despondre's]], [[respondre]]
match = "pondre",
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "post",
}
},
{
-- [[fondre]], [[confondre]], [[difondre]], [[infondre]], [[refondre]], [[tondre]]
match = "ondre", -- this must follow previous -ondre rules above
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "ós#", -- see above for effect of final #
}
},
--------------------------------------------- -nyer ----------------------------------------
{
-- [[atènyer]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("tènyer", {"^a"}),
forms = {
pp = "tès#",
irreg = true,
}
},
{
-- [[empènyer]], [[espènyer]]
match = match_against_verbs("pènyer", {"^em", "^es"}),
forms = {
pp = "pès#",
irreg = true,
}
},
{
-- [[estrènyer]], [[constrènyer]], [[destrènyer]], [[restrènyer]]
match = match_against_verbs("strènyer", {"^e", "con", "^de", "^re"}),
forms = {
pp = "stret",
irreg = true,
}
},
{
-- [[fènyer]]
match = "fènyer",
forms = {
pp = {"fengud", "fenyud"},
irreg = true,
}
},
{
-- [[júnyer]]
match = "júnyer",
like = "junyir",
},
{
-- [[plànyer]], [[complànyer]], [[pertànyer]]
match = match_against_verbs("ànyer", {"pl", "pert"}),
forms = {
pp = {"angud", "anyud"},
irreg = true,
}
},
--------------------------------------------- -aure ----------------------------------------
{
-- [[caure]], [[decaure]], [[recaure]]
match = "caure",
forms = {
-- stem ending in -ai and imperfect in -ia causes special stressed imperfect logic to take effect; we get
-- impf1s queia, impf1p quèiem (preceding vowel changed to è and attached to initial consonant using
-- combine_stem_ending(), which changes c- to qu-)
stem = "caie", -- i dropped by g_infix before u
-- g_infix implies irreg = true
-- g_infix adds -g to pres_1s, sub, pret and pp stems; combine_stem_ending() changes final -g to -c
-- g_infix sets pres_stressed to end in -u, removing a preceding -i or -v
g_infix = "+",
}
},
{
-- [[plaure]], [[complaure]]
match = "plaure",
forms = {
stem = "plae", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
}
},
{
-- [[raure]]
match = "^raure",
forms = {
stem = "rae", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = {"ragud", "ras"},
}
},
--------------------------------------------- -eure ----------------------------------------
{
-- [[beure]], [[embeure]], [[deure]], [[lleure]]
match = match_against_verbs("eure", {"b", "d", "ll"}),
forms = {
stem = "eve", -- v dropped by g_infix before g and u
g_infix = "+",
}
},
{
-- [[creure]], [[seure]], [[asseure]]
match = match_against_verbs("eure", {"cr", "s"}),
forms = {
stem = "ee",
pres_unstressed = "eie", -- affects pres_1p, pres_2p, gerund, imperfect (see [[caure]])
g_infix = "+",
}
},
{
-- [[jeure]], [[ajeure]]
match = "jeure",
forms = {
fut = "jaur", -- affects future and cond
stressed_stem = "jee", -- affects stressed forms, which get g added by g_infix by added except for
-- pres_stressed, which gets u added (controls pres_3s, pres_2s, pres_3p)
unstressed_stem = "jae", -- affects unstressed_stem, which get g added by g_infix
pres_stressed = {"jeu", "jau"},
pres_unstressed = "jaie", -- affects pres_1p, pres_2p, gerund, imperfect (see [[caure]])
pres_1s = {"jec", "jac"},
impf1 = "jei", -- otherwise we'd get impf_1s '#geia' etc.
impf2 = "jèi",
g_infix = "+",
}
},
{
match = "jaure",
like = "jeure",
},
{
-- [[treure]], [[abstreure]], [[atreure]], [[bestreure]], [[contreure]], [[detreure]], [[distreure]],
-- [[extreure]], [[retreure], [[retrotreure]], [[sostreure]]
match = "treure",
forms = {
-- like [[jeure]] except for irregular pp
fut = "traur",
stressed_stem = "tree",
unstressed_stem = "trae",
pres_stressed = {"treu", "trau"},
pres_unstressed = "traie",
pres_1s = {"trec", "trac"},
g_infix = "+",
pp = "tret",
}
},
{
match = "traure",
like = "treure",
},
{
-- [[veure]], [[entreveure]], [[preveure]], [[reveure]]
match = "veure",
forms = {
stem = "veie",
-- impf1s veia, impf1p vèiem (preceding vowel changed to è)
pres_stressed = "veu",
pres_1s = "vej", -- will be converted to 'veig'; 'veig' gets converted to 'veic'
pres_sub_stressed = "vegi",
pres_sub_unstressed = "vege",
pret = {"veié", "vé"},
pret_1s = "viu",
pret_3s = {"veié", "veu"},
impf_sub = "veié",
pp = "vist",
imp_2s = "veges",
imp_2p = {"vegeu", "veieu"},
irreg = true,
}
},
--------------------------------------------- -iure ----------------------------------------
{
-- [[escriure]], [[circumscriure]], [[descriure]], [[inscriure]], [[prescriure]], [[proscriure]],
-- [[subscriure]], [[transcriure]]
match = "scriure",
forms = {
stem = "scrivi", -- v dropped by g_infix before g and u; pres_1p/pres_2p have -ir endings
g_infix = "+",
pret = {"scriví", "scrigué"},
pp = "scrit",
}
},
{
-- [[riure]], [[somriure]]
match = "riure", -- must follow rule for 'scriure'
forms = {
stem = "rie",
-- impf1s reia, impf1p rèiem (preceding vowel changed to è)
g_infix = "+",
}
},
{
-- [[viure]], [[conviure]], [[desviure's]], [[sobreviure]]
match = "viure",
forms = {
stem = "vivi", -- v dropped by g_infix before g and u; pres_1p/pres_2p have -ir endings
g_infix = "visc", -- applies to pres1s, sub, pret, pp
}
},
--------------------------------------------- -oure ----------------------------------------
{
-- [[cloure]], [[concloure]], [[descloure]], [[encloure]], [[excloure]], [[incloure]], [[recloure]]
match = "cloure",
forms = {
stem = "cloe", -- ï in impf1s cloïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = "clòs#", -- remove final accent without prefix with vowel; also removed when adding a suffix
}
},
{
-- [[coure]] "to cook"
match = "coure",
var = "cook",
forms = {
stem = "coe", -- ï in impf1s coïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = "cuit",
}
},
{
-- [[coure]] "to sting"
match = "coure",
var = "sting",
forms = {
stem = "coe", -- ï in impf1s coïa gets generated automatically by combine_stem_ending()
g_infix = "+",
-- pp regular 'cogud'
}
},
{
-- [[moure]], [[promoure]], [[remoure]], [[somoure]], [[ploure]]
match = match_against_verbs("oure", {"m", "pl"}),
forms = {
stem = "ove", -- v dropped by g_infix before g and u
g_infix = "+",
}
},
{
-- [[noure]]
match = "noure",
forms = {
stem = "noe", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
}
},
--------------------------------------------- -xer ----------------------------------------
{
-- [[conèixer]], [[desconèixer]], [[reconèixer]]
match = "conèixer",
forms = {
g_infix = "coneg",
}
},
{
-- [[créixer]], [[acréixer]], [[decréixer]], [[recréixer]], [[sobrecréixer]]
match = "créixer",
forms = {
pret = {"creixé", "cresqué"},
pres_sub_unstressed = {"creixe", "cresque"},
pp = "crescud",
irreg = true,
}
},
{
-- [[merèixer]], [[desmerèixer]], [[irèixer-se]]
match = match_against_verbs("rèixer", {"me", "^i"}),
forms = {
pret = {"reixé", "resqué"},
pres_sub_unstressed = {"reixe", "resque"},
pp = "rescud",
irreg = true,
}
},
{
-- [[néixer]]/[[nàixer]], [[renéixer]]/[[renàixer]], [[sobrenéixer]]/[[sobrenàixer]], [[péixer]]/[[pàixer]]
match = match_against_verbs("éixer", {"n", "p"}),
forms = {
stem = "aixe",
fut = "aixer",
pres_stressed = {"eix", "aix"},
pres_1s = "eixo",
pret = {"aixé", "asqué"},
pres_sub_stressed = "eixi",
pres_sub_unstressed = {"aixe", "asque"},
pp = "ascud",
irreg = true,
}
},
{
match = "àixer",
like = "éixer",
},
{
-- [[parèixer]], [[aparèixer]], [[comparèixer]], [[desaparèixer]], [[reaparèixer]]
match = "parèixer",
forms = {
g_infix = "pareg",
}
},
--------------------------------------------- misc ----------------------------------------
{
-- [[cabre]]
match = "cabre",
forms = {
pres_sub_stressed = "càpiga",
pres_sub_unstressed = "capigue",
irreg = true,
}
},
{
-- [[caber]]
match = "caber",
like = "cabre",
},
{
-- [[saber]]
match = "saber",
forms = {
fut = "sabr",
pres_1s = "sé",
pres_sub_stressed = "sàpiga",
pres_sub_unstressed = "sapigue",
imp_2s = "sàpiga",
imp_2p = "sapigueu",
irreg = true,
}
},
{
-- [[poder]]
match = "poder",
forms = {
fut = "podr",
pres_1s = "puc",
pres_sub_stressed = "pugui",
pres_sub_unstressed = "pugue",
g_infix = "pog",
imp_2s = "pugues",
imp_2p = "pugueu",
irreg = true,
}
},
{
-- [[córrer]], [[acórrer]], [[concórrer]], [[decórrer]], [[descórrer]], [[discórrer]], [[encórrer]],
-- [[escórrer]], [[incórrer]], [[ocórrer]], [[recórrer]], [[socórrer]], [[transcórrer]]
match = "córrer",
forms = {
pret = "corregué",
pres_sub_unstressed = {"corre", "corregue"},
pp = "corregud",
irreg = true,
}
},
{
-- [[metre]], [[admetre]], [[arremetre]], [[cometre]], [[comprometre]], [[demetre]], [[descomprometre]],
-- [[emetre]], [[entremetre's]], [[escometre]], [[malmetre]], [[manumetre]], [[ometre]], [[permetre]],
-- [[prometre]], [[readmetre]], [[remetre]], [[retransmetre]], [[sotmetre]], [[trametre]], [[transmetre]]
match = "metre",
forms = {
pp = "mès#",
irreg = true,
}
},
--------------------------------------------------------------------------------------------
-- -ir --
--------------------------------------------------------------------------------------------
{
-- [[acudir]]; NOTE: Separation by meaning does not occur in DCC, DIEC, DEIEC, and DCVB says the distinction
-- is geographical and makes no mention of distinction by meaning. OTOH ca.wikt does say that the pronominal
-- sense "to occur" tends to conjugate non-inchoative.
match = "acudir",
forms = {
eix_infix = {{
form = "+",
footnotes = {'[especially in the sense "to turn up, to be present"]'}
}, {
form = "-",
footnotes = {'[especially in the pronominal sense "to occur"]'}
}}
}
},
-- [[afegir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[ajupir]]
-- [[buixir]]
-- [[bullir]], [[rebullir]]
-- [[cruixir]], [[escruixir]] (Routledge says this is inchoative but DIEC, DEIEC and DCC all disagree; note
-- pres_2s 'cruixes', handled automatically)
-- [[dormir]], [[adormir]]
-- [[funyir]]
-- [[grunyir]]
-- [[munyir]], [[esmunyir]]
-- [[pudir]]
-- [[punyir]]
-- [[retrunyir]]
-- [[sallir]]
-- [[sentir]], [[pressentir]], [[ressentir-se]]; not [[consentir]], with can be either non-inchoative or
-- inchoative, and not [[assentir]] or [[dissentir]], which are only inchoative
match = match_against_verbs("ir", {"ajup", "buix", "bull", "cruix", "dorm", "funy", "gruny", "muny", "pud",
"puny", "retruny", "^sent", "pressent", "^ressent", "sall"}),
forms = {
eix_infix = "-",
}
},
{
-- [[arrupir-se]];
-- [[brumir]];
-- [[brunzir]];
-- [[consumir]], [[resumir]], [[presumir]] (not [[sumir]], [[assumir]], [[subsumir]], which are regular)
-- [[mentir]], [[desmentir]]
-- [[percudir]]; cf. also [[acudir]], which to some extent has separate conjugations per meaning
-- [[consentir]]
match = match_against_verbs("ir", {"arrup", "brum", "brunz", "consum", "^resum", "presum", "ment", "percud",
"consent"}),
forms = {
eix_infix = {"+", "-"},
}
},
-- [[cenyir]]: -- non-inchoative or inchoative in Balearics, inchoative elsewhere
{
-- [[cobrir]], [[descobrir]], [[encobrir]], [[recobrir]], [[redescobrir]]
match = "cobrir",
forms = {
pp = "cobert",
irreg = true,
}
},
{
-- [[collir]], [[acollir]], [[escollir]], [[recollir]]
match = "collir",
forms = {
stressed_stem = "culli",
eix_infix = "-",
irreg = true,
}
},
{
-- [[complir]], [[acomplir]], [[incomplir]]
match = "complir",
forms = {
pp = {"complert", "complid"},
irreg = true,
}
},
{
-- [[cosir]], [[descosir]], [[recosir]]
match = "cosir",
forms = {
stressed_stem = "cusi",
pres_3s = "cús#",
eix_infix = "-",
irreg = true,
}
},
{
-- [[eixir]], [[deseixir-se]]; not [[teixir]] or [[entreteixir]], and not [[reeixir]] or [[sobreeixir]],
-- which have an ï in the stem-stressed forms
match = match_against_verbs("eixir", {"^", "des"}),
forms = {
stressed_stem = "ixi",
eix_infix = "-",
irreg = true,
}
},
{
-- [[reeixir]], [[sobreeixir]]
match = match_against_verbs("eixir", {"^re", "sobre"}),
forms = {
stressed_stem = "ïxi",
eix_infix = "-",
irreg = true,
}
},
-- [[engolir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[escopir]]
match = "escopir",
forms = {
stressed_stem = "escupi",
eix_infix = "-",
irreg = true,
}
},
{
-- [[establir]], [[preestablir]], [[restablir]]
match = "establir",
forms = {
pp = {"establert", "establid"},
irreg = true,
}
},
-- [[ferir]]: -- non-inchoative in Balearics, inchoative elsewhere
-- [[fregir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[fugir]], [[confugir]], [[defugir]], [[enfugir-se]]; pres sing ''fujo, fuges, fuig'' handled by
-- combine_stem_ending(); can't be handled by rule above that lists many non-inchoative verbs because the
-- prefix would be 'fug' and the front-back alternation code doesn't apply to prefixes.
match = "fugir",
forms = {
eix_infix = "-",
}
},
{
-- [[imprimir]], [[reimprimir]], [[sobreimprimir]]; not any other verbs in -primir; write it this way so
-- there's a prefix with a vowel to prevent against the accent in the pp from being removed while still
-- removing it in the feminine.
match = match_against_verbs("primir", {"im"}),
forms = {
pp = "près#",
irreg = true,
}
},
-- [[llegir]]: -- non-inchoative in Valencia and Minorca, inchoative elsewhere
{
-- [[lluir]]: regular inchoative in the figurative meaning "to display (something), to be showy" also in the
-- legal meaning "free from a pecuniary obligation, such as a land-based tax (emphyteusis)"; irregular in the
-- literal meaning "to shine"; use <no_built_in> to get regular conjugation. In the regular conjugation,
-- umlauts appear in the following forms: pres_1p/pres_sub_1p/imp_1p lluïm, pres_2p/pres_sub_2p/imp_2p lluïu,
-- impf_1s/impf_3s lluïa, impf_2s lluïes, impf_3p lluïen, pret_2s lluïres, pret_3p lluïren,
-- impf_sub_2s lluïssis, impf_sub_3p lluïssin, throughout the pp: lluït, lluïda, lluïts, lluïdes. IN the
-- irregular conjugation, umlauts appear in the same places as well as elsewhere in the present subjunctive:
-- pres_sub_1s/pres_sub_3s/imp_3s lluï, pres_sub_2s lluïs, pres_sub_3p/imp_3p lluïn. Notably, they do *NOT*
-- appear in the gerund lluint, the infinitive lluir, or anywhere in the future or conditional. Note that
-- verbs.cat [https://www.verbs.cat/en/conjugation/899-lluir.html] lists additional irregular forms pres_1s
-- lluu, and alternative impf_sub forms in -e- instead of -i- (lluïsses, lluíssem, lluísseu, lluïssen), but
-- these are nonstandard or dialectal per both Routledge and DEIEC.
match = "^lluir",
forms = {
eix_infix = "-",
pres3s = {"lluu", "llu"}, -- generates pres_2s, imp_2s
irreg = true,
}
},
{
-- [[entrelluir]] "to be half-seen", [[relluir]] "to shine", [[traslluir-se]] "to be translucent"; either
-- inchoative or non-inchoative, not distinguished by meaning; note, [[deslluir]] and [[enlluir]] are regular
-- inchoative verbs.
match = match_against_verbs("lluir", {"entre", "^re", "tras"}),
forms = {
eix_infix = {"+", "-"},
pres3s = {"llueix", "lluu", "llú"}, -- generates pres_2s, imp_2s; note, pres_2s will end in -es due to
-- combine_stem_ending()
irreg = true,
}
},
{
-- [[morir]], [[premorir]]; but not [[atemorir]]
match = match_against_verbs("morir", {"^", "pre"}),
forms = {
eix_infix = "-",
pp = "mort",
irreg = true,
}
},
{
-- [[obrir]], [[entreobrir]], [[reobrir]]; not [[cobrir]] and derivatives, not [[empobrir]], so we have to list
-- them individually
match = match_against_verbs("obrir", {"^", "entre", "^re"}),
forms = {
eix_infix = "-",
pp = "obert",
irreg = true,
}
},
{
-- [[oferir]]; but not [[proferir]]
match = "^oferir",
forms = {
pp = {"ofert", "oferid"},
irreg = true,
}
},
-- [[oir]], [[desoir]], [[entreoir]]: -- per Routledge, non-inchoative or inchoative normally but only
-- non-inchoative in Valencian; but all dictionaries disagree and say it is a regular inchoative-only verb.
-- It has the same umlauts as lluir (and [[corroir]], another regular inchoative verb).
{
-- [[omplir]], [[desomplir-se]], [[reomplir]]; not [[complir]] and derivatives, so we have to list them
-- individually
match = match_against_verbs("omplir", {"^", "des", "^re"}),
forms = {
eix_infix = "-",
pp = {"omplert", "omplid"},
irreg = true,
}
},
-- [[penedir-se]]: -- non-inchoative in Balearics, inchoative elsewhere
{
-- [[pruir]] "to itch": same umlauts as in [[lluir]].
match = "^pruir",
forms = {
eix_infix = "-",
pres3s = {"pruu", "pru"}, -- generates pres_2s, imp_2s
irreg = true,
}
},
{
-- [[reblir]]
match = "^reblir",
forms = {
pp = {"reblert", "reblid"},
irreg = true,
}
},
-- [[renyir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[sofrir]]
match = "^sofrir",
forms = {
pp = {"sofert", "sofrid"},
irreg = true,
}
},
{
-- [[sortir]], [[ressortir]], [[sobresortir]]; but not [[assortir]], which is regular inchoative
match = match_against_verbs("sortir", {"^", "^res", "sobre"}),
forms = {
stressed_stem = "surti",
eix_infix = "-",
irreg = true,
}
},
{
-- [[suplir]]
match = "^suplir",
forms = {
pp = {"suplert", "suplid"},
irreg = true,
}
},
-- [[teixir]], [[entreteixir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[tenir]] but not any compounds; highly irregular
match = "^tenir",
forms = {
fut = "tindr",
pres_stressed = "ten",
pres_3s = "té",
imp_2s = {"té", "ten", "tingues"},
imp_2p = {"teniu", "tingueu"},
g_infix = "ting",
}
},
{
-- [[abstenir-se]], [[atenir-se]], [[captenir-se]], [[cartenir]], [[contenir]], [[detenir]], [[entretenir]],
-- [[mantenir]], [[menystenir]], [[obtenir]], [[retenir]], [[sostenir]], [[viltenir]]; highly irregular
match = "tenir",
forms = {
fut = "tindr",
pres_stressed = "ten",
pres_3s = "té",
imp_2s = {"tén", "tingues"},
imp_2p = {"teniu", "tingueu"},
g_infix = "ting",
}
},
{
-- [[tindre]]: variant of [[tenir]]
match = "tindre",
like = "tenir",
},
-- [[tenyir]], [[destenyir]]: -- non-inchoative in Valencia, but [[retenyir]] inchoative or non-inchoative in
-- Valencia? (per Routledge); regular inchoative elsewhere
{
-- [[tossir]] "to cough"
match = "^tossir",
forms = {
stressed_stem = "tussi", -- pres_2s gets 'tusses'
pres_3s = "tus", -- note, pres_3s (a single form override) not pres3s (a stem override, which also affects
-- pres_2s; but imp_2s is physically copied from pres_3s, so imp_2s correctly gets 'tus')
eix_infix = "-",
irreg = true,
}
},
{
-- [[venir]] but not any compounds; highly irregular
match = "^venir",
forms = {
fut = "vindr",
pres_stressed = "ven",
pres_3s = "ve",
imp_2s = "vine",
g_infix = "ving",
}
},
{
-- compounds of [[venir]]: [[advenir]], [[avenir]], [[contravenir]], [[convenir]], [[desavenir-se]],
-- [[desconvenir]], [[entrevenir]], [[esdevenir]], [[intervenir]], [[obvenir]], [[pervenir]], [[prevenir]],
-- [[provenir]], [[reconvenir]], [[revenir]], [[sobrevenir]], [[subvenir]]; but not [[enjovenir]] or
-- [[rejovenir]]; highly irregular
match = match_against_verbs("venir", {"^ad", "^a", "contra", "con", "desa", "entre", "esde", "inter", "ob",
"per", "pre", "pro", "^re", "sobre", "sub"}),
forms = {
fut = "vindr",
pres_stressed = "ven",
pres_3s = "vé",
imp_2s = "vén",
g_infix = "ving",
}
},
{
-- [[vindre]]: variant of [[venir]]
match = "vindre",
like = "venir",
},
-- [[vestir]], [[desvestir]], [[revestir]], maybe [[transvestir]]: non-inchoative in Valencia, inchoative or
-- non-inchoative in the Balearics; regular inchoative elsewhere; but not [[envestir]] or [[investir]], which are
-- regular inchoative everywhere
{
-- [[fer]], [[contrafer]], [[desfer]], [[estrafer]], [[perfer]], [[refer]], [[satisfer]]; highly irregular
match = "fer",
forms = {
fut = "far",
pres_1s = "faj", -- will be converted to 'faig'; 'faig' gets converted to 'faic'
pres_2s = "fàs#",
pres_3s = "fà#",
pres_3p = "fan",
pres_unstressed = "fe",
impf1 = "fei",
impf2 = "fèi",
pres_sub_stressed = "faci",
pres_sub_unstressed = "fe",
pret = "fé",
pret_1s = "fiu",
pret_3s = "feu",
impf_sub_1s = "fés#", -- regular except for base form [[fes]], lacking an accent
impf_sub_3s = "fés#", -- same
imp_2s = "fés#",
pp = "fet",
irreg = true,
}
},
{
-- [[dir]], [[adir-se]], [[contradir]], [[desdir]], [[entredir]], [[interdir]], [[maldir]], [[predir]], [[redir]];
-- behaves like an -er/-re verb
match = match_against_verbs("dir", {"^", "^a", "contra", "des", "entre", "inter", "mal", "pre", "^re"}),
forms = {
stem = "die",
g_infix = "+",
imp_2s = "digues",
imp_2p = "digueu",
pp = "dit",
}
},
{
-- [[dur]], [[endur-se]]; behaves like an -er/-re verb
match = "dur",
forms = {
stem = "due",
g_infix = "+",
pres3s = {"duu", "du"}, -- generates pres_2s, imp_2s
impf1 = "dui",
impf2 = "dúi",
pp = "dut",
}
},
{
-- [[ser]]; highly irregular
match = "^ser",
forms = {
pres_1s = "soc",
pres_2s = "ets",
pres_3s = "és",
pres_1p = "som",
pres_2p = "sou",
pres_3p = "són",
impf1 = "er",
impf2 = "ér",
pres_sub_stressed = "sigui",
pres_sub_unstressed = "sigue",
pret = "fó",
pret_1s = "fui",
pret_3s = "fou",
impf_sub_1s = "fos", -- regular except for lack of accent
impf_sub_3s = "fos", -- same
cond = {"serí", "fór"},
imp_2s = "sigues",
imp_2p = "sigueu",
pp = {"estad", "sigud"},
gerund = {"sent", "essent"},
irreg = true,
}
},
{
-- [[ésser]]; variant of [[ser]]
match = "^ésser",
like = "ser",
},
{
-- [[haver]] as auxiliary; highly irregular
match = "^haver",
var = "aux",
forms = {
pres_1s = "he",
pres_2s = "has",
pres_3s = "ha",
pres_1p = "hem",
pres_2p = "heu",
pres_3p = "han",
fut = "haur",
cond = {"haurí", "haguér"},
pres_sub_stressed = "hagi",
pres_sub_unstressed = "hàgi",
noimp = true,
g_infix = "+",
}
},
{
-- [[haver]] as full verb; highly irregular
match = "^haver",
var = "full",
forms = {
pres_1s = {"hec", "hac"},
pres_stressed = {"heu", "hau"},
fut = "haur",
pres_sub_stressed = "hegui",
g_infix = "+",
}
},
{
-- [[heure]]; variant of full verb [[haver]]
match = "^heure",
like = "haver",
likevar = "full",
},
{
-- [[haure]]; variant of full verb [[haver]]
match = "^haure",
like = "haver",
likevar = "full",
},
}
local function skip_slot(base, slot, allow_overrides)
if not allow_overrides and (base.basic_overrides[slot] or
base.refl and base.basic_reflexive_only_overrides[slot]) then
-- Skip any slots for which there are overrides.
return true
end
if base.only3s and (slot:find("^pp_f") or slot:find("^pp_mp")) then
-- diluviar, atardecer, neviscar; impersonal verbs have only masc sing pp
return true
end
if not slot:find("[123]") then
-- Don't skip non-personal slots.
return false
end
if base.nofinite then
return true
end
if (base.only3s or base.only3sp or base.only3p) and (slot:find("^imp_") or slot:find("^neg_imp_")) then
return true
end
if base.only3s and not slot:find("3s") then
-- diluviar, atardecer, neviscar
return true
end
if base.only3sp and not slot:find("3[sp]") then
-- atañer, concernir
return true
end
if base.only3p and not slot:find("3p") then
-- [[caer cuatro gotas]], [[caer chuzos de punta]], [[entrarle los siete males]]
return true
end
return false
end
local function add_stem_ending(stem, ending)
if ending == "" then
return stem
end
if stem:find("#$") then -- remove final accent when adding a suffix
stem = com.remove_accents((stem:gsub("#$", "")), "final syllable only")
end
return stem .. ending
end
local function process_stem(stem, fn)
if stem:find("#$") then
local stem_no_pound_sign = stem:match("^(.*)#$")
return fn(stem_no_pound_sign) .. "#"
else
return fn(stem)
end
end
-- Add the `stem` to the `ending` and apply any phonetic modifications. `is_full_word` indicates that we're creating
-- a "full word" not a stem, and turns on devoicing of final consonants. `dont_include_prefix` is used when creating
-- stems and indicates not to prepend the prefix in `base.prefix` to the result. `is_pres_sub_stressed` is used when
-- creating the pres_sub_stressed stem, to correctly handle both [[desaiguar]] and [[argüir]], whose respective
-- interactions between ü and i/ï are very tricky.
--
-- WARNING: This function is written very carefully; changes to it can easily have unintended consequences.
local function combine_stem_ending(base, stem, ending, is_full_word, dont_include_prefix, is_pres_sub_stressed)
-- Include the prefix in the stem unless dont_include_prefix is given (used in construct_stems()), or the value of
-- `stem` comes from a user-specified stem or form override.
if not dont_include_prefix and not stem:find(IS_USER_STEM_OVERRIDE) and not stem:find(IS_USER_FORM_OVERRIDE) then
stem = base.prefix .. stem
end
-- A * at the beginning of the ending is a signal to remove a stressed accent from the stem. This may feed any of
-- the following rules.
if ending:find("^%*") then
ending = ending:gsub("^%*", "")
stem = com.remove_accents(stem, "final syllable only")
end
-- If ending begins with s and stem ends in a sibilant, we need an e in between; cf. pres_2s 'apareixes' of
-- [[aparèixer]], pres_2s 'torces' of [[tòrcer]], pres_2s 'fuges' of [[fugir]], pres_2s 'brunzes' of [[brunzir]].
-- This may feed the next rule.
if ending:find("^s") and rfind(stem, "[çjsxz]$") then
ending = "e" .. ending
end
-- By default, stems are in their "back" (standalone) form. Before a front vowel, convert the final consonant to
-- its "front" form so the pronunciation doesn't change.
if rfind(ending, "^" .. front_vowel_c) then
-- adequar -> adeqües
-- enaiguar -> enaigües
-- pegar -> pegues
-- arranjar -> arranges
-- marcar -> marques
-- abraçar -> abraces
stem = com.back_to_front(stem)
end
-- Ending beginning in -i after diphthong ending in V + i compresses the two i's into one (cf. pret_1s 'desmaí' and
-- pres_sub_1s 'desmaï' of [[desmaiar]]). This rule doesn't apply after pseudo-vowel u in gu/qu; cf. pret_1s 'guií'
-- of [[guiar]] and contrast pret_1s 'cruí' of [[cruiar]]. This may feed the next rule.
if rfind(ending, "^[iíï]") and rfind(stem, V .. "i$") and not rfind(stem, "[gq][uü]i$") then
stem = stem:gsub("i$", "")
end
-- If ending begins with i (not í), it must get a diaeresis after a true vowel (not gu/qu, cf. pres_1p 'delinquim'
-- of [[delinquir]], not '#delinquïm'; also not a diphthong ending in u, cf. pres_sub_1s 'apreui' of [[apreuar]]
-- not '#apreuï') to prevent the two merging into a diphthong. Note that ü -> u before ï, but to simplify things
-- we leave the double umlauts in place and remove the first one during postprocessing, in fix_double_umlauts().
-- Cf.:
-- * impf_1s 'raïa' of [[raure]];
-- * pres_sub_1s 'creï' of [[crear]];
-- * pres_sub_1s 'associï' of [[associar]];
-- * impf_1s 'cloïa' of [[cloure]];
-- * pres_1p 'lluïm' of [[lluir]];
-- * pres_1p 'arguïm' of [[argüir]].
if ending:find("^i") and rfind(stem, "[aeiouü]$") and not stem:find("[aeiogq]u$") and
-- Unstressed subjunctive endings of [[enaiguar]] remain without umlaut: enaigüi/enaigüis/enaigüin;
-- but stressed endings of [[argüir]] that begin with 'i' do get an umlaut: arguït, impf. arguïa, including
-- stressed subjunctive endings arguïm/arguïu. In both cases the ending is '-i' as part of the creation of
-- the respective stems. There seems no way of distinguishing the two cases other than with a special flag.
not (rfind(stem, "[gq]ü$") and ending == "i" and is_pres_sub_stressed) then
ending = ending:gsub("^i", "ï")
end
local retval = add_stem_ending(stem, ending)
if retval:find("#$") then -- remove final accent if no vowels in prefix
retval = retval:gsub("#$", "")
if not rfind(base.prefix, V) then
retval = com.remove_accents(retval, "final syllable only")
end
end
if is_full_word then
local saw_is_user_form_override
retval, saw_is_user_form_override = rsubb(retval, IS_USER_FORM_OVERRIDE, "")
retval = retval:gsub(IS_USER_STEM_OVERRIDE, "")
if not saw_is_user_form_override then
-- Devoice final voiced obstruent (cf. pres_2s 'caps', pres_3s 'cap' of [[cabre]]). But not after a
-- consonant (cf. pres_2s 'perds', pres_3s 'perd' of [[perdre]]), except for g -> c, which operates
-- even after a consonant (pres_1s 'resolc' of [[resoldre]], pres_1s 'tinc' of [[tenir]]).
retval = retval:gsub("g(s?)$", "c%1")
retval = rsub(retval, "(" .. V .. ")([bdj])(s?)$", function(before, voiced, after)
local devoice = {
b = "p",
d = "t",
j = "ig", -- pres_3s 'fuj' of [[fugir]] -> 'fuig'
}
return before .. devoice[voiced] .. after
end)
end
end
return retval
end
local function add3(base, slot, stems, endings, footnotes, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(base, stem, ending, "is full word")
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil, footnotes)
end
local function insert_form(base, slot, form)
if not skip_slot(base, slot) then
iut.insert_form(base.forms, slot, form)
end
end
local function insert_forms(base, slot, forms)
if not skip_slot(base, slot) then
iut.insert_forms(base.forms, slot, forms)
end
end
local function add_single_stem_tense(base, slot_pref, stems, s1, s2, s3, p1, p2, p3)
local function addit(slot, ending)
add3(base, slot_pref .. "_" .. slot, stems, ending)
end
addit("1s", s1)
addit("2s", s2)
addit("3s", s3)
addit("1p", p1)
addit("2p", p2)
addit("3p", p3)
end
local function map_general(stemforms, fn)
return iut.map_forms(iut.convert_to_general_list_form(stemforms), fn)
end
local function flatmap_general(stemforms, fn)
return iut.flatmap_forms(iut.convert_to_general_list_form(stemforms), fn)
end
-- Given a stem ending in a conjugation vowel -a/-e/-i/-ï, split into stem base and conjugation vowel, converting the
-- stem base to "back" form if the conjugation vowel is front (hence 'torce' of [[tòrcer]] splits into 'torç' and 'e',
-- and 'fugi' of [[fugir]] splits into 'fuj' and 'i').
local function split_conj_vowel(stem)
local stem_base, conj_vowel = rmatch(stem, "^(.*)([aeiï])$")
if not stem_base then
error(("Internal error: Stem '%s' doesn't end in conjugation vowel a/e/i"):format(stem))
end
if conj_vowel == "ï" then
-- To simplify handling of ï, convert to i. It will be converted back to ï as necessary in
-- combine_stem_ending().
conj_vowel = "i"
end
if rfind(conj_vowel, front_vowel_c) then
stem_base = com.front_to_back(stem_base)
end
return stem_base, conj_vowel
end
local function construct_stems(base)
base.output_stems = {}
local stems = base.output_stems
local bst = base.input_stems
-- YUCK, see combine_stem_ending() for the necessity of is_pres_sub_stressed.
local function combine(stem, ending, is_pres_sub_stressed)
return combine_stem_ending(base, stem, ending, false, "dont include prefix", is_pres_sub_stressed)
end
stems.irreg = bst.irreg or bst.g_infix
-- NOTE: Some stems end in a conjugation or similar vowel, specifically:
-- * `stem` (ends in conjugation vowel -a/-e/-i);
-- * `stressed_stem` (likewise);
-- * `unstressed_stem` (likewise);
-- * `pres_unstressed` (which assumes the form of the gerund minus the -nt; note that `pres_stressed` does *NOT*
-- end in a conjugation vowel, but assumes the stem form; the value of pres_3s will be derived by adding -a for
-- -ar verbs and otherwise adding an -e prop vowel when required, as in [[cobrir]], and otherwise adding no
-- vowel);
-- * `pres_sub_stressed` (which assumes the form of pres_sub_3s and hence usually ends in -i, occasionally -a);
-- * `pres_sub_unstressed` (which assumes the form of pres_sub_1p minus the -m, hence ends in -e or -i).
-- Save stem for use in add_categories_and_annotation() for determining the conjugation class.
stems.stem = bst.stem or base.stem
local eix_infix_stem
if base.conj_vowel == "i" then
-- Save eix_infix value for use in add_categories_and_annotation() for determining whether consonant
-- alternations exist.
stems.eix_infix = bst.eix_infix or bst.g_infix and "-" or "+"
eix_infix_stem = flatmap_general(stems.eix_infix, function(form)
if form == "+" then
return map_general(stems.stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, "eixe")
end)
elseif form == "-" then
return stems.stem
else
return form
end
end)
end
local stressed_stem = bst.stressed_stem or eix_infix_stem or stems.stem
local unstressed_stem = bst.unstressed_stem or stems.stem
-- Add the 'g' that is characteristic of g-infix verbs. We remove a stem-final v, e.g. [[beure]] with stem 'beve'
-- becomes 'beg'.
local function add_g(stemforms)
return map_general(stemforms, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
stem_base = stem_base:gsub("v$", "")
return combine(stem_base, "g")
end)
end
-- Add the 'u' of the pres_3s that is characteristic of g-infix verbs (and conjugation vowel 'e', later removed).
-- We remove a stem-final v, as well as i as part of a diphthong, e.g. [[beure]] with stem 'beve' becomes 'beue'
-- and [[veure]] with stem 'veie' becomes 'veue' (but [[riure]] with stem 'rie' becomes 'riue' not '#rue'). We
-- don't add -u after a consonant, e.g. [[doldre]] with stem 'dole' becomes 'dole' not '#dolue'.
local function add_u(stemforms)
return map_general(stemforms, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
if stem_base:find("v$") then
stem_base = stem_base:gsub("v$", "")
else
stem_base = rsub(stem_base, "(" .. V .. ")i$", "%1")
end
-- Add u after vowel but not after another u, so we get pres_3p 'duen' of [[dur]] not '#duuen'.
if rfind(stem_base, V .. "$") and not stem_base:find("u$") then
return combine(stem_base, "u")
else
return stem_base
end
end)
end
local stressed_g_infix, unstressed_g_infix, g_infix_pres_stressed
if bst.g_infix then
local function flatmap_g_infix(default)
return flatmap_general(bst.g_infix, function(form)
if form == "+" then
return default
else
return form
end
end)
end
stressed_g_infix = flatmap_g_infix(add_g(stressed_stem))
unstressed_g_infix = flatmap_g_infix(add_g(unstressed_stem))
g_infix_pres_stressed = add_u(stressed_stem)
end
stems.pres_unstressed = bst.pres_unstressed or unstressed_stem
stems.pres_stressed =
-- If no_pres_stressed given, pres_stressed stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
bst.pres_stressed or
g_infix_pres_stressed or
map_general(stressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return stem_base
end)
stems.pres1s =
-- If no_pres_stressed given, pres1s stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
stressed_g_infix or
map_general(stems.pres_stressed, function(form)
return combine(form, "o")
end)
stems.pres3s =
-- If no_pres_stressed given, pres3s stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
bst.pres3s or
map_general(stems.pres_stressed, function(form)
if base.conj_vowel == "a" then
return combine(form, "a")
elseif rfind(form, C .. "[lr]$") and not rfind(form, V .. "ll$") then
return combine(form, "e")
else
return form
end
end)
stems.pres3p =
-- If no_pres_stressed given, pres3p stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
map_general(stems.pres_stressed, function(form)
return combine(form, "en")
end)
local function compute_impf_stem(with_accent)
return map_general(stems.pres_unstressed, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
if conj_vowel == "a" then
return combine(stem_base, with_accent and "àv" or "av")
elseif stem_base:find("i#?$") then
form = form:gsub("i#?$", "")
return combine(rmatch(stem_base, "^(.-)" .. V .. "*$"), with_accent and "èi" or "ei")
else
return combine(stem_base, with_accent and "í" or "i") -- i -> ï after a vowel
end
end)
end
stems.impf1 = bst.impf1 or compute_impf_stem(false)
stems.impf2 = bst.impf2 or compute_impf_stem(true)
stems.pret = bst.pret or
unstressed_g_infix and map_general(unstressed_g_infix,
function(form) return combine(form, "é") end
) or
map_general(unstressed_stem, function(form)
local accent_conj_vowel = {
a = "à",
e = "é",
i = "í",
}
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, accent_conj_vowel[conj_vowel])
end)
stems.fut = bst.fut or base.inf_stem
stems.cond = bst.cond or map_general(stems.fut, function(form) return combine(form, "í") end)
stems.pres_sub_stressed = bst.pres_sub_stressed or
stressed_g_infix and map_general(stressed_g_infix, function(form) return combine(form, "i") end) or
map_general(stressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, "i", "is pres_sub_stressed")
end)
stems.pres_sub_unstressed = bst.pres_sub_unstressed or
unstressed_g_infix and map_general(unstressed_g_infix, function(form) return combine(form, "e") end) or
map_general(unstressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, conj_vowel == "i" and conj_vowel or "e")
end)
stems.impf_sub = bst.impf_sub or map_general(stems.pret, function(form)
local stem_base = rmatch(form, "^(.*)à$") -- already in "back" form, no need to convert
if stem_base then
return combine(stem_base, "é")
else
return form
end
end)
stems.pp = bst.pp or
unstressed_g_infix and map_general(unstressed_g_infix,
function(form) return combine(form, "ud") end
) or
map_general(unstressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
-- use combine() so we get 'abduïd' from 'abdu-' of [[abduir]], 'seguid' from 'seg-' from [[seguir]], etc.
return combine(stem_base, (conj_vowel == "e" and "u" or conj_vowel) .. "d")
end)
end
local function a_to_e(base, stems, suffix)
return map_general(stems, function(form)
local stem_base = form:match("^(.-)a$")
if stem_base then
suffix = "e" .. suffix
else
stem_base = form
end
return combine_stem_ending(base, stem_base, suffix, "is full word")
end)
end
local function add_present_indic(base)
local stems = base.output_stems
local function addit(slot, stems, ending)
add3(base, "pres_" .. slot, stems, ending)
end
addit("1s", stems.pres1s, "")
insert_forms(base, "pres_2s", a_to_e(base, stems.pres3s, "s"))
addit("3s", stems.pres3s, "")
insert_forms(base, "pres_1p", a_to_e(base, stems.pres_unstressed, "m"))
insert_forms(base, "pres_2p", a_to_e(base, stems.pres_unstressed, "u"))
addit("3p", stems.pres3p, "")
end
local function add_present_subj(base)
local stems = base.output_stems
local function addit(slot, stems, ending)
add3(base, "pres_sub_" .. slot, stems, ending)
end
-- Regular -ar verb: [[amar]]: ami, amis, ami, amem, ameu, amin
-- Regular -re verb: [[batre]]: bati, batis, bati, batem, bateu, batin (same as -ar verb)
-- Regular -ir verb, no -eix- infix: [[dormir]]: dormi, dormis, dormi, dormim, dormiu, dormin
-- Regular -ir verb, -eix- infix: [[imprimir]]: imprimeixi, imprimeixis, imprimeixi, imprimim, imprimiu, imprimeixin
-- Stem changing in 123s/3p vs. 12p:
-- * -eix- infix (-eix- in all stressed forms: 123s/3p of pres ind/sub, 2s imp)
-- * [[collir]]: culli, cullis, culli, collim, colliu, cullin (cull- in all stressed forms)
-- * [[cabre]]: càpiga, càpigues, càpiga, capiguem, capigueu, càpiguen (also different endings)
addit("1s", stems.pres_sub_stressed, "")
insert_forms(base, "pres_sub_2s", a_to_e(base, stems.pres_sub_stressed, "s"))
addit("3s", stems.pres_sub_stressed, "")
addit("1p", stems.pres_sub_unstressed, "m")
addit("2p", stems.pres_sub_unstressed, "u")
insert_forms(base, "pres_sub_3p", a_to_e(base, stems.pres_sub_stressed, "n"))
end
local function add_finite_non_present(base)
local stems = base.output_stems
local function add_tense(slot, stem, s1, s2, s3, p1, p2, p3)
add_single_stem_tense(base, slot, stem, s1, s2, s3, p1, p2, p3)
end
add_tense("impf", stems.impf1, "a", "es", "a", nil, nil, "en")
add_tense("impf", stems.impf2, nil, nil, nil, "em", "eu", nil)
-- pret_1s ends in -í regardless of the normal vowel of the stem.
insert_forms(base, "pret_1s", map_general(stems.pret, function(form)
local stem_base, conj_vowel = rmatch(form, "^(.*)(" .. V .. ")$")
if not stem_base then
error(("Internal error: Preterite stem '%s' doesn't end in vowel"):format(form))
end
if rfind(conj_vowel, front_vowel_c) then
stem_base = com.front_to_back(stem_base)
end
-- Use combine_stem_ending() to handle back-to-front conversions, e.g. pegà -> peguí for [[pegar]] and ensure
-- that the prefix gets added.
return combine_stem_ending(base, stem_base, "í", "is full word") end))
-- * at the beginning of the ending means to remove an accent from the last vowel of the preterite stem.
add_tense("pret", stems.pret, nil, "*res", "", "rem", "reu", "*ren")
-- * at the beginning of the ending means to remove an accent from the last vowel of the imperfect subjunctive stem.
add_tense("impf_sub", stems.impf_sub, "s", "*ssis", "s", "ssim", "ssiu", "*ssin")
add_tense("fut", stems.fut, "é", "às", "à", "em", "eu", "an")
add_tense("cond", stems.cond, "*a", "*es", "*a", "em", "eu", "*en")
end
local function add_non_finite_forms(base)
local stems = base.output_stems
local function addit(slot, stems, ending, footnotes)
add3(base, slot, stems, ending, footnotes)
end
insert_form(base, "infinitive", {form = base.orig_verb})
-- Also insert "infinitive + reflexive pronoun" combinations if we're handling a reflexive verb. See comment below
-- for "gerund + reflexive pronoun" combinations.
if base.refl then
for _, persnum in ipairs(person_number_list) do
insert_form(base, "infinitive_" .. persnum, {form = base.orig_verb})
end
end
-- Gerunds don't have an umlaut over the i in cases like 'abduint' of 'abduir' (not '#abduïnt').
local pres_unstressed_no_umlaut = map_general(stems.pres_unstressed, function(form)
return rsub(form, "ï$", "i")
end)
addit("gerund", pres_unstressed_no_umlaut, "nt")
-- Also insert "gerund + reflexive pronoun" combinations if we're handling a reflexive verb. We insert exactly the
-- same form as for the bare gerund; later on in add_reflexive_or_fixed_clitic_to_forms(), we add the appropriate
-- clitic pronouns. It's important not to do this for non-reflexive verbs, because in that case, the clitic
-- pronouns won't be added, and {{ca-verb form of}} will wrongly consider all these combinations as possible
-- inflections of the bare gerund. Thanks to [[User:JeffDoozan]] for this bug fix.
if base.refl then
for _, persnum in ipairs(person_number_list) do
addit("gerund_" .. persnum, pres_unstressed_no_umlaut, "nt")
end
end
addit("pp_ms", stems.pp, "")
if not base.pp_inv then
addit("pp_fs", stems.pp, "a")
-- make_plural() handles the complexities of e.g. 'vist' of [[veure]] -> 'vistos'/'vists' and 'romàs' of
-- [[romandre]] -> 'romasos'. We need to use flatmap_general() because make_plural() may return more than one
-- plural, and we need to use map_general() on the result, applying combine_stem_ending(), to ensure that
-- prefixes get properly added and plurals like 'amads' of stem 'amad' of [[amar]] get converted to 'amats'.
insert_forms(base, "pp_mp", map_general(flatmap_general(stems.pp, function(form)
-- Remove any # indicating that an accent will be dropped; it will be dropped in any case by make_plural().
form = form:gsub("#$", "")
return com.make_plural(form, "m")
end), function(form)
return combine_stem_ending(base, form, "", "is full word")
end))
addit("pp_fp", stems.pp, "es")
end
end
local function add_imperatives(base)
if base.noimp then
return
end
-- Copy pres3s to imperative since they are almost always the same.
insert_forms(base, "imp_2s", iut.map_forms(base.forms.pres_3s, function(form) return form end))
-- Copy pres2p to imperative plural since they are almost always the same.
insert_forms(base, "imp_2p", iut.map_forms(base.forms.pres_2p, function(form) return form end))
-- Copy subjunctives to imperatives.
for _, persnum in ipairs({"3s", "1p", "3p"}) do
local from = "pres_sub_" .. persnum
local to = "imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form) return form end))
end
end
local function fix_double_umlauts(base)
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
form.form = form.form:gsub("üï", "uï")
end
end
end
local function process_slot_overrides(base, filter_slot, reflexive_only)
local overrides = reflexive_only and base.basic_reflexive_only_overrides or base.basic_overrides
for slot, forms in pairs(overrides) do
if not filter_slot or filter_slot(slot) then
add3(base, slot, forms, "", nil, "allow overrides")
end
end
end
local function link_clitic(clitic)
return (clitic:gsub("([^ %-]+)", "[[%1]]"))
end
-- Prefix `form` with `clitic`, adding fixed text `between` between them. Add links as appropriate unless the user
-- requested no links. Check whether form already has brackets (as will be the case if the form has a fixed clitic).
local function prefix_clitic_to_form(base, clitic, between, form)
if base.alternant_multiword_spec.args.noautolinkverb then
return clitic .. between .. form
else
local clitic_pref = link_clitic(clitic) .. between
if form:find("%[%[") then
return clitic_pref .. form
else
return clitic_pref .. "[[" .. form .. "]]"
end
end
end
-- Suffix `form` with `clitic`. Add links as appropriate unless the user requested no links. Check whether form already
-- has brackets (as will be the case if the form has a fixed clitic).
local function suffix_clitic_to_form(base, clitic, form)
local autolink = not base.alternant_multiword_spec.args.noautolinkverb
if base.alternant_multiword_spec.args.noautolinkverb then
return form .. clitic
else
local clitic_suf = link_clitic(clitic)
if form:find("%[%[") then
return form .. clitic_suf
else
return "[[" .. form .. "]]" .. clitic_suf
end
end
end
-- Add a reflexive pronoun or fixed clitic (FIXME: not working), as appropriate to the base forms that were generated.
-- `do_joined` means to do only the forms where the pronoun is joined to the end of the form; otherwise, do only the
-- forms where it is not joined and precedes the form.
local function add_reflexive_or_fixed_clitic_to_forms(base, do_reflexive, do_joined)
for _, slotaccel in ipairs(base.alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
local persnum
if slot:find("[123]") then
persnum = slot:match("^.*_(.-)$")
else
persnum = "3s"
end
local function get_proclitic(form)
--if not do_reflexive then
-- return base.clitic
if form:find("^[aeiouh]") then
return proclitic_elided_person_number_to_reflexive_pronoun[persnum]
else
return proclitic_non_elided_person_number_to_reflexive_pronoun[persnum]
end
end
local function get_enclitic(form)
--if not do_reflexive then
-- return base.clitic
if rfind(form, C .. "$") or rfind(form, V .. "[iu]$") and not form:find("[gq]ui$") then
return enclitic_non_elided_person_number_to_reflexive_pronoun[persnum]
else
return enclitic_elided_person_number_to_reflexive_pronoun[persnum]
end
end
if base.forms[slot] then
if do_reflexive and slot:find("^pp_") or slot == "infinitive_linked" then
-- do nothing with reflexive past participles or with infinitive linked (handled at the end)
elseif slot:find("^neg_imp_") then
error("Internal error: Should not have forms set for negative imperative at this stage")
else
local slot_has_suffixed_clitic = slot:find("infinitive") or slot:find("gerund") or slot:find("^imp_")
-- Maybe generate non-reflexive parts and separated syntactic variants for use in
-- {{ca-verb form of}}. See comment in add_slots() above `need_special_verb_form_of_slots`.
-- Check for do_joined so we only run this code once.
if do_reflexive and do_joined and base.alternant_multiword_spec.source_template == "ca-verb form of" and
-- Skip personal variants of infinitives and gerunds so we don't think [[arrependendo]] is a
-- non-reflexive equivalent of [[arrependendo-me]].
not slot:find("infinitive_") and not slot:find("gerund_") then
-- Clone the forms because we will be destructively modifying them just below, adding the reflexive
-- pronoun.
insert_forms(base, slot .. "_non_reflexive", mw.clone(base.forms[slot]))
if slot_has_suffixed_clitic then
insert_forms(base, slot .. "_variant", iut.map_forms(base.forms[slot], function(form)
return prefix_clitic_to_form(base, get_proclitic(form), "... ", form)
end))
end
end
if slot_has_suffixed_clitic then
if do_joined then
-- Add clitic after form.
for _, form in ipairs(base.forms[slot]) do
form.form = suffix_clitic_to_form(base, get_enclitic(form.form), form.form)
end
end
elseif not do_joined then
-- Add clitic before form.
for _, form in ipairs(base.forms[slot]) do
form.form = prefix_clitic_to_form(base, get_proclitic(form.form), "", form.form)
end
end
end
end
end
end
local function handle_infinitive_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{ca-verb}}.
-- We substitute the original lemma (before removing links) for forms that
-- are the same as the lemma, if the original lemma has links.
for _, slot in ipairs({"infinitive"}) do
insert_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
local function generate_negative_imperatives(base)
if base.noimp then
return
end
-- Copy subjunctives to negative imperatives, preceded by "no".
for _, persnum in ipairs(neg_imp_person_number_list) do
local from = "pres_sub_" .. persnum
local to = "neg_imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form)
if base.alternant_multiword_spec.args.noautolinkverb then
return "no " .. form
elseif form:find("%[%[") then
-- already linked, e.g. when reflexive
return "[[no]] " .. form
else
return "[[no]] [[" .. form .. "]]"
end
end))
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
local function conjugate_verb(base)
construct_stems(base)
add_present_indic(base)
add_present_subj(base)
add_finite_non_present(base)
add_non_finite_forms(base)
fix_double_umlauts(base)
-- do non-reflexive non-imperative slot overrides
process_slot_overrides(base, function(slot)
return not slot:find("^imp_") and not slot:find("^neg_imp_")
end)
-- This should happen after process_slot_overrides() in case a derived slot is based on an override
-- (as with the imp_3s of [[dar]], [[estar]]).
add_imperatives(base)
-- do non-reflexive positive imperative slot overrides
process_slot_overrides(base, function(slot)
return slot:find("^imp_")
end)
-- We need to add joined reflexives, then joined and non-joined clitics, then non-joined reflexives, so we get
-- [[arrepéndete]] but [[no]] [[te]] [[arrependas]].
if base.refl then
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", "do joined")
process_slot_overrides(base, nil, "do reflexive") -- do reflexive-only slot overrides
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", false)
end
-- This should happen after add_reflexive_or_fixed_clitic_to_forms() so negative imperatives get the reflexive pronoun
-- and clitic in them.
generate_negative_imperatives(base)
-- do non-reflexive negative imperative slot overrides
-- FIXME: What about reflexive negative imperatives?
process_slot_overrides(base, function(slot)
return slot:find("^neg_imp_")
end)
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma`
-- in handle_infinitive_linked() works correctly and compares unlinked forms to unlinked forms.
handle_infinitive_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
user_basic_overrides = {},
user_stems = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
if inside == "" then
return base
end
local segments = put.parse_balanced_segment_run(inside, "[", "]")
local dot_separated_groups = put.split_alternating_runs(segments, "%.")
for i, dot_separated_group in ipairs(dot_separated_groups) do
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
elseif first_element:find("^var:") then
if #dot_separated_group > 1 then
parse_err(("Can't attach footnotes to 'var:' spec '%s'"):format(first_element))
end
base.var = first_element:match("^var:(.*)$")
elseif first_element:find(":") then
local colon_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*:%s*")
local first_element = colon_separated_groups[1][1]
if #colon_separated_groups[1] > 1 then
parse_err("Can't attach footnotes directly to '" .. first_element .. "' spec; attach them to the " ..
"colon-separated values following the initial colon")
end
if overridable_stems[first_element] then
if base.user_stems[first_element] then
parse_err("Overridable stem '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_stems[first_element] = overridable_stems[first_element](colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a basic override; we validate further later when the possible slots are available
if base.user_basic_overrides[first_element] then
parse_err("Basic override '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_basic_overrides[first_element] = allow_multiple_values_for_override(colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes},
"is form override")
end
else
parse_err("Unrecognized spec '" .. first_element .. "'")
end
end
return base
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, head)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original")
end
-- (2) Remove any links from the lemma, but remember the original form so we can use it below in the 'lemma_linked'
-- form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = head
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
local refl_verb = base.lemma
local verb, refl = rmatch(refl_verb, "^(.-)%-(se)$")
if not verb then
verb, refl = rmatch(refl_verb, "^(.-)('s)$")
end
if not verb then
verb, refl = refl_verb, nil
end
base.user_specified_verb = verb
base.refl = refl
base.verb = base.user_specified_verb
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
elseif base.refl then
-- Reconstruct the linked lemma with separate links around base verb, reflexive pronoun and clitic.
linked_lemma = base.user_specified_verb == base.verb and "[[" .. base.user_specified_verb .. "]]" or
"[[" .. base.verb .. "|" .. base.user_specified_verb .. "]]"
linked_lemma = linked_lemma .. (refl and "-[[" .. refl .. "]]" or "")
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve links in multiword
-- lemmas and include links in non-lemma forms rather than allowing the entire form to be a link.
linked_lemma = iut.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
local function detect_indicator_spec(base)
if (base.only3s and 1 or 0) + (base.only3sp and 1 or 0) + (base.only3p and 1 or 0) > 1 then
error("Only one of 'only3s', 'only3sp' and 'only3p' can be specified")
end
base.forms = {}
base.input_stems = {}
base.basic_overrides = {}
base.basic_reflexive_only_overrides = {}
base.orig_verb = base.verb -- in case of a 'like = "..."' redirect
if not base.no_built_in then
local function match_built_in_spec(verb, built_in_spec)
local prefix, non_prefixed_verb
if type(built_in_spec.match) == "function" then
prefix, non_prefixed_verb = built_in_spec.match(verb)
elseif built_in_spec.match:find("^%^") and rsub(built_in_spec.match, "^%^", "") == verb then
-- begins with ^, for exact match, and matches
prefix, non_prefixed_verb = "", verb
else
prefix, non_prefixed_verb = rmatch(verb, "^(.*)(" .. built_in_spec.match .. ")$")
end
return prefix, non_prefixed_verb
end
local function find_built_in(verb, var)
for _, built_in_spec in ipairs(built_in_conjugations) do
local prefix, non_prefixed_verb = match_built_in_spec(verb, built_in_spec)
if prefix then
if not built_in_spec.var then
if var then
error(("Can't specify a variant spec 'var:%s' with verb '%s'"):format(var, verb))
end
return prefix, non_prefixed_verb, built_in_spec
elseif not var then
local possible_vars = {}
for _, built_in_spec in ipairs(built_in_conjugations) do
local prefix, non_prefixed_verb = match_built_in_spec(verb, built_in_spec)
if prefix then
table.insert(possible_vars, built_in_spec.var)
end
end
error(("For verb '%s', must specify a variant using 'var:...'; possible values are %s"):format(
verb, table.concat(possible_vars, ", ")))
elseif built_in_spec.var == var then
return prefix, non_prefixed_verb, built_in_spec
end
end
end
return nil
end
local prefix, non_prefixed_verb, built_in_spec = find_built_in(base.verb, base.var)
if prefix then
-- we found a built-in verb
if built_in_spec.like then
-- we found a redirect to another verb that has the same conjugation, just a different infinitive
base.verb = prefix .. built_in_spec.like
local new_prefix, new_non_prefixed_verb, new_built_in_spec = find_built_in(base.verb, built_in_spec.likevar)
if new_prefix then
-- redirected to another built-in verb
base.prefix = new_prefix
base.non_prefixed_verb = new_non_prefixed_verb
built_in_spec = new_built_in_spec
else
built_in_spec = nil
end
else
base.prefix = prefix
base.non_prefixed_verb = non_prefixed_verb
end
end
if built_in_spec then
-- we found a built-in verb, possibly redirecting to another built-in verb
for stem, forms in pairs(built_in_spec.forms) do
if type(forms) == "function" then
forms = forms(base, base.prefix)
end
if stem:find("^refl_") then
stem = stem:gsub("^refl_", "")
if not base.alternant_multiword_spec.verb_slots_basic_map[stem] then
error("Internal error: setting for 'refl_" .. stem .. "' does not refer to a basic verb slot")
end
base.basic_reflexive_only_overrides[stem] = forms
elseif base.alternant_multiword_spec.verb_slots_basic_map[stem] then
-- an individual form override of a basic form
base.basic_overrides[stem] = forms
else
base.input_stems[stem] = forms
end
end
end
end
-- Override built-in-verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stems) do
base.input_stems[stem] = values
end
for override, values in pairs(base.user_basic_overrides) do
if not base.alternant_multiword_spec.verb_slots_basic_map[override] then
error("Unrecognized override '" .. override .. "': " .. base.angle_bracket_spec)
end
base.basic_overrides[override] = values
end
base.prefix = base.prefix or ""
base.non_prefixed_verb = base.non_prefixed_verb or base.verb
local inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)(re)$")
if not inf_stem then
inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)([aeiu]r)$")
end
if not inf_stem then
error("Unrecognized infinitive: " .. base.verb)
end
-- Remove accents from e.g. [[parèixer]], [[córrer]].
inf_stem = com.remove_accents(inf_stem)
-- Save full infinitive stem for use in future and conditional.
base.inf_stem = (inf_stem .. suffix):gsub("e$", "")
local stem = inf_stem
if suffix == "re" then
-- verbs in -ldre, -ndre have stem without the d
stem = stem:gsub("([ln])d$", "%1")
elseif suffix == "ur" then
stem = stem .. "u"
end
base.conj_vowel = (suffix == "re" or suffix == "ur") and "e" or suffix:gsub("r$", "")
-- If the stem is followed by a front vowel, convert it to its "back" form before calling combine_stem_ending(),
-- which expects the "back" form of the stem and may convert it back to the "front" form. Don't do this conversion
-- for ï so we leave [[arguïr]] (underlyingly 'argüïr') as 'argu' ("back" form), which becomes 'argü' ("front" form)
-- before front vowel ï and we end up with base.stem containing the underlying form 'argüï'. We remove the first of
-- two umlauts in a row in a postprocessing step (fix_double_umlauts()).
if rfind(suffix, "^[ei]") then
stem = com.front_to_back(stem)
end
-- Use combine_stem_ending() so we get ï if necessary.
base.stem = combine_stem_ending(base, stem, base.conj_vowel, false, "dont include prefix")
-- Propagate built-in-verb indicator flags to `base` and combine with user-specified flags.
for indicator_flag, _ in pairs(indicator_flags) do
base[indicator_flag] = base[indicator_flag] or base.input_stems[indicator_flag]
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
-- Propagate some settings up; some are used internally, others by [[Module:pt-headword]].
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Internal indicator flags. Do these before calling detect_indicator_spec() because add_slots() uses them.
for _, prop in ipairs { "refl", "clitic" } do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
base.alternant_multiword_spec = alternant_multiword_spec
end)
add_slots(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
detect_indicator_spec(base)
-- User-specified indicator flags. Do these after calling detect_indicator_spec() because the latter may set these
-- indicators for built-in verbs.
for prop, _ in pairs(indicator_flags) do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
end)
end
local function add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
local function insert_cat(cat, also_when_multiword)
-- Don't place multiword terms in categories like 'Catalan verbs ending in -ar' to avoid spamming the
-- categories with such terms.
if also_when_multiword or not multiword_lemma then
m_table.insertIfNot(alternant_multiword_spec.categories, "カタルーニャ語 " .. cat)
end
end
if check_for_red_links and alternant_multiword_spec.source_template == "ca-conj" and multiword_lemma then
for _, slot_and_accel in ipairs(alternant_multiword_spec.all_verb_slots) do
local slot = slot_and_accel[1]
local forms = base.forms[slot]
local must_break = false
if forms then
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
local title = mw.title.new(form.form)
if title and not title.exists then
insert_cat("活用表に赤リンクを含む動詞")
must_break = true
break
end
end
end
end
if must_break then
break
end
end
end
map_general(base.output_stems.stem, function(stem)
local stem_base, conj_vowel = split_conj_vowel(stem)
local need_no_eix_infix = true
if conj_vowel ~= base.conj_vowel then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#不規則動詞|混合活用]]")
elseif conj_vowel == "a" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第一変化動詞|第一変化]]")
insert_cat("第一変化動詞")
elseif conj_vowel == "e" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第二変化動詞|第二変化]]")
insert_cat("第二変化動詞")
elseif conj_vowel == "i" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第三変化動詞|第三変化]]")
insert_cat("第三変化動詞")
need_no_eix_infix = false
map_general(base.output_stems.eix_infix, function(form)
if form == "+" then
insert_ann("eix_infix", "接中辞-eix-有り")
insert_cat("-eix-を含む第三変化動詞")
elseif form == "-" then
insert_ann("eix_infix", "接中辞-eix-無し")
insert_cat("-eix-を含まない第三変化動詞")
end
end)
else
error(("Internal error: Stem '%s' doesn't end in conjugation vowel a/e/i and split_conj_vowel() didn't catch it"
):format(stem))
end
if need_no_eix_infix then
insert_ann("eix_infix", "接中辞無し")
end
end)
if base.input_stems.g_infix then
insert_ann("g_infix", "軟口蓋接中辞有り")
insert_cat("軟口蓋接中辞を含む動詞")
else
insert_ann("g_infix", "接中辞無し")
end
if base.output_stems.irreg then
insert_ann("irreg", "不規則")
insert_cat("不規則動詞")
else
insert_ann("irreg", "規則")
end
if base.only3s then
insert_ann("defective", "非人称")
insert_cat("非人称動詞")
elseif base.only3sp then
insert_ann("defective", "第三人称のみ")
insert_cat("第三人称動詞")
elseif base.only3p then
insert_ann("defective", "第三人称複数のみ")
insert_cat("第三人称複数動詞")
elseif base.no_pres_stressed then
insert_ann("defective", "欠如")
insert_cat("欠如動詞")
else
insert_ann("defective", "規則")
end
--if base.clitic then
-- insert_cat("verbs with lexical clitics")
--end
if base.refl then
insert_cat("再帰動詞")
end
local stem_base, conj_vowel = split_conj_vowel(base.stem)
local cons_alt
if conj_vowel == "i" and base.output_stems.eix_infix == "+" then
-- no alternations in verbs like [[afligir]] because all endings are front
elseif stem_base:find("ç$") then
cons_alt = "ç-c"
elseif stem_base:find("c$") then
cons_alt = "c-qu"
elseif stem_base:find("g$") then
cons_alt = "g-gu"
elseif stem_base:find("gu$") then
cons_alt = "gu-gü"
elseif stem_base:find("j$") then
cons_alt = "j-g"
elseif stem_base:find("qu$") then
cons_alt = "qu-qü"
end
if cons_alt then
local desc = cons_alt .. " alternation"
insert_ann("cons_alt", desc)
insert_cat(desc .. "交替の動詞")
else
insert_ann("cons_alt", "non-alternating")
end
end
-- Compute the categories to add the verb to, as well as the annotation to display in the
-- conjugation title bar. We combine the code to do these functions as both categories and
-- title bar contain similar information.
local function compute_categories_and_annotation(alternant_multiword_spec)
alternant_multiword_spec.categories = {}
local ann = {}
alternant_multiword_spec.annotation = ann
ann.conj = {}
ann.g_infix = {}
ann.eix_infix = {}
ann.irreg = {}
ann.defective = {}
ann.cons_alt = {}
local multiword_lemma = false
for _, form in ipairs(alternant_multiword_spec.forms.infinitive) do
if form.form:find(" ") then
multiword_lemma = true
break
end
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
end)
local ann_parts = {}
local conj = table.concat(ann.conj, " or ")
if conj ~= "" then
table.insert(ann_parts, conj)
end
local eix_infix = table.concat(ann.eix_infix, " or ")
if eix_infix ~= "" and eix_infix ~= "no infix" then
table.insert(ann_parts, eix_infix)
end
local irreg = table.concat(ann.irreg, " or ")
if irreg ~= "" and irreg ~= "regular" then
table.insert(ann_parts, irreg)
end
local g_infix = table.concat(ann.g_infix, " or ")
if g_infix ~= "" and g_infix ~= "no infix" then
table.insert(ann_parts, g_infix)
end
local defective = table.concat(ann.defective, " or ")
if defective ~= "" and defective ~= "regular" then
table.insert(ann_parts, defective)
end
local cons_alt = table.concat(ann.cons_alt, " or ")
if cons_alt ~= "" and cons_alt ~= "non-alternating" then
table.insert(ann_parts, cons_alt)
end
alternant_multiword_spec.annotation = table.concat(ann_parts, ", ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = alternant_multiword_spec.forms.infinitive
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec)
local function transform_accel_obj(slot, formobj, accel_obj)
-- No accelerators for negative imperatives, which are always multiword and derived directly from the
-- present subjunctive.
if slot:find("^neg_imp") then
return nil
end
if accel_obj then
accel_obj.form = "verb-form-" .. reconstructed_verb_spec
end
return accel_obj
end
local props = {
lang = lang,
lemmas = lemmas,
transform_accel_obj = transform_accel_obj,
slot_list = alternant_multiword_spec.verb_slots_basic,
}
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote
end
local notes_template = [=[
<div class="roa-footnote-outer-div" style="width:100%;">
<div class="roa-footnote-inner-div">
{footnote}
</div></div>
]=]
local basic_table = [=[
{description}<div class="NavFrame">
<div class="NavHead"> Central Catalan conjugation of {title}</div>
<div class="NavContent">
{\op}| class="roa-inflection-table" data-toggle-category="inflection"
|-
! colspan="3" class="roa-nonfinite-header" | <span title="infinitiu">infinitive</span>
| colspan="5" | {infinitive}
|-
! colspan="3" class="roa-nonfinite-header" | <span title="gerundi">gerund</span>
| colspan="5" | {gerund}
|-
! rowspan="3" colspan="2" class="roa-nonfinite-header" | <span title="participi passat">past participle</span>
| colspan="2" class="roa-nonfinite-header" |
! colspan="2" class="roa-nonfinite-header" | 男性
! colspan="2" class="roa-nonfinite-header" | 女性
|-
! colspan="2" class="roa-nonfinite-header" | 単数
| colspan="2" | {pp_ms}
| colspan="2" | {pp_fs}
|-
! colspan="2" class="roa-nonfinite-header" | 複数
| colspan="2" | {pp_mp}
| colspan="2" | {pp_fp}
|-
! colspan="2" rowspan="2" class="roa-person-number-header" | person
! colspan="3" class="roa-person-number-header" | 単数
! colspan="3" class="roa-person-number-header" | 複数
|-
! class="roa-person-number-header" style="width:12.5%;" | 第一人称
! class="roa-person-number-header" style="width:12.5%;" | 第二人称
! class="roa-person-number-header" style="width:12.5%;" | 第三人称
! class="roa-person-number-header" style="width:12.5%;" | 第一人称
! class="roa-person-number-header" style="width:12.5%;" | 第二人称
! class="roa-person-number-header" style="width:12.5%;" | 第三人称
|-
! rowspan="6" class="roa-indicative-left-rail" | <span title="indicatiu">直説法</span>
! class="roa-indicative-left-rail" |
! class="roa-indicative-left-rail" | <<jo>>
! class="roa-indicative-left-rail" | <<tu>>
! class="roa-indicative-left-rail" | <<ell>>/<<ella>><br /><<vostè>>
! class="roa-indicative-left-rail" | <<nosaltres>><br /><<nós>>
! class="roa-indicative-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-indicative-left-rail" | <<ells>>/<<elles>><br /><<vostès>>
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="present">現在</span>
| {pres_1s}
| {pres_2s}
| {pres_3s}
| {pres_1p}
| {pres_2p}
| {pres_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="imperfet">不完了過去</span>
| {impf_1s}
| {impf_2s}
| {impf_3s}
| {impf_1p}
| {impf_2p}
| {impf_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="futur">未来</span>
| {fut_1s}
| {fut_2s}
| {fut_3s}
| {fut_1p}
| {fut_2p}
| {fut_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="passat">完了過去</span>
| {pret_1s}
| {pret_2s}
| {pret_3s}
| {pret_1p}
| {pret_2p}
| {pret_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="condicional">可能法</span>
| {cond_1s}
| {cond_2s}
| {cond_3s}
| {cond_1p}
| {cond_2p}
| {cond_3p}
|-
! class="roa-subjunctive-left-rail" rowspan="3" | <span title="subjuntiu">接続法</span>
! class="roa-subjunctive-left-rail" |
! class="roa-subjunctive-left-rail" | <<jo>>
! class="roa-subjunctive-left-rail" | <<tu>>
! class="roa-subjunctive-left-rail" | <<ell>>/<<ella>><br /><<vostè>>
! class="roa-subjunctive-left-rail" | <<nosaltres>><br /><<nós>>
! class="roa-subjunctive-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-subjunctive-left-rail" | <<ells>>/<<elles>><br /><<vostès>>
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | <span title="present">現在</span>
| {pres_sub_1s}
| {pres_sub_2s}
| {pres_sub_3s}
| {pres_sub_1p}
| {pres_sub_2p}
| {pres_sub_3p}
|-
! class="roa-subjunctive-left-rail" style="height:3em;" rowspan="1" | <span title="imperfet">過去</span>
| {impf_sub_1s}
| {impf_sub_2s}
| {impf_sub_3s}
| {impf_sub_1p}
| {impf_sub_2p}
| {impf_sub_3p}
|-
! rowspan="3" class="roa-imperative-left-rail" style="height:3em;" | <span title="imperatiu">命令法</span>
! class="roa-imperative-left-rail" |
! class="roa-imperative-left-rail" | —
! class="roa-imperative-left-rail" | <<tu>>
! class="roa-imperative-left-rail" | <<vostè>>
! class="roa-imperative-left-rail" | <<nosaltres>>
! class="roa-imperative-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-imperative-left-rail" | <<vostès>>
|-
! class="roa-imperative-left-rail" style="height:3em;" | <span title="afirmatiu">-</span>
| —
| {imp_2s}
| {imp_3s}
| {imp_1p}
| {imp_2p}
| {imp_3p}
|-
! class="roa-imperative-left-rail" style="height:3em;" | <span title="negatiu">禁止</span> (<<no>>)
| —
| {neg_imp_2s}
| {neg_imp_3s}
| {neg_imp_1p}
| {neg_imp_2p}
| {neg_imp_3p}
|{\cl}{notes_clause}</div></div>]=]
local function make_table(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
forms.title = link_term(alternant_multiword_spec.lemmas[1].form, nil, "term")
local ann_parts = {}
if alternant_multiword_spec.annotation ~= "" then
table.insert(ann_parts, alternant_multiword_spec.annotation)
end
if alternant_multiword_spec.args.titlenote then
table.insert(ann_parts, alternant_multiword_spec.args.titlenote)
end
local annotation = table.concat(ann_parts, ", ")
if annotation ~= "" then
forms.title = forms.title .. " (" .. annotation .. ")"
end
forms.description = ""
-- Format the table.
forms.footnote = alternant_multiword_spec.footnote_basic
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
local table_with_pronouns = rsub(basic_table, "<<([^<>|]-)|([^<>|]-)>>", link_term)
local table_with_pronouns = rsub(table_with_pronouns, "<<(.-)>>", link_term)
return require("Module:TemplateStyles")("Module:roa-verb/style.css") ..
m_string_utilities.format(table_with_pronouns, forms)
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head)
local PAGENAME = mw.loadData("Module:headword/data").pagename
local function in_template_space()
return mw.title.getCurrentTitle().nsText == "テンプレート"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the
-- current page title or the value of |pagename=; but not when called from {{ca-verb form of}}, where the
-- page title is a non-lemma form. Note that the verb spec may omit the infinitive; e.g. it may be "<i-e>".
-- For this reason, we use the value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "ca-verb form of" and args.pagename or PAGENAME
local head = headword_head or pagename
local arg1 = args[1]
if not arg1 then
if (pagename == "ca-conj" or pagename == "ca-verb" or pagename == "ca-verb form of") and in_template_space() then
arg1 = "amar<>"
else
arg1 = "<>"
end
end
-- When called from {{ca-verb form of}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "ca-verb form of" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "ca-verb form of" and in_template_space() then
verb_form_of_form = "ami"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local refl_clitic_verb, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(refl_clitic_verb, "[^%[]", "")
local right_brackets = rsub(refl_clitic_verb, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(refl_clitic_verb) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
refl_clitic_verb, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = refl_clitic_verb .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local function split_bracketed_runs_into_words(bracketed_runs)
return put.split_alternating_runs(bracketed_runs, " ", "preserve splitchar")
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
-- Split words only on spaces, not on hyphens, because that messes up reflexive verb parsing.
split_bracketed_runs_into_words = split_bracketed_runs_into_words,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
normalize_all_lemmas(alternant_multiword_spec, head)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
slot_list = alternant_multiword_spec.all_verb_slots,
inflect_word_spec = conjugate_verb,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = iut.remove_redundant_links(form.form)
end
end
compute_categories_and_annotation(alternant_multiword_spec)
if args.json and source_template == "ca-conj" then
return require("Module:JSON").toJSON(alternant_multiword_spec.forms)
end
return alternant_multiword_spec
end
-- Entry point for {{ca-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent().args
local params = {
[1] = {},
["titlenote"] = {},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
}
local args = require("Module:parameters").process(parent_args, params)
local alternant_multiword_spec = export.do_generate_forms(args, "ca-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) ..
require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang, nil, nil, force_cat)
end
return export
d0xf7r28hku8j8avdtwml2ofc5zf8ie
2313409
2313408
2026-08-09T09:27:53Z
Kuroco2k
84207
2313409
Scribunto
text/plain
--[=[
This module implements {{ca-conj}} and provides the underlying conjugation functions for {{ca-verb}}
(whose actual formatting is done in [[Module:ca-headword]]).
Authorship: Ben Wing <benwing2>
]=]
local export = {}
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "pres_1s" (present indicative first-person singular), "pres_sub_2s" (present
subjunctive second-person singular) "impf_sub_3p" (imperfect subjunctive third-person plural).
Each slot is filled with zero or more forms.
-- "form" = The conjugated Catalan form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Catalan term. For Catalan, always the infinitive.
]=]
--[=[
FIXME:
--]=]
local lang = require("Module:languages").getByCode("ca")
local m_string_utilities = require("Module:string utilities")
local m_links = require("Module:links")
local m_table = require("Module:table")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local com = require("Module:ca-common")
local force_cat = false -- set to true for debugging
local check_for_red_links = false -- set to false for debugging
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local rsubn = mw.ustring.gsub
local rsub = com.rsub
local u = mw.ustring.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
-- version of rsubn() that returns a 2nd argument boolean indicating whether a substitution was made.
local function rsubb(term, foo, bar)
local retval, nsubs = rsubn(term, foo, bar)
return retval, nsubs > 0
end
local function link_term(term, display, face)
return m_links.full_link({ lang = lang, term = term, alt = display }, face)
end
local front_vowel = "eèéiíï"
local front_vowel_c = "[" .. front_vowel .. "]"
local V = com.V -- vowel regex class
local C = com.C -- consonant regex class
-- IS_USER_STEM_OVERRIDE is prepended to user-supplied stem overrides to prevent `base.prefix` from being prepended.
-- IS_USER_FORM_OVERRIDE is similar but also prevents final devoicing (cf. Balearic pres_1s 'trob' of [[trobar]]).
-- Don't use 0xFFF0 in case we call a [[Module:parse-utilities]] function that uses it temporarily.
local IS_USER_STEM_OVERRIDE = u(0xFFF1)
local IS_USER_FORM_OVERRIDE = u(0xFFF2)
--[=[
Irregular verbs:
-ldre/-ndre verbs:
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
caldre - cal [calent] calia caldrà calgué calgui - calgut,-
coldre colc col colem colia coldré colguí colgui colguem colt,colta
doldre dolc dol dolem dolia doldré dolguí dolgui dolguem dolgut,dolguda
moldre molc mol molem molia moldré molguí molgui molguem molt,molta
oldre olc ol olem olia oldré olguí olgui olguem olgut,olguda
-soldre -solc -sol -solem -solia -soldré -solguí -solgui -solguem -solt,-solta
(absoldre, dissoldre, resoldre)
toldre tolc tol tolem tolia toldré tolguí tolgui tolguem tolt,tolta
romandre romanc roman romanem romania romandré romanguí romangui romanguem romàs,romasa,romasos
encendre encenc encén encenem encenia encendré encenguí encengui encenguem encès,encesa,encesos
fendre fenc fen/-fèn fenem fenia fendré fenguí fengui fenguem fes/-fès,fesa,fesos
(defendre, ofendre)
-pendre -depenc -pèn -penem -penia -pendré -penguí -pengui -penguem -pès,-pesa,-pesos
(dependre,despendre,expendre,suspendre)
prendre prenc pren/-prèn prenem prenia prendré prenguí prengui prenguem pres/-près,presa,presos
(aprendre, comprendre, desprendre, emprendre, reprendre, sorprendre)
-tendre -tenc -tén -tenem -tenia -tendré -tenguí -tengui -tenguem -tès,-tesa,-tesos
(pres2s: atens, pres3p: atenen)
(atendre, contendre, distendre, entendre, estendre, pretendre)
vendre venc ven venem venia vendré venguí vengui venguem venut,venuda
(malvendre, revendre)
fondre fonc fon fonem fonia fondré fonguí fongui fonguem fos/-fós,fosa,fosos
(confondre, difondre, infondre, refondre)
enfondre enfonc enfon enfonem enfonia enfondré enfonguí enfongui enfonguem enfús,enfusa,enfusos
pondre ponc pon ponem ponia pondré ponguí pongui ponguem post,posta,postos
(compondre, correspondre, descompondre, respondre)
tondre tonc ton tonem tonia tondré tonguí tongui tonguem tos,tosa,tosos
cerndre cerno cern cernem cernia cerndré cerní cerni cernem cernut,cernuda
-ler verbs (mostly like -ldre verbs):
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
caler (var. of caldre)
doler (var. of doldre)
soler solc sol solem solia soldré solguí solgui solguem solgut,solguda
valer/valdre valc val valem valia valdré valguí valgui valguem valgut,valguda
(prevaler, equivaler)
other -dre/-tre verbs (regular except sometimes pp):
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
batre bato bat batem batia batré batí bati batem batut,batuda
-metre -meto -met -metem -metia -metré -metí -meti -metem -mès,-mesa,-mesos
(ad-, co-, compro-, e-, entremetre's, mal-, o-, per-, pro-, read-, re-, retrans-, sot-, tra-, trans-)
perdre perdo perd perdem perdia perdré perdí perdi perdem perdut,perduda
-ure verbs
infinitive pres1s pres3s pres1p impf1s impf1p fut1s pret1s sub1s sub1p pp
caure caic cau caiem queia quèiem cauré caiguí caigui caiguem caigut,caiguda
(decaure, recaure)
plaure plac plau plaem plaïa plaíem plauré plaguí plagui plaguem plagut,plaguda
(complaure)
raure rac rau raem raïa raíem rauré raguí ragui raguem ragut,raguda
beure bec beu bevem bevia bevíem beuré beguí begui beguem begut,beguda
(embeure)
creure crec creu creiem creia crèiem creuré creguí cregui creguem cregut,creguda
deure dec deu devem devia devíem deuré deguí degui deguem degut,deguda
jeure jec jeu jaiem jeia jèiem jauré jaguí jegui jaguem jagut,jaguda
(ajeure)
lleure - lleu [-] llevia - lleurà llegué llegui - llegut,-
seure sec seu seiem seia sèiem seuré seguí segui seguem segut,seguda
(asseure)
treure trec treu traiem treia trèiem trauré traguí tregui traguem tret,treta
(abstreure, atreure, contreure, distreure, extreure, retreure, sostreure)
veure veig veu veiem veia vèiem veuré viu,veieres/veres, vegi vegem vist,vista,vists/vistos
(entreveure, preveure, reveure) veié/veu,veiérem/vérem
riure ric riu riem reia rèiem riuré riguí rigui riguem rigut,riguda
(somriure)
(e)scriure escric escriu escrivim escrivia escrivíem escriuré escriví/escriguí escrigui escriguem escrit,escrita
(circumscriure, descriure, inscriure, prescriure, proscriure, subscriure, transcriure)
viure visc viu vivim vivia vivíem viuré visquí visqui visquem viscut,viscuda
(conviure, sobreviure)
cloure cloc clou cloem cloïa cloíem clouré cloguí clogui cloguem clos,closa,closos
(concloure, descloure, encloure, excloure, incloure, recloure)
encloure encloc enclou encloem encloïa encloíem enclouré encloguí enclogui encloguem enclòs,enclosa,enclosos
coure coc cou coem coïa coíem couré coguí cogui coguem cuit/cogut,cuita/coguda
moure moc mou movem movia movíem mouré moguí mogui moguem mogut,moguda
(promoure)
noure noc nou noem noïa noíem nouré noguí nogui noguem nogut,noguda
ploure - plou [plovent] plovia - plourà plogué plogui - plogut,ploguda
-nyer verbs (regular except pp)
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
atènyer atenyo ateny atenyem atenyia atenyeré atenyí atenyi atenyem atès,atesa,atesos
empènyer empenyo empeny empenyem empenyia empenyeré empenyí empenyi empenyem empès,empesa,empesos
estrènyer estrenyo estreny estrenyem estrenyia estrenyeré estrenyí estrenyi estrenyem estret,estreta
estrènyer
(constrènyer,restrènyer)
fènyer fenyo feny fenyem fenyia fenyeré fenyí/fenguí fenyi fenyem fenyut/fengut,fenyuda/fenguda
pertànyer pertanyo pertany pertanyem pertanyia pertanyeré pertanyí/pertanguí pertanyi pertanyem pertanyut/pertangut,pertanyuda/pertanguda
plànyer planyo plany planyem planyia planyeré planyí/planguí planyi planyem plangut/planyut,planguda/planyuda
-xer verbs (NOTE: pres2s in -xes)
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
créixer creixo creix creixem creixia creixeré creixí/cresquí creixi creixem crescut,crescuda
(acréixer,decréixer)
conèixer conec coneix coneixem coneixia coneixeré coneguí conegui coneguem conegut,coneguda
(desconèixer,reconèixer)
merèixer mereixo mereix mereixem mereixia mereixeré mereixí/meresquí mereixi mereixem merescut,merescuda
néixer/ neixo/ neix/ naixem naixia naixeré naixí/nasquí neixi/ naixem/nasquem nascut,nascuda
nàixer naixo naix naixi
(renéixer)
parèixer parec pareix pareixem pareixia pareixeré pareguí paregui pareguem paregut,pareguda
(aparèixer,comparèixer,desaparèixer,reaparèixer)
péixer peixo peix paixem paixia paixeré paixí peixi paixem pascut,pascuda
misc. -er verbs
infinitive pres1s pres3s pres1p impf1s impf1p fut1s pret1s sub1s sub1p pp
córrer corro corre correm corria corríem correré correguí corri correm corregut,correguda
fúmer fumo fum fumem fumia fumíem fumeré fumí fumi fumem fumut,fumuda
prémer premo prem premem premia premíem premeré premí premi premem premut,premuda
(es-, re-)
témer temo tem temem temia temíem temeré temí temi temem temut,temuda
trémer [regular]
tòrcer torço torç torcem torcia torcíem torceré torcí torci torcem torçut,torçuda
(des-) [pres2s torces]
vèncer venço venç vencem vencia vencíem venceré vencí venci vencem vençut,vençuda
(con-, re-) [pres2s vences]
cabre/caber cabo cap cabem cabia cabíem cabré cabí càpiga capiguem cabut,cabuda
[sub2s càpigues]
haver he/haig ha havem/hem havia havíem hauré haguí hagi hàgim/haguem hagut,haguda
[noimp] [cond1s hauria/haguera; impsub2s haguessis/haguesses]
poder puc pot podem podia podíem podré poguí pugui puguem pogut,poguda
saber sé sap sabem sabia sabíem sabré sabí sàpiga sapiguem sabut,sabuda
[imp2s sàpigues, imp2p sapigueu]
voler vull vol volem volia volíem voldré volguí vulgui vulguem volgut,volguda
ser/ésser soc és som era érem seré fui sigui siguem estat/sigut,estada/siguda
[ger sent/essent] [cond1s seria/fora]
[pres: soc,ets,éts,som,sou,són; pret: fui,fores,fou,fórem,fóreu,foren; impsub: fos,fossis,fos,fóssim,fóssiu,fossin]
[imp: sigues,sigueu]
fer faig fa fem feia fèiem faré fiu faci fem fet,feta
[pres3p fan]
[pret: fiu,feres,feu,férem,féreu,feren]
]=]
local all_persons_numbers = {
["1s"] = "1|s",
["2s"] = "2|s",
["3s"] = "3|s",
["1p"] = "1|p",
["2p"] = "2|p",
["3p"] = "3|p",
}
local person_number_list = {"1s", "2s", "3s", "1p", "2p", "3p"}
local imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
local neg_imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
proclitic_non_elided_person_number_to_reflexive_pronoun = {
["1s"] = "em ",
["2s"] = "et ",
["3s"] = "es ",
["1p"] = "ens ",
["2p"] = "us ",
["3p"] = "es ",
}
proclitic_elided_person_number_to_reflexive_pronoun = {
["1s"] = "m'",
["2s"] = "t'",
["3s"] = "s'",
["1p"] = "ens ",
["2p"] = "us ",
["3p"] = "s'",
}
enclitic_non_elided_person_number_to_reflexive_pronoun = {
["1s"] = "-me",
["2s"] = "-te",
["3s"] = "-se",
["1p"] = "-nos",
["2p"] = "-vos",
["3p"] = "-se",
}
enclitic_elided_person_number_to_reflexive_pronoun = {
["1s"] = "'m",
["2s"] = "'t",
["3s"] = "'s",
["1p"] = "'ns",
["2p"] = "-us",
["3p"] = "'s",
}
local indicator_flags = m_table.listToSet {
"no_pres_stressed",
"only3s", "only3sp", "only3p", "noimp",
"pp_inv", "irreg", "no_built_in",
}
-- Initialize all the slots for which we generate forms.
local function add_slots(alternant_multiword_spec)
-- "Basic" slots: All slots that go into the regular table (not the reflexive form-of table).
alternant_multiword_spec.verb_slots_basic = {
{"infinitive", "inf"},
{"infinitive_linked", "inf"},
{"gerund", "ger"},
{"pp_ms", "m|s|past|part"},
{"pp_fs", "f|s|past|part"},
{"pp_mp", "m|p|past|part"},
{"pp_fp", "f|p|past|part"},
}
-- Special slots used to handle non-reflexive parts of reflexive verbs in {{ca-verb form of}}. For example, for a
-- reflexive-only verb like [[arrepentirse]], we want to be able to use {{ca-verb form of}} on [[arrepinta]] (which
-- should mention that it is a part of 'me arrepinta', first-person singular present subjunctive, and
-- 'se arrepinta', third-person singular present subjunctive) or on [[arrepentimos]] (which should mention that it
-- is a part of 'arrepentímonos', first-person plural present indicative or preterite). Similarly, we want to use
-- {{ca-verb form of}} on [[arrepentindo]] (which should mention that it is a part of 'se ... arrepentindo',
-- syntactic variant of [[arrepentíndose]], which is the gerund of [[arrepentirse]]). To do this, we need to be
-- able to map non-reflexive parts like [[arrepinta]], [[arrepentimos]], [[arrepentindo]], etc. to their reflexive
-- equivalent(s), to the tag(s) of the equivalent(s), and, in the case of forms like [[arrepentindo]],
-- [[arrepentir]] and imperatives, to the separated syntactic variant of the verb+clitic combination. We do this by
-- creating slots for the non-reflexive part equivalent of each basic reflexive slot, and for the separated
-- syntactic-variant equivalent of each basic reflexive slot that is formed of verb+clitic. We use slots in this
-- way to deal with multiword lemmas. Note that we run into difficulties mapping between reflexive verbs,
-- non-reflexive part equivalents, and separated syntactic variants if a slot contains more than one form. To
-- handle this, if there are the same number of forms in two slots we're trying to match up, we assume the forms
-- match one-to-one; otherwise we don't match up the two slots (which means {{ca-verb form of}} won't work in this
-- case, but such a case is extremely rare and not worth worrying about). Alternatives that handle this "properly"
-- are significantly more complicated and require non-trivial modifications to [[Module:inflection utilities]].
local need_special_verb_form_of_slots = alternant_multiword_spec.source_template == "ca-verb form of" and
alternant_multiword_spec.refl
if need_special_verb_form_of_slots then
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {
{"infinitive_non_reflexive", "-"},
{"infinitive_variant", "-"},
{"gerund_non_reflexive", "-"},
{"gerund_variant", "-"},
}
else
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {}
end
-- Add entries for a slot with person/number variants.
-- `verb_slots` is the table to add to.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(verb_slots, slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local slot = slot_prefix .. "_" .. persnum
local accel = tag_suffix .. "|" .. persnum_tag
table.insert(verb_slots, {slot, accel})
end
end
-- Add a personal slot (i.e. a slot with person/number variants) to `verb_slots_basic`.
local function add_basic_personal_slot(slot_prefix, tag_suffix, person_number_list, no_special_verb_form_of_slot)
add_personal_slot(alternant_multiword_spec.verb_slots_basic, slot_prefix, tag_suffix, person_number_list)
-- Add special slots for handling non-reflexive parts of reflexive verbs in {{ca-verb form of}}.
-- See comment above in `need_special_verb_form_of_slots`.
if need_special_verb_form_of_slots and not no_special_verb_form_of_slot then
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local basic_slot = slot_prefix .. "_" .. persnum
local accel = tag_suffix .. "|" .. persnum_tag
table.insert(alternant_multiword_spec.verb_slots_reflexive_verb_form_of, {basic_slot .. "_non_reflexive", "-"})
end
end
end
add_basic_personal_slot("pres", "直説法|現在", person_number_list)
add_basic_personal_slot("impf", "直説法|不完全過去", person_number_list)
add_basic_personal_slot("pret", "直説法|完全過去", person_number_list)
add_basic_personal_slot("fut", "直説法|未来", person_number_list)
add_basic_personal_slot("cond", "可能法", person_number_list)
add_basic_personal_slot("pres_sub", "接続法|現在", person_number_list)
add_basic_personal_slot("impf_sub", "接続法|過去", person_number_list)
add_basic_personal_slot("imp", "命令法", imp_person_number_list)
-- Don't need special non-reflexive-part slots because the negative imperative is multiword, of which the
-- individual words are 'no' + subjunctive.
add_basic_personal_slot("neg_imp", "命令法|禁止", neg_imp_person_number_list, "no special verb form of")
-- Don't need special non-reflexive-part slots because we don't want [[arrependendo]] mapping to [[arrependendo-me]]
-- (only [[arrependendo-se]]) or [[arrepender]] mapping to [[arrepender-me]] (only [[arrepender-se]]).
add_basic_personal_slot("infinitive", "inf", person_number_list, "no special verb form of")
add_basic_personal_slot("gerund", "ger", person_number_list, "no special verb form of")
-- Generate the list of all slots.
alternant_multiword_spec.all_verb_slots = {}
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_basic) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_reflexive_verb_form_of) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
alternant_multiword_spec.verb_slots_basic_map = {}
for _, slotaccel in ipairs(alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
alternant_multiword_spec.verb_slots_basic_map[slot] = accel
end
end
local overridable_stems = {}
local function allow_multiple_values_for_override(separated_groups, data, is_form_override)
local retvals = {}
for _, separated_group in ipairs(separated_groups) do
local footnotes = data.fetch_footnotes(separated_group)
local form = separated_group[1]
-- Prepend marker to prevent prefixing with `base.prefix`, and (in the case of form overrides) prevent
-- final devoicing.
if is_form_override then
form = IS_USER_FORM_OVERRIDE .. form
else
form = IS_USER_STEM_OVERRIDE .. form
end
local retval = {form = form, footnotes = footnotes}
table.insert(retvals, retval)
end
return retvals
end
for _, overridable_stem in ipairs {
"stem",
"stressed_stem",
"unstressed_stem",
"pres_unstressed",
"pres_stressed",
"pres3s", -- overrides just pres_2s and pres_3s
-- Don't include pres1s, pres3p; use pres_1s etc. if you need to override just those forms
"impf1",
"impf2",
"pret",
"fut",
"cond",
"pres_sub_stressed",
"pres_sub_unstressed",
"impf_sub",
"pp",
"g_infix",
"eix_infix",
} do
-- Written so we can substitute a different validator; parallel code in [[Module:es-verb]] and [[Module:pt-verb]]
-- has simple_choice validators.
overridable_stems[overridable_stem] = allow_multiple_values_for_override
end
-- Useful as the value of the `match` property of a built-in verb. `main_verb_spec` is a Lua pattern that should match
-- the non-prefixed part of a verb, and `prefix_specs` is a list of Lua patterns that should match the prefixed part of
-- a verb. If a prefix spec is preceded by ^, it must match exactly at the beginning of the verb; otherwise, additional
-- prefixes (e.g. re-, des-) may precede. Return the prefix and main verb.
local function match_against_verbs(main_verb_spec, prefix_specs)
return function(verb)
for _, prefix_spec in ipairs(prefix_specs) do
if prefix_spec:find("^%^") then
-- must match exactly
prefix_spec = prefix_spec:gsub("^%^", "")
if prefix_spec == "" then
-- We can't use the second branch of the if-else statement because an empty () returns the current position
-- in rmatch().
local main_verb = rmatch(verb, "^(" .. main_verb_spec .. ")$")
if main_verb then
return "", main_verb
end
else
local prefix, main_verb = rmatch(verb, "^(" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
else
local prefix, main_verb = rmatch(verb, "^(.*" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
end
return nil
end
end
--[=[
Built-in (usually irregular) conjugations.
Each entry is processed in turn and consists of an object with two fields:
1. match=: Specifies the built-in verbs that match this object.
2. forms=: Specifies the built-in stems and forms for these verbs.
The value of match= is either a string beginning with "^" (match only the specified verb), a string not beginning
with "^" (match any verb ending in that string), or a function that is passed in the verb and should return the prefix
of the verb if it matches, otherwise nil. The function match_against_verbs() is provided to facilitate matching a set
of verbs with a common ending and specific prefixes (e.g. [[ter]] and [[ater]] but not [[abater]], etc.).
The value of forms= is a table specifying stems and individual override forms. Each key of the table names either a
stem (e.g. `pres_stressed`), a stem property (e.g. `g_infix`) or an individual override form (e.g. `pres_1s`).
Each value of a stem can either be a string (a single stem), a list of strings, or a list of objects of the form
{form = STEM, footnotes = {FOONOTES}}. Each value of an individual override should be of exactly the same form except
that the strings specify full forms rather than stems. The values of a stem property depend on the specific property
but are generally strings or booleans.
In order to understand how the stem specifications work, it's important to understand the phonetic modifications done
by combine_stem_ending(). In general, the complexities of predictable prefix, stem and ending modifications are all
handled in this function. In particular:
1. Spelling-based modifications (c/qu, ç/c, g/gu, j/g, gu/gü, qu/qü) occur automatically as appropriate for the ending.
2. If the ending begins with an asterisk, this is a signal to delete the accent on the last syllable of the stem, e.g.
veié -> veierem.
3. If ending begins with i, it may turn into í or ï after an unstressed vowel (in some but not all cases) to prevent the
two merging into a diphthong. See combine_stem_ending() for specifics.
The following stems are recognized [FIXME: This is not correct for Catalan, needs rewriting]:
-- pres_unstressed: The present indicative unstressed stem (1p, 2p). Also controls the imperative 2p
and gerund. Defaults to the infinitive stem (minus the ending -ar/-er/-ir/-or).
-- pres_stressed: The present indicative stressed stem (1s, 2s, 3s, 3p). Also controls the imperative 2s.
Default is empty if indicator `no_pres_stressed`, else a vowel alternation if such an indicator is given
(e.g. `ue`, `ì`), else the infinitive stem.
-- pres1: Special stem for 1s present indicative. Normally, do not set this explicitly. If you need to specify an
irregular 1s present indicative, use the form override pres_1s= to specify the entire form. Defaults to
pres_stressed.
-- pres_sub_unstressed: The present subjunctive unstressed stem (1p, 2p). Defaults to the infinitive stem.
-- pres_sub_stressed: The present subjunctive stressed stem (1s, 2s, 3s, 1p). Defaults to pres1.
-- impf: The imperfect stem (not including the -av-/-i- stem suffix, which is determined by the conjugation). Defaults
to the infinitive stem.
-- pret: The full preterite stem missing only the endings (-ste, -mos, etc.), e.g. 'fige', 'fo'. Only used for verbs
with irregular preterites (pret_conj == "irreg") such as [[facer]], [[poder]], [[traer]], etc. Defaults to
`pret_base` + the conjugation vowel.
-- fut: The future stem. Defaults to the infinitive stem + the conjugation vowel.
-- cond: The conditional stem. Defaults to `fut`.
-- impf_sub: The imperfect subjunctive stem. Defaults to `pret`.
-- pp: The masculine singular past participle. Default is based on the verb conjugation: infinitive stem + '-ado' for
-ar verbs, otherwise infinitive stem + '-ido'.
-- pp_inv: `true` if the past participle exists only in the masculine singular.
]=]
local built_in_conjugations = {
--------------------------------------------------------------------------------------------
-- -ar --
--------------------------------------------------------------------------------------------
-- Orthographic consonant alternations in endings are handled automatically in combine_stem_ending().
{
-- [[aguar]]:
-- pres agúo, agúes, agúa, agüem, agüeu, agúen
-- pres_sub aguï, aguïs, aguï, agüem, agüeu, aguïn
-- contrast a more typical verb in -guar, [[enaiguar]]:
-- pres enaiguo, enaigües, enaigua, enaigüem, enaigüeu, enaigüen
-- pres_sub enaigüi, enaigüis, enaigüi, enaigüem, enaigüeu, enaigüin
match = "^aguar",
forms = {
pres_stressed = "agú",
pres_sub_stressed = "aguï",
irreg = true,
}
},
{
-- [[anar]] (full verb); highly irregular
match = "^anar",
var = "full",
forms = {
fut = "anir",
pres_1s = "vaj", -- will be converted to 'vaig'; 'vaig' gets converted to 'vaic'
pres_2s = "vas",
pres_3s = "va",
pres_3p = "van",
pres_sub_stressed = "vagi",
imp_2s = "ves",
irreg = true,
}
},
{
-- [[anar]] (auxiliary); highly irregular
match = "^anar",
var = "aux",
forms = {
pres_1s = "vaj", -- will be converted to 'vaig'; 'vaig' gets converted to 'vaic'
pres_2s = {"vas", "vares"},
pres_3s = "va",
pres_1p = {"vam", "vàrem"},
pres_2p = {"vau", "vàreu"},
pres_3p = {"van", "varen"},
pres_sub_stressed = "vagi",
pres_sub_unstressed = "vàgi",
impf1 = {},
impf2 = {},
fut = {},
pret = {},
pp = {},
gerund = {},
noimp = true,
irreg = true,
}
},
{
-- [[dar]]
match = "^dar",
forms = {
pres_1s = {form = "do", footnotes = {"[obsolete]"}},
pres_2s = {form = "das", footnotes = {"[obsolete]"}},
pres_3s = {form = "da", footnotes = {"[obsolete]"}},
pres_3p = {form = "dan", footnotes = {"[obsolete]"}},
pres_sub_1s = {form = "de", footnotes = {"[obsolete]"}},
pres_sub_2s = {form = "des", footnotes = {"[obsolete]"}},
pres_sub_3s = {form = "de", footnotes = {"[obsolete]"}},
pres_sub_3p = {form = "den", footnotes = {"[obsolete]"}},
pret_1s = "di", -- regular except for lack of accent
pret_3s = "da", -- regular except for lack of accent
impf_sub_1s = "des", -- regular except for lack of accent
impf_sub_3s = "des", -- regular except for lack of accent
irreg = true,
}
},
{
-- [[estar]]; highly irregular
match = "^estar",
forms = {
pres_2s = "estàs",
pres_3s = "està",
pres_3p = "estan",
g_infix = "estig",
imp_2s = "estigues",
imp_2p = "estigueu",
pp = "estad",
}
},
--------------------------------------------------------------------------------------------
-- -er/-re --
--------------------------------------------------------------------------------------------
-- Regular verbs not needing entries here:
--
-- [[rebre]], [[concebre]], [[decebre]], [[percebre]]
-- [[rompre]]
-- [[fúmer]], [[prémer]], [[témer]], [[trémer]]
-- [[perdre]], [[batre]], [[botre]], [[fotre]], [[retre]]
-- [[tòrcer]], [[vèncer]]
-- etc.
------------------------------------------- -ldre/-ler/-lre --------------------------------------
{
-- [[caldre]], [[doldre]], [[condoldre's]], [[oldre]]
match = match_against_verbs("ldre", {"ca", "do", "^o"}),
forms = {
-- g_infix implies irreg = true
-- g_infix adds -g to pres_1s, sub, pret and pp stems; combine_stem_ending() changes final -g to -c
g_infix = "+",
}
},
{
-- [[caler]]
match = "caler",
like = "caldre",
},
{
-- [[doler]] and compounds
match = "doler",
like = "doldre",
},
{
-- [[dolre]]
match = "dolre",
forms = {
-- see above for g_infix effects
g_infix = "+",
}
},
{
-- [[valer]], [[equivaler]], [[prevaler]], [[sobrevaler]]
match = "valer",
forms = {
-- see above for g_infix effects
fut = "valdr",
g_infix = "+",
}
},
{
-- [[valdre]] and compounds
match = "valdre",
like = "valer",
},
{
-- [[soler]]
match = "^soler", -- this must precede -oldre rule below for alt form [[soldre]]
forms = {
-- see above for g_infix effects
fut = {},
pret = {},
impf_sub = "solgué", -- regular, but we disabled the preterite, which would normally disable impf_sub too
g_infix = "+",
pp = {},
noimp = true,
}
},
{
-- [[soldre]]
match = "^soldre", -- this must precede -oldre rule below
like = "soler",
},
{
-- [[coldre]], [[moldre]], [[absoldre]], [[dissoldre]], [[resoldre]], [[toldre]]
match = "oldre", -- this must follow [[doldre]]/[[oldre]] rule above
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "olt",
}
},
{
-- [[voler]], [[malvoler]]
match = "voler",
forms = {
fut = "voldr",
pres_1s = "vull",
pres_sub_stressed = "vulgui",
pres_sub_unstressed = "vulgue",
g_infix = "+",
imp_2s = "vulgues",
imp_2p = "vulgueu",
}
},
--------------------------------------------- -ndre ----------------------------------------
{
-- [[romandre]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("mandre", {"^ro"}),
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "màs#",
}
},
{
-- [[encendre]], [[atendre]], [[contendre]], [[desentendre's]], [[distendre]], [[entendre]], [[estendre]],
-- [[pretendre]]
match = match_against_verbs("endre", {"enc", "t"}),
forms = {
pres_3s = "én#", -- remove final accent without prefix with vowel; also removed when adding a suffix
-- see above for g_infix effects
g_infix = "+",
pp = "ès#", -- see above for effect of final #
}
},
{
-- [[vendre]], [[malvendre]], [[revendre]]
match = "vendre",
forms = {
pres_3s = "vèn#", -- see above for effect of final #
-- see above for g_infix effects
g_infix = "+",
pp = "venud", -- g_infix would normally make it vengud
}
},
{
-- [[fendre]], [[defendre]], [[ofendre]], [[dependre]], [[despendre]], [[expendre]], [[suspendre]], [[prendre]],
-- [[aprendre]], [[comprendre]], [[desprendre]], [[emprendre]], [[reprendre]], [[sorprendre]]
match = "endre", -- this must follow previous -endre rules above
forms = {
pres_3s = "èn#", -- see above for effect of final #
-- see above for g_infix effects
g_infix = "+",
pp = "ès#", -- see above for effect of final #
}
},
{
-- [[enfondre]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("fondre", {"^en"}),
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "fús#",
}
},
{
-- [[pondre]], [[compondre]], [[correspondre]], [[descompondre]], [[despondre's]], [[respondre]]
match = "pondre",
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "post",
}
},
{
-- [[fondre]], [[confondre]], [[difondre]], [[infondre]], [[refondre]], [[tondre]]
match = "ondre", -- this must follow previous -ondre rules above
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "ós#", -- see above for effect of final #
}
},
--------------------------------------------- -nyer ----------------------------------------
{
-- [[atènyer]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("tènyer", {"^a"}),
forms = {
pp = "tès#",
irreg = true,
}
},
{
-- [[empènyer]], [[espènyer]]
match = match_against_verbs("pènyer", {"^em", "^es"}),
forms = {
pp = "pès#",
irreg = true,
}
},
{
-- [[estrènyer]], [[constrènyer]], [[destrènyer]], [[restrènyer]]
match = match_against_verbs("strènyer", {"^e", "con", "^de", "^re"}),
forms = {
pp = "stret",
irreg = true,
}
},
{
-- [[fènyer]]
match = "fènyer",
forms = {
pp = {"fengud", "fenyud"},
irreg = true,
}
},
{
-- [[júnyer]]
match = "júnyer",
like = "junyir",
},
{
-- [[plànyer]], [[complànyer]], [[pertànyer]]
match = match_against_verbs("ànyer", {"pl", "pert"}),
forms = {
pp = {"angud", "anyud"},
irreg = true,
}
},
--------------------------------------------- -aure ----------------------------------------
{
-- [[caure]], [[decaure]], [[recaure]]
match = "caure",
forms = {
-- stem ending in -ai and imperfect in -ia causes special stressed imperfect logic to take effect; we get
-- impf1s queia, impf1p quèiem (preceding vowel changed to è and attached to initial consonant using
-- combine_stem_ending(), which changes c- to qu-)
stem = "caie", -- i dropped by g_infix before u
-- g_infix implies irreg = true
-- g_infix adds -g to pres_1s, sub, pret and pp stems; combine_stem_ending() changes final -g to -c
-- g_infix sets pres_stressed to end in -u, removing a preceding -i or -v
g_infix = "+",
}
},
{
-- [[plaure]], [[complaure]]
match = "plaure",
forms = {
stem = "plae", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
}
},
{
-- [[raure]]
match = "^raure",
forms = {
stem = "rae", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = {"ragud", "ras"},
}
},
--------------------------------------------- -eure ----------------------------------------
{
-- [[beure]], [[embeure]], [[deure]], [[lleure]]
match = match_against_verbs("eure", {"b", "d", "ll"}),
forms = {
stem = "eve", -- v dropped by g_infix before g and u
g_infix = "+",
}
},
{
-- [[creure]], [[seure]], [[asseure]]
match = match_against_verbs("eure", {"cr", "s"}),
forms = {
stem = "ee",
pres_unstressed = "eie", -- affects pres_1p, pres_2p, gerund, imperfect (see [[caure]])
g_infix = "+",
}
},
{
-- [[jeure]], [[ajeure]]
match = "jeure",
forms = {
fut = "jaur", -- affects future and cond
stressed_stem = "jee", -- affects stressed forms, which get g added by g_infix by added except for
-- pres_stressed, which gets u added (controls pres_3s, pres_2s, pres_3p)
unstressed_stem = "jae", -- affects unstressed_stem, which get g added by g_infix
pres_stressed = {"jeu", "jau"},
pres_unstressed = "jaie", -- affects pres_1p, pres_2p, gerund, imperfect (see [[caure]])
pres_1s = {"jec", "jac"},
impf1 = "jei", -- otherwise we'd get impf_1s '#geia' etc.
impf2 = "jèi",
g_infix = "+",
}
},
{
match = "jaure",
like = "jeure",
},
{
-- [[treure]], [[abstreure]], [[atreure]], [[bestreure]], [[contreure]], [[detreure]], [[distreure]],
-- [[extreure]], [[retreure], [[retrotreure]], [[sostreure]]
match = "treure",
forms = {
-- like [[jeure]] except for irregular pp
fut = "traur",
stressed_stem = "tree",
unstressed_stem = "trae",
pres_stressed = {"treu", "trau"},
pres_unstressed = "traie",
pres_1s = {"trec", "trac"},
g_infix = "+",
pp = "tret",
}
},
{
match = "traure",
like = "treure",
},
{
-- [[veure]], [[entreveure]], [[preveure]], [[reveure]]
match = "veure",
forms = {
stem = "veie",
-- impf1s veia, impf1p vèiem (preceding vowel changed to è)
pres_stressed = "veu",
pres_1s = "vej", -- will be converted to 'veig'; 'veig' gets converted to 'veic'
pres_sub_stressed = "vegi",
pres_sub_unstressed = "vege",
pret = {"veié", "vé"},
pret_1s = "viu",
pret_3s = {"veié", "veu"},
impf_sub = "veié",
pp = "vist",
imp_2s = "veges",
imp_2p = {"vegeu", "veieu"},
irreg = true,
}
},
--------------------------------------------- -iure ----------------------------------------
{
-- [[escriure]], [[circumscriure]], [[descriure]], [[inscriure]], [[prescriure]], [[proscriure]],
-- [[subscriure]], [[transcriure]]
match = "scriure",
forms = {
stem = "scrivi", -- v dropped by g_infix before g and u; pres_1p/pres_2p have -ir endings
g_infix = "+",
pret = {"scriví", "scrigué"},
pp = "scrit",
}
},
{
-- [[riure]], [[somriure]]
match = "riure", -- must follow rule for 'scriure'
forms = {
stem = "rie",
-- impf1s reia, impf1p rèiem (preceding vowel changed to è)
g_infix = "+",
}
},
{
-- [[viure]], [[conviure]], [[desviure's]], [[sobreviure]]
match = "viure",
forms = {
stem = "vivi", -- v dropped by g_infix before g and u; pres_1p/pres_2p have -ir endings
g_infix = "visc", -- applies to pres1s, sub, pret, pp
}
},
--------------------------------------------- -oure ----------------------------------------
{
-- [[cloure]], [[concloure]], [[descloure]], [[encloure]], [[excloure]], [[incloure]], [[recloure]]
match = "cloure",
forms = {
stem = "cloe", -- ï in impf1s cloïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = "clòs#", -- remove final accent without prefix with vowel; also removed when adding a suffix
}
},
{
-- [[coure]] "to cook"
match = "coure",
var = "cook",
forms = {
stem = "coe", -- ï in impf1s coïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = "cuit",
}
},
{
-- [[coure]] "to sting"
match = "coure",
var = "sting",
forms = {
stem = "coe", -- ï in impf1s coïa gets generated automatically by combine_stem_ending()
g_infix = "+",
-- pp regular 'cogud'
}
},
{
-- [[moure]], [[promoure]], [[remoure]], [[somoure]], [[ploure]]
match = match_against_verbs("oure", {"m", "pl"}),
forms = {
stem = "ove", -- v dropped by g_infix before g and u
g_infix = "+",
}
},
{
-- [[noure]]
match = "noure",
forms = {
stem = "noe", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
}
},
--------------------------------------------- -xer ----------------------------------------
{
-- [[conèixer]], [[desconèixer]], [[reconèixer]]
match = "conèixer",
forms = {
g_infix = "coneg",
}
},
{
-- [[créixer]], [[acréixer]], [[decréixer]], [[recréixer]], [[sobrecréixer]]
match = "créixer",
forms = {
pret = {"creixé", "cresqué"},
pres_sub_unstressed = {"creixe", "cresque"},
pp = "crescud",
irreg = true,
}
},
{
-- [[merèixer]], [[desmerèixer]], [[irèixer-se]]
match = match_against_verbs("rèixer", {"me", "^i"}),
forms = {
pret = {"reixé", "resqué"},
pres_sub_unstressed = {"reixe", "resque"},
pp = "rescud",
irreg = true,
}
},
{
-- [[néixer]]/[[nàixer]], [[renéixer]]/[[renàixer]], [[sobrenéixer]]/[[sobrenàixer]], [[péixer]]/[[pàixer]]
match = match_against_verbs("éixer", {"n", "p"}),
forms = {
stem = "aixe",
fut = "aixer",
pres_stressed = {"eix", "aix"},
pres_1s = "eixo",
pret = {"aixé", "asqué"},
pres_sub_stressed = "eixi",
pres_sub_unstressed = {"aixe", "asque"},
pp = "ascud",
irreg = true,
}
},
{
match = "àixer",
like = "éixer",
},
{
-- [[parèixer]], [[aparèixer]], [[comparèixer]], [[desaparèixer]], [[reaparèixer]]
match = "parèixer",
forms = {
g_infix = "pareg",
}
},
--------------------------------------------- misc ----------------------------------------
{
-- [[cabre]]
match = "cabre",
forms = {
pres_sub_stressed = "càpiga",
pres_sub_unstressed = "capigue",
irreg = true,
}
},
{
-- [[caber]]
match = "caber",
like = "cabre",
},
{
-- [[saber]]
match = "saber",
forms = {
fut = "sabr",
pres_1s = "sé",
pres_sub_stressed = "sàpiga",
pres_sub_unstressed = "sapigue",
imp_2s = "sàpiga",
imp_2p = "sapigueu",
irreg = true,
}
},
{
-- [[poder]]
match = "poder",
forms = {
fut = "podr",
pres_1s = "puc",
pres_sub_stressed = "pugui",
pres_sub_unstressed = "pugue",
g_infix = "pog",
imp_2s = "pugues",
imp_2p = "pugueu",
irreg = true,
}
},
{
-- [[córrer]], [[acórrer]], [[concórrer]], [[decórrer]], [[descórrer]], [[discórrer]], [[encórrer]],
-- [[escórrer]], [[incórrer]], [[ocórrer]], [[recórrer]], [[socórrer]], [[transcórrer]]
match = "córrer",
forms = {
pret = "corregué",
pres_sub_unstressed = {"corre", "corregue"},
pp = "corregud",
irreg = true,
}
},
{
-- [[metre]], [[admetre]], [[arremetre]], [[cometre]], [[comprometre]], [[demetre]], [[descomprometre]],
-- [[emetre]], [[entremetre's]], [[escometre]], [[malmetre]], [[manumetre]], [[ometre]], [[permetre]],
-- [[prometre]], [[readmetre]], [[remetre]], [[retransmetre]], [[sotmetre]], [[trametre]], [[transmetre]]
match = "metre",
forms = {
pp = "mès#",
irreg = true,
}
},
--------------------------------------------------------------------------------------------
-- -ir --
--------------------------------------------------------------------------------------------
{
-- [[acudir]]; NOTE: Separation by meaning does not occur in DCC, DIEC, DEIEC, and DCVB says the distinction
-- is geographical and makes no mention of distinction by meaning. OTOH ca.wikt does say that the pronominal
-- sense "to occur" tends to conjugate non-inchoative.
match = "acudir",
forms = {
eix_infix = {{
form = "+",
footnotes = {'[especially in the sense "to turn up, to be present"]'}
}, {
form = "-",
footnotes = {'[especially in the pronominal sense "to occur"]'}
}}
}
},
-- [[afegir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[ajupir]]
-- [[buixir]]
-- [[bullir]], [[rebullir]]
-- [[cruixir]], [[escruixir]] (Routledge says this is inchoative but DIEC, DEIEC and DCC all disagree; note
-- pres_2s 'cruixes', handled automatically)
-- [[dormir]], [[adormir]]
-- [[funyir]]
-- [[grunyir]]
-- [[munyir]], [[esmunyir]]
-- [[pudir]]
-- [[punyir]]
-- [[retrunyir]]
-- [[sallir]]
-- [[sentir]], [[pressentir]], [[ressentir-se]]; not [[consentir]], with can be either non-inchoative or
-- inchoative, and not [[assentir]] or [[dissentir]], which are only inchoative
match = match_against_verbs("ir", {"ajup", "buix", "bull", "cruix", "dorm", "funy", "gruny", "muny", "pud",
"puny", "retruny", "^sent", "pressent", "^ressent", "sall"}),
forms = {
eix_infix = "-",
}
},
{
-- [[arrupir-se]];
-- [[brumir]];
-- [[brunzir]];
-- [[consumir]], [[resumir]], [[presumir]] (not [[sumir]], [[assumir]], [[subsumir]], which are regular)
-- [[mentir]], [[desmentir]]
-- [[percudir]]; cf. also [[acudir]], which to some extent has separate conjugations per meaning
-- [[consentir]]
match = match_against_verbs("ir", {"arrup", "brum", "brunz", "consum", "^resum", "presum", "ment", "percud",
"consent"}),
forms = {
eix_infix = {"+", "-"},
}
},
-- [[cenyir]]: -- non-inchoative or inchoative in Balearics, inchoative elsewhere
{
-- [[cobrir]], [[descobrir]], [[encobrir]], [[recobrir]], [[redescobrir]]
match = "cobrir",
forms = {
pp = "cobert",
irreg = true,
}
},
{
-- [[collir]], [[acollir]], [[escollir]], [[recollir]]
match = "collir",
forms = {
stressed_stem = "culli",
eix_infix = "-",
irreg = true,
}
},
{
-- [[complir]], [[acomplir]], [[incomplir]]
match = "complir",
forms = {
pp = {"complert", "complid"},
irreg = true,
}
},
{
-- [[cosir]], [[descosir]], [[recosir]]
match = "cosir",
forms = {
stressed_stem = "cusi",
pres_3s = "cús#",
eix_infix = "-",
irreg = true,
}
},
{
-- [[eixir]], [[deseixir-se]]; not [[teixir]] or [[entreteixir]], and not [[reeixir]] or [[sobreeixir]],
-- which have an ï in the stem-stressed forms
match = match_against_verbs("eixir", {"^", "des"}),
forms = {
stressed_stem = "ixi",
eix_infix = "-",
irreg = true,
}
},
{
-- [[reeixir]], [[sobreeixir]]
match = match_against_verbs("eixir", {"^re", "sobre"}),
forms = {
stressed_stem = "ïxi",
eix_infix = "-",
irreg = true,
}
},
-- [[engolir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[escopir]]
match = "escopir",
forms = {
stressed_stem = "escupi",
eix_infix = "-",
irreg = true,
}
},
{
-- [[establir]], [[preestablir]], [[restablir]]
match = "establir",
forms = {
pp = {"establert", "establid"},
irreg = true,
}
},
-- [[ferir]]: -- non-inchoative in Balearics, inchoative elsewhere
-- [[fregir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[fugir]], [[confugir]], [[defugir]], [[enfugir-se]]; pres sing ''fujo, fuges, fuig'' handled by
-- combine_stem_ending(); can't be handled by rule above that lists many non-inchoative verbs because the
-- prefix would be 'fug' and the front-back alternation code doesn't apply to prefixes.
match = "fugir",
forms = {
eix_infix = "-",
}
},
{
-- [[imprimir]], [[reimprimir]], [[sobreimprimir]]; not any other verbs in -primir; write it this way so
-- there's a prefix with a vowel to prevent against the accent in the pp from being removed while still
-- removing it in the feminine.
match = match_against_verbs("primir", {"im"}),
forms = {
pp = "près#",
irreg = true,
}
},
-- [[llegir]]: -- non-inchoative in Valencia and Minorca, inchoative elsewhere
{
-- [[lluir]]: regular inchoative in the figurative meaning "to display (something), to be showy" also in the
-- legal meaning "free from a pecuniary obligation, such as a land-based tax (emphyteusis)"; irregular in the
-- literal meaning "to shine"; use <no_built_in> to get regular conjugation. In the regular conjugation,
-- umlauts appear in the following forms: pres_1p/pres_sub_1p/imp_1p lluïm, pres_2p/pres_sub_2p/imp_2p lluïu,
-- impf_1s/impf_3s lluïa, impf_2s lluïes, impf_3p lluïen, pret_2s lluïres, pret_3p lluïren,
-- impf_sub_2s lluïssis, impf_sub_3p lluïssin, throughout the pp: lluït, lluïda, lluïts, lluïdes. IN the
-- irregular conjugation, umlauts appear in the same places as well as elsewhere in the present subjunctive:
-- pres_sub_1s/pres_sub_3s/imp_3s lluï, pres_sub_2s lluïs, pres_sub_3p/imp_3p lluïn. Notably, they do *NOT*
-- appear in the gerund lluint, the infinitive lluir, or anywhere in the future or conditional. Note that
-- verbs.cat [https://www.verbs.cat/en/conjugation/899-lluir.html] lists additional irregular forms pres_1s
-- lluu, and alternative impf_sub forms in -e- instead of -i- (lluïsses, lluíssem, lluísseu, lluïssen), but
-- these are nonstandard or dialectal per both Routledge and DEIEC.
match = "^lluir",
forms = {
eix_infix = "-",
pres3s = {"lluu", "llu"}, -- generates pres_2s, imp_2s
irreg = true,
}
},
{
-- [[entrelluir]] "to be half-seen", [[relluir]] "to shine", [[traslluir-se]] "to be translucent"; either
-- inchoative or non-inchoative, not distinguished by meaning; note, [[deslluir]] and [[enlluir]] are regular
-- inchoative verbs.
match = match_against_verbs("lluir", {"entre", "^re", "tras"}),
forms = {
eix_infix = {"+", "-"},
pres3s = {"llueix", "lluu", "llú"}, -- generates pres_2s, imp_2s; note, pres_2s will end in -es due to
-- combine_stem_ending()
irreg = true,
}
},
{
-- [[morir]], [[premorir]]; but not [[atemorir]]
match = match_against_verbs("morir", {"^", "pre"}),
forms = {
eix_infix = "-",
pp = "mort",
irreg = true,
}
},
{
-- [[obrir]], [[entreobrir]], [[reobrir]]; not [[cobrir]] and derivatives, not [[empobrir]], so we have to list
-- them individually
match = match_against_verbs("obrir", {"^", "entre", "^re"}),
forms = {
eix_infix = "-",
pp = "obert",
irreg = true,
}
},
{
-- [[oferir]]; but not [[proferir]]
match = "^oferir",
forms = {
pp = {"ofert", "oferid"},
irreg = true,
}
},
-- [[oir]], [[desoir]], [[entreoir]]: -- per Routledge, non-inchoative or inchoative normally but only
-- non-inchoative in Valencian; but all dictionaries disagree and say it is a regular inchoative-only verb.
-- It has the same umlauts as lluir (and [[corroir]], another regular inchoative verb).
{
-- [[omplir]], [[desomplir-se]], [[reomplir]]; not [[complir]] and derivatives, so we have to list them
-- individually
match = match_against_verbs("omplir", {"^", "des", "^re"}),
forms = {
eix_infix = "-",
pp = {"omplert", "omplid"},
irreg = true,
}
},
-- [[penedir-se]]: -- non-inchoative in Balearics, inchoative elsewhere
{
-- [[pruir]] "to itch": same umlauts as in [[lluir]].
match = "^pruir",
forms = {
eix_infix = "-",
pres3s = {"pruu", "pru"}, -- generates pres_2s, imp_2s
irreg = true,
}
},
{
-- [[reblir]]
match = "^reblir",
forms = {
pp = {"reblert", "reblid"},
irreg = true,
}
},
-- [[renyir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[sofrir]]
match = "^sofrir",
forms = {
pp = {"sofert", "sofrid"},
irreg = true,
}
},
{
-- [[sortir]], [[ressortir]], [[sobresortir]]; but not [[assortir]], which is regular inchoative
match = match_against_verbs("sortir", {"^", "^res", "sobre"}),
forms = {
stressed_stem = "surti",
eix_infix = "-",
irreg = true,
}
},
{
-- [[suplir]]
match = "^suplir",
forms = {
pp = {"suplert", "suplid"},
irreg = true,
}
},
-- [[teixir]], [[entreteixir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[tenir]] but not any compounds; highly irregular
match = "^tenir",
forms = {
fut = "tindr",
pres_stressed = "ten",
pres_3s = "té",
imp_2s = {"té", "ten", "tingues"},
imp_2p = {"teniu", "tingueu"},
g_infix = "ting",
}
},
{
-- [[abstenir-se]], [[atenir-se]], [[captenir-se]], [[cartenir]], [[contenir]], [[detenir]], [[entretenir]],
-- [[mantenir]], [[menystenir]], [[obtenir]], [[retenir]], [[sostenir]], [[viltenir]]; highly irregular
match = "tenir",
forms = {
fut = "tindr",
pres_stressed = "ten",
pres_3s = "té",
imp_2s = {"tén", "tingues"},
imp_2p = {"teniu", "tingueu"},
g_infix = "ting",
}
},
{
-- [[tindre]]: variant of [[tenir]]
match = "tindre",
like = "tenir",
},
-- [[tenyir]], [[destenyir]]: -- non-inchoative in Valencia, but [[retenyir]] inchoative or non-inchoative in
-- Valencia? (per Routledge); regular inchoative elsewhere
{
-- [[tossir]] "to cough"
match = "^tossir",
forms = {
stressed_stem = "tussi", -- pres_2s gets 'tusses'
pres_3s = "tus", -- note, pres_3s (a single form override) not pres3s (a stem override, which also affects
-- pres_2s; but imp_2s is physically copied from pres_3s, so imp_2s correctly gets 'tus')
eix_infix = "-",
irreg = true,
}
},
{
-- [[venir]] but not any compounds; highly irregular
match = "^venir",
forms = {
fut = "vindr",
pres_stressed = "ven",
pres_3s = "ve",
imp_2s = "vine",
g_infix = "ving",
}
},
{
-- compounds of [[venir]]: [[advenir]], [[avenir]], [[contravenir]], [[convenir]], [[desavenir-se]],
-- [[desconvenir]], [[entrevenir]], [[esdevenir]], [[intervenir]], [[obvenir]], [[pervenir]], [[prevenir]],
-- [[provenir]], [[reconvenir]], [[revenir]], [[sobrevenir]], [[subvenir]]; but not [[enjovenir]] or
-- [[rejovenir]]; highly irregular
match = match_against_verbs("venir", {"^ad", "^a", "contra", "con", "desa", "entre", "esde", "inter", "ob",
"per", "pre", "pro", "^re", "sobre", "sub"}),
forms = {
fut = "vindr",
pres_stressed = "ven",
pres_3s = "vé",
imp_2s = "vén",
g_infix = "ving",
}
},
{
-- [[vindre]]: variant of [[venir]]
match = "vindre",
like = "venir",
},
-- [[vestir]], [[desvestir]], [[revestir]], maybe [[transvestir]]: non-inchoative in Valencia, inchoative or
-- non-inchoative in the Balearics; regular inchoative elsewhere; but not [[envestir]] or [[investir]], which are
-- regular inchoative everywhere
{
-- [[fer]], [[contrafer]], [[desfer]], [[estrafer]], [[perfer]], [[refer]], [[satisfer]]; highly irregular
match = "fer",
forms = {
fut = "far",
pres_1s = "faj", -- will be converted to 'faig'; 'faig' gets converted to 'faic'
pres_2s = "fàs#",
pres_3s = "fà#",
pres_3p = "fan",
pres_unstressed = "fe",
impf1 = "fei",
impf2 = "fèi",
pres_sub_stressed = "faci",
pres_sub_unstressed = "fe",
pret = "fé",
pret_1s = "fiu",
pret_3s = "feu",
impf_sub_1s = "fés#", -- regular except for base form [[fes]], lacking an accent
impf_sub_3s = "fés#", -- same
imp_2s = "fés#",
pp = "fet",
irreg = true,
}
},
{
-- [[dir]], [[adir-se]], [[contradir]], [[desdir]], [[entredir]], [[interdir]], [[maldir]], [[predir]], [[redir]];
-- behaves like an -er/-re verb
match = match_against_verbs("dir", {"^", "^a", "contra", "des", "entre", "inter", "mal", "pre", "^re"}),
forms = {
stem = "die",
g_infix = "+",
imp_2s = "digues",
imp_2p = "digueu",
pp = "dit",
}
},
{
-- [[dur]], [[endur-se]]; behaves like an -er/-re verb
match = "dur",
forms = {
stem = "due",
g_infix = "+",
pres3s = {"duu", "du"}, -- generates pres_2s, imp_2s
impf1 = "dui",
impf2 = "dúi",
pp = "dut",
}
},
{
-- [[ser]]; highly irregular
match = "^ser",
forms = {
pres_1s = "soc",
pres_2s = "ets",
pres_3s = "és",
pres_1p = "som",
pres_2p = "sou",
pres_3p = "són",
impf1 = "er",
impf2 = "ér",
pres_sub_stressed = "sigui",
pres_sub_unstressed = "sigue",
pret = "fó",
pret_1s = "fui",
pret_3s = "fou",
impf_sub_1s = "fos", -- regular except for lack of accent
impf_sub_3s = "fos", -- same
cond = {"serí", "fór"},
imp_2s = "sigues",
imp_2p = "sigueu",
pp = {"estad", "sigud"},
gerund = {"sent", "essent"},
irreg = true,
}
},
{
-- [[ésser]]; variant of [[ser]]
match = "^ésser",
like = "ser",
},
{
-- [[haver]] as auxiliary; highly irregular
match = "^haver",
var = "aux",
forms = {
pres_1s = "he",
pres_2s = "has",
pres_3s = "ha",
pres_1p = "hem",
pres_2p = "heu",
pres_3p = "han",
fut = "haur",
cond = {"haurí", "haguér"},
pres_sub_stressed = "hagi",
pres_sub_unstressed = "hàgi",
noimp = true,
g_infix = "+",
}
},
{
-- [[haver]] as full verb; highly irregular
match = "^haver",
var = "full",
forms = {
pres_1s = {"hec", "hac"},
pres_stressed = {"heu", "hau"},
fut = "haur",
pres_sub_stressed = "hegui",
g_infix = "+",
}
},
{
-- [[heure]]; variant of full verb [[haver]]
match = "^heure",
like = "haver",
likevar = "full",
},
{
-- [[haure]]; variant of full verb [[haver]]
match = "^haure",
like = "haver",
likevar = "full",
},
}
local function skip_slot(base, slot, allow_overrides)
if not allow_overrides and (base.basic_overrides[slot] or
base.refl and base.basic_reflexive_only_overrides[slot]) then
-- Skip any slots for which there are overrides.
return true
end
if base.only3s and (slot:find("^pp_f") or slot:find("^pp_mp")) then
-- diluviar, atardecer, neviscar; impersonal verbs have only masc sing pp
return true
end
if not slot:find("[123]") then
-- Don't skip non-personal slots.
return false
end
if base.nofinite then
return true
end
if (base.only3s or base.only3sp or base.only3p) and (slot:find("^imp_") or slot:find("^neg_imp_")) then
return true
end
if base.only3s and not slot:find("3s") then
-- diluviar, atardecer, neviscar
return true
end
if base.only3sp and not slot:find("3[sp]") then
-- atañer, concernir
return true
end
if base.only3p and not slot:find("3p") then
-- [[caer cuatro gotas]], [[caer chuzos de punta]], [[entrarle los siete males]]
return true
end
return false
end
local function add_stem_ending(stem, ending)
if ending == "" then
return stem
end
if stem:find("#$") then -- remove final accent when adding a suffix
stem = com.remove_accents((stem:gsub("#$", "")), "final syllable only")
end
return stem .. ending
end
local function process_stem(stem, fn)
if stem:find("#$") then
local stem_no_pound_sign = stem:match("^(.*)#$")
return fn(stem_no_pound_sign) .. "#"
else
return fn(stem)
end
end
-- Add the `stem` to the `ending` and apply any phonetic modifications. `is_full_word` indicates that we're creating
-- a "full word" not a stem, and turns on devoicing of final consonants. `dont_include_prefix` is used when creating
-- stems and indicates not to prepend the prefix in `base.prefix` to the result. `is_pres_sub_stressed` is used when
-- creating the pres_sub_stressed stem, to correctly handle both [[desaiguar]] and [[argüir]], whose respective
-- interactions between ü and i/ï are very tricky.
--
-- WARNING: This function is written very carefully; changes to it can easily have unintended consequences.
local function combine_stem_ending(base, stem, ending, is_full_word, dont_include_prefix, is_pres_sub_stressed)
-- Include the prefix in the stem unless dont_include_prefix is given (used in construct_stems()), or the value of
-- `stem` comes from a user-specified stem or form override.
if not dont_include_prefix and not stem:find(IS_USER_STEM_OVERRIDE) and not stem:find(IS_USER_FORM_OVERRIDE) then
stem = base.prefix .. stem
end
-- A * at the beginning of the ending is a signal to remove a stressed accent from the stem. This may feed any of
-- the following rules.
if ending:find("^%*") then
ending = ending:gsub("^%*", "")
stem = com.remove_accents(stem, "final syllable only")
end
-- If ending begins with s and stem ends in a sibilant, we need an e in between; cf. pres_2s 'apareixes' of
-- [[aparèixer]], pres_2s 'torces' of [[tòrcer]], pres_2s 'fuges' of [[fugir]], pres_2s 'brunzes' of [[brunzir]].
-- This may feed the next rule.
if ending:find("^s") and rfind(stem, "[çjsxz]$") then
ending = "e" .. ending
end
-- By default, stems are in their "back" (standalone) form. Before a front vowel, convert the final consonant to
-- its "front" form so the pronunciation doesn't change.
if rfind(ending, "^" .. front_vowel_c) then
-- adequar -> adeqües
-- enaiguar -> enaigües
-- pegar -> pegues
-- arranjar -> arranges
-- marcar -> marques
-- abraçar -> abraces
stem = com.back_to_front(stem)
end
-- Ending beginning in -i after diphthong ending in V + i compresses the two i's into one (cf. pret_1s 'desmaí' and
-- pres_sub_1s 'desmaï' of [[desmaiar]]). This rule doesn't apply after pseudo-vowel u in gu/qu; cf. pret_1s 'guií'
-- of [[guiar]] and contrast pret_1s 'cruí' of [[cruiar]]. This may feed the next rule.
if rfind(ending, "^[iíï]") and rfind(stem, V .. "i$") and not rfind(stem, "[gq][uü]i$") then
stem = stem:gsub("i$", "")
end
-- If ending begins with i (not í), it must get a diaeresis after a true vowel (not gu/qu, cf. pres_1p 'delinquim'
-- of [[delinquir]], not '#delinquïm'; also not a diphthong ending in u, cf. pres_sub_1s 'apreui' of [[apreuar]]
-- not '#apreuï') to prevent the two merging into a diphthong. Note that ü -> u before ï, but to simplify things
-- we leave the double umlauts in place and remove the first one during postprocessing, in fix_double_umlauts().
-- Cf.:
-- * impf_1s 'raïa' of [[raure]];
-- * pres_sub_1s 'creï' of [[crear]];
-- * pres_sub_1s 'associï' of [[associar]];
-- * impf_1s 'cloïa' of [[cloure]];
-- * pres_1p 'lluïm' of [[lluir]];
-- * pres_1p 'arguïm' of [[argüir]].
if ending:find("^i") and rfind(stem, "[aeiouü]$") and not stem:find("[aeiogq]u$") and
-- Unstressed subjunctive endings of [[enaiguar]] remain without umlaut: enaigüi/enaigüis/enaigüin;
-- but stressed endings of [[argüir]] that begin with 'i' do get an umlaut: arguït, impf. arguïa, including
-- stressed subjunctive endings arguïm/arguïu. In both cases the ending is '-i' as part of the creation of
-- the respective stems. There seems no way of distinguishing the two cases other than with a special flag.
not (rfind(stem, "[gq]ü$") and ending == "i" and is_pres_sub_stressed) then
ending = ending:gsub("^i", "ï")
end
local retval = add_stem_ending(stem, ending)
if retval:find("#$") then -- remove final accent if no vowels in prefix
retval = retval:gsub("#$", "")
if not rfind(base.prefix, V) then
retval = com.remove_accents(retval, "final syllable only")
end
end
if is_full_word then
local saw_is_user_form_override
retval, saw_is_user_form_override = rsubb(retval, IS_USER_FORM_OVERRIDE, "")
retval = retval:gsub(IS_USER_STEM_OVERRIDE, "")
if not saw_is_user_form_override then
-- Devoice final voiced obstruent (cf. pres_2s 'caps', pres_3s 'cap' of [[cabre]]). But not after a
-- consonant (cf. pres_2s 'perds', pres_3s 'perd' of [[perdre]]), except for g -> c, which operates
-- even after a consonant (pres_1s 'resolc' of [[resoldre]], pres_1s 'tinc' of [[tenir]]).
retval = retval:gsub("g(s?)$", "c%1")
retval = rsub(retval, "(" .. V .. ")([bdj])(s?)$", function(before, voiced, after)
local devoice = {
b = "p",
d = "t",
j = "ig", -- pres_3s 'fuj' of [[fugir]] -> 'fuig'
}
return before .. devoice[voiced] .. after
end)
end
end
return retval
end
local function add3(base, slot, stems, endings, footnotes, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(base, stem, ending, "is full word")
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil, footnotes)
end
local function insert_form(base, slot, form)
if not skip_slot(base, slot) then
iut.insert_form(base.forms, slot, form)
end
end
local function insert_forms(base, slot, forms)
if not skip_slot(base, slot) then
iut.insert_forms(base.forms, slot, forms)
end
end
local function add_single_stem_tense(base, slot_pref, stems, s1, s2, s3, p1, p2, p3)
local function addit(slot, ending)
add3(base, slot_pref .. "_" .. slot, stems, ending)
end
addit("1s", s1)
addit("2s", s2)
addit("3s", s3)
addit("1p", p1)
addit("2p", p2)
addit("3p", p3)
end
local function map_general(stemforms, fn)
return iut.map_forms(iut.convert_to_general_list_form(stemforms), fn)
end
local function flatmap_general(stemforms, fn)
return iut.flatmap_forms(iut.convert_to_general_list_form(stemforms), fn)
end
-- Given a stem ending in a conjugation vowel -a/-e/-i/-ï, split into stem base and conjugation vowel, converting the
-- stem base to "back" form if the conjugation vowel is front (hence 'torce' of [[tòrcer]] splits into 'torç' and 'e',
-- and 'fugi' of [[fugir]] splits into 'fuj' and 'i').
local function split_conj_vowel(stem)
local stem_base, conj_vowel = rmatch(stem, "^(.*)([aeiï])$")
if not stem_base then
error(("Internal error: Stem '%s' doesn't end in conjugation vowel a/e/i"):format(stem))
end
if conj_vowel == "ï" then
-- To simplify handling of ï, convert to i. It will be converted back to ï as necessary in
-- combine_stem_ending().
conj_vowel = "i"
end
if rfind(conj_vowel, front_vowel_c) then
stem_base = com.front_to_back(stem_base)
end
return stem_base, conj_vowel
end
local function construct_stems(base)
base.output_stems = {}
local stems = base.output_stems
local bst = base.input_stems
-- YUCK, see combine_stem_ending() for the necessity of is_pres_sub_stressed.
local function combine(stem, ending, is_pres_sub_stressed)
return combine_stem_ending(base, stem, ending, false, "dont include prefix", is_pres_sub_stressed)
end
stems.irreg = bst.irreg or bst.g_infix
-- NOTE: Some stems end in a conjugation or similar vowel, specifically:
-- * `stem` (ends in conjugation vowel -a/-e/-i);
-- * `stressed_stem` (likewise);
-- * `unstressed_stem` (likewise);
-- * `pres_unstressed` (which assumes the form of the gerund minus the -nt; note that `pres_stressed` does *NOT*
-- end in a conjugation vowel, but assumes the stem form; the value of pres_3s will be derived by adding -a for
-- -ar verbs and otherwise adding an -e prop vowel when required, as in [[cobrir]], and otherwise adding no
-- vowel);
-- * `pres_sub_stressed` (which assumes the form of pres_sub_3s and hence usually ends in -i, occasionally -a);
-- * `pres_sub_unstressed` (which assumes the form of pres_sub_1p minus the -m, hence ends in -e or -i).
-- Save stem for use in add_categories_and_annotation() for determining the conjugation class.
stems.stem = bst.stem or base.stem
local eix_infix_stem
if base.conj_vowel == "i" then
-- Save eix_infix value for use in add_categories_and_annotation() for determining whether consonant
-- alternations exist.
stems.eix_infix = bst.eix_infix or bst.g_infix and "-" or "+"
eix_infix_stem = flatmap_general(stems.eix_infix, function(form)
if form == "+" then
return map_general(stems.stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, "eixe")
end)
elseif form == "-" then
return stems.stem
else
return form
end
end)
end
local stressed_stem = bst.stressed_stem or eix_infix_stem or stems.stem
local unstressed_stem = bst.unstressed_stem or stems.stem
-- Add the 'g' that is characteristic of g-infix verbs. We remove a stem-final v, e.g. [[beure]] with stem 'beve'
-- becomes 'beg'.
local function add_g(stemforms)
return map_general(stemforms, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
stem_base = stem_base:gsub("v$", "")
return combine(stem_base, "g")
end)
end
-- Add the 'u' of the pres_3s that is characteristic of g-infix verbs (and conjugation vowel 'e', later removed).
-- We remove a stem-final v, as well as i as part of a diphthong, e.g. [[beure]] with stem 'beve' becomes 'beue'
-- and [[veure]] with stem 'veie' becomes 'veue' (but [[riure]] with stem 'rie' becomes 'riue' not '#rue'). We
-- don't add -u after a consonant, e.g. [[doldre]] with stem 'dole' becomes 'dole' not '#dolue'.
local function add_u(stemforms)
return map_general(stemforms, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
if stem_base:find("v$") then
stem_base = stem_base:gsub("v$", "")
else
stem_base = rsub(stem_base, "(" .. V .. ")i$", "%1")
end
-- Add u after vowel but not after another u, so we get pres_3p 'duen' of [[dur]] not '#duuen'.
if rfind(stem_base, V .. "$") and not stem_base:find("u$") then
return combine(stem_base, "u")
else
return stem_base
end
end)
end
local stressed_g_infix, unstressed_g_infix, g_infix_pres_stressed
if bst.g_infix then
local function flatmap_g_infix(default)
return flatmap_general(bst.g_infix, function(form)
if form == "+" then
return default
else
return form
end
end)
end
stressed_g_infix = flatmap_g_infix(add_g(stressed_stem))
unstressed_g_infix = flatmap_g_infix(add_g(unstressed_stem))
g_infix_pres_stressed = add_u(stressed_stem)
end
stems.pres_unstressed = bst.pres_unstressed or unstressed_stem
stems.pres_stressed =
-- If no_pres_stressed given, pres_stressed stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
bst.pres_stressed or
g_infix_pres_stressed or
map_general(stressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return stem_base
end)
stems.pres1s =
-- If no_pres_stressed given, pres1s stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
stressed_g_infix or
map_general(stems.pres_stressed, function(form)
return combine(form, "o")
end)
stems.pres3s =
-- If no_pres_stressed given, pres3s stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
bst.pres3s or
map_general(stems.pres_stressed, function(form)
if base.conj_vowel == "a" then
return combine(form, "a")
elseif rfind(form, C .. "[lr]$") and not rfind(form, V .. "ll$") then
return combine(form, "e")
else
return form
end
end)
stems.pres3p =
-- If no_pres_stressed given, pres3p stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
map_general(stems.pres_stressed, function(form)
return combine(form, "en")
end)
local function compute_impf_stem(with_accent)
return map_general(stems.pres_unstressed, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
if conj_vowel == "a" then
return combine(stem_base, with_accent and "àv" or "av")
elseif stem_base:find("i#?$") then
form = form:gsub("i#?$", "")
return combine(rmatch(stem_base, "^(.-)" .. V .. "*$"), with_accent and "èi" or "ei")
else
return combine(stem_base, with_accent and "í" or "i") -- i -> ï after a vowel
end
end)
end
stems.impf1 = bst.impf1 or compute_impf_stem(false)
stems.impf2 = bst.impf2 or compute_impf_stem(true)
stems.pret = bst.pret or
unstressed_g_infix and map_general(unstressed_g_infix,
function(form) return combine(form, "é") end
) or
map_general(unstressed_stem, function(form)
local accent_conj_vowel = {
a = "à",
e = "é",
i = "í",
}
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, accent_conj_vowel[conj_vowel])
end)
stems.fut = bst.fut or base.inf_stem
stems.cond = bst.cond or map_general(stems.fut, function(form) return combine(form, "í") end)
stems.pres_sub_stressed = bst.pres_sub_stressed or
stressed_g_infix and map_general(stressed_g_infix, function(form) return combine(form, "i") end) or
map_general(stressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, "i", "is pres_sub_stressed")
end)
stems.pres_sub_unstressed = bst.pres_sub_unstressed or
unstressed_g_infix and map_general(unstressed_g_infix, function(form) return combine(form, "e") end) or
map_general(unstressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, conj_vowel == "i" and conj_vowel or "e")
end)
stems.impf_sub = bst.impf_sub or map_general(stems.pret, function(form)
local stem_base = rmatch(form, "^(.*)à$") -- already in "back" form, no need to convert
if stem_base then
return combine(stem_base, "é")
else
return form
end
end)
stems.pp = bst.pp or
unstressed_g_infix and map_general(unstressed_g_infix,
function(form) return combine(form, "ud") end
) or
map_general(unstressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
-- use combine() so we get 'abduïd' from 'abdu-' of [[abduir]], 'seguid' from 'seg-' from [[seguir]], etc.
return combine(stem_base, (conj_vowel == "e" and "u" or conj_vowel) .. "d")
end)
end
local function a_to_e(base, stems, suffix)
return map_general(stems, function(form)
local stem_base = form:match("^(.-)a$")
if stem_base then
suffix = "e" .. suffix
else
stem_base = form
end
return combine_stem_ending(base, stem_base, suffix, "is full word")
end)
end
local function add_present_indic(base)
local stems = base.output_stems
local function addit(slot, stems, ending)
add3(base, "pres_" .. slot, stems, ending)
end
addit("1s", stems.pres1s, "")
insert_forms(base, "pres_2s", a_to_e(base, stems.pres3s, "s"))
addit("3s", stems.pres3s, "")
insert_forms(base, "pres_1p", a_to_e(base, stems.pres_unstressed, "m"))
insert_forms(base, "pres_2p", a_to_e(base, stems.pres_unstressed, "u"))
addit("3p", stems.pres3p, "")
end
local function add_present_subj(base)
local stems = base.output_stems
local function addit(slot, stems, ending)
add3(base, "pres_sub_" .. slot, stems, ending)
end
-- Regular -ar verb: [[amar]]: ami, amis, ami, amem, ameu, amin
-- Regular -re verb: [[batre]]: bati, batis, bati, batem, bateu, batin (same as -ar verb)
-- Regular -ir verb, no -eix- infix: [[dormir]]: dormi, dormis, dormi, dormim, dormiu, dormin
-- Regular -ir verb, -eix- infix: [[imprimir]]: imprimeixi, imprimeixis, imprimeixi, imprimim, imprimiu, imprimeixin
-- Stem changing in 123s/3p vs. 12p:
-- * -eix- infix (-eix- in all stressed forms: 123s/3p of pres ind/sub, 2s imp)
-- * [[collir]]: culli, cullis, culli, collim, colliu, cullin (cull- in all stressed forms)
-- * [[cabre]]: càpiga, càpigues, càpiga, capiguem, capigueu, càpiguen (also different endings)
addit("1s", stems.pres_sub_stressed, "")
insert_forms(base, "pres_sub_2s", a_to_e(base, stems.pres_sub_stressed, "s"))
addit("3s", stems.pres_sub_stressed, "")
addit("1p", stems.pres_sub_unstressed, "m")
addit("2p", stems.pres_sub_unstressed, "u")
insert_forms(base, "pres_sub_3p", a_to_e(base, stems.pres_sub_stressed, "n"))
end
local function add_finite_non_present(base)
local stems = base.output_stems
local function add_tense(slot, stem, s1, s2, s3, p1, p2, p3)
add_single_stem_tense(base, slot, stem, s1, s2, s3, p1, p2, p3)
end
add_tense("impf", stems.impf1, "a", "es", "a", nil, nil, "en")
add_tense("impf", stems.impf2, nil, nil, nil, "em", "eu", nil)
-- pret_1s ends in -í regardless of the normal vowel of the stem.
insert_forms(base, "pret_1s", map_general(stems.pret, function(form)
local stem_base, conj_vowel = rmatch(form, "^(.*)(" .. V .. ")$")
if not stem_base then
error(("Internal error: Preterite stem '%s' doesn't end in vowel"):format(form))
end
if rfind(conj_vowel, front_vowel_c) then
stem_base = com.front_to_back(stem_base)
end
-- Use combine_stem_ending() to handle back-to-front conversions, e.g. pegà -> peguí for [[pegar]] and ensure
-- that the prefix gets added.
return combine_stem_ending(base, stem_base, "í", "is full word") end))
-- * at the beginning of the ending means to remove an accent from the last vowel of the preterite stem.
add_tense("pret", stems.pret, nil, "*res", "", "rem", "reu", "*ren")
-- * at the beginning of the ending means to remove an accent from the last vowel of the imperfect subjunctive stem.
add_tense("impf_sub", stems.impf_sub, "s", "*ssis", "s", "ssim", "ssiu", "*ssin")
add_tense("fut", stems.fut, "é", "às", "à", "em", "eu", "an")
add_tense("cond", stems.cond, "*a", "*es", "*a", "em", "eu", "*en")
end
local function add_non_finite_forms(base)
local stems = base.output_stems
local function addit(slot, stems, ending, footnotes)
add3(base, slot, stems, ending, footnotes)
end
insert_form(base, "infinitive", {form = base.orig_verb})
-- Also insert "infinitive + reflexive pronoun" combinations if we're handling a reflexive verb. See comment below
-- for "gerund + reflexive pronoun" combinations.
if base.refl then
for _, persnum in ipairs(person_number_list) do
insert_form(base, "infinitive_" .. persnum, {form = base.orig_verb})
end
end
-- Gerunds don't have an umlaut over the i in cases like 'abduint' of 'abduir' (not '#abduïnt').
local pres_unstressed_no_umlaut = map_general(stems.pres_unstressed, function(form)
return rsub(form, "ï$", "i")
end)
addit("gerund", pres_unstressed_no_umlaut, "nt")
-- Also insert "gerund + reflexive pronoun" combinations if we're handling a reflexive verb. We insert exactly the
-- same form as for the bare gerund; later on in add_reflexive_or_fixed_clitic_to_forms(), we add the appropriate
-- clitic pronouns. It's important not to do this for non-reflexive verbs, because in that case, the clitic
-- pronouns won't be added, and {{ca-verb form of}} will wrongly consider all these combinations as possible
-- inflections of the bare gerund. Thanks to [[User:JeffDoozan]] for this bug fix.
if base.refl then
for _, persnum in ipairs(person_number_list) do
addit("gerund_" .. persnum, pres_unstressed_no_umlaut, "nt")
end
end
addit("pp_ms", stems.pp, "")
if not base.pp_inv then
addit("pp_fs", stems.pp, "a")
-- make_plural() handles the complexities of e.g. 'vist' of [[veure]] -> 'vistos'/'vists' and 'romàs' of
-- [[romandre]] -> 'romasos'. We need to use flatmap_general() because make_plural() may return more than one
-- plural, and we need to use map_general() on the result, applying combine_stem_ending(), to ensure that
-- prefixes get properly added and plurals like 'amads' of stem 'amad' of [[amar]] get converted to 'amats'.
insert_forms(base, "pp_mp", map_general(flatmap_general(stems.pp, function(form)
-- Remove any # indicating that an accent will be dropped; it will be dropped in any case by make_plural().
form = form:gsub("#$", "")
return com.make_plural(form, "m")
end), function(form)
return combine_stem_ending(base, form, "", "is full word")
end))
addit("pp_fp", stems.pp, "es")
end
end
local function add_imperatives(base)
if base.noimp then
return
end
-- Copy pres3s to imperative since they are almost always the same.
insert_forms(base, "imp_2s", iut.map_forms(base.forms.pres_3s, function(form) return form end))
-- Copy pres2p to imperative plural since they are almost always the same.
insert_forms(base, "imp_2p", iut.map_forms(base.forms.pres_2p, function(form) return form end))
-- Copy subjunctives to imperatives.
for _, persnum in ipairs({"3s", "1p", "3p"}) do
local from = "pres_sub_" .. persnum
local to = "imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form) return form end))
end
end
local function fix_double_umlauts(base)
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
form.form = form.form:gsub("üï", "uï")
end
end
end
local function process_slot_overrides(base, filter_slot, reflexive_only)
local overrides = reflexive_only and base.basic_reflexive_only_overrides or base.basic_overrides
for slot, forms in pairs(overrides) do
if not filter_slot or filter_slot(slot) then
add3(base, slot, forms, "", nil, "allow overrides")
end
end
end
local function link_clitic(clitic)
return (clitic:gsub("([^ %-]+)", "[[%1]]"))
end
-- Prefix `form` with `clitic`, adding fixed text `between` between them. Add links as appropriate unless the user
-- requested no links. Check whether form already has brackets (as will be the case if the form has a fixed clitic).
local function prefix_clitic_to_form(base, clitic, between, form)
if base.alternant_multiword_spec.args.noautolinkverb then
return clitic .. between .. form
else
local clitic_pref = link_clitic(clitic) .. between
if form:find("%[%[") then
return clitic_pref .. form
else
return clitic_pref .. "[[" .. form .. "]]"
end
end
end
-- Suffix `form` with `clitic`. Add links as appropriate unless the user requested no links. Check whether form already
-- has brackets (as will be the case if the form has a fixed clitic).
local function suffix_clitic_to_form(base, clitic, form)
local autolink = not base.alternant_multiword_spec.args.noautolinkverb
if base.alternant_multiword_spec.args.noautolinkverb then
return form .. clitic
else
local clitic_suf = link_clitic(clitic)
if form:find("%[%[") then
return form .. clitic_suf
else
return "[[" .. form .. "]]" .. clitic_suf
end
end
end
-- Add a reflexive pronoun or fixed clitic (FIXME: not working), as appropriate to the base forms that were generated.
-- `do_joined` means to do only the forms where the pronoun is joined to the end of the form; otherwise, do only the
-- forms where it is not joined and precedes the form.
local function add_reflexive_or_fixed_clitic_to_forms(base, do_reflexive, do_joined)
for _, slotaccel in ipairs(base.alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
local persnum
if slot:find("[123]") then
persnum = slot:match("^.*_(.-)$")
else
persnum = "3s"
end
local function get_proclitic(form)
--if not do_reflexive then
-- return base.clitic
if form:find("^[aeiouh]") then
return proclitic_elided_person_number_to_reflexive_pronoun[persnum]
else
return proclitic_non_elided_person_number_to_reflexive_pronoun[persnum]
end
end
local function get_enclitic(form)
--if not do_reflexive then
-- return base.clitic
if rfind(form, C .. "$") or rfind(form, V .. "[iu]$") and not form:find("[gq]ui$") then
return enclitic_non_elided_person_number_to_reflexive_pronoun[persnum]
else
return enclitic_elided_person_number_to_reflexive_pronoun[persnum]
end
end
if base.forms[slot] then
if do_reflexive and slot:find("^pp_") or slot == "infinitive_linked" then
-- do nothing with reflexive past participles or with infinitive linked (handled at the end)
elseif slot:find("^neg_imp_") then
error("Internal error: Should not have forms set for negative imperative at this stage")
else
local slot_has_suffixed_clitic = slot:find("infinitive") or slot:find("gerund") or slot:find("^imp_")
-- Maybe generate non-reflexive parts and separated syntactic variants for use in
-- {{ca-verb form of}}. See comment in add_slots() above `need_special_verb_form_of_slots`.
-- Check for do_joined so we only run this code once.
if do_reflexive and do_joined and base.alternant_multiword_spec.source_template == "ca-verb form of" and
-- Skip personal variants of infinitives and gerunds so we don't think [[arrependendo]] is a
-- non-reflexive equivalent of [[arrependendo-me]].
not slot:find("infinitive_") and not slot:find("gerund_") then
-- Clone the forms because we will be destructively modifying them just below, adding the reflexive
-- pronoun.
insert_forms(base, slot .. "_non_reflexive", mw.clone(base.forms[slot]))
if slot_has_suffixed_clitic then
insert_forms(base, slot .. "_variant", iut.map_forms(base.forms[slot], function(form)
return prefix_clitic_to_form(base, get_proclitic(form), "... ", form)
end))
end
end
if slot_has_suffixed_clitic then
if do_joined then
-- Add clitic after form.
for _, form in ipairs(base.forms[slot]) do
form.form = suffix_clitic_to_form(base, get_enclitic(form.form), form.form)
end
end
elseif not do_joined then
-- Add clitic before form.
for _, form in ipairs(base.forms[slot]) do
form.form = prefix_clitic_to_form(base, get_proclitic(form.form), "", form.form)
end
end
end
end
end
end
local function handle_infinitive_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{ca-verb}}.
-- We substitute the original lemma (before removing links) for forms that
-- are the same as the lemma, if the original lemma has links.
for _, slot in ipairs({"infinitive"}) do
insert_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
local function generate_negative_imperatives(base)
if base.noimp then
return
end
-- Copy subjunctives to negative imperatives, preceded by "no".
for _, persnum in ipairs(neg_imp_person_number_list) do
local from = "pres_sub_" .. persnum
local to = "neg_imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form)
if base.alternant_multiword_spec.args.noautolinkverb then
return "no " .. form
elseif form:find("%[%[") then
-- already linked, e.g. when reflexive
return "[[no]] " .. form
else
return "[[no]] [[" .. form .. "]]"
end
end))
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
local function conjugate_verb(base)
construct_stems(base)
add_present_indic(base)
add_present_subj(base)
add_finite_non_present(base)
add_non_finite_forms(base)
fix_double_umlauts(base)
-- do non-reflexive non-imperative slot overrides
process_slot_overrides(base, function(slot)
return not slot:find("^imp_") and not slot:find("^neg_imp_")
end)
-- This should happen after process_slot_overrides() in case a derived slot is based on an override
-- (as with the imp_3s of [[dar]], [[estar]]).
add_imperatives(base)
-- do non-reflexive positive imperative slot overrides
process_slot_overrides(base, function(slot)
return slot:find("^imp_")
end)
-- We need to add joined reflexives, then joined and non-joined clitics, then non-joined reflexives, so we get
-- [[arrepéndete]] but [[no]] [[te]] [[arrependas]].
if base.refl then
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", "do joined")
process_slot_overrides(base, nil, "do reflexive") -- do reflexive-only slot overrides
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", false)
end
-- This should happen after add_reflexive_or_fixed_clitic_to_forms() so negative imperatives get the reflexive pronoun
-- and clitic in them.
generate_negative_imperatives(base)
-- do non-reflexive negative imperative slot overrides
-- FIXME: What about reflexive negative imperatives?
process_slot_overrides(base, function(slot)
return slot:find("^neg_imp_")
end)
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma`
-- in handle_infinitive_linked() works correctly and compares unlinked forms to unlinked forms.
handle_infinitive_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
user_basic_overrides = {},
user_stems = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
if inside == "" then
return base
end
local segments = put.parse_balanced_segment_run(inside, "[", "]")
local dot_separated_groups = put.split_alternating_runs(segments, "%.")
for i, dot_separated_group in ipairs(dot_separated_groups) do
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
elseif first_element:find("^var:") then
if #dot_separated_group > 1 then
parse_err(("Can't attach footnotes to 'var:' spec '%s'"):format(first_element))
end
base.var = first_element:match("^var:(.*)$")
elseif first_element:find(":") then
local colon_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*:%s*")
local first_element = colon_separated_groups[1][1]
if #colon_separated_groups[1] > 1 then
parse_err("Can't attach footnotes directly to '" .. first_element .. "' spec; attach them to the " ..
"colon-separated values following the initial colon")
end
if overridable_stems[first_element] then
if base.user_stems[first_element] then
parse_err("Overridable stem '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_stems[first_element] = overridable_stems[first_element](colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a basic override; we validate further later when the possible slots are available
if base.user_basic_overrides[first_element] then
parse_err("Basic override '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_basic_overrides[first_element] = allow_multiple_values_for_override(colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes},
"is form override")
end
else
parse_err("Unrecognized spec '" .. first_element .. "'")
end
end
return base
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, head)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original")
end
-- (2) Remove any links from the lemma, but remember the original form so we can use it below in the 'lemma_linked'
-- form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = head
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
local refl_verb = base.lemma
local verb, refl = rmatch(refl_verb, "^(.-)%-(se)$")
if not verb then
verb, refl = rmatch(refl_verb, "^(.-)('s)$")
end
if not verb then
verb, refl = refl_verb, nil
end
base.user_specified_verb = verb
base.refl = refl
base.verb = base.user_specified_verb
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
elseif base.refl then
-- Reconstruct the linked lemma with separate links around base verb, reflexive pronoun and clitic.
linked_lemma = base.user_specified_verb == base.verb and "[[" .. base.user_specified_verb .. "]]" or
"[[" .. base.verb .. "|" .. base.user_specified_verb .. "]]"
linked_lemma = linked_lemma .. (refl and "-[[" .. refl .. "]]" or "")
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve links in multiword
-- lemmas and include links in non-lemma forms rather than allowing the entire form to be a link.
linked_lemma = iut.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
local function detect_indicator_spec(base)
if (base.only3s and 1 or 0) + (base.only3sp and 1 or 0) + (base.only3p and 1 or 0) > 1 then
error("Only one of 'only3s', 'only3sp' and 'only3p' can be specified")
end
base.forms = {}
base.input_stems = {}
base.basic_overrides = {}
base.basic_reflexive_only_overrides = {}
base.orig_verb = base.verb -- in case of a 'like = "..."' redirect
if not base.no_built_in then
local function match_built_in_spec(verb, built_in_spec)
local prefix, non_prefixed_verb
if type(built_in_spec.match) == "function" then
prefix, non_prefixed_verb = built_in_spec.match(verb)
elseif built_in_spec.match:find("^%^") and rsub(built_in_spec.match, "^%^", "") == verb then
-- begins with ^, for exact match, and matches
prefix, non_prefixed_verb = "", verb
else
prefix, non_prefixed_verb = rmatch(verb, "^(.*)(" .. built_in_spec.match .. ")$")
end
return prefix, non_prefixed_verb
end
local function find_built_in(verb, var)
for _, built_in_spec in ipairs(built_in_conjugations) do
local prefix, non_prefixed_verb = match_built_in_spec(verb, built_in_spec)
if prefix then
if not built_in_spec.var then
if var then
error(("Can't specify a variant spec 'var:%s' with verb '%s'"):format(var, verb))
end
return prefix, non_prefixed_verb, built_in_spec
elseif not var then
local possible_vars = {}
for _, built_in_spec in ipairs(built_in_conjugations) do
local prefix, non_prefixed_verb = match_built_in_spec(verb, built_in_spec)
if prefix then
table.insert(possible_vars, built_in_spec.var)
end
end
error(("For verb '%s', must specify a variant using 'var:...'; possible values are %s"):format(
verb, table.concat(possible_vars, ", ")))
elseif built_in_spec.var == var then
return prefix, non_prefixed_verb, built_in_spec
end
end
end
return nil
end
local prefix, non_prefixed_verb, built_in_spec = find_built_in(base.verb, base.var)
if prefix then
-- we found a built-in verb
if built_in_spec.like then
-- we found a redirect to another verb that has the same conjugation, just a different infinitive
base.verb = prefix .. built_in_spec.like
local new_prefix, new_non_prefixed_verb, new_built_in_spec = find_built_in(base.verb, built_in_spec.likevar)
if new_prefix then
-- redirected to another built-in verb
base.prefix = new_prefix
base.non_prefixed_verb = new_non_prefixed_verb
built_in_spec = new_built_in_spec
else
built_in_spec = nil
end
else
base.prefix = prefix
base.non_prefixed_verb = non_prefixed_verb
end
end
if built_in_spec then
-- we found a built-in verb, possibly redirecting to another built-in verb
for stem, forms in pairs(built_in_spec.forms) do
if type(forms) == "function" then
forms = forms(base, base.prefix)
end
if stem:find("^refl_") then
stem = stem:gsub("^refl_", "")
if not base.alternant_multiword_spec.verb_slots_basic_map[stem] then
error("Internal error: setting for 'refl_" .. stem .. "' does not refer to a basic verb slot")
end
base.basic_reflexive_only_overrides[stem] = forms
elseif base.alternant_multiword_spec.verb_slots_basic_map[stem] then
-- an individual form override of a basic form
base.basic_overrides[stem] = forms
else
base.input_stems[stem] = forms
end
end
end
end
-- Override built-in-verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stems) do
base.input_stems[stem] = values
end
for override, values in pairs(base.user_basic_overrides) do
if not base.alternant_multiword_spec.verb_slots_basic_map[override] then
error("Unrecognized override '" .. override .. "': " .. base.angle_bracket_spec)
end
base.basic_overrides[override] = values
end
base.prefix = base.prefix or ""
base.non_prefixed_verb = base.non_prefixed_verb or base.verb
local inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)(re)$")
if not inf_stem then
inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)([aeiu]r)$")
end
if not inf_stem then
error("Unrecognized infinitive: " .. base.verb)
end
-- Remove accents from e.g. [[parèixer]], [[córrer]].
inf_stem = com.remove_accents(inf_stem)
-- Save full infinitive stem for use in future and conditional.
base.inf_stem = (inf_stem .. suffix):gsub("e$", "")
local stem = inf_stem
if suffix == "re" then
-- verbs in -ldre, -ndre have stem without the d
stem = stem:gsub("([ln])d$", "%1")
elseif suffix == "ur" then
stem = stem .. "u"
end
base.conj_vowel = (suffix == "re" or suffix == "ur") and "e" or suffix:gsub("r$", "")
-- If the stem is followed by a front vowel, convert it to its "back" form before calling combine_stem_ending(),
-- which expects the "back" form of the stem and may convert it back to the "front" form. Don't do this conversion
-- for ï so we leave [[arguïr]] (underlyingly 'argüïr') as 'argu' ("back" form), which becomes 'argü' ("front" form)
-- before front vowel ï and we end up with base.stem containing the underlying form 'argüï'. We remove the first of
-- two umlauts in a row in a postprocessing step (fix_double_umlauts()).
if rfind(suffix, "^[ei]") then
stem = com.front_to_back(stem)
end
-- Use combine_stem_ending() so we get ï if necessary.
base.stem = combine_stem_ending(base, stem, base.conj_vowel, false, "dont include prefix")
-- Propagate built-in-verb indicator flags to `base` and combine with user-specified flags.
for indicator_flag, _ in pairs(indicator_flags) do
base[indicator_flag] = base[indicator_flag] or base.input_stems[indicator_flag]
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
-- Propagate some settings up; some are used internally, others by [[Module:pt-headword]].
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Internal indicator flags. Do these before calling detect_indicator_spec() because add_slots() uses them.
for _, prop in ipairs { "refl", "clitic" } do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
base.alternant_multiword_spec = alternant_multiword_spec
end)
add_slots(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
detect_indicator_spec(base)
-- User-specified indicator flags. Do these after calling detect_indicator_spec() because the latter may set these
-- indicators for built-in verbs.
for prop, _ in pairs(indicator_flags) do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
end)
end
local function add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
local function insert_cat(cat, also_when_multiword)
-- Don't place multiword terms in categories like 'Catalan verbs ending in -ar' to avoid spamming the
-- categories with such terms.
if also_when_multiword or not multiword_lemma then
m_table.insertIfNot(alternant_multiword_spec.categories, "カタルーニャ語 " .. cat)
end
end
if check_for_red_links and alternant_multiword_spec.source_template == "ca-conj" and multiword_lemma then
for _, slot_and_accel in ipairs(alternant_multiword_spec.all_verb_slots) do
local slot = slot_and_accel[1]
local forms = base.forms[slot]
local must_break = false
if forms then
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
local title = mw.title.new(form.form)
if title and not title.exists then
insert_cat("活用表に赤リンクを含む動詞")
must_break = true
break
end
end
end
end
if must_break then
break
end
end
end
map_general(base.output_stems.stem, function(stem)
local stem_base, conj_vowel = split_conj_vowel(stem)
local need_no_eix_infix = true
if conj_vowel ~= base.conj_vowel then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#不規則動詞|混合活用]]")
elseif conj_vowel == "a" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第一変化動詞|第一変化]]")
insert_cat("第一変化動詞")
elseif conj_vowel == "e" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第二変化動詞|第二変化]]")
insert_cat("第二変化動詞")
elseif conj_vowel == "i" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第三変化動詞|第三変化]]")
insert_cat("第三変化動詞")
need_no_eix_infix = false
map_general(base.output_stems.eix_infix, function(form)
if form == "+" then
insert_ann("eix_infix", "接中辞-eix-有り")
insert_cat("-eix-を含む第三変化動詞")
elseif form == "-" then
insert_ann("eix_infix", "接中辞-eix-無し")
insert_cat("-eix-を含まない第三変化動詞")
end
end)
else
error(("Internal error: Stem '%s' doesn't end in conjugation vowel a/e/i and split_conj_vowel() didn't catch it"
):format(stem))
end
if need_no_eix_infix then
insert_ann("eix_infix", "接中辞無し")
end
end)
if base.input_stems.g_infix then
insert_ann("g_infix", "軟口蓋接中辞有り")
insert_cat("軟口蓋接中辞を含む動詞")
else
insert_ann("g_infix", "接中辞無し")
end
if base.output_stems.irreg then
insert_ann("irreg", "不規則")
insert_cat("不規則動詞")
else
insert_ann("irreg", "規則")
end
if base.only3s then
insert_ann("defective", "非人称")
insert_cat("非人称動詞")
elseif base.only3sp then
insert_ann("defective", "第三人称のみ")
insert_cat("第三人称動詞")
elseif base.only3p then
insert_ann("defective", "第三人称複数のみ")
insert_cat("第三人称複数動詞")
elseif base.no_pres_stressed then
insert_ann("defective", "欠如")
insert_cat("欠如動詞")
else
insert_ann("defective", "規則")
end
--if base.clitic then
-- insert_cat("verbs with lexical clitics")
--end
if base.refl then
insert_cat("再帰動詞")
end
local stem_base, conj_vowel = split_conj_vowel(base.stem)
local cons_alt
if conj_vowel == "i" and base.output_stems.eix_infix == "+" then
-- no alternations in verbs like [[afligir]] because all endings are front
elseif stem_base:find("ç$") then
cons_alt = "ç-c"
elseif stem_base:find("c$") then
cons_alt = "c-qu"
elseif stem_base:find("g$") then
cons_alt = "g-gu"
elseif stem_base:find("gu$") then
cons_alt = "gu-gü"
elseif stem_base:find("j$") then
cons_alt = "j-g"
elseif stem_base:find("qu$") then
cons_alt = "qu-qü"
end
if cons_alt then
local desc = cons_alt .. " alternation"
insert_ann("cons_alt", desc)
insert_cat(desc .. "交替の動詞")
else
insert_ann("cons_alt", "non-alternating")
end
end
-- Compute the categories to add the verb to, as well as the annotation to display in the
-- conjugation title bar. We combine the code to do these functions as both categories and
-- title bar contain similar information.
local function compute_categories_and_annotation(alternant_multiword_spec)
alternant_multiword_spec.categories = {}
local ann = {}
alternant_multiword_spec.annotation = ann
ann.conj = {}
ann.g_infix = {}
ann.eix_infix = {}
ann.irreg = {}
ann.defective = {}
ann.cons_alt = {}
local multiword_lemma = false
for _, form in ipairs(alternant_multiword_spec.forms.infinitive) do
if form.form:find(" ") then
multiword_lemma = true
break
end
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
end)
local ann_parts = {}
local conj = table.concat(ann.conj, " or ")
if conj ~= "" then
table.insert(ann_parts, conj)
end
local eix_infix = table.concat(ann.eix_infix, " or ")
if eix_infix ~= "" and eix_infix ~= "no infix" then
table.insert(ann_parts, eix_infix)
end
local irreg = table.concat(ann.irreg, " or ")
if irreg ~= "" and irreg ~= "regular" then
table.insert(ann_parts, irreg)
end
local g_infix = table.concat(ann.g_infix, " or ")
if g_infix ~= "" and g_infix ~= "no infix" then
table.insert(ann_parts, g_infix)
end
local defective = table.concat(ann.defective, " or ")
if defective ~= "" and defective ~= "regular" then
table.insert(ann_parts, defective)
end
local cons_alt = table.concat(ann.cons_alt, " or ")
if cons_alt ~= "" and cons_alt ~= "non-alternating" then
table.insert(ann_parts, cons_alt)
end
alternant_multiword_spec.annotation = table.concat(ann_parts, ", ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = alternant_multiword_spec.forms.infinitive
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec)
local function transform_accel_obj(slot, formobj, accel_obj)
-- No accelerators for negative imperatives, which are always multiword and derived directly from the
-- present subjunctive.
if slot:find("^neg_imp") then
return nil
end
if accel_obj then
accel_obj.form = "verb-form-" .. reconstructed_verb_spec
end
return accel_obj
end
local props = {
lang = lang,
lemmas = lemmas,
transform_accel_obj = transform_accel_obj,
slot_list = alternant_multiword_spec.verb_slots_basic,
}
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote
end
local notes_template = [=[
<div class="roa-footnote-outer-div" style="width:100%;">
<div class="roa-footnote-inner-div">
{footnote}
</div></div>
]=]
local basic_table = [=[
{description}<div class="NavFrame">
<div class="NavHead"> {title}の活用</div>
<div class="NavContent">
{\op}| class="roa-inflection-table" data-toggle-category="inflection"
|-
! colspan="3" class="roa-nonfinite-header" | <span title="infinitiu">不定詞</span>
| colspan="5" | {infinitive}
|-
! colspan="3" class="roa-nonfinite-header" | <span title="gerundi">現在分詞</span>
| colspan="5" | {gerund}
|-
! rowspan="3" colspan="2" class="roa-nonfinite-header" | <span title="participi passat">過去分詞</span>
| colspan="2" class="roa-nonfinite-header" |
! colspan="2" class="roa-nonfinite-header" | 男性
! colspan="2" class="roa-nonfinite-header" | 女性
|-
! colspan="2" class="roa-nonfinite-header" | 単数
| colspan="2" | {pp_ms}
| colspan="2" | {pp_fs}
|-
! colspan="2" class="roa-nonfinite-header" | 複数
| colspan="2" | {pp_mp}
| colspan="2" | {pp_fp}
|-
! colspan="2" rowspan="2" class="roa-person-number-header" | 人称
! colspan="3" class="roa-person-number-header" | 単数
! colspan="3" class="roa-person-number-header" | 複数
|-
! class="roa-person-number-header" style="width:12.5%;" | 第一人称
! class="roa-person-number-header" style="width:12.5%;" | 第二人称
! class="roa-person-number-header" style="width:12.5%;" | 第三人称
! class="roa-person-number-header" style="width:12.5%;" | 第一人称
! class="roa-person-number-header" style="width:12.5%;" | 第二人称
! class="roa-person-number-header" style="width:12.5%;" | 第三人称
|-
! rowspan="6" class="roa-indicative-left-rail" | <span title="indicatiu">直説法</span>
! class="roa-indicative-left-rail" |
! class="roa-indicative-left-rail" | <<jo>>
! class="roa-indicative-left-rail" | <<tu>>
! class="roa-indicative-left-rail" | <<ell>>/<<ella>><br /><<vostè>>
! class="roa-indicative-left-rail" | <<nosaltres>><br /><<nós>>
! class="roa-indicative-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-indicative-left-rail" | <<ells>>/<<elles>><br /><<vostès>>
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="present">現在</span>
| {pres_1s}
| {pres_2s}
| {pres_3s}
| {pres_1p}
| {pres_2p}
| {pres_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="imperfet">不完了過去</span>
| {impf_1s}
| {impf_2s}
| {impf_3s}
| {impf_1p}
| {impf_2p}
| {impf_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="futur">未来</span>
| {fut_1s}
| {fut_2s}
| {fut_3s}
| {fut_1p}
| {fut_2p}
| {fut_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="passat">完了過去</span>
| {pret_1s}
| {pret_2s}
| {pret_3s}
| {pret_1p}
| {pret_2p}
| {pret_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="condicional">可能法</span>
| {cond_1s}
| {cond_2s}
| {cond_3s}
| {cond_1p}
| {cond_2p}
| {cond_3p}
|-
! class="roa-subjunctive-left-rail" rowspan="3" | <span title="subjuntiu">接続法</span>
! class="roa-subjunctive-left-rail" |
! class="roa-subjunctive-left-rail" | <<jo>>
! class="roa-subjunctive-left-rail" | <<tu>>
! class="roa-subjunctive-left-rail" | <<ell>>/<<ella>><br /><<vostè>>
! class="roa-subjunctive-left-rail" | <<nosaltres>><br /><<nós>>
! class="roa-subjunctive-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-subjunctive-left-rail" | <<ells>>/<<elles>><br /><<vostès>>
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | <span title="present">現在</span>
| {pres_sub_1s}
| {pres_sub_2s}
| {pres_sub_3s}
| {pres_sub_1p}
| {pres_sub_2p}
| {pres_sub_3p}
|-
! class="roa-subjunctive-left-rail" style="height:3em;" rowspan="1" | <span title="imperfet">過去</span>
| {impf_sub_1s}
| {impf_sub_2s}
| {impf_sub_3s}
| {impf_sub_1p}
| {impf_sub_2p}
| {impf_sub_3p}
|-
! rowspan="3" class="roa-imperative-left-rail" style="height:3em;" | <span title="imperatiu">命令法</span>
! class="roa-imperative-left-rail" |
! class="roa-imperative-left-rail" | —
! class="roa-imperative-left-rail" | <<tu>>
! class="roa-imperative-left-rail" | <<vostè>>
! class="roa-imperative-left-rail" | <<nosaltres>>
! class="roa-imperative-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-imperative-left-rail" | <<vostès>>
|-
! class="roa-imperative-left-rail" style="height:3em;" | <span title="afirmatiu">-</span>
| —
| {imp_2s}
| {imp_3s}
| {imp_1p}
| {imp_2p}
| {imp_3p}
|-
! class="roa-imperative-left-rail" style="height:3em;" | <span title="negatiu">禁止</span> (<<no>>)
| —
| {neg_imp_2s}
| {neg_imp_3s}
| {neg_imp_1p}
| {neg_imp_2p}
| {neg_imp_3p}
|{\cl}{notes_clause}</div></div>]=]
local function make_table(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
forms.title = link_term(alternant_multiword_spec.lemmas[1].form, nil, "term")
local ann_parts = {}
if alternant_multiword_spec.annotation ~= "" then
table.insert(ann_parts, alternant_multiword_spec.annotation)
end
if alternant_multiword_spec.args.titlenote then
table.insert(ann_parts, alternant_multiword_spec.args.titlenote)
end
local annotation = table.concat(ann_parts, ", ")
if annotation ~= "" then
forms.title = forms.title .. " (" .. annotation .. ")"
end
forms.description = ""
-- Format the table.
forms.footnote = alternant_multiword_spec.footnote_basic
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
local table_with_pronouns = rsub(basic_table, "<<([^<>|]-)|([^<>|]-)>>", link_term)
local table_with_pronouns = rsub(table_with_pronouns, "<<(.-)>>", link_term)
return require("Module:TemplateStyles")("Module:roa-verb/style.css") ..
m_string_utilities.format(table_with_pronouns, forms)
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head)
local PAGENAME = mw.loadData("Module:headword/data").pagename
local function in_template_space()
return mw.title.getCurrentTitle().nsText == "テンプレート"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the
-- current page title or the value of |pagename=; but not when called from {{ca-verb form of}}, where the
-- page title is a non-lemma form. Note that the verb spec may omit the infinitive; e.g. it may be "<i-e>".
-- For this reason, we use the value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "ca-verb form of" and args.pagename or PAGENAME
local head = headword_head or pagename
local arg1 = args[1]
if not arg1 then
if (pagename == "ca-conj" or pagename == "ca-verb" or pagename == "ca-verb form of") and in_template_space() then
arg1 = "amar<>"
else
arg1 = "<>"
end
end
-- When called from {{ca-verb form of}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "ca-verb form of" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "ca-verb form of" and in_template_space() then
verb_form_of_form = "ami"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local refl_clitic_verb, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(refl_clitic_verb, "[^%[]", "")
local right_brackets = rsub(refl_clitic_verb, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(refl_clitic_verb) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
refl_clitic_verb, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = refl_clitic_verb .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local function split_bracketed_runs_into_words(bracketed_runs)
return put.split_alternating_runs(bracketed_runs, " ", "preserve splitchar")
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
-- Split words only on spaces, not on hyphens, because that messes up reflexive verb parsing.
split_bracketed_runs_into_words = split_bracketed_runs_into_words,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
normalize_all_lemmas(alternant_multiword_spec, head)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
slot_list = alternant_multiword_spec.all_verb_slots,
inflect_word_spec = conjugate_verb,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = iut.remove_redundant_links(form.form)
end
end
compute_categories_and_annotation(alternant_multiword_spec)
if args.json and source_template == "ca-conj" then
return require("Module:JSON").toJSON(alternant_multiword_spec.forms)
end
return alternant_multiword_spec
end
-- Entry point for {{ca-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent().args
local params = {
[1] = {},
["titlenote"] = {},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
}
local args = require("Module:parameters").process(parent_args, params)
local alternant_multiword_spec = export.do_generate_forms(args, "ca-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) ..
require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang, nil, nil, force_cat)
end
return export
2h2n53b3budgy5t933lpmkq57212n2e
2313410
2313409
2026-08-09T09:28:13Z
Kuroco2k
84207
2313410
Scribunto
text/plain
--[=[
This module implements {{ca-conj}} and provides the underlying conjugation functions for {{ca-verb}}
(whose actual formatting is done in [[Module:ca-headword]]).
Authorship: Ben Wing <benwing2>
]=]
local export = {}
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "pres_1s" (present indicative first-person singular), "pres_sub_2s" (present
subjunctive second-person singular) "impf_sub_3p" (imperfect subjunctive third-person plural).
Each slot is filled with zero or more forms.
-- "form" = The conjugated Catalan form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Catalan term. For Catalan, always the infinitive.
]=]
--[=[
FIXME:
--]=]
local lang = require("Module:languages").getByCode("ca")
local m_string_utilities = require("Module:string utilities")
local m_links = require("Module:links")
local m_table = require("Module:table")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local com = require("Module:ca-common")
local force_cat = false -- set to true for debugging
local check_for_red_links = false -- set to false for debugging
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local rsubn = mw.ustring.gsub
local rsub = com.rsub
local u = mw.ustring.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
-- version of rsubn() that returns a 2nd argument boolean indicating whether a substitution was made.
local function rsubb(term, foo, bar)
local retval, nsubs = rsubn(term, foo, bar)
return retval, nsubs > 0
end
local function link_term(term, display, face)
return m_links.full_link({ lang = lang, term = term, alt = display }, face)
end
local front_vowel = "eèéiíï"
local front_vowel_c = "[" .. front_vowel .. "]"
local V = com.V -- vowel regex class
local C = com.C -- consonant regex class
-- IS_USER_STEM_OVERRIDE is prepended to user-supplied stem overrides to prevent `base.prefix` from being prepended.
-- IS_USER_FORM_OVERRIDE is similar but also prevents final devoicing (cf. Balearic pres_1s 'trob' of [[trobar]]).
-- Don't use 0xFFF0 in case we call a [[Module:parse-utilities]] function that uses it temporarily.
local IS_USER_STEM_OVERRIDE = u(0xFFF1)
local IS_USER_FORM_OVERRIDE = u(0xFFF2)
--[=[
Irregular verbs:
-ldre/-ndre verbs:
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
caldre - cal [calent] calia caldrà calgué calgui - calgut,-
coldre colc col colem colia coldré colguí colgui colguem colt,colta
doldre dolc dol dolem dolia doldré dolguí dolgui dolguem dolgut,dolguda
moldre molc mol molem molia moldré molguí molgui molguem molt,molta
oldre olc ol olem olia oldré olguí olgui olguem olgut,olguda
-soldre -solc -sol -solem -solia -soldré -solguí -solgui -solguem -solt,-solta
(absoldre, dissoldre, resoldre)
toldre tolc tol tolem tolia toldré tolguí tolgui tolguem tolt,tolta
romandre romanc roman romanem romania romandré romanguí romangui romanguem romàs,romasa,romasos
encendre encenc encén encenem encenia encendré encenguí encengui encenguem encès,encesa,encesos
fendre fenc fen/-fèn fenem fenia fendré fenguí fengui fenguem fes/-fès,fesa,fesos
(defendre, ofendre)
-pendre -depenc -pèn -penem -penia -pendré -penguí -pengui -penguem -pès,-pesa,-pesos
(dependre,despendre,expendre,suspendre)
prendre prenc pren/-prèn prenem prenia prendré prenguí prengui prenguem pres/-près,presa,presos
(aprendre, comprendre, desprendre, emprendre, reprendre, sorprendre)
-tendre -tenc -tén -tenem -tenia -tendré -tenguí -tengui -tenguem -tès,-tesa,-tesos
(pres2s: atens, pres3p: atenen)
(atendre, contendre, distendre, entendre, estendre, pretendre)
vendre venc ven venem venia vendré venguí vengui venguem venut,venuda
(malvendre, revendre)
fondre fonc fon fonem fonia fondré fonguí fongui fonguem fos/-fós,fosa,fosos
(confondre, difondre, infondre, refondre)
enfondre enfonc enfon enfonem enfonia enfondré enfonguí enfongui enfonguem enfús,enfusa,enfusos
pondre ponc pon ponem ponia pondré ponguí pongui ponguem post,posta,postos
(compondre, correspondre, descompondre, respondre)
tondre tonc ton tonem tonia tondré tonguí tongui tonguem tos,tosa,tosos
cerndre cerno cern cernem cernia cerndré cerní cerni cernem cernut,cernuda
-ler verbs (mostly like -ldre verbs):
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
caler (var. of caldre)
doler (var. of doldre)
soler solc sol solem solia soldré solguí solgui solguem solgut,solguda
valer/valdre valc val valem valia valdré valguí valgui valguem valgut,valguda
(prevaler, equivaler)
other -dre/-tre verbs (regular except sometimes pp):
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
batre bato bat batem batia batré batí bati batem batut,batuda
-metre -meto -met -metem -metia -metré -metí -meti -metem -mès,-mesa,-mesos
(ad-, co-, compro-, e-, entremetre's, mal-, o-, per-, pro-, read-, re-, retrans-, sot-, tra-, trans-)
perdre perdo perd perdem perdia perdré perdí perdi perdem perdut,perduda
-ure verbs
infinitive pres1s pres3s pres1p impf1s impf1p fut1s pret1s sub1s sub1p pp
caure caic cau caiem queia quèiem cauré caiguí caigui caiguem caigut,caiguda
(decaure, recaure)
plaure plac plau plaem plaïa plaíem plauré plaguí plagui plaguem plagut,plaguda
(complaure)
raure rac rau raem raïa raíem rauré raguí ragui raguem ragut,raguda
beure bec beu bevem bevia bevíem beuré beguí begui beguem begut,beguda
(embeure)
creure crec creu creiem creia crèiem creuré creguí cregui creguem cregut,creguda
deure dec deu devem devia devíem deuré deguí degui deguem degut,deguda
jeure jec jeu jaiem jeia jèiem jauré jaguí jegui jaguem jagut,jaguda
(ajeure)
lleure - lleu [-] llevia - lleurà llegué llegui - llegut,-
seure sec seu seiem seia sèiem seuré seguí segui seguem segut,seguda
(asseure)
treure trec treu traiem treia trèiem trauré traguí tregui traguem tret,treta
(abstreure, atreure, contreure, distreure, extreure, retreure, sostreure)
veure veig veu veiem veia vèiem veuré viu,veieres/veres, vegi vegem vist,vista,vists/vistos
(entreveure, preveure, reveure) veié/veu,veiérem/vérem
riure ric riu riem reia rèiem riuré riguí rigui riguem rigut,riguda
(somriure)
(e)scriure escric escriu escrivim escrivia escrivíem escriuré escriví/escriguí escrigui escriguem escrit,escrita
(circumscriure, descriure, inscriure, prescriure, proscriure, subscriure, transcriure)
viure visc viu vivim vivia vivíem viuré visquí visqui visquem viscut,viscuda
(conviure, sobreviure)
cloure cloc clou cloem cloïa cloíem clouré cloguí clogui cloguem clos,closa,closos
(concloure, descloure, encloure, excloure, incloure, recloure)
encloure encloc enclou encloem encloïa encloíem enclouré encloguí enclogui encloguem enclòs,enclosa,enclosos
coure coc cou coem coïa coíem couré coguí cogui coguem cuit/cogut,cuita/coguda
moure moc mou movem movia movíem mouré moguí mogui moguem mogut,moguda
(promoure)
noure noc nou noem noïa noíem nouré noguí nogui noguem nogut,noguda
ploure - plou [plovent] plovia - plourà plogué plogui - plogut,ploguda
-nyer verbs (regular except pp)
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
atènyer atenyo ateny atenyem atenyia atenyeré atenyí atenyi atenyem atès,atesa,atesos
empènyer empenyo empeny empenyem empenyia empenyeré empenyí empenyi empenyem empès,empesa,empesos
estrènyer estrenyo estreny estrenyem estrenyia estrenyeré estrenyí estrenyi estrenyem estret,estreta
estrènyer
(constrènyer,restrènyer)
fènyer fenyo feny fenyem fenyia fenyeré fenyí/fenguí fenyi fenyem fenyut/fengut,fenyuda/fenguda
pertànyer pertanyo pertany pertanyem pertanyia pertanyeré pertanyí/pertanguí pertanyi pertanyem pertanyut/pertangut,pertanyuda/pertanguda
plànyer planyo plany planyem planyia planyeré planyí/planguí planyi planyem plangut/planyut,planguda/planyuda
-xer verbs (NOTE: pres2s in -xes)
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
créixer creixo creix creixem creixia creixeré creixí/cresquí creixi creixem crescut,crescuda
(acréixer,decréixer)
conèixer conec coneix coneixem coneixia coneixeré coneguí conegui coneguem conegut,coneguda
(desconèixer,reconèixer)
merèixer mereixo mereix mereixem mereixia mereixeré mereixí/meresquí mereixi mereixem merescut,merescuda
néixer/ neixo/ neix/ naixem naixia naixeré naixí/nasquí neixi/ naixem/nasquem nascut,nascuda
nàixer naixo naix naixi
(renéixer)
parèixer parec pareix pareixem pareixia pareixeré pareguí paregui pareguem paregut,pareguda
(aparèixer,comparèixer,desaparèixer,reaparèixer)
péixer peixo peix paixem paixia paixeré paixí peixi paixem pascut,pascuda
misc. -er verbs
infinitive pres1s pres3s pres1p impf1s impf1p fut1s pret1s sub1s sub1p pp
córrer corro corre correm corria corríem correré correguí corri correm corregut,correguda
fúmer fumo fum fumem fumia fumíem fumeré fumí fumi fumem fumut,fumuda
prémer premo prem premem premia premíem premeré premí premi premem premut,premuda
(es-, re-)
témer temo tem temem temia temíem temeré temí temi temem temut,temuda
trémer [regular]
tòrcer torço torç torcem torcia torcíem torceré torcí torci torcem torçut,torçuda
(des-) [pres2s torces]
vèncer venço venç vencem vencia vencíem venceré vencí venci vencem vençut,vençuda
(con-, re-) [pres2s vences]
cabre/caber cabo cap cabem cabia cabíem cabré cabí càpiga capiguem cabut,cabuda
[sub2s càpigues]
haver he/haig ha havem/hem havia havíem hauré haguí hagi hàgim/haguem hagut,haguda
[noimp] [cond1s hauria/haguera; impsub2s haguessis/haguesses]
poder puc pot podem podia podíem podré poguí pugui puguem pogut,poguda
saber sé sap sabem sabia sabíem sabré sabí sàpiga sapiguem sabut,sabuda
[imp2s sàpigues, imp2p sapigueu]
voler vull vol volem volia volíem voldré volguí vulgui vulguem volgut,volguda
ser/ésser soc és som era érem seré fui sigui siguem estat/sigut,estada/siguda
[ger sent/essent] [cond1s seria/fora]
[pres: soc,ets,éts,som,sou,són; pret: fui,fores,fou,fórem,fóreu,foren; impsub: fos,fossis,fos,fóssim,fóssiu,fossin]
[imp: sigues,sigueu]
fer faig fa fem feia fèiem faré fiu faci fem fet,feta
[pres3p fan]
[pret: fiu,feres,feu,férem,féreu,feren]
]=]
local all_persons_numbers = {
["1s"] = "1|s",
["2s"] = "2|s",
["3s"] = "3|s",
["1p"] = "1|p",
["2p"] = "2|p",
["3p"] = "3|p",
}
local person_number_list = {"1s", "2s", "3s", "1p", "2p", "3p"}
local imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
local neg_imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
proclitic_non_elided_person_number_to_reflexive_pronoun = {
["1s"] = "em ",
["2s"] = "et ",
["3s"] = "es ",
["1p"] = "ens ",
["2p"] = "us ",
["3p"] = "es ",
}
proclitic_elided_person_number_to_reflexive_pronoun = {
["1s"] = "m'",
["2s"] = "t'",
["3s"] = "s'",
["1p"] = "ens ",
["2p"] = "us ",
["3p"] = "s'",
}
enclitic_non_elided_person_number_to_reflexive_pronoun = {
["1s"] = "-me",
["2s"] = "-te",
["3s"] = "-se",
["1p"] = "-nos",
["2p"] = "-vos",
["3p"] = "-se",
}
enclitic_elided_person_number_to_reflexive_pronoun = {
["1s"] = "'m",
["2s"] = "'t",
["3s"] = "'s",
["1p"] = "'ns",
["2p"] = "-us",
["3p"] = "'s",
}
local indicator_flags = m_table.listToSet {
"no_pres_stressed",
"only3s", "only3sp", "only3p", "noimp",
"pp_inv", "irreg", "no_built_in",
}
-- Initialize all the slots for which we generate forms.
local function add_slots(alternant_multiword_spec)
-- "Basic" slots: All slots that go into the regular table (not the reflexive form-of table).
alternant_multiword_spec.verb_slots_basic = {
{"infinitive", "inf"},
{"infinitive_linked", "inf"},
{"gerund", "ger"},
{"pp_ms", "m|s|past|part"},
{"pp_fs", "f|s|past|part"},
{"pp_mp", "m|p|past|part"},
{"pp_fp", "f|p|past|part"},
}
-- Special slots used to handle non-reflexive parts of reflexive verbs in {{ca-verb form of}}. For example, for a
-- reflexive-only verb like [[arrepentirse]], we want to be able to use {{ca-verb form of}} on [[arrepinta]] (which
-- should mention that it is a part of 'me arrepinta', first-person singular present subjunctive, and
-- 'se arrepinta', third-person singular present subjunctive) or on [[arrepentimos]] (which should mention that it
-- is a part of 'arrepentímonos', first-person plural present indicative or preterite). Similarly, we want to use
-- {{ca-verb form of}} on [[arrepentindo]] (which should mention that it is a part of 'se ... arrepentindo',
-- syntactic variant of [[arrepentíndose]], which is the gerund of [[arrepentirse]]). To do this, we need to be
-- able to map non-reflexive parts like [[arrepinta]], [[arrepentimos]], [[arrepentindo]], etc. to their reflexive
-- equivalent(s), to the tag(s) of the equivalent(s), and, in the case of forms like [[arrepentindo]],
-- [[arrepentir]] and imperatives, to the separated syntactic variant of the verb+clitic combination. We do this by
-- creating slots for the non-reflexive part equivalent of each basic reflexive slot, and for the separated
-- syntactic-variant equivalent of each basic reflexive slot that is formed of verb+clitic. We use slots in this
-- way to deal with multiword lemmas. Note that we run into difficulties mapping between reflexive verbs,
-- non-reflexive part equivalents, and separated syntactic variants if a slot contains more than one form. To
-- handle this, if there are the same number of forms in two slots we're trying to match up, we assume the forms
-- match one-to-one; otherwise we don't match up the two slots (which means {{ca-verb form of}} won't work in this
-- case, but such a case is extremely rare and not worth worrying about). Alternatives that handle this "properly"
-- are significantly more complicated and require non-trivial modifications to [[Module:inflection utilities]].
local need_special_verb_form_of_slots = alternant_multiword_spec.source_template == "ca-verb form of" and
alternant_multiword_spec.refl
if need_special_verb_form_of_slots then
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {
{"infinitive_non_reflexive", "-"},
{"infinitive_variant", "-"},
{"gerund_non_reflexive", "-"},
{"gerund_variant", "-"},
}
else
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {}
end
-- Add entries for a slot with person/number variants.
-- `verb_slots` is the table to add to.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(verb_slots, slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local slot = slot_prefix .. "_" .. persnum
local accel = tag_suffix .. "|" .. persnum_tag
table.insert(verb_slots, {slot, accel})
end
end
-- Add a personal slot (i.e. a slot with person/number variants) to `verb_slots_basic`.
local function add_basic_personal_slot(slot_prefix, tag_suffix, person_number_list, no_special_verb_form_of_slot)
add_personal_slot(alternant_multiword_spec.verb_slots_basic, slot_prefix, tag_suffix, person_number_list)
-- Add special slots for handling non-reflexive parts of reflexive verbs in {{ca-verb form of}}.
-- See comment above in `need_special_verb_form_of_slots`.
if need_special_verb_form_of_slots and not no_special_verb_form_of_slot then
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local basic_slot = slot_prefix .. "_" .. persnum
local accel = tag_suffix .. "|" .. persnum_tag
table.insert(alternant_multiword_spec.verb_slots_reflexive_verb_form_of, {basic_slot .. "_non_reflexive", "-"})
end
end
end
add_basic_personal_slot("pres", "直説法|現在", person_number_list)
add_basic_personal_slot("impf", "直説法|不完全過去", person_number_list)
add_basic_personal_slot("pret", "直説法|完全過去", person_number_list)
add_basic_personal_slot("fut", "直説法|未来", person_number_list)
add_basic_personal_slot("cond", "可能法", person_number_list)
add_basic_personal_slot("pres_sub", "接続法|現在", person_number_list)
add_basic_personal_slot("impf_sub", "接続法|過去", person_number_list)
add_basic_personal_slot("imp", "命令法", imp_person_number_list)
-- Don't need special non-reflexive-part slots because the negative imperative is multiword, of which the
-- individual words are 'no' + subjunctive.
add_basic_personal_slot("neg_imp", "命令法|禁止", neg_imp_person_number_list, "no special verb form of")
-- Don't need special non-reflexive-part slots because we don't want [[arrependendo]] mapping to [[arrependendo-me]]
-- (only [[arrependendo-se]]) or [[arrepender]] mapping to [[arrepender-me]] (only [[arrepender-se]]).
add_basic_personal_slot("infinitive", "inf", person_number_list, "no special verb form of")
add_basic_personal_slot("gerund", "ger", person_number_list, "no special verb form of")
-- Generate the list of all slots.
alternant_multiword_spec.all_verb_slots = {}
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_basic) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_reflexive_verb_form_of) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
alternant_multiword_spec.verb_slots_basic_map = {}
for _, slotaccel in ipairs(alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
alternant_multiword_spec.verb_slots_basic_map[slot] = accel
end
end
local overridable_stems = {}
local function allow_multiple_values_for_override(separated_groups, data, is_form_override)
local retvals = {}
for _, separated_group in ipairs(separated_groups) do
local footnotes = data.fetch_footnotes(separated_group)
local form = separated_group[1]
-- Prepend marker to prevent prefixing with `base.prefix`, and (in the case of form overrides) prevent
-- final devoicing.
if is_form_override then
form = IS_USER_FORM_OVERRIDE .. form
else
form = IS_USER_STEM_OVERRIDE .. form
end
local retval = {form = form, footnotes = footnotes}
table.insert(retvals, retval)
end
return retvals
end
for _, overridable_stem in ipairs {
"stem",
"stressed_stem",
"unstressed_stem",
"pres_unstressed",
"pres_stressed",
"pres3s", -- overrides just pres_2s and pres_3s
-- Don't include pres1s, pres3p; use pres_1s etc. if you need to override just those forms
"impf1",
"impf2",
"pret",
"fut",
"cond",
"pres_sub_stressed",
"pres_sub_unstressed",
"impf_sub",
"pp",
"g_infix",
"eix_infix",
} do
-- Written so we can substitute a different validator; parallel code in [[Module:es-verb]] and [[Module:pt-verb]]
-- has simple_choice validators.
overridable_stems[overridable_stem] = allow_multiple_values_for_override
end
-- Useful as the value of the `match` property of a built-in verb. `main_verb_spec` is a Lua pattern that should match
-- the non-prefixed part of a verb, and `prefix_specs` is a list of Lua patterns that should match the prefixed part of
-- a verb. If a prefix spec is preceded by ^, it must match exactly at the beginning of the verb; otherwise, additional
-- prefixes (e.g. re-, des-) may precede. Return the prefix and main verb.
local function match_against_verbs(main_verb_spec, prefix_specs)
return function(verb)
for _, prefix_spec in ipairs(prefix_specs) do
if prefix_spec:find("^%^") then
-- must match exactly
prefix_spec = prefix_spec:gsub("^%^", "")
if prefix_spec == "" then
-- We can't use the second branch of the if-else statement because an empty () returns the current position
-- in rmatch().
local main_verb = rmatch(verb, "^(" .. main_verb_spec .. ")$")
if main_verb then
return "", main_verb
end
else
local prefix, main_verb = rmatch(verb, "^(" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
else
local prefix, main_verb = rmatch(verb, "^(.*" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
end
return nil
end
end
--[=[
Built-in (usually irregular) conjugations.
Each entry is processed in turn and consists of an object with two fields:
1. match=: Specifies the built-in verbs that match this object.
2. forms=: Specifies the built-in stems and forms for these verbs.
The value of match= is either a string beginning with "^" (match only the specified verb), a string not beginning
with "^" (match any verb ending in that string), or a function that is passed in the verb and should return the prefix
of the verb if it matches, otherwise nil. The function match_against_verbs() is provided to facilitate matching a set
of verbs with a common ending and specific prefixes (e.g. [[ter]] and [[ater]] but not [[abater]], etc.).
The value of forms= is a table specifying stems and individual override forms. Each key of the table names either a
stem (e.g. `pres_stressed`), a stem property (e.g. `g_infix`) or an individual override form (e.g. `pres_1s`).
Each value of a stem can either be a string (a single stem), a list of strings, or a list of objects of the form
{form = STEM, footnotes = {FOONOTES}}. Each value of an individual override should be of exactly the same form except
that the strings specify full forms rather than stems. The values of a stem property depend on the specific property
but are generally strings or booleans.
In order to understand how the stem specifications work, it's important to understand the phonetic modifications done
by combine_stem_ending(). In general, the complexities of predictable prefix, stem and ending modifications are all
handled in this function. In particular:
1. Spelling-based modifications (c/qu, ç/c, g/gu, j/g, gu/gü, qu/qü) occur automatically as appropriate for the ending.
2. If the ending begins with an asterisk, this is a signal to delete the accent on the last syllable of the stem, e.g.
veié -> veierem.
3. If ending begins with i, it may turn into í or ï after an unstressed vowel (in some but not all cases) to prevent the
two merging into a diphthong. See combine_stem_ending() for specifics.
The following stems are recognized [FIXME: This is not correct for Catalan, needs rewriting]:
-- pres_unstressed: The present indicative unstressed stem (1p, 2p). Also controls the imperative 2p
and gerund. Defaults to the infinitive stem (minus the ending -ar/-er/-ir/-or).
-- pres_stressed: The present indicative stressed stem (1s, 2s, 3s, 3p). Also controls the imperative 2s.
Default is empty if indicator `no_pres_stressed`, else a vowel alternation if such an indicator is given
(e.g. `ue`, `ì`), else the infinitive stem.
-- pres1: Special stem for 1s present indicative. Normally, do not set this explicitly. If you need to specify an
irregular 1s present indicative, use the form override pres_1s= to specify the entire form. Defaults to
pres_stressed.
-- pres_sub_unstressed: The present subjunctive unstressed stem (1p, 2p). Defaults to the infinitive stem.
-- pres_sub_stressed: The present subjunctive stressed stem (1s, 2s, 3s, 1p). Defaults to pres1.
-- impf: The imperfect stem (not including the -av-/-i- stem suffix, which is determined by the conjugation). Defaults
to the infinitive stem.
-- pret: The full preterite stem missing only the endings (-ste, -mos, etc.), e.g. 'fige', 'fo'. Only used for verbs
with irregular preterites (pret_conj == "irreg") such as [[facer]], [[poder]], [[traer]], etc. Defaults to
`pret_base` + the conjugation vowel.
-- fut: The future stem. Defaults to the infinitive stem + the conjugation vowel.
-- cond: The conditional stem. Defaults to `fut`.
-- impf_sub: The imperfect subjunctive stem. Defaults to `pret`.
-- pp: The masculine singular past participle. Default is based on the verb conjugation: infinitive stem + '-ado' for
-ar verbs, otherwise infinitive stem + '-ido'.
-- pp_inv: `true` if the past participle exists only in the masculine singular.
]=]
local built_in_conjugations = {
--------------------------------------------------------------------------------------------
-- -ar --
--------------------------------------------------------------------------------------------
-- Orthographic consonant alternations in endings are handled automatically in combine_stem_ending().
{
-- [[aguar]]:
-- pres agúo, agúes, agúa, agüem, agüeu, agúen
-- pres_sub aguï, aguïs, aguï, agüem, agüeu, aguïn
-- contrast a more typical verb in -guar, [[enaiguar]]:
-- pres enaiguo, enaigües, enaigua, enaigüem, enaigüeu, enaigüen
-- pres_sub enaigüi, enaigüis, enaigüi, enaigüem, enaigüeu, enaigüin
match = "^aguar",
forms = {
pres_stressed = "agú",
pres_sub_stressed = "aguï",
irreg = true,
}
},
{
-- [[anar]] (full verb); highly irregular
match = "^anar",
var = "full",
forms = {
fut = "anir",
pres_1s = "vaj", -- will be converted to 'vaig'; 'vaig' gets converted to 'vaic'
pres_2s = "vas",
pres_3s = "va",
pres_3p = "van",
pres_sub_stressed = "vagi",
imp_2s = "ves",
irreg = true,
}
},
{
-- [[anar]] (auxiliary); highly irregular
match = "^anar",
var = "aux",
forms = {
pres_1s = "vaj", -- will be converted to 'vaig'; 'vaig' gets converted to 'vaic'
pres_2s = {"vas", "vares"},
pres_3s = "va",
pres_1p = {"vam", "vàrem"},
pres_2p = {"vau", "vàreu"},
pres_3p = {"van", "varen"},
pres_sub_stressed = "vagi",
pres_sub_unstressed = "vàgi",
impf1 = {},
impf2 = {},
fut = {},
pret = {},
pp = {},
gerund = {},
noimp = true,
irreg = true,
}
},
{
-- [[dar]]
match = "^dar",
forms = {
pres_1s = {form = "do", footnotes = {"[obsolete]"}},
pres_2s = {form = "das", footnotes = {"[obsolete]"}},
pres_3s = {form = "da", footnotes = {"[obsolete]"}},
pres_3p = {form = "dan", footnotes = {"[obsolete]"}},
pres_sub_1s = {form = "de", footnotes = {"[obsolete]"}},
pres_sub_2s = {form = "des", footnotes = {"[obsolete]"}},
pres_sub_3s = {form = "de", footnotes = {"[obsolete]"}},
pres_sub_3p = {form = "den", footnotes = {"[obsolete]"}},
pret_1s = "di", -- regular except for lack of accent
pret_3s = "da", -- regular except for lack of accent
impf_sub_1s = "des", -- regular except for lack of accent
impf_sub_3s = "des", -- regular except for lack of accent
irreg = true,
}
},
{
-- [[estar]]; highly irregular
match = "^estar",
forms = {
pres_2s = "estàs",
pres_3s = "està",
pres_3p = "estan",
g_infix = "estig",
imp_2s = "estigues",
imp_2p = "estigueu",
pp = "estad",
}
},
--------------------------------------------------------------------------------------------
-- -er/-re --
--------------------------------------------------------------------------------------------
-- Regular verbs not needing entries here:
--
-- [[rebre]], [[concebre]], [[decebre]], [[percebre]]
-- [[rompre]]
-- [[fúmer]], [[prémer]], [[témer]], [[trémer]]
-- [[perdre]], [[batre]], [[botre]], [[fotre]], [[retre]]
-- [[tòrcer]], [[vèncer]]
-- etc.
------------------------------------------- -ldre/-ler/-lre --------------------------------------
{
-- [[caldre]], [[doldre]], [[condoldre's]], [[oldre]]
match = match_against_verbs("ldre", {"ca", "do", "^o"}),
forms = {
-- g_infix implies irreg = true
-- g_infix adds -g to pres_1s, sub, pret and pp stems; combine_stem_ending() changes final -g to -c
g_infix = "+",
}
},
{
-- [[caler]]
match = "caler",
like = "caldre",
},
{
-- [[doler]] and compounds
match = "doler",
like = "doldre",
},
{
-- [[dolre]]
match = "dolre",
forms = {
-- see above for g_infix effects
g_infix = "+",
}
},
{
-- [[valer]], [[equivaler]], [[prevaler]], [[sobrevaler]]
match = "valer",
forms = {
-- see above for g_infix effects
fut = "valdr",
g_infix = "+",
}
},
{
-- [[valdre]] and compounds
match = "valdre",
like = "valer",
},
{
-- [[soler]]
match = "^soler", -- this must precede -oldre rule below for alt form [[soldre]]
forms = {
-- see above for g_infix effects
fut = {},
pret = {},
impf_sub = "solgué", -- regular, but we disabled the preterite, which would normally disable impf_sub too
g_infix = "+",
pp = {},
noimp = true,
}
},
{
-- [[soldre]]
match = "^soldre", -- this must precede -oldre rule below
like = "soler",
},
{
-- [[coldre]], [[moldre]], [[absoldre]], [[dissoldre]], [[resoldre]], [[toldre]]
match = "oldre", -- this must follow [[doldre]]/[[oldre]] rule above
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "olt",
}
},
{
-- [[voler]], [[malvoler]]
match = "voler",
forms = {
fut = "voldr",
pres_1s = "vull",
pres_sub_stressed = "vulgui",
pres_sub_unstressed = "vulgue",
g_infix = "+",
imp_2s = "vulgues",
imp_2p = "vulgueu",
}
},
--------------------------------------------- -ndre ----------------------------------------
{
-- [[romandre]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("mandre", {"^ro"}),
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "màs#",
}
},
{
-- [[encendre]], [[atendre]], [[contendre]], [[desentendre's]], [[distendre]], [[entendre]], [[estendre]],
-- [[pretendre]]
match = match_against_verbs("endre", {"enc", "t"}),
forms = {
pres_3s = "én#", -- remove final accent without prefix with vowel; also removed when adding a suffix
-- see above for g_infix effects
g_infix = "+",
pp = "ès#", -- see above for effect of final #
}
},
{
-- [[vendre]], [[malvendre]], [[revendre]]
match = "vendre",
forms = {
pres_3s = "vèn#", -- see above for effect of final #
-- see above for g_infix effects
g_infix = "+",
pp = "venud", -- g_infix would normally make it vengud
}
},
{
-- [[fendre]], [[defendre]], [[ofendre]], [[dependre]], [[despendre]], [[expendre]], [[suspendre]], [[prendre]],
-- [[aprendre]], [[comprendre]], [[desprendre]], [[emprendre]], [[reprendre]], [[sorprendre]]
match = "endre", -- this must follow previous -endre rules above
forms = {
pres_3s = "èn#", -- see above for effect of final #
-- see above for g_infix effects
g_infix = "+",
pp = "ès#", -- see above for effect of final #
}
},
{
-- [[enfondre]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("fondre", {"^en"}),
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "fús#",
}
},
{
-- [[pondre]], [[compondre]], [[correspondre]], [[descompondre]], [[despondre's]], [[respondre]]
match = "pondre",
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "post",
}
},
{
-- [[fondre]], [[confondre]], [[difondre]], [[infondre]], [[refondre]], [[tondre]]
match = "ondre", -- this must follow previous -ondre rules above
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "ós#", -- see above for effect of final #
}
},
--------------------------------------------- -nyer ----------------------------------------
{
-- [[atènyer]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("tènyer", {"^a"}),
forms = {
pp = "tès#",
irreg = true,
}
},
{
-- [[empènyer]], [[espènyer]]
match = match_against_verbs("pènyer", {"^em", "^es"}),
forms = {
pp = "pès#",
irreg = true,
}
},
{
-- [[estrènyer]], [[constrènyer]], [[destrènyer]], [[restrènyer]]
match = match_against_verbs("strènyer", {"^e", "con", "^de", "^re"}),
forms = {
pp = "stret",
irreg = true,
}
},
{
-- [[fènyer]]
match = "fènyer",
forms = {
pp = {"fengud", "fenyud"},
irreg = true,
}
},
{
-- [[júnyer]]
match = "júnyer",
like = "junyir",
},
{
-- [[plànyer]], [[complànyer]], [[pertànyer]]
match = match_against_verbs("ànyer", {"pl", "pert"}),
forms = {
pp = {"angud", "anyud"},
irreg = true,
}
},
--------------------------------------------- -aure ----------------------------------------
{
-- [[caure]], [[decaure]], [[recaure]]
match = "caure",
forms = {
-- stem ending in -ai and imperfect in -ia causes special stressed imperfect logic to take effect; we get
-- impf1s queia, impf1p quèiem (preceding vowel changed to è and attached to initial consonant using
-- combine_stem_ending(), which changes c- to qu-)
stem = "caie", -- i dropped by g_infix before u
-- g_infix implies irreg = true
-- g_infix adds -g to pres_1s, sub, pret and pp stems; combine_stem_ending() changes final -g to -c
-- g_infix sets pres_stressed to end in -u, removing a preceding -i or -v
g_infix = "+",
}
},
{
-- [[plaure]], [[complaure]]
match = "plaure",
forms = {
stem = "plae", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
}
},
{
-- [[raure]]
match = "^raure",
forms = {
stem = "rae", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = {"ragud", "ras"},
}
},
--------------------------------------------- -eure ----------------------------------------
{
-- [[beure]], [[embeure]], [[deure]], [[lleure]]
match = match_against_verbs("eure", {"b", "d", "ll"}),
forms = {
stem = "eve", -- v dropped by g_infix before g and u
g_infix = "+",
}
},
{
-- [[creure]], [[seure]], [[asseure]]
match = match_against_verbs("eure", {"cr", "s"}),
forms = {
stem = "ee",
pres_unstressed = "eie", -- affects pres_1p, pres_2p, gerund, imperfect (see [[caure]])
g_infix = "+",
}
},
{
-- [[jeure]], [[ajeure]]
match = "jeure",
forms = {
fut = "jaur", -- affects future and cond
stressed_stem = "jee", -- affects stressed forms, which get g added by g_infix by added except for
-- pres_stressed, which gets u added (controls pres_3s, pres_2s, pres_3p)
unstressed_stem = "jae", -- affects unstressed_stem, which get g added by g_infix
pres_stressed = {"jeu", "jau"},
pres_unstressed = "jaie", -- affects pres_1p, pres_2p, gerund, imperfect (see [[caure]])
pres_1s = {"jec", "jac"},
impf1 = "jei", -- otherwise we'd get impf_1s '#geia' etc.
impf2 = "jèi",
g_infix = "+",
}
},
{
match = "jaure",
like = "jeure",
},
{
-- [[treure]], [[abstreure]], [[atreure]], [[bestreure]], [[contreure]], [[detreure]], [[distreure]],
-- [[extreure]], [[retreure], [[retrotreure]], [[sostreure]]
match = "treure",
forms = {
-- like [[jeure]] except for irregular pp
fut = "traur",
stressed_stem = "tree",
unstressed_stem = "trae",
pres_stressed = {"treu", "trau"},
pres_unstressed = "traie",
pres_1s = {"trec", "trac"},
g_infix = "+",
pp = "tret",
}
},
{
match = "traure",
like = "treure",
},
{
-- [[veure]], [[entreveure]], [[preveure]], [[reveure]]
match = "veure",
forms = {
stem = "veie",
-- impf1s veia, impf1p vèiem (preceding vowel changed to è)
pres_stressed = "veu",
pres_1s = "vej", -- will be converted to 'veig'; 'veig' gets converted to 'veic'
pres_sub_stressed = "vegi",
pres_sub_unstressed = "vege",
pret = {"veié", "vé"},
pret_1s = "viu",
pret_3s = {"veié", "veu"},
impf_sub = "veié",
pp = "vist",
imp_2s = "veges",
imp_2p = {"vegeu", "veieu"},
irreg = true,
}
},
--------------------------------------------- -iure ----------------------------------------
{
-- [[escriure]], [[circumscriure]], [[descriure]], [[inscriure]], [[prescriure]], [[proscriure]],
-- [[subscriure]], [[transcriure]]
match = "scriure",
forms = {
stem = "scrivi", -- v dropped by g_infix before g and u; pres_1p/pres_2p have -ir endings
g_infix = "+",
pret = {"scriví", "scrigué"},
pp = "scrit",
}
},
{
-- [[riure]], [[somriure]]
match = "riure", -- must follow rule for 'scriure'
forms = {
stem = "rie",
-- impf1s reia, impf1p rèiem (preceding vowel changed to è)
g_infix = "+",
}
},
{
-- [[viure]], [[conviure]], [[desviure's]], [[sobreviure]]
match = "viure",
forms = {
stem = "vivi", -- v dropped by g_infix before g and u; pres_1p/pres_2p have -ir endings
g_infix = "visc", -- applies to pres1s, sub, pret, pp
}
},
--------------------------------------------- -oure ----------------------------------------
{
-- [[cloure]], [[concloure]], [[descloure]], [[encloure]], [[excloure]], [[incloure]], [[recloure]]
match = "cloure",
forms = {
stem = "cloe", -- ï in impf1s cloïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = "clòs#", -- remove final accent without prefix with vowel; also removed when adding a suffix
}
},
{
-- [[coure]] "to cook"
match = "coure",
var = "cook",
forms = {
stem = "coe", -- ï in impf1s coïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = "cuit",
}
},
{
-- [[coure]] "to sting"
match = "coure",
var = "sting",
forms = {
stem = "coe", -- ï in impf1s coïa gets generated automatically by combine_stem_ending()
g_infix = "+",
-- pp regular 'cogud'
}
},
{
-- [[moure]], [[promoure]], [[remoure]], [[somoure]], [[ploure]]
match = match_against_verbs("oure", {"m", "pl"}),
forms = {
stem = "ove", -- v dropped by g_infix before g and u
g_infix = "+",
}
},
{
-- [[noure]]
match = "noure",
forms = {
stem = "noe", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
}
},
--------------------------------------------- -xer ----------------------------------------
{
-- [[conèixer]], [[desconèixer]], [[reconèixer]]
match = "conèixer",
forms = {
g_infix = "coneg",
}
},
{
-- [[créixer]], [[acréixer]], [[decréixer]], [[recréixer]], [[sobrecréixer]]
match = "créixer",
forms = {
pret = {"creixé", "cresqué"},
pres_sub_unstressed = {"creixe", "cresque"},
pp = "crescud",
irreg = true,
}
},
{
-- [[merèixer]], [[desmerèixer]], [[irèixer-se]]
match = match_against_verbs("rèixer", {"me", "^i"}),
forms = {
pret = {"reixé", "resqué"},
pres_sub_unstressed = {"reixe", "resque"},
pp = "rescud",
irreg = true,
}
},
{
-- [[néixer]]/[[nàixer]], [[renéixer]]/[[renàixer]], [[sobrenéixer]]/[[sobrenàixer]], [[péixer]]/[[pàixer]]
match = match_against_verbs("éixer", {"n", "p"}),
forms = {
stem = "aixe",
fut = "aixer",
pres_stressed = {"eix", "aix"},
pres_1s = "eixo",
pret = {"aixé", "asqué"},
pres_sub_stressed = "eixi",
pres_sub_unstressed = {"aixe", "asque"},
pp = "ascud",
irreg = true,
}
},
{
match = "àixer",
like = "éixer",
},
{
-- [[parèixer]], [[aparèixer]], [[comparèixer]], [[desaparèixer]], [[reaparèixer]]
match = "parèixer",
forms = {
g_infix = "pareg",
}
},
--------------------------------------------- misc ----------------------------------------
{
-- [[cabre]]
match = "cabre",
forms = {
pres_sub_stressed = "càpiga",
pres_sub_unstressed = "capigue",
irreg = true,
}
},
{
-- [[caber]]
match = "caber",
like = "cabre",
},
{
-- [[saber]]
match = "saber",
forms = {
fut = "sabr",
pres_1s = "sé",
pres_sub_stressed = "sàpiga",
pres_sub_unstressed = "sapigue",
imp_2s = "sàpiga",
imp_2p = "sapigueu",
irreg = true,
}
},
{
-- [[poder]]
match = "poder",
forms = {
fut = "podr",
pres_1s = "puc",
pres_sub_stressed = "pugui",
pres_sub_unstressed = "pugue",
g_infix = "pog",
imp_2s = "pugues",
imp_2p = "pugueu",
irreg = true,
}
},
{
-- [[córrer]], [[acórrer]], [[concórrer]], [[decórrer]], [[descórrer]], [[discórrer]], [[encórrer]],
-- [[escórrer]], [[incórrer]], [[ocórrer]], [[recórrer]], [[socórrer]], [[transcórrer]]
match = "córrer",
forms = {
pret = "corregué",
pres_sub_unstressed = {"corre", "corregue"},
pp = "corregud",
irreg = true,
}
},
{
-- [[metre]], [[admetre]], [[arremetre]], [[cometre]], [[comprometre]], [[demetre]], [[descomprometre]],
-- [[emetre]], [[entremetre's]], [[escometre]], [[malmetre]], [[manumetre]], [[ometre]], [[permetre]],
-- [[prometre]], [[readmetre]], [[remetre]], [[retransmetre]], [[sotmetre]], [[trametre]], [[transmetre]]
match = "metre",
forms = {
pp = "mès#",
irreg = true,
}
},
--------------------------------------------------------------------------------------------
-- -ir --
--------------------------------------------------------------------------------------------
{
-- [[acudir]]; NOTE: Separation by meaning does not occur in DCC, DIEC, DEIEC, and DCVB says the distinction
-- is geographical and makes no mention of distinction by meaning. OTOH ca.wikt does say that the pronominal
-- sense "to occur" tends to conjugate non-inchoative.
match = "acudir",
forms = {
eix_infix = {{
form = "+",
footnotes = {'[especially in the sense "to turn up, to be present"]'}
}, {
form = "-",
footnotes = {'[especially in the pronominal sense "to occur"]'}
}}
}
},
-- [[afegir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[ajupir]]
-- [[buixir]]
-- [[bullir]], [[rebullir]]
-- [[cruixir]], [[escruixir]] (Routledge says this is inchoative but DIEC, DEIEC and DCC all disagree; note
-- pres_2s 'cruixes', handled automatically)
-- [[dormir]], [[adormir]]
-- [[funyir]]
-- [[grunyir]]
-- [[munyir]], [[esmunyir]]
-- [[pudir]]
-- [[punyir]]
-- [[retrunyir]]
-- [[sallir]]
-- [[sentir]], [[pressentir]], [[ressentir-se]]; not [[consentir]], with can be either non-inchoative or
-- inchoative, and not [[assentir]] or [[dissentir]], which are only inchoative
match = match_against_verbs("ir", {"ajup", "buix", "bull", "cruix", "dorm", "funy", "gruny", "muny", "pud",
"puny", "retruny", "^sent", "pressent", "^ressent", "sall"}),
forms = {
eix_infix = "-",
}
},
{
-- [[arrupir-se]];
-- [[brumir]];
-- [[brunzir]];
-- [[consumir]], [[resumir]], [[presumir]] (not [[sumir]], [[assumir]], [[subsumir]], which are regular)
-- [[mentir]], [[desmentir]]
-- [[percudir]]; cf. also [[acudir]], which to some extent has separate conjugations per meaning
-- [[consentir]]
match = match_against_verbs("ir", {"arrup", "brum", "brunz", "consum", "^resum", "presum", "ment", "percud",
"consent"}),
forms = {
eix_infix = {"+", "-"},
}
},
-- [[cenyir]]: -- non-inchoative or inchoative in Balearics, inchoative elsewhere
{
-- [[cobrir]], [[descobrir]], [[encobrir]], [[recobrir]], [[redescobrir]]
match = "cobrir",
forms = {
pp = "cobert",
irreg = true,
}
},
{
-- [[collir]], [[acollir]], [[escollir]], [[recollir]]
match = "collir",
forms = {
stressed_stem = "culli",
eix_infix = "-",
irreg = true,
}
},
{
-- [[complir]], [[acomplir]], [[incomplir]]
match = "complir",
forms = {
pp = {"complert", "complid"},
irreg = true,
}
},
{
-- [[cosir]], [[descosir]], [[recosir]]
match = "cosir",
forms = {
stressed_stem = "cusi",
pres_3s = "cús#",
eix_infix = "-",
irreg = true,
}
},
{
-- [[eixir]], [[deseixir-se]]; not [[teixir]] or [[entreteixir]], and not [[reeixir]] or [[sobreeixir]],
-- which have an ï in the stem-stressed forms
match = match_against_verbs("eixir", {"^", "des"}),
forms = {
stressed_stem = "ixi",
eix_infix = "-",
irreg = true,
}
},
{
-- [[reeixir]], [[sobreeixir]]
match = match_against_verbs("eixir", {"^re", "sobre"}),
forms = {
stressed_stem = "ïxi",
eix_infix = "-",
irreg = true,
}
},
-- [[engolir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[escopir]]
match = "escopir",
forms = {
stressed_stem = "escupi",
eix_infix = "-",
irreg = true,
}
},
{
-- [[establir]], [[preestablir]], [[restablir]]
match = "establir",
forms = {
pp = {"establert", "establid"},
irreg = true,
}
},
-- [[ferir]]: -- non-inchoative in Balearics, inchoative elsewhere
-- [[fregir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[fugir]], [[confugir]], [[defugir]], [[enfugir-se]]; pres sing ''fujo, fuges, fuig'' handled by
-- combine_stem_ending(); can't be handled by rule above that lists many non-inchoative verbs because the
-- prefix would be 'fug' and the front-back alternation code doesn't apply to prefixes.
match = "fugir",
forms = {
eix_infix = "-",
}
},
{
-- [[imprimir]], [[reimprimir]], [[sobreimprimir]]; not any other verbs in -primir; write it this way so
-- there's a prefix with a vowel to prevent against the accent in the pp from being removed while still
-- removing it in the feminine.
match = match_against_verbs("primir", {"im"}),
forms = {
pp = "près#",
irreg = true,
}
},
-- [[llegir]]: -- non-inchoative in Valencia and Minorca, inchoative elsewhere
{
-- [[lluir]]: regular inchoative in the figurative meaning "to display (something), to be showy" also in the
-- legal meaning "free from a pecuniary obligation, such as a land-based tax (emphyteusis)"; irregular in the
-- literal meaning "to shine"; use <no_built_in> to get regular conjugation. In the regular conjugation,
-- umlauts appear in the following forms: pres_1p/pres_sub_1p/imp_1p lluïm, pres_2p/pres_sub_2p/imp_2p lluïu,
-- impf_1s/impf_3s lluïa, impf_2s lluïes, impf_3p lluïen, pret_2s lluïres, pret_3p lluïren,
-- impf_sub_2s lluïssis, impf_sub_3p lluïssin, throughout the pp: lluït, lluïda, lluïts, lluïdes. IN the
-- irregular conjugation, umlauts appear in the same places as well as elsewhere in the present subjunctive:
-- pres_sub_1s/pres_sub_3s/imp_3s lluï, pres_sub_2s lluïs, pres_sub_3p/imp_3p lluïn. Notably, they do *NOT*
-- appear in the gerund lluint, the infinitive lluir, or anywhere in the future or conditional. Note that
-- verbs.cat [https://www.verbs.cat/en/conjugation/899-lluir.html] lists additional irregular forms pres_1s
-- lluu, and alternative impf_sub forms in -e- instead of -i- (lluïsses, lluíssem, lluísseu, lluïssen), but
-- these are nonstandard or dialectal per both Routledge and DEIEC.
match = "^lluir",
forms = {
eix_infix = "-",
pres3s = {"lluu", "llu"}, -- generates pres_2s, imp_2s
irreg = true,
}
},
{
-- [[entrelluir]] "to be half-seen", [[relluir]] "to shine", [[traslluir-se]] "to be translucent"; either
-- inchoative or non-inchoative, not distinguished by meaning; note, [[deslluir]] and [[enlluir]] are regular
-- inchoative verbs.
match = match_against_verbs("lluir", {"entre", "^re", "tras"}),
forms = {
eix_infix = {"+", "-"},
pres3s = {"llueix", "lluu", "llú"}, -- generates pres_2s, imp_2s; note, pres_2s will end in -es due to
-- combine_stem_ending()
irreg = true,
}
},
{
-- [[morir]], [[premorir]]; but not [[atemorir]]
match = match_against_verbs("morir", {"^", "pre"}),
forms = {
eix_infix = "-",
pp = "mort",
irreg = true,
}
},
{
-- [[obrir]], [[entreobrir]], [[reobrir]]; not [[cobrir]] and derivatives, not [[empobrir]], so we have to list
-- them individually
match = match_against_verbs("obrir", {"^", "entre", "^re"}),
forms = {
eix_infix = "-",
pp = "obert",
irreg = true,
}
},
{
-- [[oferir]]; but not [[proferir]]
match = "^oferir",
forms = {
pp = {"ofert", "oferid"},
irreg = true,
}
},
-- [[oir]], [[desoir]], [[entreoir]]: -- per Routledge, non-inchoative or inchoative normally but only
-- non-inchoative in Valencian; but all dictionaries disagree and say it is a regular inchoative-only verb.
-- It has the same umlauts as lluir (and [[corroir]], another regular inchoative verb).
{
-- [[omplir]], [[desomplir-se]], [[reomplir]]; not [[complir]] and derivatives, so we have to list them
-- individually
match = match_against_verbs("omplir", {"^", "des", "^re"}),
forms = {
eix_infix = "-",
pp = {"omplert", "omplid"},
irreg = true,
}
},
-- [[penedir-se]]: -- non-inchoative in Balearics, inchoative elsewhere
{
-- [[pruir]] "to itch": same umlauts as in [[lluir]].
match = "^pruir",
forms = {
eix_infix = "-",
pres3s = {"pruu", "pru"}, -- generates pres_2s, imp_2s
irreg = true,
}
},
{
-- [[reblir]]
match = "^reblir",
forms = {
pp = {"reblert", "reblid"},
irreg = true,
}
},
-- [[renyir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[sofrir]]
match = "^sofrir",
forms = {
pp = {"sofert", "sofrid"},
irreg = true,
}
},
{
-- [[sortir]], [[ressortir]], [[sobresortir]]; but not [[assortir]], which is regular inchoative
match = match_against_verbs("sortir", {"^", "^res", "sobre"}),
forms = {
stressed_stem = "surti",
eix_infix = "-",
irreg = true,
}
},
{
-- [[suplir]]
match = "^suplir",
forms = {
pp = {"suplert", "suplid"},
irreg = true,
}
},
-- [[teixir]], [[entreteixir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[tenir]] but not any compounds; highly irregular
match = "^tenir",
forms = {
fut = "tindr",
pres_stressed = "ten",
pres_3s = "té",
imp_2s = {"té", "ten", "tingues"},
imp_2p = {"teniu", "tingueu"},
g_infix = "ting",
}
},
{
-- [[abstenir-se]], [[atenir-se]], [[captenir-se]], [[cartenir]], [[contenir]], [[detenir]], [[entretenir]],
-- [[mantenir]], [[menystenir]], [[obtenir]], [[retenir]], [[sostenir]], [[viltenir]]; highly irregular
match = "tenir",
forms = {
fut = "tindr",
pres_stressed = "ten",
pres_3s = "té",
imp_2s = {"tén", "tingues"},
imp_2p = {"teniu", "tingueu"},
g_infix = "ting",
}
},
{
-- [[tindre]]: variant of [[tenir]]
match = "tindre",
like = "tenir",
},
-- [[tenyir]], [[destenyir]]: -- non-inchoative in Valencia, but [[retenyir]] inchoative or non-inchoative in
-- Valencia? (per Routledge); regular inchoative elsewhere
{
-- [[tossir]] "to cough"
match = "^tossir",
forms = {
stressed_stem = "tussi", -- pres_2s gets 'tusses'
pres_3s = "tus", -- note, pres_3s (a single form override) not pres3s (a stem override, which also affects
-- pres_2s; but imp_2s is physically copied from pres_3s, so imp_2s correctly gets 'tus')
eix_infix = "-",
irreg = true,
}
},
{
-- [[venir]] but not any compounds; highly irregular
match = "^venir",
forms = {
fut = "vindr",
pres_stressed = "ven",
pres_3s = "ve",
imp_2s = "vine",
g_infix = "ving",
}
},
{
-- compounds of [[venir]]: [[advenir]], [[avenir]], [[contravenir]], [[convenir]], [[desavenir-se]],
-- [[desconvenir]], [[entrevenir]], [[esdevenir]], [[intervenir]], [[obvenir]], [[pervenir]], [[prevenir]],
-- [[provenir]], [[reconvenir]], [[revenir]], [[sobrevenir]], [[subvenir]]; but not [[enjovenir]] or
-- [[rejovenir]]; highly irregular
match = match_against_verbs("venir", {"^ad", "^a", "contra", "con", "desa", "entre", "esde", "inter", "ob",
"per", "pre", "pro", "^re", "sobre", "sub"}),
forms = {
fut = "vindr",
pres_stressed = "ven",
pres_3s = "vé",
imp_2s = "vén",
g_infix = "ving",
}
},
{
-- [[vindre]]: variant of [[venir]]
match = "vindre",
like = "venir",
},
-- [[vestir]], [[desvestir]], [[revestir]], maybe [[transvestir]]: non-inchoative in Valencia, inchoative or
-- non-inchoative in the Balearics; regular inchoative elsewhere; but not [[envestir]] or [[investir]], which are
-- regular inchoative everywhere
{
-- [[fer]], [[contrafer]], [[desfer]], [[estrafer]], [[perfer]], [[refer]], [[satisfer]]; highly irregular
match = "fer",
forms = {
fut = "far",
pres_1s = "faj", -- will be converted to 'faig'; 'faig' gets converted to 'faic'
pres_2s = "fàs#",
pres_3s = "fà#",
pres_3p = "fan",
pres_unstressed = "fe",
impf1 = "fei",
impf2 = "fèi",
pres_sub_stressed = "faci",
pres_sub_unstressed = "fe",
pret = "fé",
pret_1s = "fiu",
pret_3s = "feu",
impf_sub_1s = "fés#", -- regular except for base form [[fes]], lacking an accent
impf_sub_3s = "fés#", -- same
imp_2s = "fés#",
pp = "fet",
irreg = true,
}
},
{
-- [[dir]], [[adir-se]], [[contradir]], [[desdir]], [[entredir]], [[interdir]], [[maldir]], [[predir]], [[redir]];
-- behaves like an -er/-re verb
match = match_against_verbs("dir", {"^", "^a", "contra", "des", "entre", "inter", "mal", "pre", "^re"}),
forms = {
stem = "die",
g_infix = "+",
imp_2s = "digues",
imp_2p = "digueu",
pp = "dit",
}
},
{
-- [[dur]], [[endur-se]]; behaves like an -er/-re verb
match = "dur",
forms = {
stem = "due",
g_infix = "+",
pres3s = {"duu", "du"}, -- generates pres_2s, imp_2s
impf1 = "dui",
impf2 = "dúi",
pp = "dut",
}
},
{
-- [[ser]]; highly irregular
match = "^ser",
forms = {
pres_1s = "soc",
pres_2s = "ets",
pres_3s = "és",
pres_1p = "som",
pres_2p = "sou",
pres_3p = "són",
impf1 = "er",
impf2 = "ér",
pres_sub_stressed = "sigui",
pres_sub_unstressed = "sigue",
pret = "fó",
pret_1s = "fui",
pret_3s = "fou",
impf_sub_1s = "fos", -- regular except for lack of accent
impf_sub_3s = "fos", -- same
cond = {"serí", "fór"},
imp_2s = "sigues",
imp_2p = "sigueu",
pp = {"estad", "sigud"},
gerund = {"sent", "essent"},
irreg = true,
}
},
{
-- [[ésser]]; variant of [[ser]]
match = "^ésser",
like = "ser",
},
{
-- [[haver]] as auxiliary; highly irregular
match = "^haver",
var = "aux",
forms = {
pres_1s = "he",
pres_2s = "has",
pres_3s = "ha",
pres_1p = "hem",
pres_2p = "heu",
pres_3p = "han",
fut = "haur",
cond = {"haurí", "haguér"},
pres_sub_stressed = "hagi",
pres_sub_unstressed = "hàgi",
noimp = true,
g_infix = "+",
}
},
{
-- [[haver]] as full verb; highly irregular
match = "^haver",
var = "full",
forms = {
pres_1s = {"hec", "hac"},
pres_stressed = {"heu", "hau"},
fut = "haur",
pres_sub_stressed = "hegui",
g_infix = "+",
}
},
{
-- [[heure]]; variant of full verb [[haver]]
match = "^heure",
like = "haver",
likevar = "full",
},
{
-- [[haure]]; variant of full verb [[haver]]
match = "^haure",
like = "haver",
likevar = "full",
},
}
local function skip_slot(base, slot, allow_overrides)
if not allow_overrides and (base.basic_overrides[slot] or
base.refl and base.basic_reflexive_only_overrides[slot]) then
-- Skip any slots for which there are overrides.
return true
end
if base.only3s and (slot:find("^pp_f") or slot:find("^pp_mp")) then
-- diluviar, atardecer, neviscar; impersonal verbs have only masc sing pp
return true
end
if not slot:find("[123]") then
-- Don't skip non-personal slots.
return false
end
if base.nofinite then
return true
end
if (base.only3s or base.only3sp or base.only3p) and (slot:find("^imp_") or slot:find("^neg_imp_")) then
return true
end
if base.only3s and not slot:find("3s") then
-- diluviar, atardecer, neviscar
return true
end
if base.only3sp and not slot:find("3[sp]") then
-- atañer, concernir
return true
end
if base.only3p and not slot:find("3p") then
-- [[caer cuatro gotas]], [[caer chuzos de punta]], [[entrarle los siete males]]
return true
end
return false
end
local function add_stem_ending(stem, ending)
if ending == "" then
return stem
end
if stem:find("#$") then -- remove final accent when adding a suffix
stem = com.remove_accents((stem:gsub("#$", "")), "final syllable only")
end
return stem .. ending
end
local function process_stem(stem, fn)
if stem:find("#$") then
local stem_no_pound_sign = stem:match("^(.*)#$")
return fn(stem_no_pound_sign) .. "#"
else
return fn(stem)
end
end
-- Add the `stem` to the `ending` and apply any phonetic modifications. `is_full_word` indicates that we're creating
-- a "full word" not a stem, and turns on devoicing of final consonants. `dont_include_prefix` is used when creating
-- stems and indicates not to prepend the prefix in `base.prefix` to the result. `is_pres_sub_stressed` is used when
-- creating the pres_sub_stressed stem, to correctly handle both [[desaiguar]] and [[argüir]], whose respective
-- interactions between ü and i/ï are very tricky.
--
-- WARNING: This function is written very carefully; changes to it can easily have unintended consequences.
local function combine_stem_ending(base, stem, ending, is_full_word, dont_include_prefix, is_pres_sub_stressed)
-- Include the prefix in the stem unless dont_include_prefix is given (used in construct_stems()), or the value of
-- `stem` comes from a user-specified stem or form override.
if not dont_include_prefix and not stem:find(IS_USER_STEM_OVERRIDE) and not stem:find(IS_USER_FORM_OVERRIDE) then
stem = base.prefix .. stem
end
-- A * at the beginning of the ending is a signal to remove a stressed accent from the stem. This may feed any of
-- the following rules.
if ending:find("^%*") then
ending = ending:gsub("^%*", "")
stem = com.remove_accents(stem, "final syllable only")
end
-- If ending begins with s and stem ends in a sibilant, we need an e in between; cf. pres_2s 'apareixes' of
-- [[aparèixer]], pres_2s 'torces' of [[tòrcer]], pres_2s 'fuges' of [[fugir]], pres_2s 'brunzes' of [[brunzir]].
-- This may feed the next rule.
if ending:find("^s") and rfind(stem, "[çjsxz]$") then
ending = "e" .. ending
end
-- By default, stems are in their "back" (standalone) form. Before a front vowel, convert the final consonant to
-- its "front" form so the pronunciation doesn't change.
if rfind(ending, "^" .. front_vowel_c) then
-- adequar -> adeqües
-- enaiguar -> enaigües
-- pegar -> pegues
-- arranjar -> arranges
-- marcar -> marques
-- abraçar -> abraces
stem = com.back_to_front(stem)
end
-- Ending beginning in -i after diphthong ending in V + i compresses the two i's into one (cf. pret_1s 'desmaí' and
-- pres_sub_1s 'desmaï' of [[desmaiar]]). This rule doesn't apply after pseudo-vowel u in gu/qu; cf. pret_1s 'guií'
-- of [[guiar]] and contrast pret_1s 'cruí' of [[cruiar]]. This may feed the next rule.
if rfind(ending, "^[iíï]") and rfind(stem, V .. "i$") and not rfind(stem, "[gq][uü]i$") then
stem = stem:gsub("i$", "")
end
-- If ending begins with i (not í), it must get a diaeresis after a true vowel (not gu/qu, cf. pres_1p 'delinquim'
-- of [[delinquir]], not '#delinquïm'; also not a diphthong ending in u, cf. pres_sub_1s 'apreui' of [[apreuar]]
-- not '#apreuï') to prevent the two merging into a diphthong. Note that ü -> u before ï, but to simplify things
-- we leave the double umlauts in place and remove the first one during postprocessing, in fix_double_umlauts().
-- Cf.:
-- * impf_1s 'raïa' of [[raure]];
-- * pres_sub_1s 'creï' of [[crear]];
-- * pres_sub_1s 'associï' of [[associar]];
-- * impf_1s 'cloïa' of [[cloure]];
-- * pres_1p 'lluïm' of [[lluir]];
-- * pres_1p 'arguïm' of [[argüir]].
if ending:find("^i") and rfind(stem, "[aeiouü]$") and not stem:find("[aeiogq]u$") and
-- Unstressed subjunctive endings of [[enaiguar]] remain without umlaut: enaigüi/enaigüis/enaigüin;
-- but stressed endings of [[argüir]] that begin with 'i' do get an umlaut: arguït, impf. arguïa, including
-- stressed subjunctive endings arguïm/arguïu. In both cases the ending is '-i' as part of the creation of
-- the respective stems. There seems no way of distinguishing the two cases other than with a special flag.
not (rfind(stem, "[gq]ü$") and ending == "i" and is_pres_sub_stressed) then
ending = ending:gsub("^i", "ï")
end
local retval = add_stem_ending(stem, ending)
if retval:find("#$") then -- remove final accent if no vowels in prefix
retval = retval:gsub("#$", "")
if not rfind(base.prefix, V) then
retval = com.remove_accents(retval, "final syllable only")
end
end
if is_full_word then
local saw_is_user_form_override
retval, saw_is_user_form_override = rsubb(retval, IS_USER_FORM_OVERRIDE, "")
retval = retval:gsub(IS_USER_STEM_OVERRIDE, "")
if not saw_is_user_form_override then
-- Devoice final voiced obstruent (cf. pres_2s 'caps', pres_3s 'cap' of [[cabre]]). But not after a
-- consonant (cf. pres_2s 'perds', pres_3s 'perd' of [[perdre]]), except for g -> c, which operates
-- even after a consonant (pres_1s 'resolc' of [[resoldre]], pres_1s 'tinc' of [[tenir]]).
retval = retval:gsub("g(s?)$", "c%1")
retval = rsub(retval, "(" .. V .. ")([bdj])(s?)$", function(before, voiced, after)
local devoice = {
b = "p",
d = "t",
j = "ig", -- pres_3s 'fuj' of [[fugir]] -> 'fuig'
}
return before .. devoice[voiced] .. after
end)
end
end
return retval
end
local function add3(base, slot, stems, endings, footnotes, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(base, stem, ending, "is full word")
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil, footnotes)
end
local function insert_form(base, slot, form)
if not skip_slot(base, slot) then
iut.insert_form(base.forms, slot, form)
end
end
local function insert_forms(base, slot, forms)
if not skip_slot(base, slot) then
iut.insert_forms(base.forms, slot, forms)
end
end
local function add_single_stem_tense(base, slot_pref, stems, s1, s2, s3, p1, p2, p3)
local function addit(slot, ending)
add3(base, slot_pref .. "_" .. slot, stems, ending)
end
addit("1s", s1)
addit("2s", s2)
addit("3s", s3)
addit("1p", p1)
addit("2p", p2)
addit("3p", p3)
end
local function map_general(stemforms, fn)
return iut.map_forms(iut.convert_to_general_list_form(stemforms), fn)
end
local function flatmap_general(stemforms, fn)
return iut.flatmap_forms(iut.convert_to_general_list_form(stemforms), fn)
end
-- Given a stem ending in a conjugation vowel -a/-e/-i/-ï, split into stem base and conjugation vowel, converting the
-- stem base to "back" form if the conjugation vowel is front (hence 'torce' of [[tòrcer]] splits into 'torç' and 'e',
-- and 'fugi' of [[fugir]] splits into 'fuj' and 'i').
local function split_conj_vowel(stem)
local stem_base, conj_vowel = rmatch(stem, "^(.*)([aeiï])$")
if not stem_base then
error(("Internal error: Stem '%s' doesn't end in conjugation vowel a/e/i"):format(stem))
end
if conj_vowel == "ï" then
-- To simplify handling of ï, convert to i. It will be converted back to ï as necessary in
-- combine_stem_ending().
conj_vowel = "i"
end
if rfind(conj_vowel, front_vowel_c) then
stem_base = com.front_to_back(stem_base)
end
return stem_base, conj_vowel
end
local function construct_stems(base)
base.output_stems = {}
local stems = base.output_stems
local bst = base.input_stems
-- YUCK, see combine_stem_ending() for the necessity of is_pres_sub_stressed.
local function combine(stem, ending, is_pres_sub_stressed)
return combine_stem_ending(base, stem, ending, false, "dont include prefix", is_pres_sub_stressed)
end
stems.irreg = bst.irreg or bst.g_infix
-- NOTE: Some stems end in a conjugation or similar vowel, specifically:
-- * `stem` (ends in conjugation vowel -a/-e/-i);
-- * `stressed_stem` (likewise);
-- * `unstressed_stem` (likewise);
-- * `pres_unstressed` (which assumes the form of the gerund minus the -nt; note that `pres_stressed` does *NOT*
-- end in a conjugation vowel, but assumes the stem form; the value of pres_3s will be derived by adding -a for
-- -ar verbs and otherwise adding an -e prop vowel when required, as in [[cobrir]], and otherwise adding no
-- vowel);
-- * `pres_sub_stressed` (which assumes the form of pres_sub_3s and hence usually ends in -i, occasionally -a);
-- * `pres_sub_unstressed` (which assumes the form of pres_sub_1p minus the -m, hence ends in -e or -i).
-- Save stem for use in add_categories_and_annotation() for determining the conjugation class.
stems.stem = bst.stem or base.stem
local eix_infix_stem
if base.conj_vowel == "i" then
-- Save eix_infix value for use in add_categories_and_annotation() for determining whether consonant
-- alternations exist.
stems.eix_infix = bst.eix_infix or bst.g_infix and "-" or "+"
eix_infix_stem = flatmap_general(stems.eix_infix, function(form)
if form == "+" then
return map_general(stems.stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, "eixe")
end)
elseif form == "-" then
return stems.stem
else
return form
end
end)
end
local stressed_stem = bst.stressed_stem or eix_infix_stem or stems.stem
local unstressed_stem = bst.unstressed_stem or stems.stem
-- Add the 'g' that is characteristic of g-infix verbs. We remove a stem-final v, e.g. [[beure]] with stem 'beve'
-- becomes 'beg'.
local function add_g(stemforms)
return map_general(stemforms, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
stem_base = stem_base:gsub("v$", "")
return combine(stem_base, "g")
end)
end
-- Add the 'u' of the pres_3s that is characteristic of g-infix verbs (and conjugation vowel 'e', later removed).
-- We remove a stem-final v, as well as i as part of a diphthong, e.g. [[beure]] with stem 'beve' becomes 'beue'
-- and [[veure]] with stem 'veie' becomes 'veue' (but [[riure]] with stem 'rie' becomes 'riue' not '#rue'). We
-- don't add -u after a consonant, e.g. [[doldre]] with stem 'dole' becomes 'dole' not '#dolue'.
local function add_u(stemforms)
return map_general(stemforms, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
if stem_base:find("v$") then
stem_base = stem_base:gsub("v$", "")
else
stem_base = rsub(stem_base, "(" .. V .. ")i$", "%1")
end
-- Add u after vowel but not after another u, so we get pres_3p 'duen' of [[dur]] not '#duuen'.
if rfind(stem_base, V .. "$") and not stem_base:find("u$") then
return combine(stem_base, "u")
else
return stem_base
end
end)
end
local stressed_g_infix, unstressed_g_infix, g_infix_pres_stressed
if bst.g_infix then
local function flatmap_g_infix(default)
return flatmap_general(bst.g_infix, function(form)
if form == "+" then
return default
else
return form
end
end)
end
stressed_g_infix = flatmap_g_infix(add_g(stressed_stem))
unstressed_g_infix = flatmap_g_infix(add_g(unstressed_stem))
g_infix_pres_stressed = add_u(stressed_stem)
end
stems.pres_unstressed = bst.pres_unstressed or unstressed_stem
stems.pres_stressed =
-- If no_pres_stressed given, pres_stressed stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
bst.pres_stressed or
g_infix_pres_stressed or
map_general(stressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return stem_base
end)
stems.pres1s =
-- If no_pres_stressed given, pres1s stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
stressed_g_infix or
map_general(stems.pres_stressed, function(form)
return combine(form, "o")
end)
stems.pres3s =
-- If no_pres_stressed given, pres3s stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
bst.pres3s or
map_general(stems.pres_stressed, function(form)
if base.conj_vowel == "a" then
return combine(form, "a")
elseif rfind(form, C .. "[lr]$") and not rfind(form, V .. "ll$") then
return combine(form, "e")
else
return form
end
end)
stems.pres3p =
-- If no_pres_stressed given, pres3p stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
map_general(stems.pres_stressed, function(form)
return combine(form, "en")
end)
local function compute_impf_stem(with_accent)
return map_general(stems.pres_unstressed, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
if conj_vowel == "a" then
return combine(stem_base, with_accent and "àv" or "av")
elseif stem_base:find("i#?$") then
form = form:gsub("i#?$", "")
return combine(rmatch(stem_base, "^(.-)" .. V .. "*$"), with_accent and "èi" or "ei")
else
return combine(stem_base, with_accent and "í" or "i") -- i -> ï after a vowel
end
end)
end
stems.impf1 = bst.impf1 or compute_impf_stem(false)
stems.impf2 = bst.impf2 or compute_impf_stem(true)
stems.pret = bst.pret or
unstressed_g_infix and map_general(unstressed_g_infix,
function(form) return combine(form, "é") end
) or
map_general(unstressed_stem, function(form)
local accent_conj_vowel = {
a = "à",
e = "é",
i = "í",
}
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, accent_conj_vowel[conj_vowel])
end)
stems.fut = bst.fut or base.inf_stem
stems.cond = bst.cond or map_general(stems.fut, function(form) return combine(form, "í") end)
stems.pres_sub_stressed = bst.pres_sub_stressed or
stressed_g_infix and map_general(stressed_g_infix, function(form) return combine(form, "i") end) or
map_general(stressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, "i", "is pres_sub_stressed")
end)
stems.pres_sub_unstressed = bst.pres_sub_unstressed or
unstressed_g_infix and map_general(unstressed_g_infix, function(form) return combine(form, "e") end) or
map_general(unstressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, conj_vowel == "i" and conj_vowel or "e")
end)
stems.impf_sub = bst.impf_sub or map_general(stems.pret, function(form)
local stem_base = rmatch(form, "^(.*)à$") -- already in "back" form, no need to convert
if stem_base then
return combine(stem_base, "é")
else
return form
end
end)
stems.pp = bst.pp or
unstressed_g_infix and map_general(unstressed_g_infix,
function(form) return combine(form, "ud") end
) or
map_general(unstressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
-- use combine() so we get 'abduïd' from 'abdu-' of [[abduir]], 'seguid' from 'seg-' from [[seguir]], etc.
return combine(stem_base, (conj_vowel == "e" and "u" or conj_vowel) .. "d")
end)
end
local function a_to_e(base, stems, suffix)
return map_general(stems, function(form)
local stem_base = form:match("^(.-)a$")
if stem_base then
suffix = "e" .. suffix
else
stem_base = form
end
return combine_stem_ending(base, stem_base, suffix, "is full word")
end)
end
local function add_present_indic(base)
local stems = base.output_stems
local function addit(slot, stems, ending)
add3(base, "pres_" .. slot, stems, ending)
end
addit("1s", stems.pres1s, "")
insert_forms(base, "pres_2s", a_to_e(base, stems.pres3s, "s"))
addit("3s", stems.pres3s, "")
insert_forms(base, "pres_1p", a_to_e(base, stems.pres_unstressed, "m"))
insert_forms(base, "pres_2p", a_to_e(base, stems.pres_unstressed, "u"))
addit("3p", stems.pres3p, "")
end
local function add_present_subj(base)
local stems = base.output_stems
local function addit(slot, stems, ending)
add3(base, "pres_sub_" .. slot, stems, ending)
end
-- Regular -ar verb: [[amar]]: ami, amis, ami, amem, ameu, amin
-- Regular -re verb: [[batre]]: bati, batis, bati, batem, bateu, batin (same as -ar verb)
-- Regular -ir verb, no -eix- infix: [[dormir]]: dormi, dormis, dormi, dormim, dormiu, dormin
-- Regular -ir verb, -eix- infix: [[imprimir]]: imprimeixi, imprimeixis, imprimeixi, imprimim, imprimiu, imprimeixin
-- Stem changing in 123s/3p vs. 12p:
-- * -eix- infix (-eix- in all stressed forms: 123s/3p of pres ind/sub, 2s imp)
-- * [[collir]]: culli, cullis, culli, collim, colliu, cullin (cull- in all stressed forms)
-- * [[cabre]]: càpiga, càpigues, càpiga, capiguem, capigueu, càpiguen (also different endings)
addit("1s", stems.pres_sub_stressed, "")
insert_forms(base, "pres_sub_2s", a_to_e(base, stems.pres_sub_stressed, "s"))
addit("3s", stems.pres_sub_stressed, "")
addit("1p", stems.pres_sub_unstressed, "m")
addit("2p", stems.pres_sub_unstressed, "u")
insert_forms(base, "pres_sub_3p", a_to_e(base, stems.pres_sub_stressed, "n"))
end
local function add_finite_non_present(base)
local stems = base.output_stems
local function add_tense(slot, stem, s1, s2, s3, p1, p2, p3)
add_single_stem_tense(base, slot, stem, s1, s2, s3, p1, p2, p3)
end
add_tense("impf", stems.impf1, "a", "es", "a", nil, nil, "en")
add_tense("impf", stems.impf2, nil, nil, nil, "em", "eu", nil)
-- pret_1s ends in -í regardless of the normal vowel of the stem.
insert_forms(base, "pret_1s", map_general(stems.pret, function(form)
local stem_base, conj_vowel = rmatch(form, "^(.*)(" .. V .. ")$")
if not stem_base then
error(("Internal error: Preterite stem '%s' doesn't end in vowel"):format(form))
end
if rfind(conj_vowel, front_vowel_c) then
stem_base = com.front_to_back(stem_base)
end
-- Use combine_stem_ending() to handle back-to-front conversions, e.g. pegà -> peguí for [[pegar]] and ensure
-- that the prefix gets added.
return combine_stem_ending(base, stem_base, "í", "is full word") end))
-- * at the beginning of the ending means to remove an accent from the last vowel of the preterite stem.
add_tense("pret", stems.pret, nil, "*res", "", "rem", "reu", "*ren")
-- * at the beginning of the ending means to remove an accent from the last vowel of the imperfect subjunctive stem.
add_tense("impf_sub", stems.impf_sub, "s", "*ssis", "s", "ssim", "ssiu", "*ssin")
add_tense("fut", stems.fut, "é", "às", "à", "em", "eu", "an")
add_tense("cond", stems.cond, "*a", "*es", "*a", "em", "eu", "*en")
end
local function add_non_finite_forms(base)
local stems = base.output_stems
local function addit(slot, stems, ending, footnotes)
add3(base, slot, stems, ending, footnotes)
end
insert_form(base, "infinitive", {form = base.orig_verb})
-- Also insert "infinitive + reflexive pronoun" combinations if we're handling a reflexive verb. See comment below
-- for "gerund + reflexive pronoun" combinations.
if base.refl then
for _, persnum in ipairs(person_number_list) do
insert_form(base, "infinitive_" .. persnum, {form = base.orig_verb})
end
end
-- Gerunds don't have an umlaut over the i in cases like 'abduint' of 'abduir' (not '#abduïnt').
local pres_unstressed_no_umlaut = map_general(stems.pres_unstressed, function(form)
return rsub(form, "ï$", "i")
end)
addit("gerund", pres_unstressed_no_umlaut, "nt")
-- Also insert "gerund + reflexive pronoun" combinations if we're handling a reflexive verb. We insert exactly the
-- same form as for the bare gerund; later on in add_reflexive_or_fixed_clitic_to_forms(), we add the appropriate
-- clitic pronouns. It's important not to do this for non-reflexive verbs, because in that case, the clitic
-- pronouns won't be added, and {{ca-verb form of}} will wrongly consider all these combinations as possible
-- inflections of the bare gerund. Thanks to [[User:JeffDoozan]] for this bug fix.
if base.refl then
for _, persnum in ipairs(person_number_list) do
addit("gerund_" .. persnum, pres_unstressed_no_umlaut, "nt")
end
end
addit("pp_ms", stems.pp, "")
if not base.pp_inv then
addit("pp_fs", stems.pp, "a")
-- make_plural() handles the complexities of e.g. 'vist' of [[veure]] -> 'vistos'/'vists' and 'romàs' of
-- [[romandre]] -> 'romasos'. We need to use flatmap_general() because make_plural() may return more than one
-- plural, and we need to use map_general() on the result, applying combine_stem_ending(), to ensure that
-- prefixes get properly added and plurals like 'amads' of stem 'amad' of [[amar]] get converted to 'amats'.
insert_forms(base, "pp_mp", map_general(flatmap_general(stems.pp, function(form)
-- Remove any # indicating that an accent will be dropped; it will be dropped in any case by make_plural().
form = form:gsub("#$", "")
return com.make_plural(form, "m")
end), function(form)
return combine_stem_ending(base, form, "", "is full word")
end))
addit("pp_fp", stems.pp, "es")
end
end
local function add_imperatives(base)
if base.noimp then
return
end
-- Copy pres3s to imperative since they are almost always the same.
insert_forms(base, "imp_2s", iut.map_forms(base.forms.pres_3s, function(form) return form end))
-- Copy pres2p to imperative plural since they are almost always the same.
insert_forms(base, "imp_2p", iut.map_forms(base.forms.pres_2p, function(form) return form end))
-- Copy subjunctives to imperatives.
for _, persnum in ipairs({"3s", "1p", "3p"}) do
local from = "pres_sub_" .. persnum
local to = "imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form) return form end))
end
end
local function fix_double_umlauts(base)
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
form.form = form.form:gsub("üï", "uï")
end
end
end
local function process_slot_overrides(base, filter_slot, reflexive_only)
local overrides = reflexive_only and base.basic_reflexive_only_overrides or base.basic_overrides
for slot, forms in pairs(overrides) do
if not filter_slot or filter_slot(slot) then
add3(base, slot, forms, "", nil, "allow overrides")
end
end
end
local function link_clitic(clitic)
return (clitic:gsub("([^ %-]+)", "[[%1]]"))
end
-- Prefix `form` with `clitic`, adding fixed text `between` between them. Add links as appropriate unless the user
-- requested no links. Check whether form already has brackets (as will be the case if the form has a fixed clitic).
local function prefix_clitic_to_form(base, clitic, between, form)
if base.alternant_multiword_spec.args.noautolinkverb then
return clitic .. between .. form
else
local clitic_pref = link_clitic(clitic) .. between
if form:find("%[%[") then
return clitic_pref .. form
else
return clitic_pref .. "[[" .. form .. "]]"
end
end
end
-- Suffix `form` with `clitic`. Add links as appropriate unless the user requested no links. Check whether form already
-- has brackets (as will be the case if the form has a fixed clitic).
local function suffix_clitic_to_form(base, clitic, form)
local autolink = not base.alternant_multiword_spec.args.noautolinkverb
if base.alternant_multiword_spec.args.noautolinkverb then
return form .. clitic
else
local clitic_suf = link_clitic(clitic)
if form:find("%[%[") then
return form .. clitic_suf
else
return "[[" .. form .. "]]" .. clitic_suf
end
end
end
-- Add a reflexive pronoun or fixed clitic (FIXME: not working), as appropriate to the base forms that were generated.
-- `do_joined` means to do only the forms where the pronoun is joined to the end of the form; otherwise, do only the
-- forms where it is not joined and precedes the form.
local function add_reflexive_or_fixed_clitic_to_forms(base, do_reflexive, do_joined)
for _, slotaccel in ipairs(base.alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
local persnum
if slot:find("[123]") then
persnum = slot:match("^.*_(.-)$")
else
persnum = "3s"
end
local function get_proclitic(form)
--if not do_reflexive then
-- return base.clitic
if form:find("^[aeiouh]") then
return proclitic_elided_person_number_to_reflexive_pronoun[persnum]
else
return proclitic_non_elided_person_number_to_reflexive_pronoun[persnum]
end
end
local function get_enclitic(form)
--if not do_reflexive then
-- return base.clitic
if rfind(form, C .. "$") or rfind(form, V .. "[iu]$") and not form:find("[gq]ui$") then
return enclitic_non_elided_person_number_to_reflexive_pronoun[persnum]
else
return enclitic_elided_person_number_to_reflexive_pronoun[persnum]
end
end
if base.forms[slot] then
if do_reflexive and slot:find("^pp_") or slot == "infinitive_linked" then
-- do nothing with reflexive past participles or with infinitive linked (handled at the end)
elseif slot:find("^neg_imp_") then
error("Internal error: Should not have forms set for negative imperative at this stage")
else
local slot_has_suffixed_clitic = slot:find("infinitive") or slot:find("gerund") or slot:find("^imp_")
-- Maybe generate non-reflexive parts and separated syntactic variants for use in
-- {{ca-verb form of}}. See comment in add_slots() above `need_special_verb_form_of_slots`.
-- Check for do_joined so we only run this code once.
if do_reflexive and do_joined and base.alternant_multiword_spec.source_template == "ca-verb form of" and
-- Skip personal variants of infinitives and gerunds so we don't think [[arrependendo]] is a
-- non-reflexive equivalent of [[arrependendo-me]].
not slot:find("infinitive_") and not slot:find("gerund_") then
-- Clone the forms because we will be destructively modifying them just below, adding the reflexive
-- pronoun.
insert_forms(base, slot .. "_non_reflexive", mw.clone(base.forms[slot]))
if slot_has_suffixed_clitic then
insert_forms(base, slot .. "_variant", iut.map_forms(base.forms[slot], function(form)
return prefix_clitic_to_form(base, get_proclitic(form), "... ", form)
end))
end
end
if slot_has_suffixed_clitic then
if do_joined then
-- Add clitic after form.
for _, form in ipairs(base.forms[slot]) do
form.form = suffix_clitic_to_form(base, get_enclitic(form.form), form.form)
end
end
elseif not do_joined then
-- Add clitic before form.
for _, form in ipairs(base.forms[slot]) do
form.form = prefix_clitic_to_form(base, get_proclitic(form.form), "", form.form)
end
end
end
end
end
end
local function handle_infinitive_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{ca-verb}}.
-- We substitute the original lemma (before removing links) for forms that
-- are the same as the lemma, if the original lemma has links.
for _, slot in ipairs({"infinitive"}) do
insert_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
local function generate_negative_imperatives(base)
if base.noimp then
return
end
-- Copy subjunctives to negative imperatives, preceded by "no".
for _, persnum in ipairs(neg_imp_person_number_list) do
local from = "pres_sub_" .. persnum
local to = "neg_imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form)
if base.alternant_multiword_spec.args.noautolinkverb then
return "no " .. form
elseif form:find("%[%[") then
-- already linked, e.g. when reflexive
return "[[no]] " .. form
else
return "[[no]] [[" .. form .. "]]"
end
end))
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
local function conjugate_verb(base)
construct_stems(base)
add_present_indic(base)
add_present_subj(base)
add_finite_non_present(base)
add_non_finite_forms(base)
fix_double_umlauts(base)
-- do non-reflexive non-imperative slot overrides
process_slot_overrides(base, function(slot)
return not slot:find("^imp_") and not slot:find("^neg_imp_")
end)
-- This should happen after process_slot_overrides() in case a derived slot is based on an override
-- (as with the imp_3s of [[dar]], [[estar]]).
add_imperatives(base)
-- do non-reflexive positive imperative slot overrides
process_slot_overrides(base, function(slot)
return slot:find("^imp_")
end)
-- We need to add joined reflexives, then joined and non-joined clitics, then non-joined reflexives, so we get
-- [[arrepéndete]] but [[no]] [[te]] [[arrependas]].
if base.refl then
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", "do joined")
process_slot_overrides(base, nil, "do reflexive") -- do reflexive-only slot overrides
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", false)
end
-- This should happen after add_reflexive_or_fixed_clitic_to_forms() so negative imperatives get the reflexive pronoun
-- and clitic in them.
generate_negative_imperatives(base)
-- do non-reflexive negative imperative slot overrides
-- FIXME: What about reflexive negative imperatives?
process_slot_overrides(base, function(slot)
return slot:find("^neg_imp_")
end)
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma`
-- in handle_infinitive_linked() works correctly and compares unlinked forms to unlinked forms.
handle_infinitive_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
user_basic_overrides = {},
user_stems = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
if inside == "" then
return base
end
local segments = put.parse_balanced_segment_run(inside, "[", "]")
local dot_separated_groups = put.split_alternating_runs(segments, "%.")
for i, dot_separated_group in ipairs(dot_separated_groups) do
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
elseif first_element:find("^var:") then
if #dot_separated_group > 1 then
parse_err(("Can't attach footnotes to 'var:' spec '%s'"):format(first_element))
end
base.var = first_element:match("^var:(.*)$")
elseif first_element:find(":") then
local colon_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*:%s*")
local first_element = colon_separated_groups[1][1]
if #colon_separated_groups[1] > 1 then
parse_err("Can't attach footnotes directly to '" .. first_element .. "' spec; attach them to the " ..
"colon-separated values following the initial colon")
end
if overridable_stems[first_element] then
if base.user_stems[first_element] then
parse_err("Overridable stem '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_stems[first_element] = overridable_stems[first_element](colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a basic override; we validate further later when the possible slots are available
if base.user_basic_overrides[first_element] then
parse_err("Basic override '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_basic_overrides[first_element] = allow_multiple_values_for_override(colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes},
"is form override")
end
else
parse_err("Unrecognized spec '" .. first_element .. "'")
end
end
return base
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, head)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original")
end
-- (2) Remove any links from the lemma, but remember the original form so we can use it below in the 'lemma_linked'
-- form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = head
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
local refl_verb = base.lemma
local verb, refl = rmatch(refl_verb, "^(.-)%-(se)$")
if not verb then
verb, refl = rmatch(refl_verb, "^(.-)('s)$")
end
if not verb then
verb, refl = refl_verb, nil
end
base.user_specified_verb = verb
base.refl = refl
base.verb = base.user_specified_verb
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
elseif base.refl then
-- Reconstruct the linked lemma with separate links around base verb, reflexive pronoun and clitic.
linked_lemma = base.user_specified_verb == base.verb and "[[" .. base.user_specified_verb .. "]]" or
"[[" .. base.verb .. "|" .. base.user_specified_verb .. "]]"
linked_lemma = linked_lemma .. (refl and "-[[" .. refl .. "]]" or "")
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve links in multiword
-- lemmas and include links in non-lemma forms rather than allowing the entire form to be a link.
linked_lemma = iut.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
local function detect_indicator_spec(base)
if (base.only3s and 1 or 0) + (base.only3sp and 1 or 0) + (base.only3p and 1 or 0) > 1 then
error("Only one of 'only3s', 'only3sp' and 'only3p' can be specified")
end
base.forms = {}
base.input_stems = {}
base.basic_overrides = {}
base.basic_reflexive_only_overrides = {}
base.orig_verb = base.verb -- in case of a 'like = "..."' redirect
if not base.no_built_in then
local function match_built_in_spec(verb, built_in_spec)
local prefix, non_prefixed_verb
if type(built_in_spec.match) == "function" then
prefix, non_prefixed_verb = built_in_spec.match(verb)
elseif built_in_spec.match:find("^%^") and rsub(built_in_spec.match, "^%^", "") == verb then
-- begins with ^, for exact match, and matches
prefix, non_prefixed_verb = "", verb
else
prefix, non_prefixed_verb = rmatch(verb, "^(.*)(" .. built_in_spec.match .. ")$")
end
return prefix, non_prefixed_verb
end
local function find_built_in(verb, var)
for _, built_in_spec in ipairs(built_in_conjugations) do
local prefix, non_prefixed_verb = match_built_in_spec(verb, built_in_spec)
if prefix then
if not built_in_spec.var then
if var then
error(("Can't specify a variant spec 'var:%s' with verb '%s'"):format(var, verb))
end
return prefix, non_prefixed_verb, built_in_spec
elseif not var then
local possible_vars = {}
for _, built_in_spec in ipairs(built_in_conjugations) do
local prefix, non_prefixed_verb = match_built_in_spec(verb, built_in_spec)
if prefix then
table.insert(possible_vars, built_in_spec.var)
end
end
error(("For verb '%s', must specify a variant using 'var:...'; possible values are %s"):format(
verb, table.concat(possible_vars, ", ")))
elseif built_in_spec.var == var then
return prefix, non_prefixed_verb, built_in_spec
end
end
end
return nil
end
local prefix, non_prefixed_verb, built_in_spec = find_built_in(base.verb, base.var)
if prefix then
-- we found a built-in verb
if built_in_spec.like then
-- we found a redirect to another verb that has the same conjugation, just a different infinitive
base.verb = prefix .. built_in_spec.like
local new_prefix, new_non_prefixed_verb, new_built_in_spec = find_built_in(base.verb, built_in_spec.likevar)
if new_prefix then
-- redirected to another built-in verb
base.prefix = new_prefix
base.non_prefixed_verb = new_non_prefixed_verb
built_in_spec = new_built_in_spec
else
built_in_spec = nil
end
else
base.prefix = prefix
base.non_prefixed_verb = non_prefixed_verb
end
end
if built_in_spec then
-- we found a built-in verb, possibly redirecting to another built-in verb
for stem, forms in pairs(built_in_spec.forms) do
if type(forms) == "function" then
forms = forms(base, base.prefix)
end
if stem:find("^refl_") then
stem = stem:gsub("^refl_", "")
if not base.alternant_multiword_spec.verb_slots_basic_map[stem] then
error("Internal error: setting for 'refl_" .. stem .. "' does not refer to a basic verb slot")
end
base.basic_reflexive_only_overrides[stem] = forms
elseif base.alternant_multiword_spec.verb_slots_basic_map[stem] then
-- an individual form override of a basic form
base.basic_overrides[stem] = forms
else
base.input_stems[stem] = forms
end
end
end
end
-- Override built-in-verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stems) do
base.input_stems[stem] = values
end
for override, values in pairs(base.user_basic_overrides) do
if not base.alternant_multiword_spec.verb_slots_basic_map[override] then
error("Unrecognized override '" .. override .. "': " .. base.angle_bracket_spec)
end
base.basic_overrides[override] = values
end
base.prefix = base.prefix or ""
base.non_prefixed_verb = base.non_prefixed_verb or base.verb
local inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)(re)$")
if not inf_stem then
inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)([aeiu]r)$")
end
if not inf_stem then
error("Unrecognized infinitive: " .. base.verb)
end
-- Remove accents from e.g. [[parèixer]], [[córrer]].
inf_stem = com.remove_accents(inf_stem)
-- Save full infinitive stem for use in future and conditional.
base.inf_stem = (inf_stem .. suffix):gsub("e$", "")
local stem = inf_stem
if suffix == "re" then
-- verbs in -ldre, -ndre have stem without the d
stem = stem:gsub("([ln])d$", "%1")
elseif suffix == "ur" then
stem = stem .. "u"
end
base.conj_vowel = (suffix == "re" or suffix == "ur") and "e" or suffix:gsub("r$", "")
-- If the stem is followed by a front vowel, convert it to its "back" form before calling combine_stem_ending(),
-- which expects the "back" form of the stem and may convert it back to the "front" form. Don't do this conversion
-- for ï so we leave [[arguïr]] (underlyingly 'argüïr') as 'argu' ("back" form), which becomes 'argü' ("front" form)
-- before front vowel ï and we end up with base.stem containing the underlying form 'argüï'. We remove the first of
-- two umlauts in a row in a postprocessing step (fix_double_umlauts()).
if rfind(suffix, "^[ei]") then
stem = com.front_to_back(stem)
end
-- Use combine_stem_ending() so we get ï if necessary.
base.stem = combine_stem_ending(base, stem, base.conj_vowel, false, "dont include prefix")
-- Propagate built-in-verb indicator flags to `base` and combine with user-specified flags.
for indicator_flag, _ in pairs(indicator_flags) do
base[indicator_flag] = base[indicator_flag] or base.input_stems[indicator_flag]
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
-- Propagate some settings up; some are used internally, others by [[Module:pt-headword]].
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Internal indicator flags. Do these before calling detect_indicator_spec() because add_slots() uses them.
for _, prop in ipairs { "refl", "clitic" } do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
base.alternant_multiword_spec = alternant_multiword_spec
end)
add_slots(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
detect_indicator_spec(base)
-- User-specified indicator flags. Do these after calling detect_indicator_spec() because the latter may set these
-- indicators for built-in verbs.
for prop, _ in pairs(indicator_flags) do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
end)
end
local function add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
local function insert_cat(cat, also_when_multiword)
-- Don't place multiword terms in categories like 'Catalan verbs ending in -ar' to avoid spamming the
-- categories with such terms.
if also_when_multiword or not multiword_lemma then
m_table.insertIfNot(alternant_multiword_spec.categories, "カタルーニャ語 " .. cat)
end
end
if check_for_red_links and alternant_multiword_spec.source_template == "ca-conj" and multiword_lemma then
for _, slot_and_accel in ipairs(alternant_multiword_spec.all_verb_slots) do
local slot = slot_and_accel[1]
local forms = base.forms[slot]
local must_break = false
if forms then
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
local title = mw.title.new(form.form)
if title and not title.exists then
insert_cat("活用表に赤リンクを含む動詞")
must_break = true
break
end
end
end
end
if must_break then
break
end
end
end
map_general(base.output_stems.stem, function(stem)
local stem_base, conj_vowel = split_conj_vowel(stem)
local need_no_eix_infix = true
if conj_vowel ~= base.conj_vowel then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#不規則動詞|混合活用]]")
elseif conj_vowel == "a" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第一変化動詞|第一変化]]")
insert_cat("第一変化動詞")
elseif conj_vowel == "e" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第二変化動詞|第二変化]]")
insert_cat("第二変化動詞")
elseif conj_vowel == "i" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第三変化動詞|第三変化]]")
insert_cat("第三変化動詞")
need_no_eix_infix = false
map_general(base.output_stems.eix_infix, function(form)
if form == "+" then
insert_ann("eix_infix", "接中辞-eix-有り")
insert_cat("-eix-を含む第三変化動詞")
elseif form == "-" then
insert_ann("eix_infix", "接中辞-eix-無し")
insert_cat("-eix-を含まない第三変化動詞")
end
end)
else
error(("Internal error: Stem '%s' doesn't end in conjugation vowel a/e/i and split_conj_vowel() didn't catch it"
):format(stem))
end
if need_no_eix_infix then
insert_ann("eix_infix", "接中辞無し")
end
end)
if base.input_stems.g_infix then
insert_ann("g_infix", "軟口蓋接中辞有り")
insert_cat("軟口蓋接中辞を含む動詞")
else
insert_ann("g_infix", "接中辞無し")
end
if base.output_stems.irreg then
insert_ann("irreg", "不規則")
insert_cat("不規則動詞")
else
insert_ann("irreg", "規則")
end
if base.only3s then
insert_ann("defective", "非人称")
insert_cat("非人称動詞")
elseif base.only3sp then
insert_ann("defective", "第三人称のみ")
insert_cat("第三人称動詞")
elseif base.only3p then
insert_ann("defective", "第三人称複数のみ")
insert_cat("第三人称複数動詞")
elseif base.no_pres_stressed then
insert_ann("defective", "欠如")
insert_cat("欠如動詞")
else
insert_ann("defective", "規則")
end
--if base.clitic then
-- insert_cat("verbs with lexical clitics")
--end
if base.refl then
insert_cat("再帰動詞")
end
local stem_base, conj_vowel = split_conj_vowel(base.stem)
local cons_alt
if conj_vowel == "i" and base.output_stems.eix_infix == "+" then
-- no alternations in verbs like [[afligir]] because all endings are front
elseif stem_base:find("ç$") then
cons_alt = "ç-c"
elseif stem_base:find("c$") then
cons_alt = "c-qu"
elseif stem_base:find("g$") then
cons_alt = "g-gu"
elseif stem_base:find("gu$") then
cons_alt = "gu-gü"
elseif stem_base:find("j$") then
cons_alt = "j-g"
elseif stem_base:find("qu$") then
cons_alt = "qu-qü"
end
if cons_alt then
local desc = cons_alt .. " alternation"
insert_ann("cons_alt", desc)
insert_cat(desc .. "交替の動詞")
else
insert_ann("cons_alt", "non-alternating")
end
end
-- Compute the categories to add the verb to, as well as the annotation to display in the
-- conjugation title bar. We combine the code to do these functions as both categories and
-- title bar contain similar information.
local function compute_categories_and_annotation(alternant_multiword_spec)
alternant_multiword_spec.categories = {}
local ann = {}
alternant_multiword_spec.annotation = ann
ann.conj = {}
ann.g_infix = {}
ann.eix_infix = {}
ann.irreg = {}
ann.defective = {}
ann.cons_alt = {}
local multiword_lemma = false
for _, form in ipairs(alternant_multiword_spec.forms.infinitive) do
if form.form:find(" ") then
multiword_lemma = true
break
end
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
end)
local ann_parts = {}
local conj = table.concat(ann.conj, " or ")
if conj ~= "" then
table.insert(ann_parts, conj)
end
local eix_infix = table.concat(ann.eix_infix, " or ")
if eix_infix ~= "" and eix_infix ~= "no infix" then
table.insert(ann_parts, eix_infix)
end
local irreg = table.concat(ann.irreg, " or ")
if irreg ~= "" and irreg ~= "regular" then
table.insert(ann_parts, irreg)
end
local g_infix = table.concat(ann.g_infix, " or ")
if g_infix ~= "" and g_infix ~= "no infix" then
table.insert(ann_parts, g_infix)
end
local defective = table.concat(ann.defective, " or ")
if defective ~= "" and defective ~= "regular" then
table.insert(ann_parts, defective)
end
local cons_alt = table.concat(ann.cons_alt, " or ")
if cons_alt ~= "" and cons_alt ~= "non-alternating" then
table.insert(ann_parts, cons_alt)
end
alternant_multiword_spec.annotation = table.concat(ann_parts, ", ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = alternant_multiword_spec.forms.infinitive
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec)
local function transform_accel_obj(slot, formobj, accel_obj)
-- No accelerators for negative imperatives, which are always multiword and derived directly from the
-- present subjunctive.
if slot:find("^neg_imp") then
return nil
end
if accel_obj then
accel_obj.form = "verb-form-" .. reconstructed_verb_spec
end
return accel_obj
end
local props = {
lang = lang,
lemmas = lemmas,
transform_accel_obj = transform_accel_obj,
slot_list = alternant_multiword_spec.verb_slots_basic,
}
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote
end
local notes_template = [=[
<div class="roa-footnote-outer-div" style="width:100%;">
<div class="roa-footnote-inner-div">
{footnote}
</div></div>
]=]
local basic_table = [=[
{description}<div class="NavFrame">
<div class="NavHead"> {title} の活用</div>
<div class="NavContent">
{\op}| class="roa-inflection-table" data-toggle-category="inflection"
|-
! colspan="3" class="roa-nonfinite-header" | <span title="infinitiu">不定詞</span>
| colspan="5" | {infinitive}
|-
! colspan="3" class="roa-nonfinite-header" | <span title="gerundi">現在分詞</span>
| colspan="5" | {gerund}
|-
! rowspan="3" colspan="2" class="roa-nonfinite-header" | <span title="participi passat">過去分詞</span>
| colspan="2" class="roa-nonfinite-header" |
! colspan="2" class="roa-nonfinite-header" | 男性
! colspan="2" class="roa-nonfinite-header" | 女性
|-
! colspan="2" class="roa-nonfinite-header" | 単数
| colspan="2" | {pp_ms}
| colspan="2" | {pp_fs}
|-
! colspan="2" class="roa-nonfinite-header" | 複数
| colspan="2" | {pp_mp}
| colspan="2" | {pp_fp}
|-
! colspan="2" rowspan="2" class="roa-person-number-header" | 人称
! colspan="3" class="roa-person-number-header" | 単数
! colspan="3" class="roa-person-number-header" | 複数
|-
! class="roa-person-number-header" style="width:12.5%;" | 第一人称
! class="roa-person-number-header" style="width:12.5%;" | 第二人称
! class="roa-person-number-header" style="width:12.5%;" | 第三人称
! class="roa-person-number-header" style="width:12.5%;" | 第一人称
! class="roa-person-number-header" style="width:12.5%;" | 第二人称
! class="roa-person-number-header" style="width:12.5%;" | 第三人称
|-
! rowspan="6" class="roa-indicative-left-rail" | <span title="indicatiu">直説法</span>
! class="roa-indicative-left-rail" |
! class="roa-indicative-left-rail" | <<jo>>
! class="roa-indicative-left-rail" | <<tu>>
! class="roa-indicative-left-rail" | <<ell>>/<<ella>><br /><<vostè>>
! class="roa-indicative-left-rail" | <<nosaltres>><br /><<nós>>
! class="roa-indicative-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-indicative-left-rail" | <<ells>>/<<elles>><br /><<vostès>>
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="present">現在</span>
| {pres_1s}
| {pres_2s}
| {pres_3s}
| {pres_1p}
| {pres_2p}
| {pres_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="imperfet">不完了過去</span>
| {impf_1s}
| {impf_2s}
| {impf_3s}
| {impf_1p}
| {impf_2p}
| {impf_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="futur">未来</span>
| {fut_1s}
| {fut_2s}
| {fut_3s}
| {fut_1p}
| {fut_2p}
| {fut_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="passat">完了過去</span>
| {pret_1s}
| {pret_2s}
| {pret_3s}
| {pret_1p}
| {pret_2p}
| {pret_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="condicional">可能法</span>
| {cond_1s}
| {cond_2s}
| {cond_3s}
| {cond_1p}
| {cond_2p}
| {cond_3p}
|-
! class="roa-subjunctive-left-rail" rowspan="3" | <span title="subjuntiu">接続法</span>
! class="roa-subjunctive-left-rail" |
! class="roa-subjunctive-left-rail" | <<jo>>
! class="roa-subjunctive-left-rail" | <<tu>>
! class="roa-subjunctive-left-rail" | <<ell>>/<<ella>><br /><<vostè>>
! class="roa-subjunctive-left-rail" | <<nosaltres>><br /><<nós>>
! class="roa-subjunctive-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-subjunctive-left-rail" | <<ells>>/<<elles>><br /><<vostès>>
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | <span title="present">現在</span>
| {pres_sub_1s}
| {pres_sub_2s}
| {pres_sub_3s}
| {pres_sub_1p}
| {pres_sub_2p}
| {pres_sub_3p}
|-
! class="roa-subjunctive-left-rail" style="height:3em;" rowspan="1" | <span title="imperfet">過去</span>
| {impf_sub_1s}
| {impf_sub_2s}
| {impf_sub_3s}
| {impf_sub_1p}
| {impf_sub_2p}
| {impf_sub_3p}
|-
! rowspan="3" class="roa-imperative-left-rail" style="height:3em;" | <span title="imperatiu">命令法</span>
! class="roa-imperative-left-rail" |
! class="roa-imperative-left-rail" | —
! class="roa-imperative-left-rail" | <<tu>>
! class="roa-imperative-left-rail" | <<vostè>>
! class="roa-imperative-left-rail" | <<nosaltres>>
! class="roa-imperative-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-imperative-left-rail" | <<vostès>>
|-
! class="roa-imperative-left-rail" style="height:3em;" | <span title="afirmatiu">-</span>
| —
| {imp_2s}
| {imp_3s}
| {imp_1p}
| {imp_2p}
| {imp_3p}
|-
! class="roa-imperative-left-rail" style="height:3em;" | <span title="negatiu">禁止</span> (<<no>>)
| —
| {neg_imp_2s}
| {neg_imp_3s}
| {neg_imp_1p}
| {neg_imp_2p}
| {neg_imp_3p}
|{\cl}{notes_clause}</div></div>]=]
local function make_table(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
forms.title = link_term(alternant_multiword_spec.lemmas[1].form, nil, "term")
local ann_parts = {}
if alternant_multiword_spec.annotation ~= "" then
table.insert(ann_parts, alternant_multiword_spec.annotation)
end
if alternant_multiword_spec.args.titlenote then
table.insert(ann_parts, alternant_multiword_spec.args.titlenote)
end
local annotation = table.concat(ann_parts, ", ")
if annotation ~= "" then
forms.title = forms.title .. " (" .. annotation .. ")"
end
forms.description = ""
-- Format the table.
forms.footnote = alternant_multiword_spec.footnote_basic
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
local table_with_pronouns = rsub(basic_table, "<<([^<>|]-)|([^<>|]-)>>", link_term)
local table_with_pronouns = rsub(table_with_pronouns, "<<(.-)>>", link_term)
return require("Module:TemplateStyles")("Module:roa-verb/style.css") ..
m_string_utilities.format(table_with_pronouns, forms)
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head)
local PAGENAME = mw.loadData("Module:headword/data").pagename
local function in_template_space()
return mw.title.getCurrentTitle().nsText == "テンプレート"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the
-- current page title or the value of |pagename=; but not when called from {{ca-verb form of}}, where the
-- page title is a non-lemma form. Note that the verb spec may omit the infinitive; e.g. it may be "<i-e>".
-- For this reason, we use the value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "ca-verb form of" and args.pagename or PAGENAME
local head = headword_head or pagename
local arg1 = args[1]
if not arg1 then
if (pagename == "ca-conj" or pagename == "ca-verb" or pagename == "ca-verb form of") and in_template_space() then
arg1 = "amar<>"
else
arg1 = "<>"
end
end
-- When called from {{ca-verb form of}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "ca-verb form of" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "ca-verb form of" and in_template_space() then
verb_form_of_form = "ami"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local refl_clitic_verb, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(refl_clitic_verb, "[^%[]", "")
local right_brackets = rsub(refl_clitic_verb, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(refl_clitic_verb) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
refl_clitic_verb, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = refl_clitic_verb .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local function split_bracketed_runs_into_words(bracketed_runs)
return put.split_alternating_runs(bracketed_runs, " ", "preserve splitchar")
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
-- Split words only on spaces, not on hyphens, because that messes up reflexive verb parsing.
split_bracketed_runs_into_words = split_bracketed_runs_into_words,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
normalize_all_lemmas(alternant_multiword_spec, head)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
slot_list = alternant_multiword_spec.all_verb_slots,
inflect_word_spec = conjugate_verb,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = iut.remove_redundant_links(form.form)
end
end
compute_categories_and_annotation(alternant_multiword_spec)
if args.json and source_template == "ca-conj" then
return require("Module:JSON").toJSON(alternant_multiword_spec.forms)
end
return alternant_multiword_spec
end
-- Entry point for {{ca-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent().args
local params = {
[1] = {},
["titlenote"] = {},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
}
local args = require("Module:parameters").process(parent_args, params)
local alternant_multiword_spec = export.do_generate_forms(args, "ca-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) ..
require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang, nil, nil, force_cat)
end
return export
fbhmsc62e4d96ybt2rqjkp3gggefnyg
2313412
2313410
2026-08-09T09:29:54Z
Kuroco2k
84207
2313412
Scribunto
text/plain
--[=[
This module implements {{ca-conj}} and provides the underlying conjugation functions for {{ca-verb}}
(whose actual formatting is done in [[Module:ca-headword]]).
Authorship: Ben Wing <benwing2>
]=]
local export = {}
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "pres_1s" (present indicative first-person singular), "pres_sub_2s" (present
subjunctive second-person singular) "impf_sub_3p" (imperfect subjunctive third-person plural).
Each slot is filled with zero or more forms.
-- "form" = The conjugated Catalan form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Catalan term. For Catalan, always the infinitive.
]=]
--[=[
FIXME:
--]=]
local lang = require("Module:languages").getByCode("ca")
local m_string_utilities = require("Module:string utilities")
local m_links = require("Module:links")
local m_table = require("Module:table")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local com = require("Module:ca-common")
local force_cat = false -- set to true for debugging
local check_for_red_links = false -- set to false for debugging
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local rsubn = mw.ustring.gsub
local rsub = com.rsub
local u = mw.ustring.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
-- version of rsubn() that returns a 2nd argument boolean indicating whether a substitution was made.
local function rsubb(term, foo, bar)
local retval, nsubs = rsubn(term, foo, bar)
return retval, nsubs > 0
end
local function link_term(term, display, face)
return m_links.full_link({ lang = lang, term = term, alt = display }, face)
end
local front_vowel = "eèéiíï"
local front_vowel_c = "[" .. front_vowel .. "]"
local V = com.V -- vowel regex class
local C = com.C -- consonant regex class
-- IS_USER_STEM_OVERRIDE is prepended to user-supplied stem overrides to prevent `base.prefix` from being prepended.
-- IS_USER_FORM_OVERRIDE is similar but also prevents final devoicing (cf. Balearic pres_1s 'trob' of [[trobar]]).
-- Don't use 0xFFF0 in case we call a [[Module:parse-utilities]] function that uses it temporarily.
local IS_USER_STEM_OVERRIDE = u(0xFFF1)
local IS_USER_FORM_OVERRIDE = u(0xFFF2)
--[=[
Irregular verbs:
-ldre/-ndre verbs:
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
caldre - cal [calent] calia caldrà calgué calgui - calgut,-
coldre colc col colem colia coldré colguí colgui colguem colt,colta
doldre dolc dol dolem dolia doldré dolguí dolgui dolguem dolgut,dolguda
moldre molc mol molem molia moldré molguí molgui molguem molt,molta
oldre olc ol olem olia oldré olguí olgui olguem olgut,olguda
-soldre -solc -sol -solem -solia -soldré -solguí -solgui -solguem -solt,-solta
(absoldre, dissoldre, resoldre)
toldre tolc tol tolem tolia toldré tolguí tolgui tolguem tolt,tolta
romandre romanc roman romanem romania romandré romanguí romangui romanguem romàs,romasa,romasos
encendre encenc encén encenem encenia encendré encenguí encengui encenguem encès,encesa,encesos
fendre fenc fen/-fèn fenem fenia fendré fenguí fengui fenguem fes/-fès,fesa,fesos
(defendre, ofendre)
-pendre -depenc -pèn -penem -penia -pendré -penguí -pengui -penguem -pès,-pesa,-pesos
(dependre,despendre,expendre,suspendre)
prendre prenc pren/-prèn prenem prenia prendré prenguí prengui prenguem pres/-près,presa,presos
(aprendre, comprendre, desprendre, emprendre, reprendre, sorprendre)
-tendre -tenc -tén -tenem -tenia -tendré -tenguí -tengui -tenguem -tès,-tesa,-tesos
(pres2s: atens, pres3p: atenen)
(atendre, contendre, distendre, entendre, estendre, pretendre)
vendre venc ven venem venia vendré venguí vengui venguem venut,venuda
(malvendre, revendre)
fondre fonc fon fonem fonia fondré fonguí fongui fonguem fos/-fós,fosa,fosos
(confondre, difondre, infondre, refondre)
enfondre enfonc enfon enfonem enfonia enfondré enfonguí enfongui enfonguem enfús,enfusa,enfusos
pondre ponc pon ponem ponia pondré ponguí pongui ponguem post,posta,postos
(compondre, correspondre, descompondre, respondre)
tondre tonc ton tonem tonia tondré tonguí tongui tonguem tos,tosa,tosos
cerndre cerno cern cernem cernia cerndré cerní cerni cernem cernut,cernuda
-ler verbs (mostly like -ldre verbs):
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
caler (var. of caldre)
doler (var. of doldre)
soler solc sol solem solia soldré solguí solgui solguem solgut,solguda
valer/valdre valc val valem valia valdré valguí valgui valguem valgut,valguda
(prevaler, equivaler)
other -dre/-tre verbs (regular except sometimes pp):
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
batre bato bat batem batia batré batí bati batem batut,batuda
-metre -meto -met -metem -metia -metré -metí -meti -metem -mès,-mesa,-mesos
(ad-, co-, compro-, e-, entremetre's, mal-, o-, per-, pro-, read-, re-, retrans-, sot-, tra-, trans-)
perdre perdo perd perdem perdia perdré perdí perdi perdem perdut,perduda
-ure verbs
infinitive pres1s pres3s pres1p impf1s impf1p fut1s pret1s sub1s sub1p pp
caure caic cau caiem queia quèiem cauré caiguí caigui caiguem caigut,caiguda
(decaure, recaure)
plaure plac plau plaem plaïa plaíem plauré plaguí plagui plaguem plagut,plaguda
(complaure)
raure rac rau raem raïa raíem rauré raguí ragui raguem ragut,raguda
beure bec beu bevem bevia bevíem beuré beguí begui beguem begut,beguda
(embeure)
creure crec creu creiem creia crèiem creuré creguí cregui creguem cregut,creguda
deure dec deu devem devia devíem deuré deguí degui deguem degut,deguda
jeure jec jeu jaiem jeia jèiem jauré jaguí jegui jaguem jagut,jaguda
(ajeure)
lleure - lleu [-] llevia - lleurà llegué llegui - llegut,-
seure sec seu seiem seia sèiem seuré seguí segui seguem segut,seguda
(asseure)
treure trec treu traiem treia trèiem trauré traguí tregui traguem tret,treta
(abstreure, atreure, contreure, distreure, extreure, retreure, sostreure)
veure veig veu veiem veia vèiem veuré viu,veieres/veres, vegi vegem vist,vista,vists/vistos
(entreveure, preveure, reveure) veié/veu,veiérem/vérem
riure ric riu riem reia rèiem riuré riguí rigui riguem rigut,riguda
(somriure)
(e)scriure escric escriu escrivim escrivia escrivíem escriuré escriví/escriguí escrigui escriguem escrit,escrita
(circumscriure, descriure, inscriure, prescriure, proscriure, subscriure, transcriure)
viure visc viu vivim vivia vivíem viuré visquí visqui visquem viscut,viscuda
(conviure, sobreviure)
cloure cloc clou cloem cloïa cloíem clouré cloguí clogui cloguem clos,closa,closos
(concloure, descloure, encloure, excloure, incloure, recloure)
encloure encloc enclou encloem encloïa encloíem enclouré encloguí enclogui encloguem enclòs,enclosa,enclosos
coure coc cou coem coïa coíem couré coguí cogui coguem cuit/cogut,cuita/coguda
moure moc mou movem movia movíem mouré moguí mogui moguem mogut,moguda
(promoure)
noure noc nou noem noïa noíem nouré noguí nogui noguem nogut,noguda
ploure - plou [plovent] plovia - plourà plogué plogui - plogut,ploguda
-nyer verbs (regular except pp)
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
atènyer atenyo ateny atenyem atenyia atenyeré atenyí atenyi atenyem atès,atesa,atesos
empènyer empenyo empeny empenyem empenyia empenyeré empenyí empenyi empenyem empès,empesa,empesos
estrènyer estrenyo estreny estrenyem estrenyia estrenyeré estrenyí estrenyi estrenyem estret,estreta
estrènyer
(constrènyer,restrènyer)
fènyer fenyo feny fenyem fenyia fenyeré fenyí/fenguí fenyi fenyem fenyut/fengut,fenyuda/fenguda
pertànyer pertanyo pertany pertanyem pertanyia pertanyeré pertanyí/pertanguí pertanyi pertanyem pertanyut/pertangut,pertanyuda/pertanguda
plànyer planyo plany planyem planyia planyeré planyí/planguí planyi planyem plangut/planyut,planguda/planyuda
-xer verbs (NOTE: pres2s in -xes)
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
créixer creixo creix creixem creixia creixeré creixí/cresquí creixi creixem crescut,crescuda
(acréixer,decréixer)
conèixer conec coneix coneixem coneixia coneixeré coneguí conegui coneguem conegut,coneguda
(desconèixer,reconèixer)
merèixer mereixo mereix mereixem mereixia mereixeré mereixí/meresquí mereixi mereixem merescut,merescuda
néixer/ neixo/ neix/ naixem naixia naixeré naixí/nasquí neixi/ naixem/nasquem nascut,nascuda
nàixer naixo naix naixi
(renéixer)
parèixer parec pareix pareixem pareixia pareixeré pareguí paregui pareguem paregut,pareguda
(aparèixer,comparèixer,desaparèixer,reaparèixer)
péixer peixo peix paixem paixia paixeré paixí peixi paixem pascut,pascuda
misc. -er verbs
infinitive pres1s pres3s pres1p impf1s impf1p fut1s pret1s sub1s sub1p pp
córrer corro corre correm corria corríem correré correguí corri correm corregut,correguda
fúmer fumo fum fumem fumia fumíem fumeré fumí fumi fumem fumut,fumuda
prémer premo prem premem premia premíem premeré premí premi premem premut,premuda
(es-, re-)
témer temo tem temem temia temíem temeré temí temi temem temut,temuda
trémer [regular]
tòrcer torço torç torcem torcia torcíem torceré torcí torci torcem torçut,torçuda
(des-) [pres2s torces]
vèncer venço venç vencem vencia vencíem venceré vencí venci vencem vençut,vençuda
(con-, re-) [pres2s vences]
cabre/caber cabo cap cabem cabia cabíem cabré cabí càpiga capiguem cabut,cabuda
[sub2s càpigues]
haver he/haig ha havem/hem havia havíem hauré haguí hagi hàgim/haguem hagut,haguda
[noimp] [cond1s hauria/haguera; impsub2s haguessis/haguesses]
poder puc pot podem podia podíem podré poguí pugui puguem pogut,poguda
saber sé sap sabem sabia sabíem sabré sabí sàpiga sapiguem sabut,sabuda
[imp2s sàpigues, imp2p sapigueu]
voler vull vol volem volia volíem voldré volguí vulgui vulguem volgut,volguda
ser/ésser soc és som era érem seré fui sigui siguem estat/sigut,estada/siguda
[ger sent/essent] [cond1s seria/fora]
[pres: soc,ets,éts,som,sou,són; pret: fui,fores,fou,fórem,fóreu,foren; impsub: fos,fossis,fos,fóssim,fóssiu,fossin]
[imp: sigues,sigueu]
fer faig fa fem feia fèiem faré fiu faci fem fet,feta
[pres3p fan]
[pret: fiu,feres,feu,férem,féreu,feren]
]=]
local all_persons_numbers = {
["1s"] = "1|s",
["2s"] = "2|s",
["3s"] = "3|s",
["1p"] = "1|p",
["2p"] = "2|p",
["3p"] = "3|p",
}
local person_number_list = {"1s", "2s", "3s", "1p", "2p", "3p"}
local imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
local neg_imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
proclitic_non_elided_person_number_to_reflexive_pronoun = {
["1s"] = "em ",
["2s"] = "et ",
["3s"] = "es ",
["1p"] = "ens ",
["2p"] = "us ",
["3p"] = "es ",
}
proclitic_elided_person_number_to_reflexive_pronoun = {
["1s"] = "m'",
["2s"] = "t'",
["3s"] = "s'",
["1p"] = "ens ",
["2p"] = "us ",
["3p"] = "s'",
}
enclitic_non_elided_person_number_to_reflexive_pronoun = {
["1s"] = "-me",
["2s"] = "-te",
["3s"] = "-se",
["1p"] = "-nos",
["2p"] = "-vos",
["3p"] = "-se",
}
enclitic_elided_person_number_to_reflexive_pronoun = {
["1s"] = "'m",
["2s"] = "'t",
["3s"] = "'s",
["1p"] = "'ns",
["2p"] = "-us",
["3p"] = "'s",
}
local indicator_flags = m_table.listToSet {
"no_pres_stressed",
"only3s", "only3sp", "only3p", "noimp",
"pp_inv", "irreg", "no_built_in",
}
-- Initialize all the slots for which we generate forms.
local function add_slots(alternant_multiword_spec)
-- "Basic" slots: All slots that go into the regular table (not the reflexive form-of table).
alternant_multiword_spec.verb_slots_basic = {
{"infinitive", "inf"},
{"infinitive_linked", "inf"},
{"gerund", "ger"},
{"pp_ms", "m|s|past|part"},
{"pp_fs", "f|s|past|part"},
{"pp_mp", "m|p|past|part"},
{"pp_fp", "f|p|past|part"},
}
-- Special slots used to handle non-reflexive parts of reflexive verbs in {{ca-verb form of}}. For example, for a
-- reflexive-only verb like [[arrepentirse]], we want to be able to use {{ca-verb form of}} on [[arrepinta]] (which
-- should mention that it is a part of 'me arrepinta', first-person singular present subjunctive, and
-- 'se arrepinta', third-person singular present subjunctive) or on [[arrepentimos]] (which should mention that it
-- is a part of 'arrepentímonos', first-person plural present indicative or preterite). Similarly, we want to use
-- {{ca-verb form of}} on [[arrepentindo]] (which should mention that it is a part of 'se ... arrepentindo',
-- syntactic variant of [[arrepentíndose]], which is the gerund of [[arrepentirse]]). To do this, we need to be
-- able to map non-reflexive parts like [[arrepinta]], [[arrepentimos]], [[arrepentindo]], etc. to their reflexive
-- equivalent(s), to the tag(s) of the equivalent(s), and, in the case of forms like [[arrepentindo]],
-- [[arrepentir]] and imperatives, to the separated syntactic variant of the verb+clitic combination. We do this by
-- creating slots for the non-reflexive part equivalent of each basic reflexive slot, and for the separated
-- syntactic-variant equivalent of each basic reflexive slot that is formed of verb+clitic. We use slots in this
-- way to deal with multiword lemmas. Note that we run into difficulties mapping between reflexive verbs,
-- non-reflexive part equivalents, and separated syntactic variants if a slot contains more than one form. To
-- handle this, if there are the same number of forms in two slots we're trying to match up, we assume the forms
-- match one-to-one; otherwise we don't match up the two slots (which means {{ca-verb form of}} won't work in this
-- case, but such a case is extremely rare and not worth worrying about). Alternatives that handle this "properly"
-- are significantly more complicated and require non-trivial modifications to [[Module:inflection utilities]].
local need_special_verb_form_of_slots = alternant_multiword_spec.source_template == "ca-verb form of" and
alternant_multiword_spec.refl
if need_special_verb_form_of_slots then
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {
{"infinitive_non_reflexive", "-"},
{"infinitive_variant", "-"},
{"gerund_non_reflexive", "-"},
{"gerund_variant", "-"},
}
else
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {}
end
-- Add entries for a slot with person/number variants.
-- `verb_slots` is the table to add to.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(verb_slots, slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local slot = slot_prefix .. "_" .. persnum
local accel = tag_suffix .. "|" .. persnum_tag
table.insert(verb_slots, {slot, accel})
end
end
-- Add a personal slot (i.e. a slot with person/number variants) to `verb_slots_basic`.
local function add_basic_personal_slot(slot_prefix, tag_suffix, person_number_list, no_special_verb_form_of_slot)
add_personal_slot(alternant_multiword_spec.verb_slots_basic, slot_prefix, tag_suffix, person_number_list)
-- Add special slots for handling non-reflexive parts of reflexive verbs in {{ca-verb form of}}.
-- See comment above in `need_special_verb_form_of_slots`.
if need_special_verb_form_of_slots and not no_special_verb_form_of_slot then
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local basic_slot = slot_prefix .. "_" .. persnum
local accel = tag_suffix .. "|" .. persnum_tag
table.insert(alternant_multiword_spec.verb_slots_reflexive_verb_form_of, {basic_slot .. "_non_reflexive", "-"})
end
end
end
add_basic_personal_slot("pres", "直説法|現在", person_number_list)
add_basic_personal_slot("impf", "直説法|不完全過去", person_number_list)
add_basic_personal_slot("pret", "直説法|完全過去", person_number_list)
add_basic_personal_slot("fut", "直説法|未来", person_number_list)
add_basic_personal_slot("cond", "可能法", person_number_list)
add_basic_personal_slot("pres_sub", "接続法|現在", person_number_list)
add_basic_personal_slot("impf_sub", "接続法|過去", person_number_list)
add_basic_personal_slot("imp", "命令法", imp_person_number_list)
-- Don't need special non-reflexive-part slots because the negative imperative is multiword, of which the
-- individual words are 'no' + subjunctive.
add_basic_personal_slot("neg_imp", "命令法|禁止", neg_imp_person_number_list, "no special verb form of")
-- Don't need special non-reflexive-part slots because we don't want [[arrependendo]] mapping to [[arrependendo-me]]
-- (only [[arrependendo-se]]) or [[arrepender]] mapping to [[arrepender-me]] (only [[arrepender-se]]).
add_basic_personal_slot("infinitive", "inf", person_number_list, "no special verb form of")
add_basic_personal_slot("gerund", "ger", person_number_list, "no special verb form of")
-- Generate the list of all slots.
alternant_multiword_spec.all_verb_slots = {}
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_basic) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_reflexive_verb_form_of) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
alternant_multiword_spec.verb_slots_basic_map = {}
for _, slotaccel in ipairs(alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
alternant_multiword_spec.verb_slots_basic_map[slot] = accel
end
end
local overridable_stems = {}
local function allow_multiple_values_for_override(separated_groups, data, is_form_override)
local retvals = {}
for _, separated_group in ipairs(separated_groups) do
local footnotes = data.fetch_footnotes(separated_group)
local form = separated_group[1]
-- Prepend marker to prevent prefixing with `base.prefix`, and (in the case of form overrides) prevent
-- final devoicing.
if is_form_override then
form = IS_USER_FORM_OVERRIDE .. form
else
form = IS_USER_STEM_OVERRIDE .. form
end
local retval = {form = form, footnotes = footnotes}
table.insert(retvals, retval)
end
return retvals
end
for _, overridable_stem in ipairs {
"stem",
"stressed_stem",
"unstressed_stem",
"pres_unstressed",
"pres_stressed",
"pres3s", -- overrides just pres_2s and pres_3s
-- Don't include pres1s, pres3p; use pres_1s etc. if you need to override just those forms
"impf1",
"impf2",
"pret",
"fut",
"cond",
"pres_sub_stressed",
"pres_sub_unstressed",
"impf_sub",
"pp",
"g_infix",
"eix_infix",
} do
-- Written so we can substitute a different validator; parallel code in [[Module:es-verb]] and [[Module:pt-verb]]
-- has simple_choice validators.
overridable_stems[overridable_stem] = allow_multiple_values_for_override
end
-- Useful as the value of the `match` property of a built-in verb. `main_verb_spec` is a Lua pattern that should match
-- the non-prefixed part of a verb, and `prefix_specs` is a list of Lua patterns that should match the prefixed part of
-- a verb. If a prefix spec is preceded by ^, it must match exactly at the beginning of the verb; otherwise, additional
-- prefixes (e.g. re-, des-) may precede. Return the prefix and main verb.
local function match_against_verbs(main_verb_spec, prefix_specs)
return function(verb)
for _, prefix_spec in ipairs(prefix_specs) do
if prefix_spec:find("^%^") then
-- must match exactly
prefix_spec = prefix_spec:gsub("^%^", "")
if prefix_spec == "" then
-- We can't use the second branch of the if-else statement because an empty () returns the current position
-- in rmatch().
local main_verb = rmatch(verb, "^(" .. main_verb_spec .. ")$")
if main_verb then
return "", main_verb
end
else
local prefix, main_verb = rmatch(verb, "^(" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
else
local prefix, main_verb = rmatch(verb, "^(.*" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
end
return nil
end
end
--[=[
Built-in (usually irregular) conjugations.
Each entry is processed in turn and consists of an object with two fields:
1. match=: Specifies the built-in verbs that match this object.
2. forms=: Specifies the built-in stems and forms for these verbs.
The value of match= is either a string beginning with "^" (match only the specified verb), a string not beginning
with "^" (match any verb ending in that string), or a function that is passed in the verb and should return the prefix
of the verb if it matches, otherwise nil. The function match_against_verbs() is provided to facilitate matching a set
of verbs with a common ending and specific prefixes (e.g. [[ter]] and [[ater]] but not [[abater]], etc.).
The value of forms= is a table specifying stems and individual override forms. Each key of the table names either a
stem (e.g. `pres_stressed`), a stem property (e.g. `g_infix`) or an individual override form (e.g. `pres_1s`).
Each value of a stem can either be a string (a single stem), a list of strings, or a list of objects of the form
{form = STEM, footnotes = {FOONOTES}}. Each value of an individual override should be of exactly the same form except
that the strings specify full forms rather than stems. The values of a stem property depend on the specific property
but are generally strings or booleans.
In order to understand how the stem specifications work, it's important to understand the phonetic modifications done
by combine_stem_ending(). In general, the complexities of predictable prefix, stem and ending modifications are all
handled in this function. In particular:
1. Spelling-based modifications (c/qu, ç/c, g/gu, j/g, gu/gü, qu/qü) occur automatically as appropriate for the ending.
2. If the ending begins with an asterisk, this is a signal to delete the accent on the last syllable of the stem, e.g.
veié -> veierem.
3. If ending begins with i, it may turn into í or ï after an unstressed vowel (in some but not all cases) to prevent the
two merging into a diphthong. See combine_stem_ending() for specifics.
The following stems are recognized [FIXME: This is not correct for Catalan, needs rewriting]:
-- pres_unstressed: The present indicative unstressed stem (1p, 2p). Also controls the imperative 2p
and gerund. Defaults to the infinitive stem (minus the ending -ar/-er/-ir/-or).
-- pres_stressed: The present indicative stressed stem (1s, 2s, 3s, 3p). Also controls the imperative 2s.
Default is empty if indicator `no_pres_stressed`, else a vowel alternation if such an indicator is given
(e.g. `ue`, `ì`), else the infinitive stem.
-- pres1: Special stem for 1s present indicative. Normally, do not set this explicitly. If you need to specify an
irregular 1s present indicative, use the form override pres_1s= to specify the entire form. Defaults to
pres_stressed.
-- pres_sub_unstressed: The present subjunctive unstressed stem (1p, 2p). Defaults to the infinitive stem.
-- pres_sub_stressed: The present subjunctive stressed stem (1s, 2s, 3s, 1p). Defaults to pres1.
-- impf: The imperfect stem (not including the -av-/-i- stem suffix, which is determined by the conjugation). Defaults
to the infinitive stem.
-- pret: The full preterite stem missing only the endings (-ste, -mos, etc.), e.g. 'fige', 'fo'. Only used for verbs
with irregular preterites (pret_conj == "irreg") such as [[facer]], [[poder]], [[traer]], etc. Defaults to
`pret_base` + the conjugation vowel.
-- fut: The future stem. Defaults to the infinitive stem + the conjugation vowel.
-- cond: The conditional stem. Defaults to `fut`.
-- impf_sub: The imperfect subjunctive stem. Defaults to `pret`.
-- pp: The masculine singular past participle. Default is based on the verb conjugation: infinitive stem + '-ado' for
-ar verbs, otherwise infinitive stem + '-ido'.
-- pp_inv: `true` if the past participle exists only in the masculine singular.
]=]
local built_in_conjugations = {
--------------------------------------------------------------------------------------------
-- -ar --
--------------------------------------------------------------------------------------------
-- Orthographic consonant alternations in endings are handled automatically in combine_stem_ending().
{
-- [[aguar]]:
-- pres agúo, agúes, agúa, agüem, agüeu, agúen
-- pres_sub aguï, aguïs, aguï, agüem, agüeu, aguïn
-- contrast a more typical verb in -guar, [[enaiguar]]:
-- pres enaiguo, enaigües, enaigua, enaigüem, enaigüeu, enaigüen
-- pres_sub enaigüi, enaigüis, enaigüi, enaigüem, enaigüeu, enaigüin
match = "^aguar",
forms = {
pres_stressed = "agú",
pres_sub_stressed = "aguï",
irreg = true,
}
},
{
-- [[anar]] (full verb); highly irregular
match = "^anar",
var = "full",
forms = {
fut = "anir",
pres_1s = "vaj", -- will be converted to 'vaig'; 'vaig' gets converted to 'vaic'
pres_2s = "vas",
pres_3s = "va",
pres_3p = "van",
pres_sub_stressed = "vagi",
imp_2s = "ves",
irreg = true,
}
},
{
-- [[anar]] (auxiliary); highly irregular
match = "^anar",
var = "aux",
forms = {
pres_1s = "vaj", -- will be converted to 'vaig'; 'vaig' gets converted to 'vaic'
pres_2s = {"vas", "vares"},
pres_3s = "va",
pres_1p = {"vam", "vàrem"},
pres_2p = {"vau", "vàreu"},
pres_3p = {"van", "varen"},
pres_sub_stressed = "vagi",
pres_sub_unstressed = "vàgi",
impf1 = {},
impf2 = {},
fut = {},
pret = {},
pp = {},
gerund = {},
noimp = true,
irreg = true,
}
},
{
-- [[dar]]
match = "^dar",
forms = {
pres_1s = {form = "do", footnotes = {"[obsolete]"}},
pres_2s = {form = "das", footnotes = {"[obsolete]"}},
pres_3s = {form = "da", footnotes = {"[obsolete]"}},
pres_3p = {form = "dan", footnotes = {"[obsolete]"}},
pres_sub_1s = {form = "de", footnotes = {"[obsolete]"}},
pres_sub_2s = {form = "des", footnotes = {"[obsolete]"}},
pres_sub_3s = {form = "de", footnotes = {"[obsolete]"}},
pres_sub_3p = {form = "den", footnotes = {"[obsolete]"}},
pret_1s = "di", -- regular except for lack of accent
pret_3s = "da", -- regular except for lack of accent
impf_sub_1s = "des", -- regular except for lack of accent
impf_sub_3s = "des", -- regular except for lack of accent
irreg = true,
}
},
{
-- [[estar]]; highly irregular
match = "^estar",
forms = {
pres_2s = "estàs",
pres_3s = "està",
pres_3p = "estan",
g_infix = "estig",
imp_2s = "estigues",
imp_2p = "estigueu",
pp = "estad",
}
},
--------------------------------------------------------------------------------------------
-- -er/-re --
--------------------------------------------------------------------------------------------
-- Regular verbs not needing entries here:
--
-- [[rebre]], [[concebre]], [[decebre]], [[percebre]]
-- [[rompre]]
-- [[fúmer]], [[prémer]], [[témer]], [[trémer]]
-- [[perdre]], [[batre]], [[botre]], [[fotre]], [[retre]]
-- [[tòrcer]], [[vèncer]]
-- etc.
------------------------------------------- -ldre/-ler/-lre --------------------------------------
{
-- [[caldre]], [[doldre]], [[condoldre's]], [[oldre]]
match = match_against_verbs("ldre", {"ca", "do", "^o"}),
forms = {
-- g_infix implies irreg = true
-- g_infix adds -g to pres_1s, sub, pret and pp stems; combine_stem_ending() changes final -g to -c
g_infix = "+",
}
},
{
-- [[caler]]
match = "caler",
like = "caldre",
},
{
-- [[doler]] and compounds
match = "doler",
like = "doldre",
},
{
-- [[dolre]]
match = "dolre",
forms = {
-- see above for g_infix effects
g_infix = "+",
}
},
{
-- [[valer]], [[equivaler]], [[prevaler]], [[sobrevaler]]
match = "valer",
forms = {
-- see above for g_infix effects
fut = "valdr",
g_infix = "+",
}
},
{
-- [[valdre]] and compounds
match = "valdre",
like = "valer",
},
{
-- [[soler]]
match = "^soler", -- this must precede -oldre rule below for alt form [[soldre]]
forms = {
-- see above for g_infix effects
fut = {},
pret = {},
impf_sub = "solgué", -- regular, but we disabled the preterite, which would normally disable impf_sub too
g_infix = "+",
pp = {},
noimp = true,
}
},
{
-- [[soldre]]
match = "^soldre", -- this must precede -oldre rule below
like = "soler",
},
{
-- [[coldre]], [[moldre]], [[absoldre]], [[dissoldre]], [[resoldre]], [[toldre]]
match = "oldre", -- this must follow [[doldre]]/[[oldre]] rule above
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "olt",
}
},
{
-- [[voler]], [[malvoler]]
match = "voler",
forms = {
fut = "voldr",
pres_1s = "vull",
pres_sub_stressed = "vulgui",
pres_sub_unstressed = "vulgue",
g_infix = "+",
imp_2s = "vulgues",
imp_2p = "vulgueu",
}
},
--------------------------------------------- -ndre ----------------------------------------
{
-- [[romandre]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("mandre", {"^ro"}),
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "màs#",
}
},
{
-- [[encendre]], [[atendre]], [[contendre]], [[desentendre's]], [[distendre]], [[entendre]], [[estendre]],
-- [[pretendre]]
match = match_against_verbs("endre", {"enc", "t"}),
forms = {
pres_3s = "én#", -- remove final accent without prefix with vowel; also removed when adding a suffix
-- see above for g_infix effects
g_infix = "+",
pp = "ès#", -- see above for effect of final #
}
},
{
-- [[vendre]], [[malvendre]], [[revendre]]
match = "vendre",
forms = {
pres_3s = "vèn#", -- see above for effect of final #
-- see above for g_infix effects
g_infix = "+",
pp = "venud", -- g_infix would normally make it vengud
}
},
{
-- [[fendre]], [[defendre]], [[ofendre]], [[dependre]], [[despendre]], [[expendre]], [[suspendre]], [[prendre]],
-- [[aprendre]], [[comprendre]], [[desprendre]], [[emprendre]], [[reprendre]], [[sorprendre]]
match = "endre", -- this must follow previous -endre rules above
forms = {
pres_3s = "èn#", -- see above for effect of final #
-- see above for g_infix effects
g_infix = "+",
pp = "ès#", -- see above for effect of final #
}
},
{
-- [[enfondre]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("fondre", {"^en"}),
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "fús#",
}
},
{
-- [[pondre]], [[compondre]], [[correspondre]], [[descompondre]], [[despondre's]], [[respondre]]
match = "pondre",
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "post",
}
},
{
-- [[fondre]], [[confondre]], [[difondre]], [[infondre]], [[refondre]], [[tondre]]
match = "ondre", -- this must follow previous -ondre rules above
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "ós#", -- see above for effect of final #
}
},
--------------------------------------------- -nyer ----------------------------------------
{
-- [[atènyer]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("tènyer", {"^a"}),
forms = {
pp = "tès#",
irreg = true,
}
},
{
-- [[empènyer]], [[espènyer]]
match = match_against_verbs("pènyer", {"^em", "^es"}),
forms = {
pp = "pès#",
irreg = true,
}
},
{
-- [[estrènyer]], [[constrènyer]], [[destrènyer]], [[restrènyer]]
match = match_against_verbs("strènyer", {"^e", "con", "^de", "^re"}),
forms = {
pp = "stret",
irreg = true,
}
},
{
-- [[fènyer]]
match = "fènyer",
forms = {
pp = {"fengud", "fenyud"},
irreg = true,
}
},
{
-- [[júnyer]]
match = "júnyer",
like = "junyir",
},
{
-- [[plànyer]], [[complànyer]], [[pertànyer]]
match = match_against_verbs("ànyer", {"pl", "pert"}),
forms = {
pp = {"angud", "anyud"},
irreg = true,
}
},
--------------------------------------------- -aure ----------------------------------------
{
-- [[caure]], [[decaure]], [[recaure]]
match = "caure",
forms = {
-- stem ending in -ai and imperfect in -ia causes special stressed imperfect logic to take effect; we get
-- impf1s queia, impf1p quèiem (preceding vowel changed to è and attached to initial consonant using
-- combine_stem_ending(), which changes c- to qu-)
stem = "caie", -- i dropped by g_infix before u
-- g_infix implies irreg = true
-- g_infix adds -g to pres_1s, sub, pret and pp stems; combine_stem_ending() changes final -g to -c
-- g_infix sets pres_stressed to end in -u, removing a preceding -i or -v
g_infix = "+",
}
},
{
-- [[plaure]], [[complaure]]
match = "plaure",
forms = {
stem = "plae", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
}
},
{
-- [[raure]]
match = "^raure",
forms = {
stem = "rae", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = {"ragud", "ras"},
}
},
--------------------------------------------- -eure ----------------------------------------
{
-- [[beure]], [[embeure]], [[deure]], [[lleure]]
match = match_against_verbs("eure", {"b", "d", "ll"}),
forms = {
stem = "eve", -- v dropped by g_infix before g and u
g_infix = "+",
}
},
{
-- [[creure]], [[seure]], [[asseure]]
match = match_against_verbs("eure", {"cr", "s"}),
forms = {
stem = "ee",
pres_unstressed = "eie", -- affects pres_1p, pres_2p, gerund, imperfect (see [[caure]])
g_infix = "+",
}
},
{
-- [[jeure]], [[ajeure]]
match = "jeure",
forms = {
fut = "jaur", -- affects future and cond
stressed_stem = "jee", -- affects stressed forms, which get g added by g_infix by added except for
-- pres_stressed, which gets u added (controls pres_3s, pres_2s, pres_3p)
unstressed_stem = "jae", -- affects unstressed_stem, which get g added by g_infix
pres_stressed = {"jeu", "jau"},
pres_unstressed = "jaie", -- affects pres_1p, pres_2p, gerund, imperfect (see [[caure]])
pres_1s = {"jec", "jac"},
impf1 = "jei", -- otherwise we'd get impf_1s '#geia' etc.
impf2 = "jèi",
g_infix = "+",
}
},
{
match = "jaure",
like = "jeure",
},
{
-- [[treure]], [[abstreure]], [[atreure]], [[bestreure]], [[contreure]], [[detreure]], [[distreure]],
-- [[extreure]], [[retreure], [[retrotreure]], [[sostreure]]
match = "treure",
forms = {
-- like [[jeure]] except for irregular pp
fut = "traur",
stressed_stem = "tree",
unstressed_stem = "trae",
pres_stressed = {"treu", "trau"},
pres_unstressed = "traie",
pres_1s = {"trec", "trac"},
g_infix = "+",
pp = "tret",
}
},
{
match = "traure",
like = "treure",
},
{
-- [[veure]], [[entreveure]], [[preveure]], [[reveure]]
match = "veure",
forms = {
stem = "veie",
-- impf1s veia, impf1p vèiem (preceding vowel changed to è)
pres_stressed = "veu",
pres_1s = "vej", -- will be converted to 'veig'; 'veig' gets converted to 'veic'
pres_sub_stressed = "vegi",
pres_sub_unstressed = "vege",
pret = {"veié", "vé"},
pret_1s = "viu",
pret_3s = {"veié", "veu"},
impf_sub = "veié",
pp = "vist",
imp_2s = "veges",
imp_2p = {"vegeu", "veieu"},
irreg = true,
}
},
--------------------------------------------- -iure ----------------------------------------
{
-- [[escriure]], [[circumscriure]], [[descriure]], [[inscriure]], [[prescriure]], [[proscriure]],
-- [[subscriure]], [[transcriure]]
match = "scriure",
forms = {
stem = "scrivi", -- v dropped by g_infix before g and u; pres_1p/pres_2p have -ir endings
g_infix = "+",
pret = {"scriví", "scrigué"},
pp = "scrit",
}
},
{
-- [[riure]], [[somriure]]
match = "riure", -- must follow rule for 'scriure'
forms = {
stem = "rie",
-- impf1s reia, impf1p rèiem (preceding vowel changed to è)
g_infix = "+",
}
},
{
-- [[viure]], [[conviure]], [[desviure's]], [[sobreviure]]
match = "viure",
forms = {
stem = "vivi", -- v dropped by g_infix before g and u; pres_1p/pres_2p have -ir endings
g_infix = "visc", -- applies to pres1s, sub, pret, pp
}
},
--------------------------------------------- -oure ----------------------------------------
{
-- [[cloure]], [[concloure]], [[descloure]], [[encloure]], [[excloure]], [[incloure]], [[recloure]]
match = "cloure",
forms = {
stem = "cloe", -- ï in impf1s cloïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = "clòs#", -- remove final accent without prefix with vowel; also removed when adding a suffix
}
},
{
-- [[coure]] "to cook"
match = "coure",
var = "cook",
forms = {
stem = "coe", -- ï in impf1s coïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = "cuit",
}
},
{
-- [[coure]] "to sting"
match = "coure",
var = "sting",
forms = {
stem = "coe", -- ï in impf1s coïa gets generated automatically by combine_stem_ending()
g_infix = "+",
-- pp regular 'cogud'
}
},
{
-- [[moure]], [[promoure]], [[remoure]], [[somoure]], [[ploure]]
match = match_against_verbs("oure", {"m", "pl"}),
forms = {
stem = "ove", -- v dropped by g_infix before g and u
g_infix = "+",
}
},
{
-- [[noure]]
match = "noure",
forms = {
stem = "noe", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
}
},
--------------------------------------------- -xer ----------------------------------------
{
-- [[conèixer]], [[desconèixer]], [[reconèixer]]
match = "conèixer",
forms = {
g_infix = "coneg",
}
},
{
-- [[créixer]], [[acréixer]], [[decréixer]], [[recréixer]], [[sobrecréixer]]
match = "créixer",
forms = {
pret = {"creixé", "cresqué"},
pres_sub_unstressed = {"creixe", "cresque"},
pp = "crescud",
irreg = true,
}
},
{
-- [[merèixer]], [[desmerèixer]], [[irèixer-se]]
match = match_against_verbs("rèixer", {"me", "^i"}),
forms = {
pret = {"reixé", "resqué"},
pres_sub_unstressed = {"reixe", "resque"},
pp = "rescud",
irreg = true,
}
},
{
-- [[néixer]]/[[nàixer]], [[renéixer]]/[[renàixer]], [[sobrenéixer]]/[[sobrenàixer]], [[péixer]]/[[pàixer]]
match = match_against_verbs("éixer", {"n", "p"}),
forms = {
stem = "aixe",
fut = "aixer",
pres_stressed = {"eix", "aix"},
pres_1s = "eixo",
pret = {"aixé", "asqué"},
pres_sub_stressed = "eixi",
pres_sub_unstressed = {"aixe", "asque"},
pp = "ascud",
irreg = true,
}
},
{
match = "àixer",
like = "éixer",
},
{
-- [[parèixer]], [[aparèixer]], [[comparèixer]], [[desaparèixer]], [[reaparèixer]]
match = "parèixer",
forms = {
g_infix = "pareg",
}
},
--------------------------------------------- misc ----------------------------------------
{
-- [[cabre]]
match = "cabre",
forms = {
pres_sub_stressed = "càpiga",
pres_sub_unstressed = "capigue",
irreg = true,
}
},
{
-- [[caber]]
match = "caber",
like = "cabre",
},
{
-- [[saber]]
match = "saber",
forms = {
fut = "sabr",
pres_1s = "sé",
pres_sub_stressed = "sàpiga",
pres_sub_unstressed = "sapigue",
imp_2s = "sàpiga",
imp_2p = "sapigueu",
irreg = true,
}
},
{
-- [[poder]]
match = "poder",
forms = {
fut = "podr",
pres_1s = "puc",
pres_sub_stressed = "pugui",
pres_sub_unstressed = "pugue",
g_infix = "pog",
imp_2s = "pugues",
imp_2p = "pugueu",
irreg = true,
}
},
{
-- [[córrer]], [[acórrer]], [[concórrer]], [[decórrer]], [[descórrer]], [[discórrer]], [[encórrer]],
-- [[escórrer]], [[incórrer]], [[ocórrer]], [[recórrer]], [[socórrer]], [[transcórrer]]
match = "córrer",
forms = {
pret = "corregué",
pres_sub_unstressed = {"corre", "corregue"},
pp = "corregud",
irreg = true,
}
},
{
-- [[metre]], [[admetre]], [[arremetre]], [[cometre]], [[comprometre]], [[demetre]], [[descomprometre]],
-- [[emetre]], [[entremetre's]], [[escometre]], [[malmetre]], [[manumetre]], [[ometre]], [[permetre]],
-- [[prometre]], [[readmetre]], [[remetre]], [[retransmetre]], [[sotmetre]], [[trametre]], [[transmetre]]
match = "metre",
forms = {
pp = "mès#",
irreg = true,
}
},
--------------------------------------------------------------------------------------------
-- -ir --
--------------------------------------------------------------------------------------------
{
-- [[acudir]]; NOTE: Separation by meaning does not occur in DCC, DIEC, DEIEC, and DCVB says the distinction
-- is geographical and makes no mention of distinction by meaning. OTOH ca.wikt does say that the pronominal
-- sense "to occur" tends to conjugate non-inchoative.
match = "acudir",
forms = {
eix_infix = {{
form = "+",
footnotes = {'[especially in the sense "to turn up, to be present"]'}
}, {
form = "-",
footnotes = {'[especially in the pronominal sense "to occur"]'}
}}
}
},
-- [[afegir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[ajupir]]
-- [[buixir]]
-- [[bullir]], [[rebullir]]
-- [[cruixir]], [[escruixir]] (Routledge says this is inchoative but DIEC, DEIEC and DCC all disagree; note
-- pres_2s 'cruixes', handled automatically)
-- [[dormir]], [[adormir]]
-- [[funyir]]
-- [[grunyir]]
-- [[munyir]], [[esmunyir]]
-- [[pudir]]
-- [[punyir]]
-- [[retrunyir]]
-- [[sallir]]
-- [[sentir]], [[pressentir]], [[ressentir-se]]; not [[consentir]], with can be either non-inchoative or
-- inchoative, and not [[assentir]] or [[dissentir]], which are only inchoative
match = match_against_verbs("ir", {"ajup", "buix", "bull", "cruix", "dorm", "funy", "gruny", "muny", "pud",
"puny", "retruny", "^sent", "pressent", "^ressent", "sall"}),
forms = {
eix_infix = "-",
}
},
{
-- [[arrupir-se]];
-- [[brumir]];
-- [[brunzir]];
-- [[consumir]], [[resumir]], [[presumir]] (not [[sumir]], [[assumir]], [[subsumir]], which are regular)
-- [[mentir]], [[desmentir]]
-- [[percudir]]; cf. also [[acudir]], which to some extent has separate conjugations per meaning
-- [[consentir]]
match = match_against_verbs("ir", {"arrup", "brum", "brunz", "consum", "^resum", "presum", "ment", "percud",
"consent"}),
forms = {
eix_infix = {"+", "-"},
}
},
-- [[cenyir]]: -- non-inchoative or inchoative in Balearics, inchoative elsewhere
{
-- [[cobrir]], [[descobrir]], [[encobrir]], [[recobrir]], [[redescobrir]]
match = "cobrir",
forms = {
pp = "cobert",
irreg = true,
}
},
{
-- [[collir]], [[acollir]], [[escollir]], [[recollir]]
match = "collir",
forms = {
stressed_stem = "culli",
eix_infix = "-",
irreg = true,
}
},
{
-- [[complir]], [[acomplir]], [[incomplir]]
match = "complir",
forms = {
pp = {"complert", "complid"},
irreg = true,
}
},
{
-- [[cosir]], [[descosir]], [[recosir]]
match = "cosir",
forms = {
stressed_stem = "cusi",
pres_3s = "cús#",
eix_infix = "-",
irreg = true,
}
},
{
-- [[eixir]], [[deseixir-se]]; not [[teixir]] or [[entreteixir]], and not [[reeixir]] or [[sobreeixir]],
-- which have an ï in the stem-stressed forms
match = match_against_verbs("eixir", {"^", "des"}),
forms = {
stressed_stem = "ixi",
eix_infix = "-",
irreg = true,
}
},
{
-- [[reeixir]], [[sobreeixir]]
match = match_against_verbs("eixir", {"^re", "sobre"}),
forms = {
stressed_stem = "ïxi",
eix_infix = "-",
irreg = true,
}
},
-- [[engolir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[escopir]]
match = "escopir",
forms = {
stressed_stem = "escupi",
eix_infix = "-",
irreg = true,
}
},
{
-- [[establir]], [[preestablir]], [[restablir]]
match = "establir",
forms = {
pp = {"establert", "establid"},
irreg = true,
}
},
-- [[ferir]]: -- non-inchoative in Balearics, inchoative elsewhere
-- [[fregir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[fugir]], [[confugir]], [[defugir]], [[enfugir-se]]; pres sing ''fujo, fuges, fuig'' handled by
-- combine_stem_ending(); can't be handled by rule above that lists many non-inchoative verbs because the
-- prefix would be 'fug' and the front-back alternation code doesn't apply to prefixes.
match = "fugir",
forms = {
eix_infix = "-",
}
},
{
-- [[imprimir]], [[reimprimir]], [[sobreimprimir]]; not any other verbs in -primir; write it this way so
-- there's a prefix with a vowel to prevent against the accent in the pp from being removed while still
-- removing it in the feminine.
match = match_against_verbs("primir", {"im"}),
forms = {
pp = "près#",
irreg = true,
}
},
-- [[llegir]]: -- non-inchoative in Valencia and Minorca, inchoative elsewhere
{
-- [[lluir]]: regular inchoative in the figurative meaning "to display (something), to be showy" also in the
-- legal meaning "free from a pecuniary obligation, such as a land-based tax (emphyteusis)"; irregular in the
-- literal meaning "to shine"; use <no_built_in> to get regular conjugation. In the regular conjugation,
-- umlauts appear in the following forms: pres_1p/pres_sub_1p/imp_1p lluïm, pres_2p/pres_sub_2p/imp_2p lluïu,
-- impf_1s/impf_3s lluïa, impf_2s lluïes, impf_3p lluïen, pret_2s lluïres, pret_3p lluïren,
-- impf_sub_2s lluïssis, impf_sub_3p lluïssin, throughout the pp: lluït, lluïda, lluïts, lluïdes. IN the
-- irregular conjugation, umlauts appear in the same places as well as elsewhere in the present subjunctive:
-- pres_sub_1s/pres_sub_3s/imp_3s lluï, pres_sub_2s lluïs, pres_sub_3p/imp_3p lluïn. Notably, they do *NOT*
-- appear in the gerund lluint, the infinitive lluir, or anywhere in the future or conditional. Note that
-- verbs.cat [https://www.verbs.cat/en/conjugation/899-lluir.html] lists additional irregular forms pres_1s
-- lluu, and alternative impf_sub forms in -e- instead of -i- (lluïsses, lluíssem, lluísseu, lluïssen), but
-- these are nonstandard or dialectal per both Routledge and DEIEC.
match = "^lluir",
forms = {
eix_infix = "-",
pres3s = {"lluu", "llu"}, -- generates pres_2s, imp_2s
irreg = true,
}
},
{
-- [[entrelluir]] "to be half-seen", [[relluir]] "to shine", [[traslluir-se]] "to be translucent"; either
-- inchoative or non-inchoative, not distinguished by meaning; note, [[deslluir]] and [[enlluir]] are regular
-- inchoative verbs.
match = match_against_verbs("lluir", {"entre", "^re", "tras"}),
forms = {
eix_infix = {"+", "-"},
pres3s = {"llueix", "lluu", "llú"}, -- generates pres_2s, imp_2s; note, pres_2s will end in -es due to
-- combine_stem_ending()
irreg = true,
}
},
{
-- [[morir]], [[premorir]]; but not [[atemorir]]
match = match_against_verbs("morir", {"^", "pre"}),
forms = {
eix_infix = "-",
pp = "mort",
irreg = true,
}
},
{
-- [[obrir]], [[entreobrir]], [[reobrir]]; not [[cobrir]] and derivatives, not [[empobrir]], so we have to list
-- them individually
match = match_against_verbs("obrir", {"^", "entre", "^re"}),
forms = {
eix_infix = "-",
pp = "obert",
irreg = true,
}
},
{
-- [[oferir]]; but not [[proferir]]
match = "^oferir",
forms = {
pp = {"ofert", "oferid"},
irreg = true,
}
},
-- [[oir]], [[desoir]], [[entreoir]]: -- per Routledge, non-inchoative or inchoative normally but only
-- non-inchoative in Valencian; but all dictionaries disagree and say it is a regular inchoative-only verb.
-- It has the same umlauts as lluir (and [[corroir]], another regular inchoative verb).
{
-- [[omplir]], [[desomplir-se]], [[reomplir]]; not [[complir]] and derivatives, so we have to list them
-- individually
match = match_against_verbs("omplir", {"^", "des", "^re"}),
forms = {
eix_infix = "-",
pp = {"omplert", "omplid"},
irreg = true,
}
},
-- [[penedir-se]]: -- non-inchoative in Balearics, inchoative elsewhere
{
-- [[pruir]] "to itch": same umlauts as in [[lluir]].
match = "^pruir",
forms = {
eix_infix = "-",
pres3s = {"pruu", "pru"}, -- generates pres_2s, imp_2s
irreg = true,
}
},
{
-- [[reblir]]
match = "^reblir",
forms = {
pp = {"reblert", "reblid"},
irreg = true,
}
},
-- [[renyir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[sofrir]]
match = "^sofrir",
forms = {
pp = {"sofert", "sofrid"},
irreg = true,
}
},
{
-- [[sortir]], [[ressortir]], [[sobresortir]]; but not [[assortir]], which is regular inchoative
match = match_against_verbs("sortir", {"^", "^res", "sobre"}),
forms = {
stressed_stem = "surti",
eix_infix = "-",
irreg = true,
}
},
{
-- [[suplir]]
match = "^suplir",
forms = {
pp = {"suplert", "suplid"},
irreg = true,
}
},
-- [[teixir]], [[entreteixir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[tenir]] but not any compounds; highly irregular
match = "^tenir",
forms = {
fut = "tindr",
pres_stressed = "ten",
pres_3s = "té",
imp_2s = {"té", "ten", "tingues"},
imp_2p = {"teniu", "tingueu"},
g_infix = "ting",
}
},
{
-- [[abstenir-se]], [[atenir-se]], [[captenir-se]], [[cartenir]], [[contenir]], [[detenir]], [[entretenir]],
-- [[mantenir]], [[menystenir]], [[obtenir]], [[retenir]], [[sostenir]], [[viltenir]]; highly irregular
match = "tenir",
forms = {
fut = "tindr",
pres_stressed = "ten",
pres_3s = "té",
imp_2s = {"tén", "tingues"},
imp_2p = {"teniu", "tingueu"},
g_infix = "ting",
}
},
{
-- [[tindre]]: variant of [[tenir]]
match = "tindre",
like = "tenir",
},
-- [[tenyir]], [[destenyir]]: -- non-inchoative in Valencia, but [[retenyir]] inchoative or non-inchoative in
-- Valencia? (per Routledge); regular inchoative elsewhere
{
-- [[tossir]] "to cough"
match = "^tossir",
forms = {
stressed_stem = "tussi", -- pres_2s gets 'tusses'
pres_3s = "tus", -- note, pres_3s (a single form override) not pres3s (a stem override, which also affects
-- pres_2s; but imp_2s is physically copied from pres_3s, so imp_2s correctly gets 'tus')
eix_infix = "-",
irreg = true,
}
},
{
-- [[venir]] but not any compounds; highly irregular
match = "^venir",
forms = {
fut = "vindr",
pres_stressed = "ven",
pres_3s = "ve",
imp_2s = "vine",
g_infix = "ving",
}
},
{
-- compounds of [[venir]]: [[advenir]], [[avenir]], [[contravenir]], [[convenir]], [[desavenir-se]],
-- [[desconvenir]], [[entrevenir]], [[esdevenir]], [[intervenir]], [[obvenir]], [[pervenir]], [[prevenir]],
-- [[provenir]], [[reconvenir]], [[revenir]], [[sobrevenir]], [[subvenir]]; but not [[enjovenir]] or
-- [[rejovenir]]; highly irregular
match = match_against_verbs("venir", {"^ad", "^a", "contra", "con", "desa", "entre", "esde", "inter", "ob",
"per", "pre", "pro", "^re", "sobre", "sub"}),
forms = {
fut = "vindr",
pres_stressed = "ven",
pres_3s = "vé",
imp_2s = "vén",
g_infix = "ving",
}
},
{
-- [[vindre]]: variant of [[venir]]
match = "vindre",
like = "venir",
},
-- [[vestir]], [[desvestir]], [[revestir]], maybe [[transvestir]]: non-inchoative in Valencia, inchoative or
-- non-inchoative in the Balearics; regular inchoative elsewhere; but not [[envestir]] or [[investir]], which are
-- regular inchoative everywhere
{
-- [[fer]], [[contrafer]], [[desfer]], [[estrafer]], [[perfer]], [[refer]], [[satisfer]]; highly irregular
match = "fer",
forms = {
fut = "far",
pres_1s = "faj", -- will be converted to 'faig'; 'faig' gets converted to 'faic'
pres_2s = "fàs#",
pres_3s = "fà#",
pres_3p = "fan",
pres_unstressed = "fe",
impf1 = "fei",
impf2 = "fèi",
pres_sub_stressed = "faci",
pres_sub_unstressed = "fe",
pret = "fé",
pret_1s = "fiu",
pret_3s = "feu",
impf_sub_1s = "fés#", -- regular except for base form [[fes]], lacking an accent
impf_sub_3s = "fés#", -- same
imp_2s = "fés#",
pp = "fet",
irreg = true,
}
},
{
-- [[dir]], [[adir-se]], [[contradir]], [[desdir]], [[entredir]], [[interdir]], [[maldir]], [[predir]], [[redir]];
-- behaves like an -er/-re verb
match = match_against_verbs("dir", {"^", "^a", "contra", "des", "entre", "inter", "mal", "pre", "^re"}),
forms = {
stem = "die",
g_infix = "+",
imp_2s = "digues",
imp_2p = "digueu",
pp = "dit",
}
},
{
-- [[dur]], [[endur-se]]; behaves like an -er/-re verb
match = "dur",
forms = {
stem = "due",
g_infix = "+",
pres3s = {"duu", "du"}, -- generates pres_2s, imp_2s
impf1 = "dui",
impf2 = "dúi",
pp = "dut",
}
},
{
-- [[ser]]; highly irregular
match = "^ser",
forms = {
pres_1s = "soc",
pres_2s = "ets",
pres_3s = "és",
pres_1p = "som",
pres_2p = "sou",
pres_3p = "són",
impf1 = "er",
impf2 = "ér",
pres_sub_stressed = "sigui",
pres_sub_unstressed = "sigue",
pret = "fó",
pret_1s = "fui",
pret_3s = "fou",
impf_sub_1s = "fos", -- regular except for lack of accent
impf_sub_3s = "fos", -- same
cond = {"serí", "fór"},
imp_2s = "sigues",
imp_2p = "sigueu",
pp = {"estad", "sigud"},
gerund = {"sent", "essent"},
irreg = true,
}
},
{
-- [[ésser]]; variant of [[ser]]
match = "^ésser",
like = "ser",
},
{
-- [[haver]] as auxiliary; highly irregular
match = "^haver",
var = "aux",
forms = {
pres_1s = "he",
pres_2s = "has",
pres_3s = "ha",
pres_1p = "hem",
pres_2p = "heu",
pres_3p = "han",
fut = "haur",
cond = {"haurí", "haguér"},
pres_sub_stressed = "hagi",
pres_sub_unstressed = "hàgi",
noimp = true,
g_infix = "+",
}
},
{
-- [[haver]] as full verb; highly irregular
match = "^haver",
var = "full",
forms = {
pres_1s = {"hec", "hac"},
pres_stressed = {"heu", "hau"},
fut = "haur",
pres_sub_stressed = "hegui",
g_infix = "+",
}
},
{
-- [[heure]]; variant of full verb [[haver]]
match = "^heure",
like = "haver",
likevar = "full",
},
{
-- [[haure]]; variant of full verb [[haver]]
match = "^haure",
like = "haver",
likevar = "full",
},
}
local function skip_slot(base, slot, allow_overrides)
if not allow_overrides and (base.basic_overrides[slot] or
base.refl and base.basic_reflexive_only_overrides[slot]) then
-- Skip any slots for which there are overrides.
return true
end
if base.only3s and (slot:find("^pp_f") or slot:find("^pp_mp")) then
-- diluviar, atardecer, neviscar; impersonal verbs have only masc sing pp
return true
end
if not slot:find("[123]") then
-- Don't skip non-personal slots.
return false
end
if base.nofinite then
return true
end
if (base.only3s or base.only3sp or base.only3p) and (slot:find("^imp_") or slot:find("^neg_imp_")) then
return true
end
if base.only3s and not slot:find("3s") then
-- diluviar, atardecer, neviscar
return true
end
if base.only3sp and not slot:find("3[sp]") then
-- atañer, concernir
return true
end
if base.only3p and not slot:find("3p") then
-- [[caer cuatro gotas]], [[caer chuzos de punta]], [[entrarle los siete males]]
return true
end
return false
end
local function add_stem_ending(stem, ending)
if ending == "" then
return stem
end
if stem:find("#$") then -- remove final accent when adding a suffix
stem = com.remove_accents((stem:gsub("#$", "")), "final syllable only")
end
return stem .. ending
end
local function process_stem(stem, fn)
if stem:find("#$") then
local stem_no_pound_sign = stem:match("^(.*)#$")
return fn(stem_no_pound_sign) .. "#"
else
return fn(stem)
end
end
-- Add the `stem` to the `ending` and apply any phonetic modifications. `is_full_word` indicates that we're creating
-- a "full word" not a stem, and turns on devoicing of final consonants. `dont_include_prefix` is used when creating
-- stems and indicates not to prepend the prefix in `base.prefix` to the result. `is_pres_sub_stressed` is used when
-- creating the pres_sub_stressed stem, to correctly handle both [[desaiguar]] and [[argüir]], whose respective
-- interactions between ü and i/ï are very tricky.
--
-- WARNING: This function is written very carefully; changes to it can easily have unintended consequences.
local function combine_stem_ending(base, stem, ending, is_full_word, dont_include_prefix, is_pres_sub_stressed)
-- Include the prefix in the stem unless dont_include_prefix is given (used in construct_stems()), or the value of
-- `stem` comes from a user-specified stem or form override.
if not dont_include_prefix and not stem:find(IS_USER_STEM_OVERRIDE) and not stem:find(IS_USER_FORM_OVERRIDE) then
stem = base.prefix .. stem
end
-- A * at the beginning of the ending is a signal to remove a stressed accent from the stem. This may feed any of
-- the following rules.
if ending:find("^%*") then
ending = ending:gsub("^%*", "")
stem = com.remove_accents(stem, "final syllable only")
end
-- If ending begins with s and stem ends in a sibilant, we need an e in between; cf. pres_2s 'apareixes' of
-- [[aparèixer]], pres_2s 'torces' of [[tòrcer]], pres_2s 'fuges' of [[fugir]], pres_2s 'brunzes' of [[brunzir]].
-- This may feed the next rule.
if ending:find("^s") and rfind(stem, "[çjsxz]$") then
ending = "e" .. ending
end
-- By default, stems are in their "back" (standalone) form. Before a front vowel, convert the final consonant to
-- its "front" form so the pronunciation doesn't change.
if rfind(ending, "^" .. front_vowel_c) then
-- adequar -> adeqües
-- enaiguar -> enaigües
-- pegar -> pegues
-- arranjar -> arranges
-- marcar -> marques
-- abraçar -> abraces
stem = com.back_to_front(stem)
end
-- Ending beginning in -i after diphthong ending in V + i compresses the two i's into one (cf. pret_1s 'desmaí' and
-- pres_sub_1s 'desmaï' of [[desmaiar]]). This rule doesn't apply after pseudo-vowel u in gu/qu; cf. pret_1s 'guií'
-- of [[guiar]] and contrast pret_1s 'cruí' of [[cruiar]]. This may feed the next rule.
if rfind(ending, "^[iíï]") and rfind(stem, V .. "i$") and not rfind(stem, "[gq][uü]i$") then
stem = stem:gsub("i$", "")
end
-- If ending begins with i (not í), it must get a diaeresis after a true vowel (not gu/qu, cf. pres_1p 'delinquim'
-- of [[delinquir]], not '#delinquïm'; also not a diphthong ending in u, cf. pres_sub_1s 'apreui' of [[apreuar]]
-- not '#apreuï') to prevent the two merging into a diphthong. Note that ü -> u before ï, but to simplify things
-- we leave the double umlauts in place and remove the first one during postprocessing, in fix_double_umlauts().
-- Cf.:
-- * impf_1s 'raïa' of [[raure]];
-- * pres_sub_1s 'creï' of [[crear]];
-- * pres_sub_1s 'associï' of [[associar]];
-- * impf_1s 'cloïa' of [[cloure]];
-- * pres_1p 'lluïm' of [[lluir]];
-- * pres_1p 'arguïm' of [[argüir]].
if ending:find("^i") and rfind(stem, "[aeiouü]$") and not stem:find("[aeiogq]u$") and
-- Unstressed subjunctive endings of [[enaiguar]] remain without umlaut: enaigüi/enaigüis/enaigüin;
-- but stressed endings of [[argüir]] that begin with 'i' do get an umlaut: arguït, impf. arguïa, including
-- stressed subjunctive endings arguïm/arguïu. In both cases the ending is '-i' as part of the creation of
-- the respective stems. There seems no way of distinguishing the two cases other than with a special flag.
not (rfind(stem, "[gq]ü$") and ending == "i" and is_pres_sub_stressed) then
ending = ending:gsub("^i", "ï")
end
local retval = add_stem_ending(stem, ending)
if retval:find("#$") then -- remove final accent if no vowels in prefix
retval = retval:gsub("#$", "")
if not rfind(base.prefix, V) then
retval = com.remove_accents(retval, "final syllable only")
end
end
if is_full_word then
local saw_is_user_form_override
retval, saw_is_user_form_override = rsubb(retval, IS_USER_FORM_OVERRIDE, "")
retval = retval:gsub(IS_USER_STEM_OVERRIDE, "")
if not saw_is_user_form_override then
-- Devoice final voiced obstruent (cf. pres_2s 'caps', pres_3s 'cap' of [[cabre]]). But not after a
-- consonant (cf. pres_2s 'perds', pres_3s 'perd' of [[perdre]]), except for g -> c, which operates
-- even after a consonant (pres_1s 'resolc' of [[resoldre]], pres_1s 'tinc' of [[tenir]]).
retval = retval:gsub("g(s?)$", "c%1")
retval = rsub(retval, "(" .. V .. ")([bdj])(s?)$", function(before, voiced, after)
local devoice = {
b = "p",
d = "t",
j = "ig", -- pres_3s 'fuj' of [[fugir]] -> 'fuig'
}
return before .. devoice[voiced] .. after
end)
end
end
return retval
end
local function add3(base, slot, stems, endings, footnotes, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(base, stem, ending, "is full word")
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil, footnotes)
end
local function insert_form(base, slot, form)
if not skip_slot(base, slot) then
iut.insert_form(base.forms, slot, form)
end
end
local function insert_forms(base, slot, forms)
if not skip_slot(base, slot) then
iut.insert_forms(base.forms, slot, forms)
end
end
local function add_single_stem_tense(base, slot_pref, stems, s1, s2, s3, p1, p2, p3)
local function addit(slot, ending)
add3(base, slot_pref .. "_" .. slot, stems, ending)
end
addit("1s", s1)
addit("2s", s2)
addit("3s", s3)
addit("1p", p1)
addit("2p", p2)
addit("3p", p3)
end
local function map_general(stemforms, fn)
return iut.map_forms(iut.convert_to_general_list_form(stemforms), fn)
end
local function flatmap_general(stemforms, fn)
return iut.flatmap_forms(iut.convert_to_general_list_form(stemforms), fn)
end
-- Given a stem ending in a conjugation vowel -a/-e/-i/-ï, split into stem base and conjugation vowel, converting the
-- stem base to "back" form if the conjugation vowel is front (hence 'torce' of [[tòrcer]] splits into 'torç' and 'e',
-- and 'fugi' of [[fugir]] splits into 'fuj' and 'i').
local function split_conj_vowel(stem)
local stem_base, conj_vowel = rmatch(stem, "^(.*)([aeiï])$")
if not stem_base then
error(("Internal error: Stem '%s' doesn't end in conjugation vowel a/e/i"):format(stem))
end
if conj_vowel == "ï" then
-- To simplify handling of ï, convert to i. It will be converted back to ï as necessary in
-- combine_stem_ending().
conj_vowel = "i"
end
if rfind(conj_vowel, front_vowel_c) then
stem_base = com.front_to_back(stem_base)
end
return stem_base, conj_vowel
end
local function construct_stems(base)
base.output_stems = {}
local stems = base.output_stems
local bst = base.input_stems
-- YUCK, see combine_stem_ending() for the necessity of is_pres_sub_stressed.
local function combine(stem, ending, is_pres_sub_stressed)
return combine_stem_ending(base, stem, ending, false, "dont include prefix", is_pres_sub_stressed)
end
stems.irreg = bst.irreg or bst.g_infix
-- NOTE: Some stems end in a conjugation or similar vowel, specifically:
-- * `stem` (ends in conjugation vowel -a/-e/-i);
-- * `stressed_stem` (likewise);
-- * `unstressed_stem` (likewise);
-- * `pres_unstressed` (which assumes the form of the gerund minus the -nt; note that `pres_stressed` does *NOT*
-- end in a conjugation vowel, but assumes the stem form; the value of pres_3s will be derived by adding -a for
-- -ar verbs and otherwise adding an -e prop vowel when required, as in [[cobrir]], and otherwise adding no
-- vowel);
-- * `pres_sub_stressed` (which assumes the form of pres_sub_3s and hence usually ends in -i, occasionally -a);
-- * `pres_sub_unstressed` (which assumes the form of pres_sub_1p minus the -m, hence ends in -e or -i).
-- Save stem for use in add_categories_and_annotation() for determining the conjugation class.
stems.stem = bst.stem or base.stem
local eix_infix_stem
if base.conj_vowel == "i" then
-- Save eix_infix value for use in add_categories_and_annotation() for determining whether consonant
-- alternations exist.
stems.eix_infix = bst.eix_infix or bst.g_infix and "-" or "+"
eix_infix_stem = flatmap_general(stems.eix_infix, function(form)
if form == "+" then
return map_general(stems.stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, "eixe")
end)
elseif form == "-" then
return stems.stem
else
return form
end
end)
end
local stressed_stem = bst.stressed_stem or eix_infix_stem or stems.stem
local unstressed_stem = bst.unstressed_stem or stems.stem
-- Add the 'g' that is characteristic of g-infix verbs. We remove a stem-final v, e.g. [[beure]] with stem 'beve'
-- becomes 'beg'.
local function add_g(stemforms)
return map_general(stemforms, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
stem_base = stem_base:gsub("v$", "")
return combine(stem_base, "g")
end)
end
-- Add the 'u' of the pres_3s that is characteristic of g-infix verbs (and conjugation vowel 'e', later removed).
-- We remove a stem-final v, as well as i as part of a diphthong, e.g. [[beure]] with stem 'beve' becomes 'beue'
-- and [[veure]] with stem 'veie' becomes 'veue' (but [[riure]] with stem 'rie' becomes 'riue' not '#rue'). We
-- don't add -u after a consonant, e.g. [[doldre]] with stem 'dole' becomes 'dole' not '#dolue'.
local function add_u(stemforms)
return map_general(stemforms, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
if stem_base:find("v$") then
stem_base = stem_base:gsub("v$", "")
else
stem_base = rsub(stem_base, "(" .. V .. ")i$", "%1")
end
-- Add u after vowel but not after another u, so we get pres_3p 'duen' of [[dur]] not '#duuen'.
if rfind(stem_base, V .. "$") and not stem_base:find("u$") then
return combine(stem_base, "u")
else
return stem_base
end
end)
end
local stressed_g_infix, unstressed_g_infix, g_infix_pres_stressed
if bst.g_infix then
local function flatmap_g_infix(default)
return flatmap_general(bst.g_infix, function(form)
if form == "+" then
return default
else
return form
end
end)
end
stressed_g_infix = flatmap_g_infix(add_g(stressed_stem))
unstressed_g_infix = flatmap_g_infix(add_g(unstressed_stem))
g_infix_pres_stressed = add_u(stressed_stem)
end
stems.pres_unstressed = bst.pres_unstressed or unstressed_stem
stems.pres_stressed =
-- If no_pres_stressed given, pres_stressed stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
bst.pres_stressed or
g_infix_pres_stressed or
map_general(stressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return stem_base
end)
stems.pres1s =
-- If no_pres_stressed given, pres1s stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
stressed_g_infix or
map_general(stems.pres_stressed, function(form)
return combine(form, "o")
end)
stems.pres3s =
-- If no_pres_stressed given, pres3s stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
bst.pres3s or
map_general(stems.pres_stressed, function(form)
if base.conj_vowel == "a" then
return combine(form, "a")
elseif rfind(form, C .. "[lr]$") and not rfind(form, V .. "ll$") then
return combine(form, "e")
else
return form
end
end)
stems.pres3p =
-- If no_pres_stressed given, pres3p stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
map_general(stems.pres_stressed, function(form)
return combine(form, "en")
end)
local function compute_impf_stem(with_accent)
return map_general(stems.pres_unstressed, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
if conj_vowel == "a" then
return combine(stem_base, with_accent and "àv" or "av")
elseif stem_base:find("i#?$") then
form = form:gsub("i#?$", "")
return combine(rmatch(stem_base, "^(.-)" .. V .. "*$"), with_accent and "èi" or "ei")
else
return combine(stem_base, with_accent and "í" or "i") -- i -> ï after a vowel
end
end)
end
stems.impf1 = bst.impf1 or compute_impf_stem(false)
stems.impf2 = bst.impf2 or compute_impf_stem(true)
stems.pret = bst.pret or
unstressed_g_infix and map_general(unstressed_g_infix,
function(form) return combine(form, "é") end
) or
map_general(unstressed_stem, function(form)
local accent_conj_vowel = {
a = "à",
e = "é",
i = "í",
}
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, accent_conj_vowel[conj_vowel])
end)
stems.fut = bst.fut or base.inf_stem
stems.cond = bst.cond or map_general(stems.fut, function(form) return combine(form, "í") end)
stems.pres_sub_stressed = bst.pres_sub_stressed or
stressed_g_infix and map_general(stressed_g_infix, function(form) return combine(form, "i") end) or
map_general(stressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, "i", "is pres_sub_stressed")
end)
stems.pres_sub_unstressed = bst.pres_sub_unstressed or
unstressed_g_infix and map_general(unstressed_g_infix, function(form) return combine(form, "e") end) or
map_general(unstressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, conj_vowel == "i" and conj_vowel or "e")
end)
stems.impf_sub = bst.impf_sub or map_general(stems.pret, function(form)
local stem_base = rmatch(form, "^(.*)à$") -- already in "back" form, no need to convert
if stem_base then
return combine(stem_base, "é")
else
return form
end
end)
stems.pp = bst.pp or
unstressed_g_infix and map_general(unstressed_g_infix,
function(form) return combine(form, "ud") end
) or
map_general(unstressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
-- use combine() so we get 'abduïd' from 'abdu-' of [[abduir]], 'seguid' from 'seg-' from [[seguir]], etc.
return combine(stem_base, (conj_vowel == "e" and "u" or conj_vowel) .. "d")
end)
end
local function a_to_e(base, stems, suffix)
return map_general(stems, function(form)
local stem_base = form:match("^(.-)a$")
if stem_base then
suffix = "e" .. suffix
else
stem_base = form
end
return combine_stem_ending(base, stem_base, suffix, "is full word")
end)
end
local function add_present_indic(base)
local stems = base.output_stems
local function addit(slot, stems, ending)
add3(base, "pres_" .. slot, stems, ending)
end
addit("1s", stems.pres1s, "")
insert_forms(base, "pres_2s", a_to_e(base, stems.pres3s, "s"))
addit("3s", stems.pres3s, "")
insert_forms(base, "pres_1p", a_to_e(base, stems.pres_unstressed, "m"))
insert_forms(base, "pres_2p", a_to_e(base, stems.pres_unstressed, "u"))
addit("3p", stems.pres3p, "")
end
local function add_present_subj(base)
local stems = base.output_stems
local function addit(slot, stems, ending)
add3(base, "pres_sub_" .. slot, stems, ending)
end
-- Regular -ar verb: [[amar]]: ami, amis, ami, amem, ameu, amin
-- Regular -re verb: [[batre]]: bati, batis, bati, batem, bateu, batin (same as -ar verb)
-- Regular -ir verb, no -eix- infix: [[dormir]]: dormi, dormis, dormi, dormim, dormiu, dormin
-- Regular -ir verb, -eix- infix: [[imprimir]]: imprimeixi, imprimeixis, imprimeixi, imprimim, imprimiu, imprimeixin
-- Stem changing in 123s/3p vs. 12p:
-- * -eix- infix (-eix- in all stressed forms: 123s/3p of pres ind/sub, 2s imp)
-- * [[collir]]: culli, cullis, culli, collim, colliu, cullin (cull- in all stressed forms)
-- * [[cabre]]: càpiga, càpigues, càpiga, capiguem, capigueu, càpiguen (also different endings)
addit("1s", stems.pres_sub_stressed, "")
insert_forms(base, "pres_sub_2s", a_to_e(base, stems.pres_sub_stressed, "s"))
addit("3s", stems.pres_sub_stressed, "")
addit("1p", stems.pres_sub_unstressed, "m")
addit("2p", stems.pres_sub_unstressed, "u")
insert_forms(base, "pres_sub_3p", a_to_e(base, stems.pres_sub_stressed, "n"))
end
local function add_finite_non_present(base)
local stems = base.output_stems
local function add_tense(slot, stem, s1, s2, s3, p1, p2, p3)
add_single_stem_tense(base, slot, stem, s1, s2, s3, p1, p2, p3)
end
add_tense("impf", stems.impf1, "a", "es", "a", nil, nil, "en")
add_tense("impf", stems.impf2, nil, nil, nil, "em", "eu", nil)
-- pret_1s ends in -í regardless of the normal vowel of the stem.
insert_forms(base, "pret_1s", map_general(stems.pret, function(form)
local stem_base, conj_vowel = rmatch(form, "^(.*)(" .. V .. ")$")
if not stem_base then
error(("Internal error: Preterite stem '%s' doesn't end in vowel"):format(form))
end
if rfind(conj_vowel, front_vowel_c) then
stem_base = com.front_to_back(stem_base)
end
-- Use combine_stem_ending() to handle back-to-front conversions, e.g. pegà -> peguí for [[pegar]] and ensure
-- that the prefix gets added.
return combine_stem_ending(base, stem_base, "í", "is full word") end))
-- * at the beginning of the ending means to remove an accent from the last vowel of the preterite stem.
add_tense("pret", stems.pret, nil, "*res", "", "rem", "reu", "*ren")
-- * at the beginning of the ending means to remove an accent from the last vowel of the imperfect subjunctive stem.
add_tense("impf_sub", stems.impf_sub, "s", "*ssis", "s", "ssim", "ssiu", "*ssin")
add_tense("fut", stems.fut, "é", "às", "à", "em", "eu", "an")
add_tense("cond", stems.cond, "*a", "*es", "*a", "em", "eu", "*en")
end
local function add_non_finite_forms(base)
local stems = base.output_stems
local function addit(slot, stems, ending, footnotes)
add3(base, slot, stems, ending, footnotes)
end
insert_form(base, "infinitive", {form = base.orig_verb})
-- Also insert "infinitive + reflexive pronoun" combinations if we're handling a reflexive verb. See comment below
-- for "gerund + reflexive pronoun" combinations.
if base.refl then
for _, persnum in ipairs(person_number_list) do
insert_form(base, "infinitive_" .. persnum, {form = base.orig_verb})
end
end
-- Gerunds don't have an umlaut over the i in cases like 'abduint' of 'abduir' (not '#abduïnt').
local pres_unstressed_no_umlaut = map_general(stems.pres_unstressed, function(form)
return rsub(form, "ï$", "i")
end)
addit("gerund", pres_unstressed_no_umlaut, "nt")
-- Also insert "gerund + reflexive pronoun" combinations if we're handling a reflexive verb. We insert exactly the
-- same form as for the bare gerund; later on in add_reflexive_or_fixed_clitic_to_forms(), we add the appropriate
-- clitic pronouns. It's important not to do this for non-reflexive verbs, because in that case, the clitic
-- pronouns won't be added, and {{ca-verb form of}} will wrongly consider all these combinations as possible
-- inflections of the bare gerund. Thanks to [[User:JeffDoozan]] for this bug fix.
if base.refl then
for _, persnum in ipairs(person_number_list) do
addit("gerund_" .. persnum, pres_unstressed_no_umlaut, "nt")
end
end
addit("pp_ms", stems.pp, "")
if not base.pp_inv then
addit("pp_fs", stems.pp, "a")
-- make_plural() handles the complexities of e.g. 'vist' of [[veure]] -> 'vistos'/'vists' and 'romàs' of
-- [[romandre]] -> 'romasos'. We need to use flatmap_general() because make_plural() may return more than one
-- plural, and we need to use map_general() on the result, applying combine_stem_ending(), to ensure that
-- prefixes get properly added and plurals like 'amads' of stem 'amad' of [[amar]] get converted to 'amats'.
insert_forms(base, "pp_mp", map_general(flatmap_general(stems.pp, function(form)
-- Remove any # indicating that an accent will be dropped; it will be dropped in any case by make_plural().
form = form:gsub("#$", "")
return com.make_plural(form, "m")
end), function(form)
return combine_stem_ending(base, form, "", "is full word")
end))
addit("pp_fp", stems.pp, "es")
end
end
local function add_imperatives(base)
if base.noimp then
return
end
-- Copy pres3s to imperative since they are almost always the same.
insert_forms(base, "imp_2s", iut.map_forms(base.forms.pres_3s, function(form) return form end))
-- Copy pres2p to imperative plural since they are almost always the same.
insert_forms(base, "imp_2p", iut.map_forms(base.forms.pres_2p, function(form) return form end))
-- Copy subjunctives to imperatives.
for _, persnum in ipairs({"3s", "1p", "3p"}) do
local from = "pres_sub_" .. persnum
local to = "imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form) return form end))
end
end
local function fix_double_umlauts(base)
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
form.form = form.form:gsub("üï", "uï")
end
end
end
local function process_slot_overrides(base, filter_slot, reflexive_only)
local overrides = reflexive_only and base.basic_reflexive_only_overrides or base.basic_overrides
for slot, forms in pairs(overrides) do
if not filter_slot or filter_slot(slot) then
add3(base, slot, forms, "", nil, "allow overrides")
end
end
end
local function link_clitic(clitic)
return (clitic:gsub("([^ %-]+)", "[[%1]]"))
end
-- Prefix `form` with `clitic`, adding fixed text `between` between them. Add links as appropriate unless the user
-- requested no links. Check whether form already has brackets (as will be the case if the form has a fixed clitic).
local function prefix_clitic_to_form(base, clitic, between, form)
if base.alternant_multiword_spec.args.noautolinkverb then
return clitic .. between .. form
else
local clitic_pref = link_clitic(clitic) .. between
if form:find("%[%[") then
return clitic_pref .. form
else
return clitic_pref .. "[[" .. form .. "]]"
end
end
end
-- Suffix `form` with `clitic`. Add links as appropriate unless the user requested no links. Check whether form already
-- has brackets (as will be the case if the form has a fixed clitic).
local function suffix_clitic_to_form(base, clitic, form)
local autolink = not base.alternant_multiword_spec.args.noautolinkverb
if base.alternant_multiword_spec.args.noautolinkverb then
return form .. clitic
else
local clitic_suf = link_clitic(clitic)
if form:find("%[%[") then
return form .. clitic_suf
else
return "[[" .. form .. "]]" .. clitic_suf
end
end
end
-- Add a reflexive pronoun or fixed clitic (FIXME: not working), as appropriate to the base forms that were generated.
-- `do_joined` means to do only the forms where the pronoun is joined to the end of the form; otherwise, do only the
-- forms where it is not joined and precedes the form.
local function add_reflexive_or_fixed_clitic_to_forms(base, do_reflexive, do_joined)
for _, slotaccel in ipairs(base.alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
local persnum
if slot:find("[123]") then
persnum = slot:match("^.*_(.-)$")
else
persnum = "3s"
end
local function get_proclitic(form)
--if not do_reflexive then
-- return base.clitic
if form:find("^[aeiouh]") then
return proclitic_elided_person_number_to_reflexive_pronoun[persnum]
else
return proclitic_non_elided_person_number_to_reflexive_pronoun[persnum]
end
end
local function get_enclitic(form)
--if not do_reflexive then
-- return base.clitic
if rfind(form, C .. "$") or rfind(form, V .. "[iu]$") and not form:find("[gq]ui$") then
return enclitic_non_elided_person_number_to_reflexive_pronoun[persnum]
else
return enclitic_elided_person_number_to_reflexive_pronoun[persnum]
end
end
if base.forms[slot] then
if do_reflexive and slot:find("^pp_") or slot == "infinitive_linked" then
-- do nothing with reflexive past participles or with infinitive linked (handled at the end)
elseif slot:find("^neg_imp_") then
error("Internal error: Should not have forms set for negative imperative at this stage")
else
local slot_has_suffixed_clitic = slot:find("infinitive") or slot:find("gerund") or slot:find("^imp_")
-- Maybe generate non-reflexive parts and separated syntactic variants for use in
-- {{ca-verb form of}}. See comment in add_slots() above `need_special_verb_form_of_slots`.
-- Check for do_joined so we only run this code once.
if do_reflexive and do_joined and base.alternant_multiword_spec.source_template == "ca-verb form of" and
-- Skip personal variants of infinitives and gerunds so we don't think [[arrependendo]] is a
-- non-reflexive equivalent of [[arrependendo-me]].
not slot:find("infinitive_") and not slot:find("gerund_") then
-- Clone the forms because we will be destructively modifying them just below, adding the reflexive
-- pronoun.
insert_forms(base, slot .. "_non_reflexive", mw.clone(base.forms[slot]))
if slot_has_suffixed_clitic then
insert_forms(base, slot .. "_variant", iut.map_forms(base.forms[slot], function(form)
return prefix_clitic_to_form(base, get_proclitic(form), "... ", form)
end))
end
end
if slot_has_suffixed_clitic then
if do_joined then
-- Add clitic after form.
for _, form in ipairs(base.forms[slot]) do
form.form = suffix_clitic_to_form(base, get_enclitic(form.form), form.form)
end
end
elseif not do_joined then
-- Add clitic before form.
for _, form in ipairs(base.forms[slot]) do
form.form = prefix_clitic_to_form(base, get_proclitic(form.form), "", form.form)
end
end
end
end
end
end
local function handle_infinitive_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{ca-verb}}.
-- We substitute the original lemma (before removing links) for forms that
-- are the same as the lemma, if the original lemma has links.
for _, slot in ipairs({"infinitive"}) do
insert_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
local function generate_negative_imperatives(base)
if base.noimp then
return
end
-- Copy subjunctives to negative imperatives, preceded by "no".
for _, persnum in ipairs(neg_imp_person_number_list) do
local from = "pres_sub_" .. persnum
local to = "neg_imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form)
if base.alternant_multiword_spec.args.noautolinkverb then
return "no " .. form
elseif form:find("%[%[") then
-- already linked, e.g. when reflexive
return "[[no]] " .. form
else
return "[[no]] [[" .. form .. "]]"
end
end))
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
local function conjugate_verb(base)
construct_stems(base)
add_present_indic(base)
add_present_subj(base)
add_finite_non_present(base)
add_non_finite_forms(base)
fix_double_umlauts(base)
-- do non-reflexive non-imperative slot overrides
process_slot_overrides(base, function(slot)
return not slot:find("^imp_") and not slot:find("^neg_imp_")
end)
-- This should happen after process_slot_overrides() in case a derived slot is based on an override
-- (as with the imp_3s of [[dar]], [[estar]]).
add_imperatives(base)
-- do non-reflexive positive imperative slot overrides
process_slot_overrides(base, function(slot)
return slot:find("^imp_")
end)
-- We need to add joined reflexives, then joined and non-joined clitics, then non-joined reflexives, so we get
-- [[arrepéndete]] but [[no]] [[te]] [[arrependas]].
if base.refl then
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", "do joined")
process_slot_overrides(base, nil, "do reflexive") -- do reflexive-only slot overrides
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", false)
end
-- This should happen after add_reflexive_or_fixed_clitic_to_forms() so negative imperatives get the reflexive pronoun
-- and clitic in them.
generate_negative_imperatives(base)
-- do non-reflexive negative imperative slot overrides
-- FIXME: What about reflexive negative imperatives?
process_slot_overrides(base, function(slot)
return slot:find("^neg_imp_")
end)
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma`
-- in handle_infinitive_linked() works correctly and compares unlinked forms to unlinked forms.
handle_infinitive_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
user_basic_overrides = {},
user_stems = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
if inside == "" then
return base
end
local segments = put.parse_balanced_segment_run(inside, "[", "]")
local dot_separated_groups = put.split_alternating_runs(segments, "%.")
for i, dot_separated_group in ipairs(dot_separated_groups) do
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
elseif first_element:find("^var:") then
if #dot_separated_group > 1 then
parse_err(("Can't attach footnotes to 'var:' spec '%s'"):format(first_element))
end
base.var = first_element:match("^var:(.*)$")
elseif first_element:find(":") then
local colon_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*:%s*")
local first_element = colon_separated_groups[1][1]
if #colon_separated_groups[1] > 1 then
parse_err("Can't attach footnotes directly to '" .. first_element .. "' spec; attach them to the " ..
"colon-separated values following the initial colon")
end
if overridable_stems[first_element] then
if base.user_stems[first_element] then
parse_err("Overridable stem '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_stems[first_element] = overridable_stems[first_element](colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a basic override; we validate further later when the possible slots are available
if base.user_basic_overrides[first_element] then
parse_err("Basic override '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_basic_overrides[first_element] = allow_multiple_values_for_override(colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes},
"is form override")
end
else
parse_err("Unrecognized spec '" .. first_element .. "'")
end
end
return base
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, head)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original")
end
-- (2) Remove any links from the lemma, but remember the original form so we can use it below in the 'lemma_linked'
-- form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = head
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
local refl_verb = base.lemma
local verb, refl = rmatch(refl_verb, "^(.-)%-(se)$")
if not verb then
verb, refl = rmatch(refl_verb, "^(.-)('s)$")
end
if not verb then
verb, refl = refl_verb, nil
end
base.user_specified_verb = verb
base.refl = refl
base.verb = base.user_specified_verb
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
elseif base.refl then
-- Reconstruct the linked lemma with separate links around base verb, reflexive pronoun and clitic.
linked_lemma = base.user_specified_verb == base.verb and "[[" .. base.user_specified_verb .. "]]" or
"[[" .. base.verb .. "|" .. base.user_specified_verb .. "]]"
linked_lemma = linked_lemma .. (refl and "-[[" .. refl .. "]]" or "")
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve links in multiword
-- lemmas and include links in non-lemma forms rather than allowing the entire form to be a link.
linked_lemma = iut.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
local function detect_indicator_spec(base)
if (base.only3s and 1 or 0) + (base.only3sp and 1 or 0) + (base.only3p and 1 or 0) > 1 then
error("Only one of 'only3s', 'only3sp' and 'only3p' can be specified")
end
base.forms = {}
base.input_stems = {}
base.basic_overrides = {}
base.basic_reflexive_only_overrides = {}
base.orig_verb = base.verb -- in case of a 'like = "..."' redirect
if not base.no_built_in then
local function match_built_in_spec(verb, built_in_spec)
local prefix, non_prefixed_verb
if type(built_in_spec.match) == "function" then
prefix, non_prefixed_verb = built_in_spec.match(verb)
elseif built_in_spec.match:find("^%^") and rsub(built_in_spec.match, "^%^", "") == verb then
-- begins with ^, for exact match, and matches
prefix, non_prefixed_verb = "", verb
else
prefix, non_prefixed_verb = rmatch(verb, "^(.*)(" .. built_in_spec.match .. ")$")
end
return prefix, non_prefixed_verb
end
local function find_built_in(verb, var)
for _, built_in_spec in ipairs(built_in_conjugations) do
local prefix, non_prefixed_verb = match_built_in_spec(verb, built_in_spec)
if prefix then
if not built_in_spec.var then
if var then
error(("Can't specify a variant spec 'var:%s' with verb '%s'"):format(var, verb))
end
return prefix, non_prefixed_verb, built_in_spec
elseif not var then
local possible_vars = {}
for _, built_in_spec in ipairs(built_in_conjugations) do
local prefix, non_prefixed_verb = match_built_in_spec(verb, built_in_spec)
if prefix then
table.insert(possible_vars, built_in_spec.var)
end
end
error(("For verb '%s', must specify a variant using 'var:...'; possible values are %s"):format(
verb, table.concat(possible_vars, ", ")))
elseif built_in_spec.var == var then
return prefix, non_prefixed_verb, built_in_spec
end
end
end
return nil
end
local prefix, non_prefixed_verb, built_in_spec = find_built_in(base.verb, base.var)
if prefix then
-- we found a built-in verb
if built_in_spec.like then
-- we found a redirect to another verb that has the same conjugation, just a different infinitive
base.verb = prefix .. built_in_spec.like
local new_prefix, new_non_prefixed_verb, new_built_in_spec = find_built_in(base.verb, built_in_spec.likevar)
if new_prefix then
-- redirected to another built-in verb
base.prefix = new_prefix
base.non_prefixed_verb = new_non_prefixed_verb
built_in_spec = new_built_in_spec
else
built_in_spec = nil
end
else
base.prefix = prefix
base.non_prefixed_verb = non_prefixed_verb
end
end
if built_in_spec then
-- we found a built-in verb, possibly redirecting to another built-in verb
for stem, forms in pairs(built_in_spec.forms) do
if type(forms) == "function" then
forms = forms(base, base.prefix)
end
if stem:find("^refl_") then
stem = stem:gsub("^refl_", "")
if not base.alternant_multiword_spec.verb_slots_basic_map[stem] then
error("Internal error: setting for 'refl_" .. stem .. "' does not refer to a basic verb slot")
end
base.basic_reflexive_only_overrides[stem] = forms
elseif base.alternant_multiword_spec.verb_slots_basic_map[stem] then
-- an individual form override of a basic form
base.basic_overrides[stem] = forms
else
base.input_stems[stem] = forms
end
end
end
end
-- Override built-in-verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stems) do
base.input_stems[stem] = values
end
for override, values in pairs(base.user_basic_overrides) do
if not base.alternant_multiword_spec.verb_slots_basic_map[override] then
error("Unrecognized override '" .. override .. "': " .. base.angle_bracket_spec)
end
base.basic_overrides[override] = values
end
base.prefix = base.prefix or ""
base.non_prefixed_verb = base.non_prefixed_verb or base.verb
local inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)(re)$")
if not inf_stem then
inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)([aeiu]r)$")
end
if not inf_stem then
error("Unrecognized infinitive: " .. base.verb)
end
-- Remove accents from e.g. [[parèixer]], [[córrer]].
inf_stem = com.remove_accents(inf_stem)
-- Save full infinitive stem for use in future and conditional.
base.inf_stem = (inf_stem .. suffix):gsub("e$", "")
local stem = inf_stem
if suffix == "re" then
-- verbs in -ldre, -ndre have stem without the d
stem = stem:gsub("([ln])d$", "%1")
elseif suffix == "ur" then
stem = stem .. "u"
end
base.conj_vowel = (suffix == "re" or suffix == "ur") and "e" or suffix:gsub("r$", "")
-- If the stem is followed by a front vowel, convert it to its "back" form before calling combine_stem_ending(),
-- which expects the "back" form of the stem and may convert it back to the "front" form. Don't do this conversion
-- for ï so we leave [[arguïr]] (underlyingly 'argüïr') as 'argu' ("back" form), which becomes 'argü' ("front" form)
-- before front vowel ï and we end up with base.stem containing the underlying form 'argüï'. We remove the first of
-- two umlauts in a row in a postprocessing step (fix_double_umlauts()).
if rfind(suffix, "^[ei]") then
stem = com.front_to_back(stem)
end
-- Use combine_stem_ending() so we get ï if necessary.
base.stem = combine_stem_ending(base, stem, base.conj_vowel, false, "dont include prefix")
-- Propagate built-in-verb indicator flags to `base` and combine with user-specified flags.
for indicator_flag, _ in pairs(indicator_flags) do
base[indicator_flag] = base[indicator_flag] or base.input_stems[indicator_flag]
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
-- Propagate some settings up; some are used internally, others by [[Module:pt-headword]].
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Internal indicator flags. Do these before calling detect_indicator_spec() because add_slots() uses them.
for _, prop in ipairs { "refl", "clitic" } do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
base.alternant_multiword_spec = alternant_multiword_spec
end)
add_slots(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
detect_indicator_spec(base)
-- User-specified indicator flags. Do these after calling detect_indicator_spec() because the latter may set these
-- indicators for built-in verbs.
for prop, _ in pairs(indicator_flags) do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
end)
end
local function add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
local function insert_cat(cat, also_when_multiword)
-- Don't place multiword terms in categories like 'Catalan verbs ending in -ar' to avoid spamming the
-- categories with such terms.
if also_when_multiword or not multiword_lemma then
m_table.insertIfNot(alternant_multiword_spec.categories, "カタルーニャ語 " .. cat)
end
end
if check_for_red_links and alternant_multiword_spec.source_template == "ca-conj" and multiword_lemma then
for _, slot_and_accel in ipairs(alternant_multiword_spec.all_verb_slots) do
local slot = slot_and_accel[1]
local forms = base.forms[slot]
local must_break = false
if forms then
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
local title = mw.title.new(form.form)
if title and not title.exists then
insert_cat("活用表に赤リンクを含む動詞")
must_break = true
break
end
end
end
end
if must_break then
break
end
end
end
map_general(base.output_stems.stem, function(stem)
local stem_base, conj_vowel = split_conj_vowel(stem)
local need_no_eix_infix = true
if conj_vowel ~= base.conj_vowel then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#不規則動詞|混合活用]]")
elseif conj_vowel == "a" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第一変化動詞|第一変化]]")
insert_cat("第一変化動詞")
elseif conj_vowel == "e" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第二変化動詞|第二変化]]")
insert_cat("第二変化動詞")
elseif conj_vowel == "i" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第三変化動詞|第三変化]]")
insert_cat("第三変化動詞")
need_no_eix_infix = false
map_general(base.output_stems.eix_infix, function(form)
if form == "+" then
insert_ann("eix_infix", "接中辞-eix-有り")
insert_cat("-eix-を含む第三変化動詞")
elseif form == "-" then
insert_ann("eix_infix", "接中辞-eix-無し")
insert_cat("-eix-を含まない第三変化動詞")
end
end)
else
error(("Internal error: Stem '%s' doesn't end in conjugation vowel a/e/i and split_conj_vowel() didn't catch it"
):format(stem))
end
if need_no_eix_infix then
insert_ann("eix_infix", "接中辞無し")
end
end)
if base.input_stems.g_infix then
insert_ann("g_infix", "軟口蓋接中辞有り")
insert_cat("軟口蓋接中辞を含む動詞")
else
insert_ann("g_infix", "no infix")
end
if base.output_stems.irreg then
insert_ann("irreg", "不規則")
insert_cat("不規則動詞")
else
insert_ann("irreg", "regular")
end
if base.only3s then
insert_ann("defective", "非人称")
insert_cat("非人称動詞")
elseif base.only3sp then
insert_ann("defective", "第三人称のみ")
insert_cat("第三人称動詞")
elseif base.only3p then
insert_ann("defective", "第三人称複数のみ")
insert_cat("第三人称複数動詞")
elseif base.no_pres_stressed then
insert_ann("defective", "欠如")
insert_cat("欠如動詞")
else
insert_ann("defective", "規則動詞")
end
--if base.clitic then
-- insert_cat("verbs with lexical clitics")
--end
if base.refl then
insert_cat("再帰動詞")
end
local stem_base, conj_vowel = split_conj_vowel(base.stem)
local cons_alt
if conj_vowel == "i" and base.output_stems.eix_infix == "+" then
-- no alternations in verbs like [[afligir]] because all endings are front
elseif stem_base:find("ç$") then
cons_alt = "ç-c"
elseif stem_base:find("c$") then
cons_alt = "c-qu"
elseif stem_base:find("g$") then
cons_alt = "g-gu"
elseif stem_base:find("gu$") then
cons_alt = "gu-gü"
elseif stem_base:find("j$") then
cons_alt = "j-g"
elseif stem_base:find("qu$") then
cons_alt = "qu-qü"
end
if cons_alt then
local desc = cons_alt .. " alternation"
insert_ann("cons_alt", desc)
insert_cat(desc .. "交替の動詞")
else
insert_ann("cons_alt", "non-alternating")
end
end
-- Compute the categories to add the verb to, as well as the annotation to display in the
-- conjugation title bar. We combine the code to do these functions as both categories and
-- title bar contain similar information.
local function compute_categories_and_annotation(alternant_multiword_spec)
alternant_multiword_spec.categories = {}
local ann = {}
alternant_multiword_spec.annotation = ann
ann.conj = {}
ann.g_infix = {}
ann.eix_infix = {}
ann.irreg = {}
ann.defective = {}
ann.cons_alt = {}
local multiword_lemma = false
for _, form in ipairs(alternant_multiword_spec.forms.infinitive) do
if form.form:find(" ") then
multiword_lemma = true
break
end
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
end)
local ann_parts = {}
local conj = table.concat(ann.conj, " or ")
if conj ~= "" then
table.insert(ann_parts, conj)
end
local eix_infix = table.concat(ann.eix_infix, " or ")
if eix_infix ~= "" and eix_infix ~= "no infix" then
table.insert(ann_parts, eix_infix)
end
local irreg = table.concat(ann.irreg, " or ")
if irreg ~= "" and irreg ~= "regular" then
table.insert(ann_parts, irreg)
end
local g_infix = table.concat(ann.g_infix, " or ")
if g_infix ~= "" and g_infix ~= "no infix" then
table.insert(ann_parts, g_infix)
end
local defective = table.concat(ann.defective, " or ")
if defective ~= "" and defective ~= "regular" then
table.insert(ann_parts, defective)
end
local cons_alt = table.concat(ann.cons_alt, " or ")
if cons_alt ~= "" and cons_alt ~= "non-alternating" then
table.insert(ann_parts, cons_alt)
end
alternant_multiword_spec.annotation = table.concat(ann_parts, ", ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = alternant_multiword_spec.forms.infinitive
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec)
local function transform_accel_obj(slot, formobj, accel_obj)
-- No accelerators for negative imperatives, which are always multiword and derived directly from the
-- present subjunctive.
if slot:find("^neg_imp") then
return nil
end
if accel_obj then
accel_obj.form = "verb-form-" .. reconstructed_verb_spec
end
return accel_obj
end
local props = {
lang = lang,
lemmas = lemmas,
transform_accel_obj = transform_accel_obj,
slot_list = alternant_multiword_spec.verb_slots_basic,
}
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote
end
local notes_template = [=[
<div class="roa-footnote-outer-div" style="width:100%;">
<div class="roa-footnote-inner-div">
{footnote}
</div></div>
]=]
local basic_table = [=[
{description}<div class="NavFrame">
<div class="NavHead"> {title} の活用</div>
<div class="NavContent">
{\op}| class="roa-inflection-table" data-toggle-category="inflection"
|-
! colspan="3" class="roa-nonfinite-header" | <span title="infinitiu">不定詞</span>
| colspan="5" | {infinitive}
|-
! colspan="3" class="roa-nonfinite-header" | <span title="gerundi">現在分詞</span>
| colspan="5" | {gerund}
|-
! rowspan="3" colspan="2" class="roa-nonfinite-header" | <span title="participi passat">過去分詞</span>
| colspan="2" class="roa-nonfinite-header" |
! colspan="2" class="roa-nonfinite-header" | 男性
! colspan="2" class="roa-nonfinite-header" | 女性
|-
! colspan="2" class="roa-nonfinite-header" | 単数
| colspan="2" | {pp_ms}
| colspan="2" | {pp_fs}
|-
! colspan="2" class="roa-nonfinite-header" | 複数
| colspan="2" | {pp_mp}
| colspan="2" | {pp_fp}
|-
! colspan="2" rowspan="2" class="roa-person-number-header" | 人称
! colspan="3" class="roa-person-number-header" | 単数
! colspan="3" class="roa-person-number-header" | 複数
|-
! class="roa-person-number-header" style="width:12.5%;" | 第一人称
! class="roa-person-number-header" style="width:12.5%;" | 第二人称
! class="roa-person-number-header" style="width:12.5%;" | 第三人称
! class="roa-person-number-header" style="width:12.5%;" | 第一人称
! class="roa-person-number-header" style="width:12.5%;" | 第二人称
! class="roa-person-number-header" style="width:12.5%;" | 第三人称
|-
! rowspan="6" class="roa-indicative-left-rail" | <span title="indicatiu">直説法</span>
! class="roa-indicative-left-rail" |
! class="roa-indicative-left-rail" | <<jo>>
! class="roa-indicative-left-rail" | <<tu>>
! class="roa-indicative-left-rail" | <<ell>>/<<ella>><br /><<vostè>>
! class="roa-indicative-left-rail" | <<nosaltres>><br /><<nós>>
! class="roa-indicative-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-indicative-left-rail" | <<ells>>/<<elles>><br /><<vostès>>
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="present">現在</span>
| {pres_1s}
| {pres_2s}
| {pres_3s}
| {pres_1p}
| {pres_2p}
| {pres_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="imperfet">不完了過去</span>
| {impf_1s}
| {impf_2s}
| {impf_3s}
| {impf_1p}
| {impf_2p}
| {impf_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="futur">未来</span>
| {fut_1s}
| {fut_2s}
| {fut_3s}
| {fut_1p}
| {fut_2p}
| {fut_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="passat">完了過去</span>
| {pret_1s}
| {pret_2s}
| {pret_3s}
| {pret_1p}
| {pret_2p}
| {pret_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="condicional">可能法</span>
| {cond_1s}
| {cond_2s}
| {cond_3s}
| {cond_1p}
| {cond_2p}
| {cond_3p}
|-
! class="roa-subjunctive-left-rail" rowspan="3" | <span title="subjuntiu">接続法</span>
! class="roa-subjunctive-left-rail" |
! class="roa-subjunctive-left-rail" | <<jo>>
! class="roa-subjunctive-left-rail" | <<tu>>
! class="roa-subjunctive-left-rail" | <<ell>>/<<ella>><br /><<vostè>>
! class="roa-subjunctive-left-rail" | <<nosaltres>><br /><<nós>>
! class="roa-subjunctive-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-subjunctive-left-rail" | <<ells>>/<<elles>><br /><<vostès>>
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | <span title="present">現在</span>
| {pres_sub_1s}
| {pres_sub_2s}
| {pres_sub_3s}
| {pres_sub_1p}
| {pres_sub_2p}
| {pres_sub_3p}
|-
! class="roa-subjunctive-left-rail" style="height:3em;" rowspan="1" | <span title="imperfet">過去</span>
| {impf_sub_1s}
| {impf_sub_2s}
| {impf_sub_3s}
| {impf_sub_1p}
| {impf_sub_2p}
| {impf_sub_3p}
|-
! rowspan="3" class="roa-imperative-left-rail" style="height:3em;" | <span title="imperatiu">命令法</span>
! class="roa-imperative-left-rail" |
! class="roa-imperative-left-rail" | —
! class="roa-imperative-left-rail" | <<tu>>
! class="roa-imperative-left-rail" | <<vostè>>
! class="roa-imperative-left-rail" | <<nosaltres>>
! class="roa-imperative-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-imperative-left-rail" | <<vostès>>
|-
! class="roa-imperative-left-rail" style="height:3em;" | <span title="afirmatiu">-</span>
| —
| {imp_2s}
| {imp_3s}
| {imp_1p}
| {imp_2p}
| {imp_3p}
|-
! class="roa-imperative-left-rail" style="height:3em;" | <span title="negatiu">禁止</span> (<<no>>)
| —
| {neg_imp_2s}
| {neg_imp_3s}
| {neg_imp_1p}
| {neg_imp_2p}
| {neg_imp_3p}
|{\cl}{notes_clause}</div></div>]=]
local function make_table(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
forms.title = link_term(alternant_multiword_spec.lemmas[1].form, nil, "term")
local ann_parts = {}
if alternant_multiword_spec.annotation ~= "" then
table.insert(ann_parts, alternant_multiword_spec.annotation)
end
if alternant_multiword_spec.args.titlenote then
table.insert(ann_parts, alternant_multiword_spec.args.titlenote)
end
local annotation = table.concat(ann_parts, ", ")
if annotation ~= "" then
forms.title = forms.title .. " (" .. annotation .. ")"
end
forms.description = ""
-- Format the table.
forms.footnote = alternant_multiword_spec.footnote_basic
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
local table_with_pronouns = rsub(basic_table, "<<([^<>|]-)|([^<>|]-)>>", link_term)
local table_with_pronouns = rsub(table_with_pronouns, "<<(.-)>>", link_term)
return require("Module:TemplateStyles")("Module:roa-verb/style.css") ..
m_string_utilities.format(table_with_pronouns, forms)
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head)
local PAGENAME = mw.loadData("Module:headword/data").pagename
local function in_template_space()
return mw.title.getCurrentTitle().nsText == "テンプレート"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the
-- current page title or the value of |pagename=; but not when called from {{ca-verb form of}}, where the
-- page title is a non-lemma form. Note that the verb spec may omit the infinitive; e.g. it may be "<i-e>".
-- For this reason, we use the value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "ca-verb form of" and args.pagename or PAGENAME
local head = headword_head or pagename
local arg1 = args[1]
if not arg1 then
if (pagename == "ca-conj" or pagename == "ca-verb" or pagename == "ca-verb form of") and in_template_space() then
arg1 = "amar<>"
else
arg1 = "<>"
end
end
-- When called from {{ca-verb form of}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "ca-verb form of" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "ca-verb form of" and in_template_space() then
verb_form_of_form = "ami"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local refl_clitic_verb, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(refl_clitic_verb, "[^%[]", "")
local right_brackets = rsub(refl_clitic_verb, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(refl_clitic_verb) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
refl_clitic_verb, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = refl_clitic_verb .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local function split_bracketed_runs_into_words(bracketed_runs)
return put.split_alternating_runs(bracketed_runs, " ", "preserve splitchar")
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
-- Split words only on spaces, not on hyphens, because that messes up reflexive verb parsing.
split_bracketed_runs_into_words = split_bracketed_runs_into_words,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
normalize_all_lemmas(alternant_multiword_spec, head)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
slot_list = alternant_multiword_spec.all_verb_slots,
inflect_word_spec = conjugate_verb,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = iut.remove_redundant_links(form.form)
end
end
compute_categories_and_annotation(alternant_multiword_spec)
if args.json and source_template == "ca-conj" then
return require("Module:JSON").toJSON(alternant_multiword_spec.forms)
end
return alternant_multiword_spec
end
-- Entry point for {{ca-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent().args
local params = {
[1] = {},
["titlenote"] = {},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
}
local args = require("Module:parameters").process(parent_args, params)
local alternant_multiword_spec = export.do_generate_forms(args, "ca-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) ..
require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang, nil, nil, force_cat)
end
return export
8t3cg5alvmvtssqspxbmpq0xy0dfqca
2313417
2313412
2026-08-09T09:36:40Z
Kuroco2k
84207
2313417
Scribunto
text/plain
--[=[
This module implements {{ca-conj}} and provides the underlying conjugation functions for {{ca-verb}}
(whose actual formatting is done in [[Module:ca-headword]]).
Authorship: Ben Wing <benwing2>
]=]
local export = {}
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "pres_1s" (present indicative first-person singular), "pres_sub_2s" (present
subjunctive second-person singular) "impf_sub_3p" (imperfect subjunctive third-person plural).
Each slot is filled with zero or more forms.
-- "form" = The conjugated Catalan form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Catalan term. For Catalan, always the infinitive.
]=]
--[=[
FIXME:
--]=]
local lang = require("Module:languages").getByCode("ca")
local m_string_utilities = require("Module:string utilities")
local m_links = require("Module:links")
local m_table = require("Module:table")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local com = require("Module:ca-common")
local force_cat = false -- set to true for debugging
local check_for_red_links = false -- set to false for debugging
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local rsubn = mw.ustring.gsub
local rsub = com.rsub
local u = mw.ustring.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
-- version of rsubn() that returns a 2nd argument boolean indicating whether a substitution was made.
local function rsubb(term, foo, bar)
local retval, nsubs = rsubn(term, foo, bar)
return retval, nsubs > 0
end
local function link_term(term, display, face)
return m_links.full_link({ lang = lang, term = term, alt = display }, face)
end
local front_vowel = "eèéiíï"
local front_vowel_c = "[" .. front_vowel .. "]"
local V = com.V -- vowel regex class
local C = com.C -- consonant regex class
-- IS_USER_STEM_OVERRIDE is prepended to user-supplied stem overrides to prevent `base.prefix` from being prepended.
-- IS_USER_FORM_OVERRIDE is similar but also prevents final devoicing (cf. Balearic pres_1s 'trob' of [[trobar]]).
-- Don't use 0xFFF0 in case we call a [[Module:parse-utilities]] function that uses it temporarily.
local IS_USER_STEM_OVERRIDE = u(0xFFF1)
local IS_USER_FORM_OVERRIDE = u(0xFFF2)
--[=[
Irregular verbs:
-ldre/-ndre verbs:
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
caldre - cal [calent] calia caldrà calgué calgui - calgut,-
coldre colc col colem colia coldré colguí colgui colguem colt,colta
doldre dolc dol dolem dolia doldré dolguí dolgui dolguem dolgut,dolguda
moldre molc mol molem molia moldré molguí molgui molguem molt,molta
oldre olc ol olem olia oldré olguí olgui olguem olgut,olguda
-soldre -solc -sol -solem -solia -soldré -solguí -solgui -solguem -solt,-solta
(absoldre, dissoldre, resoldre)
toldre tolc tol tolem tolia toldré tolguí tolgui tolguem tolt,tolta
romandre romanc roman romanem romania romandré romanguí romangui romanguem romàs,romasa,romasos
encendre encenc encén encenem encenia encendré encenguí encengui encenguem encès,encesa,encesos
fendre fenc fen/-fèn fenem fenia fendré fenguí fengui fenguem fes/-fès,fesa,fesos
(defendre, ofendre)
-pendre -depenc -pèn -penem -penia -pendré -penguí -pengui -penguem -pès,-pesa,-pesos
(dependre,despendre,expendre,suspendre)
prendre prenc pren/-prèn prenem prenia prendré prenguí prengui prenguem pres/-près,presa,presos
(aprendre, comprendre, desprendre, emprendre, reprendre, sorprendre)
-tendre -tenc -tén -tenem -tenia -tendré -tenguí -tengui -tenguem -tès,-tesa,-tesos
(pres2s: atens, pres3p: atenen)
(atendre, contendre, distendre, entendre, estendre, pretendre)
vendre venc ven venem venia vendré venguí vengui venguem venut,venuda
(malvendre, revendre)
fondre fonc fon fonem fonia fondré fonguí fongui fonguem fos/-fós,fosa,fosos
(confondre, difondre, infondre, refondre)
enfondre enfonc enfon enfonem enfonia enfondré enfonguí enfongui enfonguem enfús,enfusa,enfusos
pondre ponc pon ponem ponia pondré ponguí pongui ponguem post,posta,postos
(compondre, correspondre, descompondre, respondre)
tondre tonc ton tonem tonia tondré tonguí tongui tonguem tos,tosa,tosos
cerndre cerno cern cernem cernia cerndré cerní cerni cernem cernut,cernuda
-ler verbs (mostly like -ldre verbs):
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
caler (var. of caldre)
doler (var. of doldre)
soler solc sol solem solia soldré solguí solgui solguem solgut,solguda
valer/valdre valc val valem valia valdré valguí valgui valguem valgut,valguda
(prevaler, equivaler)
other -dre/-tre verbs (regular except sometimes pp):
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
batre bato bat batem batia batré batí bati batem batut,batuda
-metre -meto -met -metem -metia -metré -metí -meti -metem -mès,-mesa,-mesos
(ad-, co-, compro-, e-, entremetre's, mal-, o-, per-, pro-, read-, re-, retrans-, sot-, tra-, trans-)
perdre perdo perd perdem perdia perdré perdí perdi perdem perdut,perduda
-ure verbs
infinitive pres1s pres3s pres1p impf1s impf1p fut1s pret1s sub1s sub1p pp
caure caic cau caiem queia quèiem cauré caiguí caigui caiguem caigut,caiguda
(decaure, recaure)
plaure plac plau plaem plaïa plaíem plauré plaguí plagui plaguem plagut,plaguda
(complaure)
raure rac rau raem raïa raíem rauré raguí ragui raguem ragut,raguda
beure bec beu bevem bevia bevíem beuré beguí begui beguem begut,beguda
(embeure)
creure crec creu creiem creia crèiem creuré creguí cregui creguem cregut,creguda
deure dec deu devem devia devíem deuré deguí degui deguem degut,deguda
jeure jec jeu jaiem jeia jèiem jauré jaguí jegui jaguem jagut,jaguda
(ajeure)
lleure - lleu [-] llevia - lleurà llegué llegui - llegut,-
seure sec seu seiem seia sèiem seuré seguí segui seguem segut,seguda
(asseure)
treure trec treu traiem treia trèiem trauré traguí tregui traguem tret,treta
(abstreure, atreure, contreure, distreure, extreure, retreure, sostreure)
veure veig veu veiem veia vèiem veuré viu,veieres/veres, vegi vegem vist,vista,vists/vistos
(entreveure, preveure, reveure) veié/veu,veiérem/vérem
riure ric riu riem reia rèiem riuré riguí rigui riguem rigut,riguda
(somriure)
(e)scriure escric escriu escrivim escrivia escrivíem escriuré escriví/escriguí escrigui escriguem escrit,escrita
(circumscriure, descriure, inscriure, prescriure, proscriure, subscriure, transcriure)
viure visc viu vivim vivia vivíem viuré visquí visqui visquem viscut,viscuda
(conviure, sobreviure)
cloure cloc clou cloem cloïa cloíem clouré cloguí clogui cloguem clos,closa,closos
(concloure, descloure, encloure, excloure, incloure, recloure)
encloure encloc enclou encloem encloïa encloíem enclouré encloguí enclogui encloguem enclòs,enclosa,enclosos
coure coc cou coem coïa coíem couré coguí cogui coguem cuit/cogut,cuita/coguda
moure moc mou movem movia movíem mouré moguí mogui moguem mogut,moguda
(promoure)
noure noc nou noem noïa noíem nouré noguí nogui noguem nogut,noguda
ploure - plou [plovent] plovia - plourà plogué plogui - plogut,ploguda
-nyer verbs (regular except pp)
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
atènyer atenyo ateny atenyem atenyia atenyeré atenyí atenyi atenyem atès,atesa,atesos
empènyer empenyo empeny empenyem empenyia empenyeré empenyí empenyi empenyem empès,empesa,empesos
estrènyer estrenyo estreny estrenyem estrenyia estrenyeré estrenyí estrenyi estrenyem estret,estreta
estrènyer
(constrènyer,restrènyer)
fènyer fenyo feny fenyem fenyia fenyeré fenyí/fenguí fenyi fenyem fenyut/fengut,fenyuda/fenguda
pertànyer pertanyo pertany pertanyem pertanyia pertanyeré pertanyí/pertanguí pertanyi pertanyem pertanyut/pertangut,pertanyuda/pertanguda
plànyer planyo plany planyem planyia planyeré planyí/planguí planyi planyem plangut/planyut,planguda/planyuda
-xer verbs (NOTE: pres2s in -xes)
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
créixer creixo creix creixem creixia creixeré creixí/cresquí creixi creixem crescut,crescuda
(acréixer,decréixer)
conèixer conec coneix coneixem coneixia coneixeré coneguí conegui coneguem conegut,coneguda
(desconèixer,reconèixer)
merèixer mereixo mereix mereixem mereixia mereixeré mereixí/meresquí mereixi mereixem merescut,merescuda
néixer/ neixo/ neix/ naixem naixia naixeré naixí/nasquí neixi/ naixem/nasquem nascut,nascuda
nàixer naixo naix naixi
(renéixer)
parèixer parec pareix pareixem pareixia pareixeré pareguí paregui pareguem paregut,pareguda
(aparèixer,comparèixer,desaparèixer,reaparèixer)
péixer peixo peix paixem paixia paixeré paixí peixi paixem pascut,pascuda
misc. -er verbs
infinitive pres1s pres3s pres1p impf1s impf1p fut1s pret1s sub1s sub1p pp
córrer corro corre correm corria corríem correré correguí corri correm corregut,correguda
fúmer fumo fum fumem fumia fumíem fumeré fumí fumi fumem fumut,fumuda
prémer premo prem premem premia premíem premeré premí premi premem premut,premuda
(es-, re-)
témer temo tem temem temia temíem temeré temí temi temem temut,temuda
trémer [regular]
tòrcer torço torç torcem torcia torcíem torceré torcí torci torcem torçut,torçuda
(des-) [pres2s torces]
vèncer venço venç vencem vencia vencíem venceré vencí venci vencem vençut,vençuda
(con-, re-) [pres2s vences]
cabre/caber cabo cap cabem cabia cabíem cabré cabí càpiga capiguem cabut,cabuda
[sub2s càpigues]
haver he/haig ha havem/hem havia havíem hauré haguí hagi hàgim/haguem hagut,haguda
[noimp] [cond1s hauria/haguera; impsub2s haguessis/haguesses]
poder puc pot podem podia podíem podré poguí pugui puguem pogut,poguda
saber sé sap sabem sabia sabíem sabré sabí sàpiga sapiguem sabut,sabuda
[imp2s sàpigues, imp2p sapigueu]
voler vull vol volem volia volíem voldré volguí vulgui vulguem volgut,volguda
ser/ésser soc és som era érem seré fui sigui siguem estat/sigut,estada/siguda
[ger sent/essent] [cond1s seria/fora]
[pres: soc,ets,éts,som,sou,són; pret: fui,fores,fou,fórem,fóreu,foren; impsub: fos,fossis,fos,fóssim,fóssiu,fossin]
[imp: sigues,sigueu]
fer faig fa fem feia fèiem faré fiu faci fem fet,feta
[pres3p fan]
[pret: fiu,feres,feu,férem,féreu,feren]
]=]
local all_persons_numbers = {
["1s"] = "1|s",
["2s"] = "2|s",
["3s"] = "3|s",
["1p"] = "1|p",
["2p"] = "2|p",
["3p"] = "3|p",
}
local person_number_list = {"1s", "2s", "3s", "1p", "2p", "3p"}
local imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
local neg_imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
proclitic_non_elided_person_number_to_reflexive_pronoun = {
["1s"] = "em ",
["2s"] = "et ",
["3s"] = "es ",
["1p"] = "ens ",
["2p"] = "us ",
["3p"] = "es ",
}
proclitic_elided_person_number_to_reflexive_pronoun = {
["1s"] = "m'",
["2s"] = "t'",
["3s"] = "s'",
["1p"] = "ens ",
["2p"] = "us ",
["3p"] = "s'",
}
enclitic_non_elided_person_number_to_reflexive_pronoun = {
["1s"] = "-me",
["2s"] = "-te",
["3s"] = "-se",
["1p"] = "-nos",
["2p"] = "-vos",
["3p"] = "-se",
}
enclitic_elided_person_number_to_reflexive_pronoun = {
["1s"] = "'m",
["2s"] = "'t",
["3s"] = "'s",
["1p"] = "'ns",
["2p"] = "-us",
["3p"] = "'s",
}
local indicator_flags = m_table.listToSet {
"no_pres_stressed",
"only3s", "only3sp", "only3p", "noimp",
"pp_inv", "irreg", "no_built_in",
}
-- Initialize all the slots for which we generate forms.
local function add_slots(alternant_multiword_spec)
-- "Basic" slots: All slots that go into the regular table (not the reflexive form-of table).
alternant_multiword_spec.verb_slots_basic = {
{"infinitive", "inf"},
{"infinitive_linked", "inf"},
{"gerund", "ger"},
{"pp_ms", "m|s|past|part"},
{"pp_fs", "f|s|past|part"},
{"pp_mp", "m|p|past|part"},
{"pp_fp", "f|p|past|part"},
}
-- Special slots used to handle non-reflexive parts of reflexive verbs in {{ca-verb form of}}. For example, for a
-- reflexive-only verb like [[arrepentirse]], we want to be able to use {{ca-verb form of}} on [[arrepinta]] (which
-- should mention that it is a part of 'me arrepinta', first-person singular present subjunctive, and
-- 'se arrepinta', third-person singular present subjunctive) or on [[arrepentimos]] (which should mention that it
-- is a part of 'arrepentímonos', first-person plural present indicative or preterite). Similarly, we want to use
-- {{ca-verb form of}} on [[arrepentindo]] (which should mention that it is a part of 'se ... arrepentindo',
-- syntactic variant of [[arrepentíndose]], which is the gerund of [[arrepentirse]]). To do this, we need to be
-- able to map non-reflexive parts like [[arrepinta]], [[arrepentimos]], [[arrepentindo]], etc. to their reflexive
-- equivalent(s), to the tag(s) of the equivalent(s), and, in the case of forms like [[arrepentindo]],
-- [[arrepentir]] and imperatives, to the separated syntactic variant of the verb+clitic combination. We do this by
-- creating slots for the non-reflexive part equivalent of each basic reflexive slot, and for the separated
-- syntactic-variant equivalent of each basic reflexive slot that is formed of verb+clitic. We use slots in this
-- way to deal with multiword lemmas. Note that we run into difficulties mapping between reflexive verbs,
-- non-reflexive part equivalents, and separated syntactic variants if a slot contains more than one form. To
-- handle this, if there are the same number of forms in two slots we're trying to match up, we assume the forms
-- match one-to-one; otherwise we don't match up the two slots (which means {{ca-verb form of}} won't work in this
-- case, but such a case is extremely rare and not worth worrying about). Alternatives that handle this "properly"
-- are significantly more complicated and require non-trivial modifications to [[Module:inflection utilities]].
local need_special_verb_form_of_slots = alternant_multiword_spec.source_template == "ca-verb form of" and
alternant_multiword_spec.refl
if need_special_verb_form_of_slots then
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {
{"infinitive_non_reflexive", "-"},
{"infinitive_variant", "-"},
{"gerund_non_reflexive", "-"},
{"gerund_variant", "-"},
}
else
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {}
end
-- Add entries for a slot with person/number variants.
-- `verb_slots` is the table to add to.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(verb_slots, slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local slot = slot_prefix .. "_" .. persnum
local accel = tag_suffix .. "|" .. persnum_tag
table.insert(verb_slots, {slot, accel})
end
end
-- Add a personal slot (i.e. a slot with person/number variants) to `verb_slots_basic`.
local function add_basic_personal_slot(slot_prefix, tag_suffix, person_number_list, no_special_verb_form_of_slot)
add_personal_slot(alternant_multiword_spec.verb_slots_basic, slot_prefix, tag_suffix, person_number_list)
-- Add special slots for handling non-reflexive parts of reflexive verbs in {{ca-verb form of}}.
-- See comment above in `need_special_verb_form_of_slots`.
if need_special_verb_form_of_slots and not no_special_verb_form_of_slot then
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local basic_slot = slot_prefix .. "_" .. persnum
local accel = tag_suffix .. "|" .. persnum_tag
table.insert(alternant_multiword_spec.verb_slots_reflexive_verb_form_of, {basic_slot .. "_non_reflexive", "-"})
end
end
end
add_basic_personal_slot("pres", "直説法|現在", person_number_list)
add_basic_personal_slot("impf", "直説法|不完全過去", person_number_list)
add_basic_personal_slot("pret", "直説法|完全過去", person_number_list)
add_basic_personal_slot("fut", "直説法|未来", person_number_list)
add_basic_personal_slot("cond", "可能法", person_number_list)
add_basic_personal_slot("pres_sub", "接続法|現在", person_number_list)
add_basic_personal_slot("impf_sub", "接続法|過去", person_number_list)
add_basic_personal_slot("imp", "命令法", imp_person_number_list)
-- Don't need special non-reflexive-part slots because the negative imperative is multiword, of which the
-- individual words are 'no' + subjunctive.
add_basic_personal_slot("neg_imp", "命令法|禁止", neg_imp_person_number_list, "no special verb form of")
-- Don't need special non-reflexive-part slots because we don't want [[arrependendo]] mapping to [[arrependendo-me]]
-- (only [[arrependendo-se]]) or [[arrepender]] mapping to [[arrepender-me]] (only [[arrepender-se]]).
add_basic_personal_slot("infinitive", "inf", person_number_list, "no special verb form of")
add_basic_personal_slot("gerund", "ger", person_number_list, "no special verb form of")
-- Generate the list of all slots.
alternant_multiword_spec.all_verb_slots = {}
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_basic) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_reflexive_verb_form_of) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
alternant_multiword_spec.verb_slots_basic_map = {}
for _, slotaccel in ipairs(alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
alternant_multiword_spec.verb_slots_basic_map[slot] = accel
end
end
local overridable_stems = {}
local function allow_multiple_values_for_override(separated_groups, data, is_form_override)
local retvals = {}
for _, separated_group in ipairs(separated_groups) do
local footnotes = data.fetch_footnotes(separated_group)
local form = separated_group[1]
-- Prepend marker to prevent prefixing with `base.prefix`, and (in the case of form overrides) prevent
-- final devoicing.
if is_form_override then
form = IS_USER_FORM_OVERRIDE .. form
else
form = IS_USER_STEM_OVERRIDE .. form
end
local retval = {form = form, footnotes = footnotes}
table.insert(retvals, retval)
end
return retvals
end
for _, overridable_stem in ipairs {
"stem",
"stressed_stem",
"unstressed_stem",
"pres_unstressed",
"pres_stressed",
"pres3s", -- overrides just pres_2s and pres_3s
-- Don't include pres1s, pres3p; use pres_1s etc. if you need to override just those forms
"impf1",
"impf2",
"pret",
"fut",
"cond",
"pres_sub_stressed",
"pres_sub_unstressed",
"impf_sub",
"pp",
"g_infix",
"eix_infix",
} do
-- Written so we can substitute a different validator; parallel code in [[Module:es-verb]] and [[Module:pt-verb]]
-- has simple_choice validators.
overridable_stems[overridable_stem] = allow_multiple_values_for_override
end
-- Useful as the value of the `match` property of a built-in verb. `main_verb_spec` is a Lua pattern that should match
-- the non-prefixed part of a verb, and `prefix_specs` is a list of Lua patterns that should match the prefixed part of
-- a verb. If a prefix spec is preceded by ^, it must match exactly at the beginning of the verb; otherwise, additional
-- prefixes (e.g. re-, des-) may precede. Return the prefix and main verb.
local function match_against_verbs(main_verb_spec, prefix_specs)
return function(verb)
for _, prefix_spec in ipairs(prefix_specs) do
if prefix_spec:find("^%^") then
-- must match exactly
prefix_spec = prefix_spec:gsub("^%^", "")
if prefix_spec == "" then
-- We can't use the second branch of the if-else statement because an empty () returns the current position
-- in rmatch().
local main_verb = rmatch(verb, "^(" .. main_verb_spec .. ")$")
if main_verb then
return "", main_verb
end
else
local prefix, main_verb = rmatch(verb, "^(" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
else
local prefix, main_verb = rmatch(verb, "^(.*" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
end
return nil
end
end
--[=[
Built-in (usually irregular) conjugations.
Each entry is processed in turn and consists of an object with two fields:
1. match=: Specifies the built-in verbs that match this object.
2. forms=: Specifies the built-in stems and forms for these verbs.
The value of match= is either a string beginning with "^" (match only the specified verb), a string not beginning
with "^" (match any verb ending in that string), or a function that is passed in the verb and should return the prefix
of the verb if it matches, otherwise nil. The function match_against_verbs() is provided to facilitate matching a set
of verbs with a common ending and specific prefixes (e.g. [[ter]] and [[ater]] but not [[abater]], etc.).
The value of forms= is a table specifying stems and individual override forms. Each key of the table names either a
stem (e.g. `pres_stressed`), a stem property (e.g. `g_infix`) or an individual override form (e.g. `pres_1s`).
Each value of a stem can either be a string (a single stem), a list of strings, or a list of objects of the form
{form = STEM, footnotes = {FOONOTES}}. Each value of an individual override should be of exactly the same form except
that the strings specify full forms rather than stems. The values of a stem property depend on the specific property
but are generally strings or booleans.
In order to understand how the stem specifications work, it's important to understand the phonetic modifications done
by combine_stem_ending(). In general, the complexities of predictable prefix, stem and ending modifications are all
handled in this function. In particular:
1. Spelling-based modifications (c/qu, ç/c, g/gu, j/g, gu/gü, qu/qü) occur automatically as appropriate for the ending.
2. If the ending begins with an asterisk, this is a signal to delete the accent on the last syllable of the stem, e.g.
veié -> veierem.
3. If ending begins with i, it may turn into í or ï after an unstressed vowel (in some but not all cases) to prevent the
two merging into a diphthong. See combine_stem_ending() for specifics.
The following stems are recognized [FIXME: This is not correct for Catalan, needs rewriting]:
-- pres_unstressed: The present indicative unstressed stem (1p, 2p). Also controls the imperative 2p
and gerund. Defaults to the infinitive stem (minus the ending -ar/-er/-ir/-or).
-- pres_stressed: The present indicative stressed stem (1s, 2s, 3s, 3p). Also controls the imperative 2s.
Default is empty if indicator `no_pres_stressed`, else a vowel alternation if such an indicator is given
(e.g. `ue`, `ì`), else the infinitive stem.
-- pres1: Special stem for 1s present indicative. Normally, do not set this explicitly. If you need to specify an
irregular 1s present indicative, use the form override pres_1s= to specify the entire form. Defaults to
pres_stressed.
-- pres_sub_unstressed: The present subjunctive unstressed stem (1p, 2p). Defaults to the infinitive stem.
-- pres_sub_stressed: The present subjunctive stressed stem (1s, 2s, 3s, 1p). Defaults to pres1.
-- impf: The imperfect stem (not including the -av-/-i- stem suffix, which is determined by the conjugation). Defaults
to the infinitive stem.
-- pret: The full preterite stem missing only the endings (-ste, -mos, etc.), e.g. 'fige', 'fo'. Only used for verbs
with irregular preterites (pret_conj == "irreg") such as [[facer]], [[poder]], [[traer]], etc. Defaults to
`pret_base` + the conjugation vowel.
-- fut: The future stem. Defaults to the infinitive stem + the conjugation vowel.
-- cond: The conditional stem. Defaults to `fut`.
-- impf_sub: The imperfect subjunctive stem. Defaults to `pret`.
-- pp: The masculine singular past participle. Default is based on the verb conjugation: infinitive stem + '-ado' for
-ar verbs, otherwise infinitive stem + '-ido'.
-- pp_inv: `true` if the past participle exists only in the masculine singular.
]=]
local built_in_conjugations = {
--------------------------------------------------------------------------------------------
-- -ar --
--------------------------------------------------------------------------------------------
-- Orthographic consonant alternations in endings are handled automatically in combine_stem_ending().
{
-- [[aguar]]:
-- pres agúo, agúes, agúa, agüem, agüeu, agúen
-- pres_sub aguï, aguïs, aguï, agüem, agüeu, aguïn
-- contrast a more typical verb in -guar, [[enaiguar]]:
-- pres enaiguo, enaigües, enaigua, enaigüem, enaigüeu, enaigüen
-- pres_sub enaigüi, enaigüis, enaigüi, enaigüem, enaigüeu, enaigüin
match = "^aguar",
forms = {
pres_stressed = "agú",
pres_sub_stressed = "aguï",
irreg = true,
}
},
{
-- [[anar]] (full verb); highly irregular
match = "^anar",
var = "full",
forms = {
fut = "anir",
pres_1s = "vaj", -- will be converted to 'vaig'; 'vaig' gets converted to 'vaic'
pres_2s = "vas",
pres_3s = "va",
pres_3p = "van",
pres_sub_stressed = "vagi",
imp_2s = "ves",
irreg = true,
}
},
{
-- [[anar]] (auxiliary); highly irregular
match = "^anar",
var = "aux",
forms = {
pres_1s = "vaj", -- will be converted to 'vaig'; 'vaig' gets converted to 'vaic'
pres_2s = {"vas", "vares"},
pres_3s = "va",
pres_1p = {"vam", "vàrem"},
pres_2p = {"vau", "vàreu"},
pres_3p = {"van", "varen"},
pres_sub_stressed = "vagi",
pres_sub_unstressed = "vàgi",
impf1 = {},
impf2 = {},
fut = {},
pret = {},
pp = {},
gerund = {},
noimp = true,
irreg = true,
}
},
{
-- [[dar]]
match = "^dar",
forms = {
pres_1s = {form = "do", footnotes = {"[obsolete]"}},
pres_2s = {form = "das", footnotes = {"[obsolete]"}},
pres_3s = {form = "da", footnotes = {"[obsolete]"}},
pres_3p = {form = "dan", footnotes = {"[obsolete]"}},
pres_sub_1s = {form = "de", footnotes = {"[obsolete]"}},
pres_sub_2s = {form = "des", footnotes = {"[obsolete]"}},
pres_sub_3s = {form = "de", footnotes = {"[obsolete]"}},
pres_sub_3p = {form = "den", footnotes = {"[obsolete]"}},
pret_1s = "di", -- regular except for lack of accent
pret_3s = "da", -- regular except for lack of accent
impf_sub_1s = "des", -- regular except for lack of accent
impf_sub_3s = "des", -- regular except for lack of accent
irreg = true,
}
},
{
-- [[estar]]; highly irregular
match = "^estar",
forms = {
pres_2s = "estàs",
pres_3s = "està",
pres_3p = "estan",
g_infix = "estig",
imp_2s = "estigues",
imp_2p = "estigueu",
pp = "estad",
}
},
--------------------------------------------------------------------------------------------
-- -er/-re --
--------------------------------------------------------------------------------------------
-- Regular verbs not needing entries here:
--
-- [[rebre]], [[concebre]], [[decebre]], [[percebre]]
-- [[rompre]]
-- [[fúmer]], [[prémer]], [[témer]], [[trémer]]
-- [[perdre]], [[batre]], [[botre]], [[fotre]], [[retre]]
-- [[tòrcer]], [[vèncer]]
-- etc.
------------------------------------------- -ldre/-ler/-lre --------------------------------------
{
-- [[caldre]], [[doldre]], [[condoldre's]], [[oldre]]
match = match_against_verbs("ldre", {"ca", "do", "^o"}),
forms = {
-- g_infix implies irreg = true
-- g_infix adds -g to pres_1s, sub, pret and pp stems; combine_stem_ending() changes final -g to -c
g_infix = "+",
}
},
{
-- [[caler]]
match = "caler",
like = "caldre",
},
{
-- [[doler]] and compounds
match = "doler",
like = "doldre",
},
{
-- [[dolre]]
match = "dolre",
forms = {
-- see above for g_infix effects
g_infix = "+",
}
},
{
-- [[valer]], [[equivaler]], [[prevaler]], [[sobrevaler]]
match = "valer",
forms = {
-- see above for g_infix effects
fut = "valdr",
g_infix = "+",
}
},
{
-- [[valdre]] and compounds
match = "valdre",
like = "valer",
},
{
-- [[soler]]
match = "^soler", -- this must precede -oldre rule below for alt form [[soldre]]
forms = {
-- see above for g_infix effects
fut = {},
pret = {},
impf_sub = "solgué", -- regular, but we disabled the preterite, which would normally disable impf_sub too
g_infix = "+",
pp = {},
noimp = true,
}
},
{
-- [[soldre]]
match = "^soldre", -- this must precede -oldre rule below
like = "soler",
},
{
-- [[coldre]], [[moldre]], [[absoldre]], [[dissoldre]], [[resoldre]], [[toldre]]
match = "oldre", -- this must follow [[doldre]]/[[oldre]] rule above
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "olt",
}
},
{
-- [[voler]], [[malvoler]]
match = "voler",
forms = {
fut = "voldr",
pres_1s = "vull",
pres_sub_stressed = "vulgui",
pres_sub_unstressed = "vulgue",
g_infix = "+",
imp_2s = "vulgues",
imp_2p = "vulgueu",
}
},
--------------------------------------------- -ndre ----------------------------------------
{
-- [[romandre]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("mandre", {"^ro"}),
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "màs#",
}
},
{
-- [[encendre]], [[atendre]], [[contendre]], [[desentendre's]], [[distendre]], [[entendre]], [[estendre]],
-- [[pretendre]]
match = match_against_verbs("endre", {"enc", "t"}),
forms = {
pres_3s = "én#", -- remove final accent without prefix with vowel; also removed when adding a suffix
-- see above for g_infix effects
g_infix = "+",
pp = "ès#", -- see above for effect of final #
}
},
{
-- [[vendre]], [[malvendre]], [[revendre]]
match = "vendre",
forms = {
pres_3s = "vèn#", -- see above for effect of final #
-- see above for g_infix effects
g_infix = "+",
pp = "venud", -- g_infix would normally make it vengud
}
},
{
-- [[fendre]], [[defendre]], [[ofendre]], [[dependre]], [[despendre]], [[expendre]], [[suspendre]], [[prendre]],
-- [[aprendre]], [[comprendre]], [[desprendre]], [[emprendre]], [[reprendre]], [[sorprendre]]
match = "endre", -- this must follow previous -endre rules above
forms = {
pres_3s = "èn#", -- see above for effect of final #
-- see above for g_infix effects
g_infix = "+",
pp = "ès#", -- see above for effect of final #
}
},
{
-- [[enfondre]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("fondre", {"^en"}),
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "fús#",
}
},
{
-- [[pondre]], [[compondre]], [[correspondre]], [[descompondre]], [[despondre's]], [[respondre]]
match = "pondre",
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "post",
}
},
{
-- [[fondre]], [[confondre]], [[difondre]], [[infondre]], [[refondre]], [[tondre]]
match = "ondre", -- this must follow previous -ondre rules above
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "ós#", -- see above for effect of final #
}
},
--------------------------------------------- -nyer ----------------------------------------
{
-- [[atènyer]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("tènyer", {"^a"}),
forms = {
pp = "tès#",
irreg = true,
}
},
{
-- [[empènyer]], [[espènyer]]
match = match_against_verbs("pènyer", {"^em", "^es"}),
forms = {
pp = "pès#",
irreg = true,
}
},
{
-- [[estrènyer]], [[constrènyer]], [[destrènyer]], [[restrènyer]]
match = match_against_verbs("strènyer", {"^e", "con", "^de", "^re"}),
forms = {
pp = "stret",
irreg = true,
}
},
{
-- [[fènyer]]
match = "fènyer",
forms = {
pp = {"fengud", "fenyud"},
irreg = true,
}
},
{
-- [[júnyer]]
match = "júnyer",
like = "junyir",
},
{
-- [[plànyer]], [[complànyer]], [[pertànyer]]
match = match_against_verbs("ànyer", {"pl", "pert"}),
forms = {
pp = {"angud", "anyud"},
irreg = true,
}
},
--------------------------------------------- -aure ----------------------------------------
{
-- [[caure]], [[decaure]], [[recaure]]
match = "caure",
forms = {
-- stem ending in -ai and imperfect in -ia causes special stressed imperfect logic to take effect; we get
-- impf1s queia, impf1p quèiem (preceding vowel changed to è and attached to initial consonant using
-- combine_stem_ending(), which changes c- to qu-)
stem = "caie", -- i dropped by g_infix before u
-- g_infix implies irreg = true
-- g_infix adds -g to pres_1s, sub, pret and pp stems; combine_stem_ending() changes final -g to -c
-- g_infix sets pres_stressed to end in -u, removing a preceding -i or -v
g_infix = "+",
}
},
{
-- [[plaure]], [[complaure]]
match = "plaure",
forms = {
stem = "plae", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
}
},
{
-- [[raure]]
match = "^raure",
forms = {
stem = "rae", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = {"ragud", "ras"},
}
},
--------------------------------------------- -eure ----------------------------------------
{
-- [[beure]], [[embeure]], [[deure]], [[lleure]]
match = match_against_verbs("eure", {"b", "d", "ll"}),
forms = {
stem = "eve", -- v dropped by g_infix before g and u
g_infix = "+",
}
},
{
-- [[creure]], [[seure]], [[asseure]]
match = match_against_verbs("eure", {"cr", "s"}),
forms = {
stem = "ee",
pres_unstressed = "eie", -- affects pres_1p, pres_2p, gerund, imperfect (see [[caure]])
g_infix = "+",
}
},
{
-- [[jeure]], [[ajeure]]
match = "jeure",
forms = {
fut = "jaur", -- affects future and cond
stressed_stem = "jee", -- affects stressed forms, which get g added by g_infix by added except for
-- pres_stressed, which gets u added (controls pres_3s, pres_2s, pres_3p)
unstressed_stem = "jae", -- affects unstressed_stem, which get g added by g_infix
pres_stressed = {"jeu", "jau"},
pres_unstressed = "jaie", -- affects pres_1p, pres_2p, gerund, imperfect (see [[caure]])
pres_1s = {"jec", "jac"},
impf1 = "jei", -- otherwise we'd get impf_1s '#geia' etc.
impf2 = "jèi",
g_infix = "+",
}
},
{
match = "jaure",
like = "jeure",
},
{
-- [[treure]], [[abstreure]], [[atreure]], [[bestreure]], [[contreure]], [[detreure]], [[distreure]],
-- [[extreure]], [[retreure], [[retrotreure]], [[sostreure]]
match = "treure",
forms = {
-- like [[jeure]] except for irregular pp
fut = "traur",
stressed_stem = "tree",
unstressed_stem = "trae",
pres_stressed = {"treu", "trau"},
pres_unstressed = "traie",
pres_1s = {"trec", "trac"},
g_infix = "+",
pp = "tret",
}
},
{
match = "traure",
like = "treure",
},
{
-- [[veure]], [[entreveure]], [[preveure]], [[reveure]]
match = "veure",
forms = {
stem = "veie",
-- impf1s veia, impf1p vèiem (preceding vowel changed to è)
pres_stressed = "veu",
pres_1s = "vej", -- will be converted to 'veig'; 'veig' gets converted to 'veic'
pres_sub_stressed = "vegi",
pres_sub_unstressed = "vege",
pret = {"veié", "vé"},
pret_1s = "viu",
pret_3s = {"veié", "veu"},
impf_sub = "veié",
pp = "vist",
imp_2s = "veges",
imp_2p = {"vegeu", "veieu"},
irreg = true,
}
},
--------------------------------------------- -iure ----------------------------------------
{
-- [[escriure]], [[circumscriure]], [[descriure]], [[inscriure]], [[prescriure]], [[proscriure]],
-- [[subscriure]], [[transcriure]]
match = "scriure",
forms = {
stem = "scrivi", -- v dropped by g_infix before g and u; pres_1p/pres_2p have -ir endings
g_infix = "+",
pret = {"scriví", "scrigué"},
pp = "scrit",
}
},
{
-- [[riure]], [[somriure]]
match = "riure", -- must follow rule for 'scriure'
forms = {
stem = "rie",
-- impf1s reia, impf1p rèiem (preceding vowel changed to è)
g_infix = "+",
}
},
{
-- [[viure]], [[conviure]], [[desviure's]], [[sobreviure]]
match = "viure",
forms = {
stem = "vivi", -- v dropped by g_infix before g and u; pres_1p/pres_2p have -ir endings
g_infix = "visc", -- applies to pres1s, sub, pret, pp
}
},
--------------------------------------------- -oure ----------------------------------------
{
-- [[cloure]], [[concloure]], [[descloure]], [[encloure]], [[excloure]], [[incloure]], [[recloure]]
match = "cloure",
forms = {
stem = "cloe", -- ï in impf1s cloïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = "clòs#", -- remove final accent without prefix with vowel; also removed when adding a suffix
}
},
{
-- [[coure]] "to cook"
match = "coure",
var = "cook",
forms = {
stem = "coe", -- ï in impf1s coïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = "cuit",
}
},
{
-- [[coure]] "to sting"
match = "coure",
var = "sting",
forms = {
stem = "coe", -- ï in impf1s coïa gets generated automatically by combine_stem_ending()
g_infix = "+",
-- pp regular 'cogud'
}
},
{
-- [[moure]], [[promoure]], [[remoure]], [[somoure]], [[ploure]]
match = match_against_verbs("oure", {"m", "pl"}),
forms = {
stem = "ove", -- v dropped by g_infix before g and u
g_infix = "+",
}
},
{
-- [[noure]]
match = "noure",
forms = {
stem = "noe", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
}
},
--------------------------------------------- -xer ----------------------------------------
{
-- [[conèixer]], [[desconèixer]], [[reconèixer]]
match = "conèixer",
forms = {
g_infix = "coneg",
}
},
{
-- [[créixer]], [[acréixer]], [[decréixer]], [[recréixer]], [[sobrecréixer]]
match = "créixer",
forms = {
pret = {"creixé", "cresqué"},
pres_sub_unstressed = {"creixe", "cresque"},
pp = "crescud",
irreg = true,
}
},
{
-- [[merèixer]], [[desmerèixer]], [[irèixer-se]]
match = match_against_verbs("rèixer", {"me", "^i"}),
forms = {
pret = {"reixé", "resqué"},
pres_sub_unstressed = {"reixe", "resque"},
pp = "rescud",
irreg = true,
}
},
{
-- [[néixer]]/[[nàixer]], [[renéixer]]/[[renàixer]], [[sobrenéixer]]/[[sobrenàixer]], [[péixer]]/[[pàixer]]
match = match_against_verbs("éixer", {"n", "p"}),
forms = {
stem = "aixe",
fut = "aixer",
pres_stressed = {"eix", "aix"},
pres_1s = "eixo",
pret = {"aixé", "asqué"},
pres_sub_stressed = "eixi",
pres_sub_unstressed = {"aixe", "asque"},
pp = "ascud",
irreg = true,
}
},
{
match = "àixer",
like = "éixer",
},
{
-- [[parèixer]], [[aparèixer]], [[comparèixer]], [[desaparèixer]], [[reaparèixer]]
match = "parèixer",
forms = {
g_infix = "pareg",
}
},
--------------------------------------------- misc ----------------------------------------
{
-- [[cabre]]
match = "cabre",
forms = {
pres_sub_stressed = "càpiga",
pres_sub_unstressed = "capigue",
irreg = true,
}
},
{
-- [[caber]]
match = "caber",
like = "cabre",
},
{
-- [[saber]]
match = "saber",
forms = {
fut = "sabr",
pres_1s = "sé",
pres_sub_stressed = "sàpiga",
pres_sub_unstressed = "sapigue",
imp_2s = "sàpiga",
imp_2p = "sapigueu",
irreg = true,
}
},
{
-- [[poder]]
match = "poder",
forms = {
fut = "podr",
pres_1s = "puc",
pres_sub_stressed = "pugui",
pres_sub_unstressed = "pugue",
g_infix = "pog",
imp_2s = "pugues",
imp_2p = "pugueu",
irreg = true,
}
},
{
-- [[córrer]], [[acórrer]], [[concórrer]], [[decórrer]], [[descórrer]], [[discórrer]], [[encórrer]],
-- [[escórrer]], [[incórrer]], [[ocórrer]], [[recórrer]], [[socórrer]], [[transcórrer]]
match = "córrer",
forms = {
pret = "corregué",
pres_sub_unstressed = {"corre", "corregue"},
pp = "corregud",
irreg = true,
}
},
{
-- [[metre]], [[admetre]], [[arremetre]], [[cometre]], [[comprometre]], [[demetre]], [[descomprometre]],
-- [[emetre]], [[entremetre's]], [[escometre]], [[malmetre]], [[manumetre]], [[ometre]], [[permetre]],
-- [[prometre]], [[readmetre]], [[remetre]], [[retransmetre]], [[sotmetre]], [[trametre]], [[transmetre]]
match = "metre",
forms = {
pp = "mès#",
irreg = true,
}
},
--------------------------------------------------------------------------------------------
-- -ir --
--------------------------------------------------------------------------------------------
{
-- [[acudir]]; NOTE: Separation by meaning does not occur in DCC, DIEC, DEIEC, and DCVB says the distinction
-- is geographical and makes no mention of distinction by meaning. OTOH ca.wikt does say that the pronominal
-- sense "to occur" tends to conjugate non-inchoative.
match = "acudir",
forms = {
eix_infix = {{
form = "+",
footnotes = {'[especially in the sense "to turn up, to be present"]'}
}, {
form = "-",
footnotes = {'[especially in the pronominal sense "to occur"]'}
}}
}
},
-- [[afegir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[ajupir]]
-- [[buixir]]
-- [[bullir]], [[rebullir]]
-- [[cruixir]], [[escruixir]] (Routledge says this is inchoative but DIEC, DEIEC and DCC all disagree; note
-- pres_2s 'cruixes', handled automatically)
-- [[dormir]], [[adormir]]
-- [[funyir]]
-- [[grunyir]]
-- [[munyir]], [[esmunyir]]
-- [[pudir]]
-- [[punyir]]
-- [[retrunyir]]
-- [[sallir]]
-- [[sentir]], [[pressentir]], [[ressentir-se]]; not [[consentir]], with can be either non-inchoative or
-- inchoative, and not [[assentir]] or [[dissentir]], which are only inchoative
match = match_against_verbs("ir", {"ajup", "buix", "bull", "cruix", "dorm", "funy", "gruny", "muny", "pud",
"puny", "retruny", "^sent", "pressent", "^ressent", "sall"}),
forms = {
eix_infix = "-",
}
},
{
-- [[arrupir-se]];
-- [[brumir]];
-- [[brunzir]];
-- [[consumir]], [[resumir]], [[presumir]] (not [[sumir]], [[assumir]], [[subsumir]], which are regular)
-- [[mentir]], [[desmentir]]
-- [[percudir]]; cf. also [[acudir]], which to some extent has separate conjugations per meaning
-- [[consentir]]
match = match_against_verbs("ir", {"arrup", "brum", "brunz", "consum", "^resum", "presum", "ment", "percud",
"consent"}),
forms = {
eix_infix = {"+", "-"},
}
},
-- [[cenyir]]: -- non-inchoative or inchoative in Balearics, inchoative elsewhere
{
-- [[cobrir]], [[descobrir]], [[encobrir]], [[recobrir]], [[redescobrir]]
match = "cobrir",
forms = {
pp = "cobert",
irreg = true,
}
},
{
-- [[collir]], [[acollir]], [[escollir]], [[recollir]]
match = "collir",
forms = {
stressed_stem = "culli",
eix_infix = "-",
irreg = true,
}
},
{
-- [[complir]], [[acomplir]], [[incomplir]]
match = "complir",
forms = {
pp = {"complert", "complid"},
irreg = true,
}
},
{
-- [[cosir]], [[descosir]], [[recosir]]
match = "cosir",
forms = {
stressed_stem = "cusi",
pres_3s = "cús#",
eix_infix = "-",
irreg = true,
}
},
{
-- [[eixir]], [[deseixir-se]]; not [[teixir]] or [[entreteixir]], and not [[reeixir]] or [[sobreeixir]],
-- which have an ï in the stem-stressed forms
match = match_against_verbs("eixir", {"^", "des"}),
forms = {
stressed_stem = "ixi",
eix_infix = "-",
irreg = true,
}
},
{
-- [[reeixir]], [[sobreeixir]]
match = match_against_verbs("eixir", {"^re", "sobre"}),
forms = {
stressed_stem = "ïxi",
eix_infix = "-",
irreg = true,
}
},
-- [[engolir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[escopir]]
match = "escopir",
forms = {
stressed_stem = "escupi",
eix_infix = "-",
irreg = true,
}
},
{
-- [[establir]], [[preestablir]], [[restablir]]
match = "establir",
forms = {
pp = {"establert", "establid"},
irreg = true,
}
},
-- [[ferir]]: -- non-inchoative in Balearics, inchoative elsewhere
-- [[fregir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[fugir]], [[confugir]], [[defugir]], [[enfugir-se]]; pres sing ''fujo, fuges, fuig'' handled by
-- combine_stem_ending(); can't be handled by rule above that lists many non-inchoative verbs because the
-- prefix would be 'fug' and the front-back alternation code doesn't apply to prefixes.
match = "fugir",
forms = {
eix_infix = "-",
}
},
{
-- [[imprimir]], [[reimprimir]], [[sobreimprimir]]; not any other verbs in -primir; write it this way so
-- there's a prefix with a vowel to prevent against the accent in the pp from being removed while still
-- removing it in the feminine.
match = match_against_verbs("primir", {"im"}),
forms = {
pp = "près#",
irreg = true,
}
},
-- [[llegir]]: -- non-inchoative in Valencia and Minorca, inchoative elsewhere
{
-- [[lluir]]: regular inchoative in the figurative meaning "to display (something), to be showy" also in the
-- legal meaning "free from a pecuniary obligation, such as a land-based tax (emphyteusis)"; irregular in the
-- literal meaning "to shine"; use <no_built_in> to get regular conjugation. In the regular conjugation,
-- umlauts appear in the following forms: pres_1p/pres_sub_1p/imp_1p lluïm, pres_2p/pres_sub_2p/imp_2p lluïu,
-- impf_1s/impf_3s lluïa, impf_2s lluïes, impf_3p lluïen, pret_2s lluïres, pret_3p lluïren,
-- impf_sub_2s lluïssis, impf_sub_3p lluïssin, throughout the pp: lluït, lluïda, lluïts, lluïdes. IN the
-- irregular conjugation, umlauts appear in the same places as well as elsewhere in the present subjunctive:
-- pres_sub_1s/pres_sub_3s/imp_3s lluï, pres_sub_2s lluïs, pres_sub_3p/imp_3p lluïn. Notably, they do *NOT*
-- appear in the gerund lluint, the infinitive lluir, or anywhere in the future or conditional. Note that
-- verbs.cat [https://www.verbs.cat/en/conjugation/899-lluir.html] lists additional irregular forms pres_1s
-- lluu, and alternative impf_sub forms in -e- instead of -i- (lluïsses, lluíssem, lluísseu, lluïssen), but
-- these are nonstandard or dialectal per both Routledge and DEIEC.
match = "^lluir",
forms = {
eix_infix = "-",
pres3s = {"lluu", "llu"}, -- generates pres_2s, imp_2s
irreg = true,
}
},
{
-- [[entrelluir]] "to be half-seen", [[relluir]] "to shine", [[traslluir-se]] "to be translucent"; either
-- inchoative or non-inchoative, not distinguished by meaning; note, [[deslluir]] and [[enlluir]] are regular
-- inchoative verbs.
match = match_against_verbs("lluir", {"entre", "^re", "tras"}),
forms = {
eix_infix = {"+", "-"},
pres3s = {"llueix", "lluu", "llú"}, -- generates pres_2s, imp_2s; note, pres_2s will end in -es due to
-- combine_stem_ending()
irreg = true,
}
},
{
-- [[morir]], [[premorir]]; but not [[atemorir]]
match = match_against_verbs("morir", {"^", "pre"}),
forms = {
eix_infix = "-",
pp = "mort",
irreg = true,
}
},
{
-- [[obrir]], [[entreobrir]], [[reobrir]]; not [[cobrir]] and derivatives, not [[empobrir]], so we have to list
-- them individually
match = match_against_verbs("obrir", {"^", "entre", "^re"}),
forms = {
eix_infix = "-",
pp = "obert",
irreg = true,
}
},
{
-- [[oferir]]; but not [[proferir]]
match = "^oferir",
forms = {
pp = {"ofert", "oferid"},
irreg = true,
}
},
-- [[oir]], [[desoir]], [[entreoir]]: -- per Routledge, non-inchoative or inchoative normally but only
-- non-inchoative in Valencian; but all dictionaries disagree and say it is a regular inchoative-only verb.
-- It has the same umlauts as lluir (and [[corroir]], another regular inchoative verb).
{
-- [[omplir]], [[desomplir-se]], [[reomplir]]; not [[complir]] and derivatives, so we have to list them
-- individually
match = match_against_verbs("omplir", {"^", "des", "^re"}),
forms = {
eix_infix = "-",
pp = {"omplert", "omplid"},
irreg = true,
}
},
-- [[penedir-se]]: -- non-inchoative in Balearics, inchoative elsewhere
{
-- [[pruir]] "to itch": same umlauts as in [[lluir]].
match = "^pruir",
forms = {
eix_infix = "-",
pres3s = {"pruu", "pru"}, -- generates pres_2s, imp_2s
irreg = true,
}
},
{
-- [[reblir]]
match = "^reblir",
forms = {
pp = {"reblert", "reblid"},
irreg = true,
}
},
-- [[renyir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[sofrir]]
match = "^sofrir",
forms = {
pp = {"sofert", "sofrid"},
irreg = true,
}
},
{
-- [[sortir]], [[ressortir]], [[sobresortir]]; but not [[assortir]], which is regular inchoative
match = match_against_verbs("sortir", {"^", "^res", "sobre"}),
forms = {
stressed_stem = "surti",
eix_infix = "-",
irreg = true,
}
},
{
-- [[suplir]]
match = "^suplir",
forms = {
pp = {"suplert", "suplid"},
irreg = true,
}
},
-- [[teixir]], [[entreteixir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[tenir]] but not any compounds; highly irregular
match = "^tenir",
forms = {
fut = "tindr",
pres_stressed = "ten",
pres_3s = "té",
imp_2s = {"té", "ten", "tingues"},
imp_2p = {"teniu", "tingueu"},
g_infix = "ting",
}
},
{
-- [[abstenir-se]], [[atenir-se]], [[captenir-se]], [[cartenir]], [[contenir]], [[detenir]], [[entretenir]],
-- [[mantenir]], [[menystenir]], [[obtenir]], [[retenir]], [[sostenir]], [[viltenir]]; highly irregular
match = "tenir",
forms = {
fut = "tindr",
pres_stressed = "ten",
pres_3s = "té",
imp_2s = {"tén", "tingues"},
imp_2p = {"teniu", "tingueu"},
g_infix = "ting",
}
},
{
-- [[tindre]]: variant of [[tenir]]
match = "tindre",
like = "tenir",
},
-- [[tenyir]], [[destenyir]]: -- non-inchoative in Valencia, but [[retenyir]] inchoative or non-inchoative in
-- Valencia? (per Routledge); regular inchoative elsewhere
{
-- [[tossir]] "to cough"
match = "^tossir",
forms = {
stressed_stem = "tussi", -- pres_2s gets 'tusses'
pres_3s = "tus", -- note, pres_3s (a single form override) not pres3s (a stem override, which also affects
-- pres_2s; but imp_2s is physically copied from pres_3s, so imp_2s correctly gets 'tus')
eix_infix = "-",
irreg = true,
}
},
{
-- [[venir]] but not any compounds; highly irregular
match = "^venir",
forms = {
fut = "vindr",
pres_stressed = "ven",
pres_3s = "ve",
imp_2s = "vine",
g_infix = "ving",
}
},
{
-- compounds of [[venir]]: [[advenir]], [[avenir]], [[contravenir]], [[convenir]], [[desavenir-se]],
-- [[desconvenir]], [[entrevenir]], [[esdevenir]], [[intervenir]], [[obvenir]], [[pervenir]], [[prevenir]],
-- [[provenir]], [[reconvenir]], [[revenir]], [[sobrevenir]], [[subvenir]]; but not [[enjovenir]] or
-- [[rejovenir]]; highly irregular
match = match_against_verbs("venir", {"^ad", "^a", "contra", "con", "desa", "entre", "esde", "inter", "ob",
"per", "pre", "pro", "^re", "sobre", "sub"}),
forms = {
fut = "vindr",
pres_stressed = "ven",
pres_3s = "vé",
imp_2s = "vén",
g_infix = "ving",
}
},
{
-- [[vindre]]: variant of [[venir]]
match = "vindre",
like = "venir",
},
-- [[vestir]], [[desvestir]], [[revestir]], maybe [[transvestir]]: non-inchoative in Valencia, inchoative or
-- non-inchoative in the Balearics; regular inchoative elsewhere; but not [[envestir]] or [[investir]], which are
-- regular inchoative everywhere
{
-- [[fer]], [[contrafer]], [[desfer]], [[estrafer]], [[perfer]], [[refer]], [[satisfer]]; highly irregular
match = "fer",
forms = {
fut = "far",
pres_1s = "faj", -- will be converted to 'faig'; 'faig' gets converted to 'faic'
pres_2s = "fàs#",
pres_3s = "fà#",
pres_3p = "fan",
pres_unstressed = "fe",
impf1 = "fei",
impf2 = "fèi",
pres_sub_stressed = "faci",
pres_sub_unstressed = "fe",
pret = "fé",
pret_1s = "fiu",
pret_3s = "feu",
impf_sub_1s = "fés#", -- regular except for base form [[fes]], lacking an accent
impf_sub_3s = "fés#", -- same
imp_2s = "fés#",
pp = "fet",
irreg = true,
}
},
{
-- [[dir]], [[adir-se]], [[contradir]], [[desdir]], [[entredir]], [[interdir]], [[maldir]], [[predir]], [[redir]];
-- behaves like an -er/-re verb
match = match_against_verbs("dir", {"^", "^a", "contra", "des", "entre", "inter", "mal", "pre", "^re"}),
forms = {
stem = "die",
g_infix = "+",
imp_2s = "digues",
imp_2p = "digueu",
pp = "dit",
}
},
{
-- [[dur]], [[endur-se]]; behaves like an -er/-re verb
match = "dur",
forms = {
stem = "due",
g_infix = "+",
pres3s = {"duu", "du"}, -- generates pres_2s, imp_2s
impf1 = "dui",
impf2 = "dúi",
pp = "dut",
}
},
{
-- [[ser]]; highly irregular
match = "^ser",
forms = {
pres_1s = "soc",
pres_2s = "ets",
pres_3s = "és",
pres_1p = "som",
pres_2p = "sou",
pres_3p = "són",
impf1 = "er",
impf2 = "ér",
pres_sub_stressed = "sigui",
pres_sub_unstressed = "sigue",
pret = "fó",
pret_1s = "fui",
pret_3s = "fou",
impf_sub_1s = "fos", -- regular except for lack of accent
impf_sub_3s = "fos", -- same
cond = {"serí", "fór"},
imp_2s = "sigues",
imp_2p = "sigueu",
pp = {"estad", "sigud"},
gerund = {"sent", "essent"},
irreg = true,
}
},
{
-- [[ésser]]; variant of [[ser]]
match = "^ésser",
like = "ser",
},
{
-- [[haver]] as auxiliary; highly irregular
match = "^haver",
var = "aux",
forms = {
pres_1s = "he",
pres_2s = "has",
pres_3s = "ha",
pres_1p = "hem",
pres_2p = "heu",
pres_3p = "han",
fut = "haur",
cond = {"haurí", "haguér"},
pres_sub_stressed = "hagi",
pres_sub_unstressed = "hàgi",
noimp = true,
g_infix = "+",
}
},
{
-- [[haver]] as full verb; highly irregular
match = "^haver",
var = "full",
forms = {
pres_1s = {"hec", "hac"},
pres_stressed = {"heu", "hau"},
fut = "haur",
pres_sub_stressed = "hegui",
g_infix = "+",
}
},
{
-- [[heure]]; variant of full verb [[haver]]
match = "^heure",
like = "haver",
likevar = "full",
},
{
-- [[haure]]; variant of full verb [[haver]]
match = "^haure",
like = "haver",
likevar = "full",
},
}
local function skip_slot(base, slot, allow_overrides)
if not allow_overrides and (base.basic_overrides[slot] or
base.refl and base.basic_reflexive_only_overrides[slot]) then
-- Skip any slots for which there are overrides.
return true
end
if base.only3s and (slot:find("^pp_f") or slot:find("^pp_mp")) then
-- diluviar, atardecer, neviscar; impersonal verbs have only masc sing pp
return true
end
if not slot:find("[123]") then
-- Don't skip non-personal slots.
return false
end
if base.nofinite then
return true
end
if (base.only3s or base.only3sp or base.only3p) and (slot:find("^imp_") or slot:find("^neg_imp_")) then
return true
end
if base.only3s and not slot:find("3s") then
-- diluviar, atardecer, neviscar
return true
end
if base.only3sp and not slot:find("3[sp]") then
-- atañer, concernir
return true
end
if base.only3p and not slot:find("3p") then
-- [[caer cuatro gotas]], [[caer chuzos de punta]], [[entrarle los siete males]]
return true
end
return false
end
local function add_stem_ending(stem, ending)
if ending == "" then
return stem
end
if stem:find("#$") then -- remove final accent when adding a suffix
stem = com.remove_accents((stem:gsub("#$", "")), "final syllable only")
end
return stem .. ending
end
local function process_stem(stem, fn)
if stem:find("#$") then
local stem_no_pound_sign = stem:match("^(.*)#$")
return fn(stem_no_pound_sign) .. "#"
else
return fn(stem)
end
end
-- Add the `stem` to the `ending` and apply any phonetic modifications. `is_full_word` indicates that we're creating
-- a "full word" not a stem, and turns on devoicing of final consonants. `dont_include_prefix` is used when creating
-- stems and indicates not to prepend the prefix in `base.prefix` to the result. `is_pres_sub_stressed` is used when
-- creating the pres_sub_stressed stem, to correctly handle both [[desaiguar]] and [[argüir]], whose respective
-- interactions between ü and i/ï are very tricky.
--
-- WARNING: This function is written very carefully; changes to it can easily have unintended consequences.
local function combine_stem_ending(base, stem, ending, is_full_word, dont_include_prefix, is_pres_sub_stressed)
-- Include the prefix in the stem unless dont_include_prefix is given (used in construct_stems()), or the value of
-- `stem` comes from a user-specified stem or form override.
if not dont_include_prefix and not stem:find(IS_USER_STEM_OVERRIDE) and not stem:find(IS_USER_FORM_OVERRIDE) then
stem = base.prefix .. stem
end
-- A * at the beginning of the ending is a signal to remove a stressed accent from the stem. This may feed any of
-- the following rules.
if ending:find("^%*") then
ending = ending:gsub("^%*", "")
stem = com.remove_accents(stem, "final syllable only")
end
-- If ending begins with s and stem ends in a sibilant, we need an e in between; cf. pres_2s 'apareixes' of
-- [[aparèixer]], pres_2s 'torces' of [[tòrcer]], pres_2s 'fuges' of [[fugir]], pres_2s 'brunzes' of [[brunzir]].
-- This may feed the next rule.
if ending:find("^s") and rfind(stem, "[çjsxz]$") then
ending = "e" .. ending
end
-- By default, stems are in their "back" (standalone) form. Before a front vowel, convert the final consonant to
-- its "front" form so the pronunciation doesn't change.
if rfind(ending, "^" .. front_vowel_c) then
-- adequar -> adeqües
-- enaiguar -> enaigües
-- pegar -> pegues
-- arranjar -> arranges
-- marcar -> marques
-- abraçar -> abraces
stem = com.back_to_front(stem)
end
-- Ending beginning in -i after diphthong ending in V + i compresses the two i's into one (cf. pret_1s 'desmaí' and
-- pres_sub_1s 'desmaï' of [[desmaiar]]). This rule doesn't apply after pseudo-vowel u in gu/qu; cf. pret_1s 'guií'
-- of [[guiar]] and contrast pret_1s 'cruí' of [[cruiar]]. This may feed the next rule.
if rfind(ending, "^[iíï]") and rfind(stem, V .. "i$") and not rfind(stem, "[gq][uü]i$") then
stem = stem:gsub("i$", "")
end
-- If ending begins with i (not í), it must get a diaeresis after a true vowel (not gu/qu, cf. pres_1p 'delinquim'
-- of [[delinquir]], not '#delinquïm'; also not a diphthong ending in u, cf. pres_sub_1s 'apreui' of [[apreuar]]
-- not '#apreuï') to prevent the two merging into a diphthong. Note that ü -> u before ï, but to simplify things
-- we leave the double umlauts in place and remove the first one during postprocessing, in fix_double_umlauts().
-- Cf.:
-- * impf_1s 'raïa' of [[raure]];
-- * pres_sub_1s 'creï' of [[crear]];
-- * pres_sub_1s 'associï' of [[associar]];
-- * impf_1s 'cloïa' of [[cloure]];
-- * pres_1p 'lluïm' of [[lluir]];
-- * pres_1p 'arguïm' of [[argüir]].
if ending:find("^i") and rfind(stem, "[aeiouü]$") and not stem:find("[aeiogq]u$") and
-- Unstressed subjunctive endings of [[enaiguar]] remain without umlaut: enaigüi/enaigüis/enaigüin;
-- but stressed endings of [[argüir]] that begin with 'i' do get an umlaut: arguït, impf. arguïa, including
-- stressed subjunctive endings arguïm/arguïu. In both cases the ending is '-i' as part of the creation of
-- the respective stems. There seems no way of distinguishing the two cases other than with a special flag.
not (rfind(stem, "[gq]ü$") and ending == "i" and is_pres_sub_stressed) then
ending = ending:gsub("^i", "ï")
end
local retval = add_stem_ending(stem, ending)
if retval:find("#$") then -- remove final accent if no vowels in prefix
retval = retval:gsub("#$", "")
if not rfind(base.prefix, V) then
retval = com.remove_accents(retval, "final syllable only")
end
end
if is_full_word then
local saw_is_user_form_override
retval, saw_is_user_form_override = rsubb(retval, IS_USER_FORM_OVERRIDE, "")
retval = retval:gsub(IS_USER_STEM_OVERRIDE, "")
if not saw_is_user_form_override then
-- Devoice final voiced obstruent (cf. pres_2s 'caps', pres_3s 'cap' of [[cabre]]). But not after a
-- consonant (cf. pres_2s 'perds', pres_3s 'perd' of [[perdre]]), except for g -> c, which operates
-- even after a consonant (pres_1s 'resolc' of [[resoldre]], pres_1s 'tinc' of [[tenir]]).
retval = retval:gsub("g(s?)$", "c%1")
retval = rsub(retval, "(" .. V .. ")([bdj])(s?)$", function(before, voiced, after)
local devoice = {
b = "p",
d = "t",
j = "ig", -- pres_3s 'fuj' of [[fugir]] -> 'fuig'
}
return before .. devoice[voiced] .. after
end)
end
end
return retval
end
local function add3(base, slot, stems, endings, footnotes, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(base, stem, ending, "is full word")
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil, footnotes)
end
local function insert_form(base, slot, form)
if not skip_slot(base, slot) then
iut.insert_form(base.forms, slot, form)
end
end
local function insert_forms(base, slot, forms)
if not skip_slot(base, slot) then
iut.insert_forms(base.forms, slot, forms)
end
end
local function add_single_stem_tense(base, slot_pref, stems, s1, s2, s3, p1, p2, p3)
local function addit(slot, ending)
add3(base, slot_pref .. "_" .. slot, stems, ending)
end
addit("1s", s1)
addit("2s", s2)
addit("3s", s3)
addit("1p", p1)
addit("2p", p2)
addit("3p", p3)
end
local function map_general(stemforms, fn)
return iut.map_forms(iut.convert_to_general_list_form(stemforms), fn)
end
local function flatmap_general(stemforms, fn)
return iut.flatmap_forms(iut.convert_to_general_list_form(stemforms), fn)
end
-- Given a stem ending in a conjugation vowel -a/-e/-i/-ï, split into stem base and conjugation vowel, converting the
-- stem base to "back" form if the conjugation vowel is front (hence 'torce' of [[tòrcer]] splits into 'torç' and 'e',
-- and 'fugi' of [[fugir]] splits into 'fuj' and 'i').
local function split_conj_vowel(stem)
local stem_base, conj_vowel = rmatch(stem, "^(.*)([aeiï])$")
if not stem_base then
error(("Internal error: Stem '%s' doesn't end in conjugation vowel a/e/i"):format(stem))
end
if conj_vowel == "ï" then
-- To simplify handling of ï, convert to i. It will be converted back to ï as necessary in
-- combine_stem_ending().
conj_vowel = "i"
end
if rfind(conj_vowel, front_vowel_c) then
stem_base = com.front_to_back(stem_base)
end
return stem_base, conj_vowel
end
local function construct_stems(base)
base.output_stems = {}
local stems = base.output_stems
local bst = base.input_stems
-- YUCK, see combine_stem_ending() for the necessity of is_pres_sub_stressed.
local function combine(stem, ending, is_pres_sub_stressed)
return combine_stem_ending(base, stem, ending, false, "dont include prefix", is_pres_sub_stressed)
end
stems.irreg = bst.irreg or bst.g_infix
-- NOTE: Some stems end in a conjugation or similar vowel, specifically:
-- * `stem` (ends in conjugation vowel -a/-e/-i);
-- * `stressed_stem` (likewise);
-- * `unstressed_stem` (likewise);
-- * `pres_unstressed` (which assumes the form of the gerund minus the -nt; note that `pres_stressed` does *NOT*
-- end in a conjugation vowel, but assumes the stem form; the value of pres_3s will be derived by adding -a for
-- -ar verbs and otherwise adding an -e prop vowel when required, as in [[cobrir]], and otherwise adding no
-- vowel);
-- * `pres_sub_stressed` (which assumes the form of pres_sub_3s and hence usually ends in -i, occasionally -a);
-- * `pres_sub_unstressed` (which assumes the form of pres_sub_1p minus the -m, hence ends in -e or -i).
-- Save stem for use in add_categories_and_annotation() for determining the conjugation class.
stems.stem = bst.stem or base.stem
local eix_infix_stem
if base.conj_vowel == "i" then
-- Save eix_infix value for use in add_categories_and_annotation() for determining whether consonant
-- alternations exist.
stems.eix_infix = bst.eix_infix or bst.g_infix and "-" or "+"
eix_infix_stem = flatmap_general(stems.eix_infix, function(form)
if form == "+" then
return map_general(stems.stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, "eixe")
end)
elseif form == "-" then
return stems.stem
else
return form
end
end)
end
local stressed_stem = bst.stressed_stem or eix_infix_stem or stems.stem
local unstressed_stem = bst.unstressed_stem or stems.stem
-- Add the 'g' that is characteristic of g-infix verbs. We remove a stem-final v, e.g. [[beure]] with stem 'beve'
-- becomes 'beg'.
local function add_g(stemforms)
return map_general(stemforms, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
stem_base = stem_base:gsub("v$", "")
return combine(stem_base, "g")
end)
end
-- Add the 'u' of the pres_3s that is characteristic of g-infix verbs (and conjugation vowel 'e', later removed).
-- We remove a stem-final v, as well as i as part of a diphthong, e.g. [[beure]] with stem 'beve' becomes 'beue'
-- and [[veure]] with stem 'veie' becomes 'veue' (but [[riure]] with stem 'rie' becomes 'riue' not '#rue'). We
-- don't add -u after a consonant, e.g. [[doldre]] with stem 'dole' becomes 'dole' not '#dolue'.
local function add_u(stemforms)
return map_general(stemforms, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
if stem_base:find("v$") then
stem_base = stem_base:gsub("v$", "")
else
stem_base = rsub(stem_base, "(" .. V .. ")i$", "%1")
end
-- Add u after vowel but not after another u, so we get pres_3p 'duen' of [[dur]] not '#duuen'.
if rfind(stem_base, V .. "$") and not stem_base:find("u$") then
return combine(stem_base, "u")
else
return stem_base
end
end)
end
local stressed_g_infix, unstressed_g_infix, g_infix_pres_stressed
if bst.g_infix then
local function flatmap_g_infix(default)
return flatmap_general(bst.g_infix, function(form)
if form == "+" then
return default
else
return form
end
end)
end
stressed_g_infix = flatmap_g_infix(add_g(stressed_stem))
unstressed_g_infix = flatmap_g_infix(add_g(unstressed_stem))
g_infix_pres_stressed = add_u(stressed_stem)
end
stems.pres_unstressed = bst.pres_unstressed or unstressed_stem
stems.pres_stressed =
-- If no_pres_stressed given, pres_stressed stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
bst.pres_stressed or
g_infix_pres_stressed or
map_general(stressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return stem_base
end)
stems.pres1s =
-- If no_pres_stressed given, pres1s stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
stressed_g_infix or
map_general(stems.pres_stressed, function(form)
return combine(form, "o")
end)
stems.pres3s =
-- If no_pres_stressed given, pres3s stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
bst.pres3s or
map_general(stems.pres_stressed, function(form)
if base.conj_vowel == "a" then
return combine(form, "a")
elseif rfind(form, C .. "[lr]$") and not rfind(form, V .. "ll$") then
return combine(form, "e")
else
return form
end
end)
stems.pres3p =
-- If no_pres_stressed given, pres3p stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
map_general(stems.pres_stressed, function(form)
return combine(form, "en")
end)
local function compute_impf_stem(with_accent)
return map_general(stems.pres_unstressed, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
if conj_vowel == "a" then
return combine(stem_base, with_accent and "àv" or "av")
elseif stem_base:find("i#?$") then
form = form:gsub("i#?$", "")
return combine(rmatch(stem_base, "^(.-)" .. V .. "*$"), with_accent and "èi" or "ei")
else
return combine(stem_base, with_accent and "í" or "i") -- i -> ï after a vowel
end
end)
end
stems.impf1 = bst.impf1 or compute_impf_stem(false)
stems.impf2 = bst.impf2 or compute_impf_stem(true)
stems.pret = bst.pret or
unstressed_g_infix and map_general(unstressed_g_infix,
function(form) return combine(form, "é") end
) or
map_general(unstressed_stem, function(form)
local accent_conj_vowel = {
a = "à",
e = "é",
i = "í",
}
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, accent_conj_vowel[conj_vowel])
end)
stems.fut = bst.fut or base.inf_stem
stems.cond = bst.cond or map_general(stems.fut, function(form) return combine(form, "í") end)
stems.pres_sub_stressed = bst.pres_sub_stressed or
stressed_g_infix and map_general(stressed_g_infix, function(form) return combine(form, "i") end) or
map_general(stressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, "i", "is pres_sub_stressed")
end)
stems.pres_sub_unstressed = bst.pres_sub_unstressed or
unstressed_g_infix and map_general(unstressed_g_infix, function(form) return combine(form, "e") end) or
map_general(unstressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, conj_vowel == "i" and conj_vowel or "e")
end)
stems.impf_sub = bst.impf_sub or map_general(stems.pret, function(form)
local stem_base = rmatch(form, "^(.*)à$") -- already in "back" form, no need to convert
if stem_base then
return combine(stem_base, "é")
else
return form
end
end)
stems.pp = bst.pp or
unstressed_g_infix and map_general(unstressed_g_infix,
function(form) return combine(form, "ud") end
) or
map_general(unstressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
-- use combine() so we get 'abduïd' from 'abdu-' of [[abduir]], 'seguid' from 'seg-' from [[seguir]], etc.
return combine(stem_base, (conj_vowel == "e" and "u" or conj_vowel) .. "d")
end)
end
local function a_to_e(base, stems, suffix)
return map_general(stems, function(form)
local stem_base = form:match("^(.-)a$")
if stem_base then
suffix = "e" .. suffix
else
stem_base = form
end
return combine_stem_ending(base, stem_base, suffix, "is full word")
end)
end
local function add_present_indic(base)
local stems = base.output_stems
local function addit(slot, stems, ending)
add3(base, "pres_" .. slot, stems, ending)
end
addit("1s", stems.pres1s, "")
insert_forms(base, "pres_2s", a_to_e(base, stems.pres3s, "s"))
addit("3s", stems.pres3s, "")
insert_forms(base, "pres_1p", a_to_e(base, stems.pres_unstressed, "m"))
insert_forms(base, "pres_2p", a_to_e(base, stems.pres_unstressed, "u"))
addit("3p", stems.pres3p, "")
end
local function add_present_subj(base)
local stems = base.output_stems
local function addit(slot, stems, ending)
add3(base, "pres_sub_" .. slot, stems, ending)
end
-- Regular -ar verb: [[amar]]: ami, amis, ami, amem, ameu, amin
-- Regular -re verb: [[batre]]: bati, batis, bati, batem, bateu, batin (same as -ar verb)
-- Regular -ir verb, no -eix- infix: [[dormir]]: dormi, dormis, dormi, dormim, dormiu, dormin
-- Regular -ir verb, -eix- infix: [[imprimir]]: imprimeixi, imprimeixis, imprimeixi, imprimim, imprimiu, imprimeixin
-- Stem changing in 123s/3p vs. 12p:
-- * -eix- infix (-eix- in all stressed forms: 123s/3p of pres ind/sub, 2s imp)
-- * [[collir]]: culli, cullis, culli, collim, colliu, cullin (cull- in all stressed forms)
-- * [[cabre]]: càpiga, càpigues, càpiga, capiguem, capigueu, càpiguen (also different endings)
addit("1s", stems.pres_sub_stressed, "")
insert_forms(base, "pres_sub_2s", a_to_e(base, stems.pres_sub_stressed, "s"))
addit("3s", stems.pres_sub_stressed, "")
addit("1p", stems.pres_sub_unstressed, "m")
addit("2p", stems.pres_sub_unstressed, "u")
insert_forms(base, "pres_sub_3p", a_to_e(base, stems.pres_sub_stressed, "n"))
end
local function add_finite_non_present(base)
local stems = base.output_stems
local function add_tense(slot, stem, s1, s2, s3, p1, p2, p3)
add_single_stem_tense(base, slot, stem, s1, s2, s3, p1, p2, p3)
end
add_tense("impf", stems.impf1, "a", "es", "a", nil, nil, "en")
add_tense("impf", stems.impf2, nil, nil, nil, "em", "eu", nil)
-- pret_1s ends in -í regardless of the normal vowel of the stem.
insert_forms(base, "pret_1s", map_general(stems.pret, function(form)
local stem_base, conj_vowel = rmatch(form, "^(.*)(" .. V .. ")$")
if not stem_base then
error(("Internal error: Preterite stem '%s' doesn't end in vowel"):format(form))
end
if rfind(conj_vowel, front_vowel_c) then
stem_base = com.front_to_back(stem_base)
end
-- Use combine_stem_ending() to handle back-to-front conversions, e.g. pegà -> peguí for [[pegar]] and ensure
-- that the prefix gets added.
return combine_stem_ending(base, stem_base, "í", "is full word") end))
-- * at the beginning of the ending means to remove an accent from the last vowel of the preterite stem.
add_tense("pret", stems.pret, nil, "*res", "", "rem", "reu", "*ren")
-- * at the beginning of the ending means to remove an accent from the last vowel of the imperfect subjunctive stem.
add_tense("impf_sub", stems.impf_sub, "s", "*ssis", "s", "ssim", "ssiu", "*ssin")
add_tense("fut", stems.fut, "é", "às", "à", "em", "eu", "an")
add_tense("cond", stems.cond, "*a", "*es", "*a", "em", "eu", "*en")
end
local function add_non_finite_forms(base)
local stems = base.output_stems
local function addit(slot, stems, ending, footnotes)
add3(base, slot, stems, ending, footnotes)
end
insert_form(base, "infinitive", {form = base.orig_verb})
-- Also insert "infinitive + reflexive pronoun" combinations if we're handling a reflexive verb. See comment below
-- for "gerund + reflexive pronoun" combinations.
if base.refl then
for _, persnum in ipairs(person_number_list) do
insert_form(base, "infinitive_" .. persnum, {form = base.orig_verb})
end
end
-- Gerunds don't have an umlaut over the i in cases like 'abduint' of 'abduir' (not '#abduïnt').
local pres_unstressed_no_umlaut = map_general(stems.pres_unstressed, function(form)
return rsub(form, "ï$", "i")
end)
addit("gerund", pres_unstressed_no_umlaut, "nt")
-- Also insert "gerund + reflexive pronoun" combinations if we're handling a reflexive verb. We insert exactly the
-- same form as for the bare gerund; later on in add_reflexive_or_fixed_clitic_to_forms(), we add the appropriate
-- clitic pronouns. It's important not to do this for non-reflexive verbs, because in that case, the clitic
-- pronouns won't be added, and {{ca-verb form of}} will wrongly consider all these combinations as possible
-- inflections of the bare gerund. Thanks to [[User:JeffDoozan]] for this bug fix.
if base.refl then
for _, persnum in ipairs(person_number_list) do
addit("gerund_" .. persnum, pres_unstressed_no_umlaut, "nt")
end
end
addit("pp_ms", stems.pp, "")
if not base.pp_inv then
addit("pp_fs", stems.pp, "a")
-- make_plural() handles the complexities of e.g. 'vist' of [[veure]] -> 'vistos'/'vists' and 'romàs' of
-- [[romandre]] -> 'romasos'. We need to use flatmap_general() because make_plural() may return more than one
-- plural, and we need to use map_general() on the result, applying combine_stem_ending(), to ensure that
-- prefixes get properly added and plurals like 'amads' of stem 'amad' of [[amar]] get converted to 'amats'.
insert_forms(base, "pp_mp", map_general(flatmap_general(stems.pp, function(form)
-- Remove any # indicating that an accent will be dropped; it will be dropped in any case by make_plural().
form = form:gsub("#$", "")
return com.make_plural(form, "m")
end), function(form)
return combine_stem_ending(base, form, "", "is full word")
end))
addit("pp_fp", stems.pp, "es")
end
end
local function add_imperatives(base)
if base.noimp then
return
end
-- Copy pres3s to imperative since they are almost always the same.
insert_forms(base, "imp_2s", iut.map_forms(base.forms.pres_3s, function(form) return form end))
-- Copy pres2p to imperative plural since they are almost always the same.
insert_forms(base, "imp_2p", iut.map_forms(base.forms.pres_2p, function(form) return form end))
-- Copy subjunctives to imperatives.
for _, persnum in ipairs({"3s", "1p", "3p"}) do
local from = "pres_sub_" .. persnum
local to = "imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form) return form end))
end
end
local function fix_double_umlauts(base)
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
form.form = form.form:gsub("üï", "uï")
end
end
end
local function process_slot_overrides(base, filter_slot, reflexive_only)
local overrides = reflexive_only and base.basic_reflexive_only_overrides or base.basic_overrides
for slot, forms in pairs(overrides) do
if not filter_slot or filter_slot(slot) then
add3(base, slot, forms, "", nil, "allow overrides")
end
end
end
local function link_clitic(clitic)
return (clitic:gsub("([^ %-]+)", "[[%1]]"))
end
-- Prefix `form` with `clitic`, adding fixed text `between` between them. Add links as appropriate unless the user
-- requested no links. Check whether form already has brackets (as will be the case if the form has a fixed clitic).
local function prefix_clitic_to_form(base, clitic, between, form)
if base.alternant_multiword_spec.args.noautolinkverb then
return clitic .. between .. form
else
local clitic_pref = link_clitic(clitic) .. between
if form:find("%[%[") then
return clitic_pref .. form
else
return clitic_pref .. "[[" .. form .. "]]"
end
end
end
-- Suffix `form` with `clitic`. Add links as appropriate unless the user requested no links. Check whether form already
-- has brackets (as will be the case if the form has a fixed clitic).
local function suffix_clitic_to_form(base, clitic, form)
local autolink = not base.alternant_multiword_spec.args.noautolinkverb
if base.alternant_multiword_spec.args.noautolinkverb then
return form .. clitic
else
local clitic_suf = link_clitic(clitic)
if form:find("%[%[") then
return form .. clitic_suf
else
return "[[" .. form .. "]]" .. clitic_suf
end
end
end
-- Add a reflexive pronoun or fixed clitic (FIXME: not working), as appropriate to the base forms that were generated.
-- `do_joined` means to do only the forms where the pronoun is joined to the end of the form; otherwise, do only the
-- forms where it is not joined and precedes the form.
local function add_reflexive_or_fixed_clitic_to_forms(base, do_reflexive, do_joined)
for _, slotaccel in ipairs(base.alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
local persnum
if slot:find("[123]") then
persnum = slot:match("^.*_(.-)$")
else
persnum = "3s"
end
local function get_proclitic(form)
--if not do_reflexive then
-- return base.clitic
if form:find("^[aeiouh]") then
return proclitic_elided_person_number_to_reflexive_pronoun[persnum]
else
return proclitic_non_elided_person_number_to_reflexive_pronoun[persnum]
end
end
local function get_enclitic(form)
--if not do_reflexive then
-- return base.clitic
if rfind(form, C .. "$") or rfind(form, V .. "[iu]$") and not form:find("[gq]ui$") then
return enclitic_non_elided_person_number_to_reflexive_pronoun[persnum]
else
return enclitic_elided_person_number_to_reflexive_pronoun[persnum]
end
end
if base.forms[slot] then
if do_reflexive and slot:find("^pp_") or slot == "infinitive_linked" then
-- do nothing with reflexive past participles or with infinitive linked (handled at the end)
elseif slot:find("^neg_imp_") then
error("Internal error: Should not have forms set for negative imperative at this stage")
else
local slot_has_suffixed_clitic = slot:find("infinitive") or slot:find("gerund") or slot:find("^imp_")
-- Maybe generate non-reflexive parts and separated syntactic variants for use in
-- {{ca-verb form of}}. See comment in add_slots() above `need_special_verb_form_of_slots`.
-- Check for do_joined so we only run this code once.
if do_reflexive and do_joined and base.alternant_multiword_spec.source_template == "ca-verb form of" and
-- Skip personal variants of infinitives and gerunds so we don't think [[arrependendo]] is a
-- non-reflexive equivalent of [[arrependendo-me]].
not slot:find("infinitive_") and not slot:find("gerund_") then
-- Clone the forms because we will be destructively modifying them just below, adding the reflexive
-- pronoun.
insert_forms(base, slot .. "_non_reflexive", mw.clone(base.forms[slot]))
if slot_has_suffixed_clitic then
insert_forms(base, slot .. "_variant", iut.map_forms(base.forms[slot], function(form)
return prefix_clitic_to_form(base, get_proclitic(form), "... ", form)
end))
end
end
if slot_has_suffixed_clitic then
if do_joined then
-- Add clitic after form.
for _, form in ipairs(base.forms[slot]) do
form.form = suffix_clitic_to_form(base, get_enclitic(form.form), form.form)
end
end
elseif not do_joined then
-- Add clitic before form.
for _, form in ipairs(base.forms[slot]) do
form.form = prefix_clitic_to_form(base, get_proclitic(form.form), "", form.form)
end
end
end
end
end
end
local function handle_infinitive_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{ca-verb}}.
-- We substitute the original lemma (before removing links) for forms that
-- are the same as the lemma, if the original lemma has links.
for _, slot in ipairs({"infinitive"}) do
insert_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
local function generate_negative_imperatives(base)
if base.noimp then
return
end
-- Copy subjunctives to negative imperatives, preceded by "no".
for _, persnum in ipairs(neg_imp_person_number_list) do
local from = "pres_sub_" .. persnum
local to = "neg_imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form)
if base.alternant_multiword_spec.args.noautolinkverb then
return "no " .. form
elseif form:find("%[%[") then
-- already linked, e.g. when reflexive
return "[[no]] " .. form
else
return "[[no]] [[" .. form .. "]]"
end
end))
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
local function conjugate_verb(base)
construct_stems(base)
add_present_indic(base)
add_present_subj(base)
add_finite_non_present(base)
add_non_finite_forms(base)
fix_double_umlauts(base)
-- do non-reflexive non-imperative slot overrides
process_slot_overrides(base, function(slot)
return not slot:find("^imp_") and not slot:find("^neg_imp_")
end)
-- This should happen after process_slot_overrides() in case a derived slot is based on an override
-- (as with the imp_3s of [[dar]], [[estar]]).
add_imperatives(base)
-- do non-reflexive positive imperative slot overrides
process_slot_overrides(base, function(slot)
return slot:find("^imp_")
end)
-- We need to add joined reflexives, then joined and non-joined clitics, then non-joined reflexives, so we get
-- [[arrepéndete]] but [[no]] [[te]] [[arrependas]].
if base.refl then
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", "do joined")
process_slot_overrides(base, nil, "do reflexive") -- do reflexive-only slot overrides
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", false)
end
-- This should happen after add_reflexive_or_fixed_clitic_to_forms() so negative imperatives get the reflexive pronoun
-- and clitic in them.
generate_negative_imperatives(base)
-- do non-reflexive negative imperative slot overrides
-- FIXME: What about reflexive negative imperatives?
process_slot_overrides(base, function(slot)
return slot:find("^neg_imp_")
end)
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma`
-- in handle_infinitive_linked() works correctly and compares unlinked forms to unlinked forms.
handle_infinitive_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
user_basic_overrides = {},
user_stems = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
if inside == "" then
return base
end
local segments = put.parse_balanced_segment_run(inside, "[", "]")
local dot_separated_groups = put.split_alternating_runs(segments, "%.")
for i, dot_separated_group in ipairs(dot_separated_groups) do
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
elseif first_element:find("^var:") then
if #dot_separated_group > 1 then
parse_err(("Can't attach footnotes to 'var:' spec '%s'"):format(first_element))
end
base.var = first_element:match("^var:(.*)$")
elseif first_element:find(":") then
local colon_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*:%s*")
local first_element = colon_separated_groups[1][1]
if #colon_separated_groups[1] > 1 then
parse_err("Can't attach footnotes directly to '" .. first_element .. "' spec; attach them to the " ..
"colon-separated values following the initial colon")
end
if overridable_stems[first_element] then
if base.user_stems[first_element] then
parse_err("Overridable stem '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_stems[first_element] = overridable_stems[first_element](colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a basic override; we validate further later when the possible slots are available
if base.user_basic_overrides[first_element] then
parse_err("Basic override '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_basic_overrides[first_element] = allow_multiple_values_for_override(colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes},
"is form override")
end
else
parse_err("Unrecognized spec '" .. first_element .. "'")
end
end
return base
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, head)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original")
end
-- (2) Remove any links from the lemma, but remember the original form so we can use it below in the 'lemma_linked'
-- form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = head
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
local refl_verb = base.lemma
local verb, refl = rmatch(refl_verb, "^(.-)%-(se)$")
if not verb then
verb, refl = rmatch(refl_verb, "^(.-)('s)$")
end
if not verb then
verb, refl = refl_verb, nil
end
base.user_specified_verb = verb
base.refl = refl
base.verb = base.user_specified_verb
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
elseif base.refl then
-- Reconstruct the linked lemma with separate links around base verb, reflexive pronoun and clitic.
linked_lemma = base.user_specified_verb == base.verb and "[[" .. base.user_specified_verb .. "]]" or
"[[" .. base.verb .. "|" .. base.user_specified_verb .. "]]"
linked_lemma = linked_lemma .. (refl and "-[[" .. refl .. "]]" or "")
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve links in multiword
-- lemmas and include links in non-lemma forms rather than allowing the entire form to be a link.
linked_lemma = iut.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
local function detect_indicator_spec(base)
if (base.only3s and 1 or 0) + (base.only3sp and 1 or 0) + (base.only3p and 1 or 0) > 1 then
error("Only one of 'only3s', 'only3sp' and 'only3p' can be specified")
end
base.forms = {}
base.input_stems = {}
base.basic_overrides = {}
base.basic_reflexive_only_overrides = {}
base.orig_verb = base.verb -- in case of a 'like = "..."' redirect
if not base.no_built_in then
local function match_built_in_spec(verb, built_in_spec)
local prefix, non_prefixed_verb
if type(built_in_spec.match) == "function" then
prefix, non_prefixed_verb = built_in_spec.match(verb)
elseif built_in_spec.match:find("^%^") and rsub(built_in_spec.match, "^%^", "") == verb then
-- begins with ^, for exact match, and matches
prefix, non_prefixed_verb = "", verb
else
prefix, non_prefixed_verb = rmatch(verb, "^(.*)(" .. built_in_spec.match .. ")$")
end
return prefix, non_prefixed_verb
end
local function find_built_in(verb, var)
for _, built_in_spec in ipairs(built_in_conjugations) do
local prefix, non_prefixed_verb = match_built_in_spec(verb, built_in_spec)
if prefix then
if not built_in_spec.var then
if var then
error(("Can't specify a variant spec 'var:%s' with verb '%s'"):format(var, verb))
end
return prefix, non_prefixed_verb, built_in_spec
elseif not var then
local possible_vars = {}
for _, built_in_spec in ipairs(built_in_conjugations) do
local prefix, non_prefixed_verb = match_built_in_spec(verb, built_in_spec)
if prefix then
table.insert(possible_vars, built_in_spec.var)
end
end
error(("For verb '%s', must specify a variant using 'var:...'; possible values are %s"):format(
verb, table.concat(possible_vars, ", ")))
elseif built_in_spec.var == var then
return prefix, non_prefixed_verb, built_in_spec
end
end
end
return nil
end
local prefix, non_prefixed_verb, built_in_spec = find_built_in(base.verb, base.var)
if prefix then
-- we found a built-in verb
if built_in_spec.like then
-- we found a redirect to another verb that has the same conjugation, just a different infinitive
base.verb = prefix .. built_in_spec.like
local new_prefix, new_non_prefixed_verb, new_built_in_spec = find_built_in(base.verb, built_in_spec.likevar)
if new_prefix then
-- redirected to another built-in verb
base.prefix = new_prefix
base.non_prefixed_verb = new_non_prefixed_verb
built_in_spec = new_built_in_spec
else
built_in_spec = nil
end
else
base.prefix = prefix
base.non_prefixed_verb = non_prefixed_verb
end
end
if built_in_spec then
-- we found a built-in verb, possibly redirecting to another built-in verb
for stem, forms in pairs(built_in_spec.forms) do
if type(forms) == "function" then
forms = forms(base, base.prefix)
end
if stem:find("^refl_") then
stem = stem:gsub("^refl_", "")
if not base.alternant_multiword_spec.verb_slots_basic_map[stem] then
error("Internal error: setting for 'refl_" .. stem .. "' does not refer to a basic verb slot")
end
base.basic_reflexive_only_overrides[stem] = forms
elseif base.alternant_multiword_spec.verb_slots_basic_map[stem] then
-- an individual form override of a basic form
base.basic_overrides[stem] = forms
else
base.input_stems[stem] = forms
end
end
end
end
-- Override built-in-verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stems) do
base.input_stems[stem] = values
end
for override, values in pairs(base.user_basic_overrides) do
if not base.alternant_multiword_spec.verb_slots_basic_map[override] then
error("Unrecognized override '" .. override .. "': " .. base.angle_bracket_spec)
end
base.basic_overrides[override] = values
end
base.prefix = base.prefix or ""
base.non_prefixed_verb = base.non_prefixed_verb or base.verb
local inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)(re)$")
if not inf_stem then
inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)([aeiu]r)$")
end
if not inf_stem then
error("Unrecognized infinitive: " .. base.verb)
end
-- Remove accents from e.g. [[parèixer]], [[córrer]].
inf_stem = com.remove_accents(inf_stem)
-- Save full infinitive stem for use in future and conditional.
base.inf_stem = (inf_stem .. suffix):gsub("e$", "")
local stem = inf_stem
if suffix == "re" then
-- verbs in -ldre, -ndre have stem without the d
stem = stem:gsub("([ln])d$", "%1")
elseif suffix == "ur" then
stem = stem .. "u"
end
base.conj_vowel = (suffix == "re" or suffix == "ur") and "e" or suffix:gsub("r$", "")
-- If the stem is followed by a front vowel, convert it to its "back" form before calling combine_stem_ending(),
-- which expects the "back" form of the stem and may convert it back to the "front" form. Don't do this conversion
-- for ï so we leave [[arguïr]] (underlyingly 'argüïr') as 'argu' ("back" form), which becomes 'argü' ("front" form)
-- before front vowel ï and we end up with base.stem containing the underlying form 'argüï'. We remove the first of
-- two umlauts in a row in a postprocessing step (fix_double_umlauts()).
if rfind(suffix, "^[ei]") then
stem = com.front_to_back(stem)
end
-- Use combine_stem_ending() so we get ï if necessary.
base.stem = combine_stem_ending(base, stem, base.conj_vowel, false, "dont include prefix")
-- Propagate built-in-verb indicator flags to `base` and combine with user-specified flags.
for indicator_flag, _ in pairs(indicator_flags) do
base[indicator_flag] = base[indicator_flag] or base.input_stems[indicator_flag]
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
-- Propagate some settings up; some are used internally, others by [[Module:pt-headword]].
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Internal indicator flags. Do these before calling detect_indicator_spec() because add_slots() uses them.
for _, prop in ipairs { "refl", "clitic" } do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
base.alternant_multiword_spec = alternant_multiword_spec
end)
add_slots(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
detect_indicator_spec(base)
-- User-specified indicator flags. Do these after calling detect_indicator_spec() because the latter may set these
-- indicators for built-in verbs.
for prop, _ in pairs(indicator_flags) do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
end)
end
local function add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
local function insert_cat(cat, also_when_multiword)
-- Don't place multiword terms in categories like 'Catalan verbs ending in -ar' to avoid spamming the
-- categories with such terms.
if also_when_multiword or not multiword_lemma then
m_table.insertIfNot(alternant_multiword_spec.categories, "カタルーニャ語 " .. cat)
end
end
if check_for_red_links and alternant_multiword_spec.source_template == "ca-conj" and multiword_lemma then
for _, slot_and_accel in ipairs(alternant_multiword_spec.all_verb_slots) do
local slot = slot_and_accel[1]
local forms = base.forms[slot]
local must_break = false
if forms then
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
local title = mw.title.new(form.form)
if title and not title.exists then
insert_cat("活用表に赤リンクを含む動詞")
must_break = true
break
end
end
end
end
if must_break then
break
end
end
end
map_general(base.output_stems.stem, function(stem)
local stem_base, conj_vowel = split_conj_vowel(stem)
local need_no_eix_infix = true
if conj_vowel ~= base.conj_vowel then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#不規則動詞|混合活用]]")
elseif conj_vowel == "a" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第一変化動詞|第一変化]]")
insert_cat("第一変化動詞")
elseif conj_vowel == "e" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第二変化動詞|第二変化]]")
insert_cat("第二変化動詞")
elseif conj_vowel == "i" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第三変化動詞|第三変化]]")
insert_cat("第三変化動詞")
need_no_eix_infix = false
map_general(base.output_stems.eix_infix, function(form)
if form == "+" then
insert_ann("eix_infix", "接中辞-eix-有り")
insert_cat("-eix-を含む第三変化動詞")
elseif form == "-" then
insert_ann("eix_infix", "接中辞-eix-無し")
insert_cat("-eix-を含まない第三変化動詞")
end
end)
else
error(("Internal error: Stem '%s' doesn't end in conjugation vowel a/e/i and split_conj_vowel() didn't catch it"
):format(stem))
end
if need_no_eix_infix then
insert_ann("eix_infix", "接中辞無し")
end
end)
if base.input_stems.g_infix then
insert_ann("g_infix", "軟口蓋接中辞有り")
insert_cat("軟口蓋接中辞を含む動詞")
else
insert_ann("g_infix", "no infix")
end
if base.output_stems.irreg then
insert_ann("irreg", "不規則")
insert_cat("不規則動詞")
else
insert_ann("irreg", "regular")
end
if base.only3s then
insert_ann("defective", "非人称")
insert_cat("非人称動詞")
elseif base.only3sp then
insert_ann("defective", "第三人称のみ")
insert_cat("第三人称動詞")
elseif base.only3p then
insert_ann("defective", "第三人称複数のみ")
insert_cat("第三人称複数動詞")
elseif base.no_pres_stressed then
insert_ann("defective", "欠如")
insert_cat("欠如動詞")
else
insert_ann("defective", "no infix")
end
--if base.clitic then
-- insert_cat("verbs with lexical clitics")
--end
if base.refl then
insert_cat("再帰動詞")
end
local stem_base, conj_vowel = split_conj_vowel(base.stem)
local cons_alt
if conj_vowel == "i" and base.output_stems.eix_infix == "+" then
-- no alternations in verbs like [[afligir]] because all endings are front
elseif stem_base:find("ç$") then
cons_alt = "ç-c"
elseif stem_base:find("c$") then
cons_alt = "c-qu"
elseif stem_base:find("g$") then
cons_alt = "g-gu"
elseif stem_base:find("gu$") then
cons_alt = "gu-gü"
elseif stem_base:find("j$") then
cons_alt = "j-g"
elseif stem_base:find("qu$") then
cons_alt = "qu-qü"
end
if cons_alt then
local desc = cons_alt .. " alternation"
insert_ann("cons_alt", desc)
insert_cat(desc .. "交替の動詞")
else
insert_ann("cons_alt", "non-alternating")
end
end
-- Compute the categories to add the verb to, as well as the annotation to display in the
-- conjugation title bar. We combine the code to do these functions as both categories and
-- title bar contain similar information.
local function compute_categories_and_annotation(alternant_multiword_spec)
alternant_multiword_spec.categories = {}
local ann = {}
alternant_multiword_spec.annotation = ann
ann.conj = {}
ann.g_infix = {}
ann.eix_infix = {}
ann.irreg = {}
ann.defective = {}
ann.cons_alt = {}
local multiword_lemma = false
for _, form in ipairs(alternant_multiword_spec.forms.infinitive) do
if form.form:find(" ") then
multiword_lemma = true
break
end
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
end)
local ann_parts = {}
local conj = table.concat(ann.conj, " or ")
if conj ~= "" then
table.insert(ann_parts, conj)
end
local eix_infix = table.concat(ann.eix_infix, " or ")
if eix_infix ~= "" and eix_infix ~= "no infix" then
table.insert(ann_parts, eix_infix)
end
local irreg = table.concat(ann.irreg, " or ")
if irreg ~= "" and irreg ~= "regular" then
table.insert(ann_parts, irreg)
end
local g_infix = table.concat(ann.g_infix, " or ")
if g_infix ~= "" and g_infix ~= "no infix" then
table.insert(ann_parts, g_infix)
end
local defective = table.concat(ann.defective, " or ")
if defective ~= "" and defective ~= "regular" then
table.insert(ann_parts, defective)
end
local cons_alt = table.concat(ann.cons_alt, " or ")
if cons_alt ~= "" and cons_alt ~= "non-alternating" then
table.insert(ann_parts, cons_alt)
end
alternant_multiword_spec.annotation = table.concat(ann_parts, ", ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = alternant_multiword_spec.forms.infinitive
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec)
local function transform_accel_obj(slot, formobj, accel_obj)
-- No accelerators for negative imperatives, which are always multiword and derived directly from the
-- present subjunctive.
if slot:find("^neg_imp") then
return nil
end
if accel_obj then
accel_obj.form = "verb-form-" .. reconstructed_verb_spec
end
return accel_obj
end
local props = {
lang = lang,
lemmas = lemmas,
transform_accel_obj = transform_accel_obj,
slot_list = alternant_multiword_spec.verb_slots_basic,
}
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote
end
local notes_template = [=[
<div class="roa-footnote-outer-div" style="width:100%;">
<div class="roa-footnote-inner-div">
{footnote}
</div></div>
]=]
local basic_table = [=[
{description}<div class="NavFrame">
<div class="NavHead"> {title} の活用</div>
<div class="NavContent">
{\op}| class="roa-inflection-table" data-toggle-category="inflection"
|-
! colspan="3" class="roa-nonfinite-header" | <span title="infinitiu">不定詞</span>
| colspan="5" | {infinitive}
|-
! colspan="3" class="roa-nonfinite-header" | <span title="gerundi">現在分詞</span>
| colspan="5" | {gerund}
|-
! rowspan="3" colspan="2" class="roa-nonfinite-header" | <span title="participi passat">過去分詞</span>
| colspan="2" class="roa-nonfinite-header" |
! colspan="2" class="roa-nonfinite-header" | 男性
! colspan="2" class="roa-nonfinite-header" | 女性
|-
! colspan="2" class="roa-nonfinite-header" | 単数
| colspan="2" | {pp_ms}
| colspan="2" | {pp_fs}
|-
! colspan="2" class="roa-nonfinite-header" | 複数
| colspan="2" | {pp_mp}
| colspan="2" | {pp_fp}
|-
! colspan="2" rowspan="2" class="roa-person-number-header" | 人称
! colspan="3" class="roa-person-number-header" | 単数
! colspan="3" class="roa-person-number-header" | 複数
|-
! class="roa-person-number-header" style="width:12.5%;" | 第一人称
! class="roa-person-number-header" style="width:12.5%;" | 第二人称
! class="roa-person-number-header" style="width:12.5%;" | 第三人称
! class="roa-person-number-header" style="width:12.5%;" | 第一人称
! class="roa-person-number-header" style="width:12.5%;" | 第二人称
! class="roa-person-number-header" style="width:12.5%;" | 第三人称
|-
! rowspan="6" class="roa-indicative-left-rail" | <span title="indicatiu">直説法</span>
! class="roa-indicative-left-rail" |
! class="roa-indicative-left-rail" | <<jo>>
! class="roa-indicative-left-rail" | <<tu>>
! class="roa-indicative-left-rail" | <<ell>>/<<ella>><br /><<vostè>>
! class="roa-indicative-left-rail" | <<nosaltres>><br /><<nós>>
! class="roa-indicative-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-indicative-left-rail" | <<ells>>/<<elles>><br /><<vostès>>
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="present">現在</span>
| {pres_1s}
| {pres_2s}
| {pres_3s}
| {pres_1p}
| {pres_2p}
| {pres_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="imperfet">不完了過去</span>
| {impf_1s}
| {impf_2s}
| {impf_3s}
| {impf_1p}
| {impf_2p}
| {impf_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="futur">未来</span>
| {fut_1s}
| {fut_2s}
| {fut_3s}
| {fut_1p}
| {fut_2p}
| {fut_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="passat">完了過去</span>
| {pret_1s}
| {pret_2s}
| {pret_3s}
| {pret_1p}
| {pret_2p}
| {pret_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="condicional">可能法</span>
| {cond_1s}
| {cond_2s}
| {cond_3s}
| {cond_1p}
| {cond_2p}
| {cond_3p}
|-
! class="roa-subjunctive-left-rail" rowspan="3" | <span title="subjuntiu">接続法</span>
! class="roa-subjunctive-left-rail" |
! class="roa-subjunctive-left-rail" | <<jo>>
! class="roa-subjunctive-left-rail" | <<tu>>
! class="roa-subjunctive-left-rail" | <<ell>>/<<ella>><br /><<vostè>>
! class="roa-subjunctive-left-rail" | <<nosaltres>><br /><<nós>>
! class="roa-subjunctive-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-subjunctive-left-rail" | <<ells>>/<<elles>><br /><<vostès>>
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | <span title="present">現在</span>
| {pres_sub_1s}
| {pres_sub_2s}
| {pres_sub_3s}
| {pres_sub_1p}
| {pres_sub_2p}
| {pres_sub_3p}
|-
! class="roa-subjunctive-left-rail" style="height:3em;" rowspan="1" | <span title="imperfet">過去</span>
| {impf_sub_1s}
| {impf_sub_2s}
| {impf_sub_3s}
| {impf_sub_1p}
| {impf_sub_2p}
| {impf_sub_3p}
|-
! rowspan="3" class="roa-imperative-left-rail" style="height:3em;" | <span title="imperatiu">命令法</span>
! class="roa-imperative-left-rail" |
! class="roa-imperative-left-rail" | —
! class="roa-imperative-left-rail" | <<tu>>
! class="roa-imperative-left-rail" | <<vostè>>
! class="roa-imperative-left-rail" | <<nosaltres>>
! class="roa-imperative-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-imperative-left-rail" | <<vostès>>
|-
! class="roa-imperative-left-rail" style="height:3em;" | <span title="afirmatiu">-</span>
| —
| {imp_2s}
| {imp_3s}
| {imp_1p}
| {imp_2p}
| {imp_3p}
|-
! class="roa-imperative-left-rail" style="height:3em;" | <span title="negatiu">禁止</span> (<<no>>)
| —
| {neg_imp_2s}
| {neg_imp_3s}
| {neg_imp_1p}
| {neg_imp_2p}
| {neg_imp_3p}
|{\cl}{notes_clause}</div></div>]=]
local function make_table(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
forms.title = link_term(alternant_multiword_spec.lemmas[1].form, nil, "term")
local ann_parts = {}
if alternant_multiword_spec.annotation ~= "" then
table.insert(ann_parts, alternant_multiword_spec.annotation)
end
if alternant_multiword_spec.args.titlenote then
table.insert(ann_parts, alternant_multiword_spec.args.titlenote)
end
local annotation = table.concat(ann_parts, ", ")
if annotation ~= "" then
forms.title = forms.title .. " (" .. annotation .. ")"
end
forms.description = ""
-- Format the table.
forms.footnote = alternant_multiword_spec.footnote_basic
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
local table_with_pronouns = rsub(basic_table, "<<([^<>|]-)|([^<>|]-)>>", link_term)
local table_with_pronouns = rsub(table_with_pronouns, "<<(.-)>>", link_term)
return require("Module:TemplateStyles")("Module:roa-verb/style.css") ..
m_string_utilities.format(table_with_pronouns, forms)
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head)
local PAGENAME = mw.loadData("Module:headword/data").pagename
local function in_template_space()
return mw.title.getCurrentTitle().nsText == "テンプレート"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the
-- current page title or the value of |pagename=; but not when called from {{ca-verb form of}}, where the
-- page title is a non-lemma form. Note that the verb spec may omit the infinitive; e.g. it may be "<i-e>".
-- For this reason, we use the value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "ca-verb form of" and args.pagename or PAGENAME
local head = headword_head or pagename
local arg1 = args[1]
if not arg1 then
if (pagename == "ca-conj" or pagename == "ca-verb" or pagename == "ca-verb form of") and in_template_space() then
arg1 = "amar<>"
else
arg1 = "<>"
end
end
-- When called from {{ca-verb form of}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "ca-verb form of" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "ca-verb form of" and in_template_space() then
verb_form_of_form = "ami"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local refl_clitic_verb, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(refl_clitic_verb, "[^%[]", "")
local right_brackets = rsub(refl_clitic_verb, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(refl_clitic_verb) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
refl_clitic_verb, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = refl_clitic_verb .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local function split_bracketed_runs_into_words(bracketed_runs)
return put.split_alternating_runs(bracketed_runs, " ", "preserve splitchar")
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
-- Split words only on spaces, not on hyphens, because that messes up reflexive verb parsing.
split_bracketed_runs_into_words = split_bracketed_runs_into_words,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
normalize_all_lemmas(alternant_multiword_spec, head)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
slot_list = alternant_multiword_spec.all_verb_slots,
inflect_word_spec = conjugate_verb,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = iut.remove_redundant_links(form.form)
end
end
compute_categories_and_annotation(alternant_multiword_spec)
if args.json and source_template == "ca-conj" then
return require("Module:JSON").toJSON(alternant_multiword_spec.forms)
end
return alternant_multiword_spec
end
-- Entry point for {{ca-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent().args
local params = {
[1] = {},
["titlenote"] = {},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
}
local args = require("Module:parameters").process(parent_args, params)
local alternant_multiword_spec = export.do_generate_forms(args, "ca-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) ..
require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang, nil, nil, force_cat)
end
return export
78ojbn5so77xd0j7p6szjnwj6wb3z9x
2313418
2313417
2026-08-09T09:36:52Z
Kuroco2k
84207
[[Special:Contributions/Kuroco2k|Kuroco2k]] ([[User talk:Kuroco2k|トーク]]) による版 [[Special:Diff/2313417|2313417]] を取り消し
2313418
Scribunto
text/plain
--[=[
This module implements {{ca-conj}} and provides the underlying conjugation functions for {{ca-verb}}
(whose actual formatting is done in [[Module:ca-headword]]).
Authorship: Ben Wing <benwing2>
]=]
local export = {}
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "pres_1s" (present indicative first-person singular), "pres_sub_2s" (present
subjunctive second-person singular) "impf_sub_3p" (imperfect subjunctive third-person plural).
Each slot is filled with zero or more forms.
-- "form" = The conjugated Catalan form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Catalan term. For Catalan, always the infinitive.
]=]
--[=[
FIXME:
--]=]
local lang = require("Module:languages").getByCode("ca")
local m_string_utilities = require("Module:string utilities")
local m_links = require("Module:links")
local m_table = require("Module:table")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local com = require("Module:ca-common")
local force_cat = false -- set to true for debugging
local check_for_red_links = false -- set to false for debugging
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local rsubn = mw.ustring.gsub
local rsub = com.rsub
local u = mw.ustring.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
-- version of rsubn() that returns a 2nd argument boolean indicating whether a substitution was made.
local function rsubb(term, foo, bar)
local retval, nsubs = rsubn(term, foo, bar)
return retval, nsubs > 0
end
local function link_term(term, display, face)
return m_links.full_link({ lang = lang, term = term, alt = display }, face)
end
local front_vowel = "eèéiíï"
local front_vowel_c = "[" .. front_vowel .. "]"
local V = com.V -- vowel regex class
local C = com.C -- consonant regex class
-- IS_USER_STEM_OVERRIDE is prepended to user-supplied stem overrides to prevent `base.prefix` from being prepended.
-- IS_USER_FORM_OVERRIDE is similar but also prevents final devoicing (cf. Balearic pres_1s 'trob' of [[trobar]]).
-- Don't use 0xFFF0 in case we call a [[Module:parse-utilities]] function that uses it temporarily.
local IS_USER_STEM_OVERRIDE = u(0xFFF1)
local IS_USER_FORM_OVERRIDE = u(0xFFF2)
--[=[
Irregular verbs:
-ldre/-ndre verbs:
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
caldre - cal [calent] calia caldrà calgué calgui - calgut,-
coldre colc col colem colia coldré colguí colgui colguem colt,colta
doldre dolc dol dolem dolia doldré dolguí dolgui dolguem dolgut,dolguda
moldre molc mol molem molia moldré molguí molgui molguem molt,molta
oldre olc ol olem olia oldré olguí olgui olguem olgut,olguda
-soldre -solc -sol -solem -solia -soldré -solguí -solgui -solguem -solt,-solta
(absoldre, dissoldre, resoldre)
toldre tolc tol tolem tolia toldré tolguí tolgui tolguem tolt,tolta
romandre romanc roman romanem romania romandré romanguí romangui romanguem romàs,romasa,romasos
encendre encenc encén encenem encenia encendré encenguí encengui encenguem encès,encesa,encesos
fendre fenc fen/-fèn fenem fenia fendré fenguí fengui fenguem fes/-fès,fesa,fesos
(defendre, ofendre)
-pendre -depenc -pèn -penem -penia -pendré -penguí -pengui -penguem -pès,-pesa,-pesos
(dependre,despendre,expendre,suspendre)
prendre prenc pren/-prèn prenem prenia prendré prenguí prengui prenguem pres/-près,presa,presos
(aprendre, comprendre, desprendre, emprendre, reprendre, sorprendre)
-tendre -tenc -tén -tenem -tenia -tendré -tenguí -tengui -tenguem -tès,-tesa,-tesos
(pres2s: atens, pres3p: atenen)
(atendre, contendre, distendre, entendre, estendre, pretendre)
vendre venc ven venem venia vendré venguí vengui venguem venut,venuda
(malvendre, revendre)
fondre fonc fon fonem fonia fondré fonguí fongui fonguem fos/-fós,fosa,fosos
(confondre, difondre, infondre, refondre)
enfondre enfonc enfon enfonem enfonia enfondré enfonguí enfongui enfonguem enfús,enfusa,enfusos
pondre ponc pon ponem ponia pondré ponguí pongui ponguem post,posta,postos
(compondre, correspondre, descompondre, respondre)
tondre tonc ton tonem tonia tondré tonguí tongui tonguem tos,tosa,tosos
cerndre cerno cern cernem cernia cerndré cerní cerni cernem cernut,cernuda
-ler verbs (mostly like -ldre verbs):
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
caler (var. of caldre)
doler (var. of doldre)
soler solc sol solem solia soldré solguí solgui solguem solgut,solguda
valer/valdre valc val valem valia valdré valguí valgui valguem valgut,valguda
(prevaler, equivaler)
other -dre/-tre verbs (regular except sometimes pp):
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
batre bato bat batem batia batré batí bati batem batut,batuda
-metre -meto -met -metem -metia -metré -metí -meti -metem -mès,-mesa,-mesos
(ad-, co-, compro-, e-, entremetre's, mal-, o-, per-, pro-, read-, re-, retrans-, sot-, tra-, trans-)
perdre perdo perd perdem perdia perdré perdí perdi perdem perdut,perduda
-ure verbs
infinitive pres1s pres3s pres1p impf1s impf1p fut1s pret1s sub1s sub1p pp
caure caic cau caiem queia quèiem cauré caiguí caigui caiguem caigut,caiguda
(decaure, recaure)
plaure plac plau plaem plaïa plaíem plauré plaguí plagui plaguem plagut,plaguda
(complaure)
raure rac rau raem raïa raíem rauré raguí ragui raguem ragut,raguda
beure bec beu bevem bevia bevíem beuré beguí begui beguem begut,beguda
(embeure)
creure crec creu creiem creia crèiem creuré creguí cregui creguem cregut,creguda
deure dec deu devem devia devíem deuré deguí degui deguem degut,deguda
jeure jec jeu jaiem jeia jèiem jauré jaguí jegui jaguem jagut,jaguda
(ajeure)
lleure - lleu [-] llevia - lleurà llegué llegui - llegut,-
seure sec seu seiem seia sèiem seuré seguí segui seguem segut,seguda
(asseure)
treure trec treu traiem treia trèiem trauré traguí tregui traguem tret,treta
(abstreure, atreure, contreure, distreure, extreure, retreure, sostreure)
veure veig veu veiem veia vèiem veuré viu,veieres/veres, vegi vegem vist,vista,vists/vistos
(entreveure, preveure, reveure) veié/veu,veiérem/vérem
riure ric riu riem reia rèiem riuré riguí rigui riguem rigut,riguda
(somriure)
(e)scriure escric escriu escrivim escrivia escrivíem escriuré escriví/escriguí escrigui escriguem escrit,escrita
(circumscriure, descriure, inscriure, prescriure, proscriure, subscriure, transcriure)
viure visc viu vivim vivia vivíem viuré visquí visqui visquem viscut,viscuda
(conviure, sobreviure)
cloure cloc clou cloem cloïa cloíem clouré cloguí clogui cloguem clos,closa,closos
(concloure, descloure, encloure, excloure, incloure, recloure)
encloure encloc enclou encloem encloïa encloíem enclouré encloguí enclogui encloguem enclòs,enclosa,enclosos
coure coc cou coem coïa coíem couré coguí cogui coguem cuit/cogut,cuita/coguda
moure moc mou movem movia movíem mouré moguí mogui moguem mogut,moguda
(promoure)
noure noc nou noem noïa noíem nouré noguí nogui noguem nogut,noguda
ploure - plou [plovent] plovia - plourà plogué plogui - plogut,ploguda
-nyer verbs (regular except pp)
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
atènyer atenyo ateny atenyem atenyia atenyeré atenyí atenyi atenyem atès,atesa,atesos
empènyer empenyo empeny empenyem empenyia empenyeré empenyí empenyi empenyem empès,empesa,empesos
estrènyer estrenyo estreny estrenyem estrenyia estrenyeré estrenyí estrenyi estrenyem estret,estreta
estrènyer
(constrènyer,restrènyer)
fènyer fenyo feny fenyem fenyia fenyeré fenyí/fenguí fenyi fenyem fenyut/fengut,fenyuda/fenguda
pertànyer pertanyo pertany pertanyem pertanyia pertanyeré pertanyí/pertanguí pertanyi pertanyem pertanyut/pertangut,pertanyuda/pertanguda
plànyer planyo plany planyem planyia planyeré planyí/planguí planyi planyem plangut/planyut,planguda/planyuda
-xer verbs (NOTE: pres2s in -xes)
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
créixer creixo creix creixem creixia creixeré creixí/cresquí creixi creixem crescut,crescuda
(acréixer,decréixer)
conèixer conec coneix coneixem coneixia coneixeré coneguí conegui coneguem conegut,coneguda
(desconèixer,reconèixer)
merèixer mereixo mereix mereixem mereixia mereixeré mereixí/meresquí mereixi mereixem merescut,merescuda
néixer/ neixo/ neix/ naixem naixia naixeré naixí/nasquí neixi/ naixem/nasquem nascut,nascuda
nàixer naixo naix naixi
(renéixer)
parèixer parec pareix pareixem pareixia pareixeré pareguí paregui pareguem paregut,pareguda
(aparèixer,comparèixer,desaparèixer,reaparèixer)
péixer peixo peix paixem paixia paixeré paixí peixi paixem pascut,pascuda
misc. -er verbs
infinitive pres1s pres3s pres1p impf1s impf1p fut1s pret1s sub1s sub1p pp
córrer corro corre correm corria corríem correré correguí corri correm corregut,correguda
fúmer fumo fum fumem fumia fumíem fumeré fumí fumi fumem fumut,fumuda
prémer premo prem premem premia premíem premeré premí premi premem premut,premuda
(es-, re-)
témer temo tem temem temia temíem temeré temí temi temem temut,temuda
trémer [regular]
tòrcer torço torç torcem torcia torcíem torceré torcí torci torcem torçut,torçuda
(des-) [pres2s torces]
vèncer venço venç vencem vencia vencíem venceré vencí venci vencem vençut,vençuda
(con-, re-) [pres2s vences]
cabre/caber cabo cap cabem cabia cabíem cabré cabí càpiga capiguem cabut,cabuda
[sub2s càpigues]
haver he/haig ha havem/hem havia havíem hauré haguí hagi hàgim/haguem hagut,haguda
[noimp] [cond1s hauria/haguera; impsub2s haguessis/haguesses]
poder puc pot podem podia podíem podré poguí pugui puguem pogut,poguda
saber sé sap sabem sabia sabíem sabré sabí sàpiga sapiguem sabut,sabuda
[imp2s sàpigues, imp2p sapigueu]
voler vull vol volem volia volíem voldré volguí vulgui vulguem volgut,volguda
ser/ésser soc és som era érem seré fui sigui siguem estat/sigut,estada/siguda
[ger sent/essent] [cond1s seria/fora]
[pres: soc,ets,éts,som,sou,són; pret: fui,fores,fou,fórem,fóreu,foren; impsub: fos,fossis,fos,fóssim,fóssiu,fossin]
[imp: sigues,sigueu]
fer faig fa fem feia fèiem faré fiu faci fem fet,feta
[pres3p fan]
[pret: fiu,feres,feu,férem,féreu,feren]
]=]
local all_persons_numbers = {
["1s"] = "1|s",
["2s"] = "2|s",
["3s"] = "3|s",
["1p"] = "1|p",
["2p"] = "2|p",
["3p"] = "3|p",
}
local person_number_list = {"1s", "2s", "3s", "1p", "2p", "3p"}
local imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
local neg_imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
proclitic_non_elided_person_number_to_reflexive_pronoun = {
["1s"] = "em ",
["2s"] = "et ",
["3s"] = "es ",
["1p"] = "ens ",
["2p"] = "us ",
["3p"] = "es ",
}
proclitic_elided_person_number_to_reflexive_pronoun = {
["1s"] = "m'",
["2s"] = "t'",
["3s"] = "s'",
["1p"] = "ens ",
["2p"] = "us ",
["3p"] = "s'",
}
enclitic_non_elided_person_number_to_reflexive_pronoun = {
["1s"] = "-me",
["2s"] = "-te",
["3s"] = "-se",
["1p"] = "-nos",
["2p"] = "-vos",
["3p"] = "-se",
}
enclitic_elided_person_number_to_reflexive_pronoun = {
["1s"] = "'m",
["2s"] = "'t",
["3s"] = "'s",
["1p"] = "'ns",
["2p"] = "-us",
["3p"] = "'s",
}
local indicator_flags = m_table.listToSet {
"no_pres_stressed",
"only3s", "only3sp", "only3p", "noimp",
"pp_inv", "irreg", "no_built_in",
}
-- Initialize all the slots for which we generate forms.
local function add_slots(alternant_multiword_spec)
-- "Basic" slots: All slots that go into the regular table (not the reflexive form-of table).
alternant_multiword_spec.verb_slots_basic = {
{"infinitive", "inf"},
{"infinitive_linked", "inf"},
{"gerund", "ger"},
{"pp_ms", "m|s|past|part"},
{"pp_fs", "f|s|past|part"},
{"pp_mp", "m|p|past|part"},
{"pp_fp", "f|p|past|part"},
}
-- Special slots used to handle non-reflexive parts of reflexive verbs in {{ca-verb form of}}. For example, for a
-- reflexive-only verb like [[arrepentirse]], we want to be able to use {{ca-verb form of}} on [[arrepinta]] (which
-- should mention that it is a part of 'me arrepinta', first-person singular present subjunctive, and
-- 'se arrepinta', third-person singular present subjunctive) or on [[arrepentimos]] (which should mention that it
-- is a part of 'arrepentímonos', first-person plural present indicative or preterite). Similarly, we want to use
-- {{ca-verb form of}} on [[arrepentindo]] (which should mention that it is a part of 'se ... arrepentindo',
-- syntactic variant of [[arrepentíndose]], which is the gerund of [[arrepentirse]]). To do this, we need to be
-- able to map non-reflexive parts like [[arrepinta]], [[arrepentimos]], [[arrepentindo]], etc. to their reflexive
-- equivalent(s), to the tag(s) of the equivalent(s), and, in the case of forms like [[arrepentindo]],
-- [[arrepentir]] and imperatives, to the separated syntactic variant of the verb+clitic combination. We do this by
-- creating slots for the non-reflexive part equivalent of each basic reflexive slot, and for the separated
-- syntactic-variant equivalent of each basic reflexive slot that is formed of verb+clitic. We use slots in this
-- way to deal with multiword lemmas. Note that we run into difficulties mapping between reflexive verbs,
-- non-reflexive part equivalents, and separated syntactic variants if a slot contains more than one form. To
-- handle this, if there are the same number of forms in two slots we're trying to match up, we assume the forms
-- match one-to-one; otherwise we don't match up the two slots (which means {{ca-verb form of}} won't work in this
-- case, but such a case is extremely rare and not worth worrying about). Alternatives that handle this "properly"
-- are significantly more complicated and require non-trivial modifications to [[Module:inflection utilities]].
local need_special_verb_form_of_slots = alternant_multiword_spec.source_template == "ca-verb form of" and
alternant_multiword_spec.refl
if need_special_verb_form_of_slots then
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {
{"infinitive_non_reflexive", "-"},
{"infinitive_variant", "-"},
{"gerund_non_reflexive", "-"},
{"gerund_variant", "-"},
}
else
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {}
end
-- Add entries for a slot with person/number variants.
-- `verb_slots` is the table to add to.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(verb_slots, slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local slot = slot_prefix .. "_" .. persnum
local accel = tag_suffix .. "|" .. persnum_tag
table.insert(verb_slots, {slot, accel})
end
end
-- Add a personal slot (i.e. a slot with person/number variants) to `verb_slots_basic`.
local function add_basic_personal_slot(slot_prefix, tag_suffix, person_number_list, no_special_verb_form_of_slot)
add_personal_slot(alternant_multiword_spec.verb_slots_basic, slot_prefix, tag_suffix, person_number_list)
-- Add special slots for handling non-reflexive parts of reflexive verbs in {{ca-verb form of}}.
-- See comment above in `need_special_verb_form_of_slots`.
if need_special_verb_form_of_slots and not no_special_verb_form_of_slot then
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local basic_slot = slot_prefix .. "_" .. persnum
local accel = tag_suffix .. "|" .. persnum_tag
table.insert(alternant_multiword_spec.verb_slots_reflexive_verb_form_of, {basic_slot .. "_non_reflexive", "-"})
end
end
end
add_basic_personal_slot("pres", "直説法|現在", person_number_list)
add_basic_personal_slot("impf", "直説法|不完全過去", person_number_list)
add_basic_personal_slot("pret", "直説法|完全過去", person_number_list)
add_basic_personal_slot("fut", "直説法|未来", person_number_list)
add_basic_personal_slot("cond", "可能法", person_number_list)
add_basic_personal_slot("pres_sub", "接続法|現在", person_number_list)
add_basic_personal_slot("impf_sub", "接続法|過去", person_number_list)
add_basic_personal_slot("imp", "命令法", imp_person_number_list)
-- Don't need special non-reflexive-part slots because the negative imperative is multiword, of which the
-- individual words are 'no' + subjunctive.
add_basic_personal_slot("neg_imp", "命令法|禁止", neg_imp_person_number_list, "no special verb form of")
-- Don't need special non-reflexive-part slots because we don't want [[arrependendo]] mapping to [[arrependendo-me]]
-- (only [[arrependendo-se]]) or [[arrepender]] mapping to [[arrepender-me]] (only [[arrepender-se]]).
add_basic_personal_slot("infinitive", "inf", person_number_list, "no special verb form of")
add_basic_personal_slot("gerund", "ger", person_number_list, "no special verb form of")
-- Generate the list of all slots.
alternant_multiword_spec.all_verb_slots = {}
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_basic) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_reflexive_verb_form_of) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
alternant_multiword_spec.verb_slots_basic_map = {}
for _, slotaccel in ipairs(alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
alternant_multiword_spec.verb_slots_basic_map[slot] = accel
end
end
local overridable_stems = {}
local function allow_multiple_values_for_override(separated_groups, data, is_form_override)
local retvals = {}
for _, separated_group in ipairs(separated_groups) do
local footnotes = data.fetch_footnotes(separated_group)
local form = separated_group[1]
-- Prepend marker to prevent prefixing with `base.prefix`, and (in the case of form overrides) prevent
-- final devoicing.
if is_form_override then
form = IS_USER_FORM_OVERRIDE .. form
else
form = IS_USER_STEM_OVERRIDE .. form
end
local retval = {form = form, footnotes = footnotes}
table.insert(retvals, retval)
end
return retvals
end
for _, overridable_stem in ipairs {
"stem",
"stressed_stem",
"unstressed_stem",
"pres_unstressed",
"pres_stressed",
"pres3s", -- overrides just pres_2s and pres_3s
-- Don't include pres1s, pres3p; use pres_1s etc. if you need to override just those forms
"impf1",
"impf2",
"pret",
"fut",
"cond",
"pres_sub_stressed",
"pres_sub_unstressed",
"impf_sub",
"pp",
"g_infix",
"eix_infix",
} do
-- Written so we can substitute a different validator; parallel code in [[Module:es-verb]] and [[Module:pt-verb]]
-- has simple_choice validators.
overridable_stems[overridable_stem] = allow_multiple_values_for_override
end
-- Useful as the value of the `match` property of a built-in verb. `main_verb_spec` is a Lua pattern that should match
-- the non-prefixed part of a verb, and `prefix_specs` is a list of Lua patterns that should match the prefixed part of
-- a verb. If a prefix spec is preceded by ^, it must match exactly at the beginning of the verb; otherwise, additional
-- prefixes (e.g. re-, des-) may precede. Return the prefix and main verb.
local function match_against_verbs(main_verb_spec, prefix_specs)
return function(verb)
for _, prefix_spec in ipairs(prefix_specs) do
if prefix_spec:find("^%^") then
-- must match exactly
prefix_spec = prefix_spec:gsub("^%^", "")
if prefix_spec == "" then
-- We can't use the second branch of the if-else statement because an empty () returns the current position
-- in rmatch().
local main_verb = rmatch(verb, "^(" .. main_verb_spec .. ")$")
if main_verb then
return "", main_verb
end
else
local prefix, main_verb = rmatch(verb, "^(" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
else
local prefix, main_verb = rmatch(verb, "^(.*" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
end
return nil
end
end
--[=[
Built-in (usually irregular) conjugations.
Each entry is processed in turn and consists of an object with two fields:
1. match=: Specifies the built-in verbs that match this object.
2. forms=: Specifies the built-in stems and forms for these verbs.
The value of match= is either a string beginning with "^" (match only the specified verb), a string not beginning
with "^" (match any verb ending in that string), or a function that is passed in the verb and should return the prefix
of the verb if it matches, otherwise nil. The function match_against_verbs() is provided to facilitate matching a set
of verbs with a common ending and specific prefixes (e.g. [[ter]] and [[ater]] but not [[abater]], etc.).
The value of forms= is a table specifying stems and individual override forms. Each key of the table names either a
stem (e.g. `pres_stressed`), a stem property (e.g. `g_infix`) or an individual override form (e.g. `pres_1s`).
Each value of a stem can either be a string (a single stem), a list of strings, or a list of objects of the form
{form = STEM, footnotes = {FOONOTES}}. Each value of an individual override should be of exactly the same form except
that the strings specify full forms rather than stems. The values of a stem property depend on the specific property
but are generally strings or booleans.
In order to understand how the stem specifications work, it's important to understand the phonetic modifications done
by combine_stem_ending(). In general, the complexities of predictable prefix, stem and ending modifications are all
handled in this function. In particular:
1. Spelling-based modifications (c/qu, ç/c, g/gu, j/g, gu/gü, qu/qü) occur automatically as appropriate for the ending.
2. If the ending begins with an asterisk, this is a signal to delete the accent on the last syllable of the stem, e.g.
veié -> veierem.
3. If ending begins with i, it may turn into í or ï after an unstressed vowel (in some but not all cases) to prevent the
two merging into a diphthong. See combine_stem_ending() for specifics.
The following stems are recognized [FIXME: This is not correct for Catalan, needs rewriting]:
-- pres_unstressed: The present indicative unstressed stem (1p, 2p). Also controls the imperative 2p
and gerund. Defaults to the infinitive stem (minus the ending -ar/-er/-ir/-or).
-- pres_stressed: The present indicative stressed stem (1s, 2s, 3s, 3p). Also controls the imperative 2s.
Default is empty if indicator `no_pres_stressed`, else a vowel alternation if such an indicator is given
(e.g. `ue`, `ì`), else the infinitive stem.
-- pres1: Special stem for 1s present indicative. Normally, do not set this explicitly. If you need to specify an
irregular 1s present indicative, use the form override pres_1s= to specify the entire form. Defaults to
pres_stressed.
-- pres_sub_unstressed: The present subjunctive unstressed stem (1p, 2p). Defaults to the infinitive stem.
-- pres_sub_stressed: The present subjunctive stressed stem (1s, 2s, 3s, 1p). Defaults to pres1.
-- impf: The imperfect stem (not including the -av-/-i- stem suffix, which is determined by the conjugation). Defaults
to the infinitive stem.
-- pret: The full preterite stem missing only the endings (-ste, -mos, etc.), e.g. 'fige', 'fo'. Only used for verbs
with irregular preterites (pret_conj == "irreg") such as [[facer]], [[poder]], [[traer]], etc. Defaults to
`pret_base` + the conjugation vowel.
-- fut: The future stem. Defaults to the infinitive stem + the conjugation vowel.
-- cond: The conditional stem. Defaults to `fut`.
-- impf_sub: The imperfect subjunctive stem. Defaults to `pret`.
-- pp: The masculine singular past participle. Default is based on the verb conjugation: infinitive stem + '-ado' for
-ar verbs, otherwise infinitive stem + '-ido'.
-- pp_inv: `true` if the past participle exists only in the masculine singular.
]=]
local built_in_conjugations = {
--------------------------------------------------------------------------------------------
-- -ar --
--------------------------------------------------------------------------------------------
-- Orthographic consonant alternations in endings are handled automatically in combine_stem_ending().
{
-- [[aguar]]:
-- pres agúo, agúes, agúa, agüem, agüeu, agúen
-- pres_sub aguï, aguïs, aguï, agüem, agüeu, aguïn
-- contrast a more typical verb in -guar, [[enaiguar]]:
-- pres enaiguo, enaigües, enaigua, enaigüem, enaigüeu, enaigüen
-- pres_sub enaigüi, enaigüis, enaigüi, enaigüem, enaigüeu, enaigüin
match = "^aguar",
forms = {
pres_stressed = "agú",
pres_sub_stressed = "aguï",
irreg = true,
}
},
{
-- [[anar]] (full verb); highly irregular
match = "^anar",
var = "full",
forms = {
fut = "anir",
pres_1s = "vaj", -- will be converted to 'vaig'; 'vaig' gets converted to 'vaic'
pres_2s = "vas",
pres_3s = "va",
pres_3p = "van",
pres_sub_stressed = "vagi",
imp_2s = "ves",
irreg = true,
}
},
{
-- [[anar]] (auxiliary); highly irregular
match = "^anar",
var = "aux",
forms = {
pres_1s = "vaj", -- will be converted to 'vaig'; 'vaig' gets converted to 'vaic'
pres_2s = {"vas", "vares"},
pres_3s = "va",
pres_1p = {"vam", "vàrem"},
pres_2p = {"vau", "vàreu"},
pres_3p = {"van", "varen"},
pres_sub_stressed = "vagi",
pres_sub_unstressed = "vàgi",
impf1 = {},
impf2 = {},
fut = {},
pret = {},
pp = {},
gerund = {},
noimp = true,
irreg = true,
}
},
{
-- [[dar]]
match = "^dar",
forms = {
pres_1s = {form = "do", footnotes = {"[obsolete]"}},
pres_2s = {form = "das", footnotes = {"[obsolete]"}},
pres_3s = {form = "da", footnotes = {"[obsolete]"}},
pres_3p = {form = "dan", footnotes = {"[obsolete]"}},
pres_sub_1s = {form = "de", footnotes = {"[obsolete]"}},
pres_sub_2s = {form = "des", footnotes = {"[obsolete]"}},
pres_sub_3s = {form = "de", footnotes = {"[obsolete]"}},
pres_sub_3p = {form = "den", footnotes = {"[obsolete]"}},
pret_1s = "di", -- regular except for lack of accent
pret_3s = "da", -- regular except for lack of accent
impf_sub_1s = "des", -- regular except for lack of accent
impf_sub_3s = "des", -- regular except for lack of accent
irreg = true,
}
},
{
-- [[estar]]; highly irregular
match = "^estar",
forms = {
pres_2s = "estàs",
pres_3s = "està",
pres_3p = "estan",
g_infix = "estig",
imp_2s = "estigues",
imp_2p = "estigueu",
pp = "estad",
}
},
--------------------------------------------------------------------------------------------
-- -er/-re --
--------------------------------------------------------------------------------------------
-- Regular verbs not needing entries here:
--
-- [[rebre]], [[concebre]], [[decebre]], [[percebre]]
-- [[rompre]]
-- [[fúmer]], [[prémer]], [[témer]], [[trémer]]
-- [[perdre]], [[batre]], [[botre]], [[fotre]], [[retre]]
-- [[tòrcer]], [[vèncer]]
-- etc.
------------------------------------------- -ldre/-ler/-lre --------------------------------------
{
-- [[caldre]], [[doldre]], [[condoldre's]], [[oldre]]
match = match_against_verbs("ldre", {"ca", "do", "^o"}),
forms = {
-- g_infix implies irreg = true
-- g_infix adds -g to pres_1s, sub, pret and pp stems; combine_stem_ending() changes final -g to -c
g_infix = "+",
}
},
{
-- [[caler]]
match = "caler",
like = "caldre",
},
{
-- [[doler]] and compounds
match = "doler",
like = "doldre",
},
{
-- [[dolre]]
match = "dolre",
forms = {
-- see above for g_infix effects
g_infix = "+",
}
},
{
-- [[valer]], [[equivaler]], [[prevaler]], [[sobrevaler]]
match = "valer",
forms = {
-- see above for g_infix effects
fut = "valdr",
g_infix = "+",
}
},
{
-- [[valdre]] and compounds
match = "valdre",
like = "valer",
},
{
-- [[soler]]
match = "^soler", -- this must precede -oldre rule below for alt form [[soldre]]
forms = {
-- see above for g_infix effects
fut = {},
pret = {},
impf_sub = "solgué", -- regular, but we disabled the preterite, which would normally disable impf_sub too
g_infix = "+",
pp = {},
noimp = true,
}
},
{
-- [[soldre]]
match = "^soldre", -- this must precede -oldre rule below
like = "soler",
},
{
-- [[coldre]], [[moldre]], [[absoldre]], [[dissoldre]], [[resoldre]], [[toldre]]
match = "oldre", -- this must follow [[doldre]]/[[oldre]] rule above
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "olt",
}
},
{
-- [[voler]], [[malvoler]]
match = "voler",
forms = {
fut = "voldr",
pres_1s = "vull",
pres_sub_stressed = "vulgui",
pres_sub_unstressed = "vulgue",
g_infix = "+",
imp_2s = "vulgues",
imp_2p = "vulgueu",
}
},
--------------------------------------------- -ndre ----------------------------------------
{
-- [[romandre]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("mandre", {"^ro"}),
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "màs#",
}
},
{
-- [[encendre]], [[atendre]], [[contendre]], [[desentendre's]], [[distendre]], [[entendre]], [[estendre]],
-- [[pretendre]]
match = match_against_verbs("endre", {"enc", "t"}),
forms = {
pres_3s = "én#", -- remove final accent without prefix with vowel; also removed when adding a suffix
-- see above for g_infix effects
g_infix = "+",
pp = "ès#", -- see above for effect of final #
}
},
{
-- [[vendre]], [[malvendre]], [[revendre]]
match = "vendre",
forms = {
pres_3s = "vèn#", -- see above for effect of final #
-- see above for g_infix effects
g_infix = "+",
pp = "venud", -- g_infix would normally make it vengud
}
},
{
-- [[fendre]], [[defendre]], [[ofendre]], [[dependre]], [[despendre]], [[expendre]], [[suspendre]], [[prendre]],
-- [[aprendre]], [[comprendre]], [[desprendre]], [[emprendre]], [[reprendre]], [[sorprendre]]
match = "endre", -- this must follow previous -endre rules above
forms = {
pres_3s = "èn#", -- see above for effect of final #
-- see above for g_infix effects
g_infix = "+",
pp = "ès#", -- see above for effect of final #
}
},
{
-- [[enfondre]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("fondre", {"^en"}),
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "fús#",
}
},
{
-- [[pondre]], [[compondre]], [[correspondre]], [[descompondre]], [[despondre's]], [[respondre]]
match = "pondre",
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "post",
}
},
{
-- [[fondre]], [[confondre]], [[difondre]], [[infondre]], [[refondre]], [[tondre]]
match = "ondre", -- this must follow previous -ondre rules above
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "ós#", -- see above for effect of final #
}
},
--------------------------------------------- -nyer ----------------------------------------
{
-- [[atènyer]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("tènyer", {"^a"}),
forms = {
pp = "tès#",
irreg = true,
}
},
{
-- [[empènyer]], [[espènyer]]
match = match_against_verbs("pènyer", {"^em", "^es"}),
forms = {
pp = "pès#",
irreg = true,
}
},
{
-- [[estrènyer]], [[constrènyer]], [[destrènyer]], [[restrènyer]]
match = match_against_verbs("strènyer", {"^e", "con", "^de", "^re"}),
forms = {
pp = "stret",
irreg = true,
}
},
{
-- [[fènyer]]
match = "fènyer",
forms = {
pp = {"fengud", "fenyud"},
irreg = true,
}
},
{
-- [[júnyer]]
match = "júnyer",
like = "junyir",
},
{
-- [[plànyer]], [[complànyer]], [[pertànyer]]
match = match_against_verbs("ànyer", {"pl", "pert"}),
forms = {
pp = {"angud", "anyud"},
irreg = true,
}
},
--------------------------------------------- -aure ----------------------------------------
{
-- [[caure]], [[decaure]], [[recaure]]
match = "caure",
forms = {
-- stem ending in -ai and imperfect in -ia causes special stressed imperfect logic to take effect; we get
-- impf1s queia, impf1p quèiem (preceding vowel changed to è and attached to initial consonant using
-- combine_stem_ending(), which changes c- to qu-)
stem = "caie", -- i dropped by g_infix before u
-- g_infix implies irreg = true
-- g_infix adds -g to pres_1s, sub, pret and pp stems; combine_stem_ending() changes final -g to -c
-- g_infix sets pres_stressed to end in -u, removing a preceding -i or -v
g_infix = "+",
}
},
{
-- [[plaure]], [[complaure]]
match = "plaure",
forms = {
stem = "plae", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
}
},
{
-- [[raure]]
match = "^raure",
forms = {
stem = "rae", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = {"ragud", "ras"},
}
},
--------------------------------------------- -eure ----------------------------------------
{
-- [[beure]], [[embeure]], [[deure]], [[lleure]]
match = match_against_verbs("eure", {"b", "d", "ll"}),
forms = {
stem = "eve", -- v dropped by g_infix before g and u
g_infix = "+",
}
},
{
-- [[creure]], [[seure]], [[asseure]]
match = match_against_verbs("eure", {"cr", "s"}),
forms = {
stem = "ee",
pres_unstressed = "eie", -- affects pres_1p, pres_2p, gerund, imperfect (see [[caure]])
g_infix = "+",
}
},
{
-- [[jeure]], [[ajeure]]
match = "jeure",
forms = {
fut = "jaur", -- affects future and cond
stressed_stem = "jee", -- affects stressed forms, which get g added by g_infix by added except for
-- pres_stressed, which gets u added (controls pres_3s, pres_2s, pres_3p)
unstressed_stem = "jae", -- affects unstressed_stem, which get g added by g_infix
pres_stressed = {"jeu", "jau"},
pres_unstressed = "jaie", -- affects pres_1p, pres_2p, gerund, imperfect (see [[caure]])
pres_1s = {"jec", "jac"},
impf1 = "jei", -- otherwise we'd get impf_1s '#geia' etc.
impf2 = "jèi",
g_infix = "+",
}
},
{
match = "jaure",
like = "jeure",
},
{
-- [[treure]], [[abstreure]], [[atreure]], [[bestreure]], [[contreure]], [[detreure]], [[distreure]],
-- [[extreure]], [[retreure], [[retrotreure]], [[sostreure]]
match = "treure",
forms = {
-- like [[jeure]] except for irregular pp
fut = "traur",
stressed_stem = "tree",
unstressed_stem = "trae",
pres_stressed = {"treu", "trau"},
pres_unstressed = "traie",
pres_1s = {"trec", "trac"},
g_infix = "+",
pp = "tret",
}
},
{
match = "traure",
like = "treure",
},
{
-- [[veure]], [[entreveure]], [[preveure]], [[reveure]]
match = "veure",
forms = {
stem = "veie",
-- impf1s veia, impf1p vèiem (preceding vowel changed to è)
pres_stressed = "veu",
pres_1s = "vej", -- will be converted to 'veig'; 'veig' gets converted to 'veic'
pres_sub_stressed = "vegi",
pres_sub_unstressed = "vege",
pret = {"veié", "vé"},
pret_1s = "viu",
pret_3s = {"veié", "veu"},
impf_sub = "veié",
pp = "vist",
imp_2s = "veges",
imp_2p = {"vegeu", "veieu"},
irreg = true,
}
},
--------------------------------------------- -iure ----------------------------------------
{
-- [[escriure]], [[circumscriure]], [[descriure]], [[inscriure]], [[prescriure]], [[proscriure]],
-- [[subscriure]], [[transcriure]]
match = "scriure",
forms = {
stem = "scrivi", -- v dropped by g_infix before g and u; pres_1p/pres_2p have -ir endings
g_infix = "+",
pret = {"scriví", "scrigué"},
pp = "scrit",
}
},
{
-- [[riure]], [[somriure]]
match = "riure", -- must follow rule for 'scriure'
forms = {
stem = "rie",
-- impf1s reia, impf1p rèiem (preceding vowel changed to è)
g_infix = "+",
}
},
{
-- [[viure]], [[conviure]], [[desviure's]], [[sobreviure]]
match = "viure",
forms = {
stem = "vivi", -- v dropped by g_infix before g and u; pres_1p/pres_2p have -ir endings
g_infix = "visc", -- applies to pres1s, sub, pret, pp
}
},
--------------------------------------------- -oure ----------------------------------------
{
-- [[cloure]], [[concloure]], [[descloure]], [[encloure]], [[excloure]], [[incloure]], [[recloure]]
match = "cloure",
forms = {
stem = "cloe", -- ï in impf1s cloïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = "clòs#", -- remove final accent without prefix with vowel; also removed when adding a suffix
}
},
{
-- [[coure]] "to cook"
match = "coure",
var = "cook",
forms = {
stem = "coe", -- ï in impf1s coïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = "cuit",
}
},
{
-- [[coure]] "to sting"
match = "coure",
var = "sting",
forms = {
stem = "coe", -- ï in impf1s coïa gets generated automatically by combine_stem_ending()
g_infix = "+",
-- pp regular 'cogud'
}
},
{
-- [[moure]], [[promoure]], [[remoure]], [[somoure]], [[ploure]]
match = match_against_verbs("oure", {"m", "pl"}),
forms = {
stem = "ove", -- v dropped by g_infix before g and u
g_infix = "+",
}
},
{
-- [[noure]]
match = "noure",
forms = {
stem = "noe", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
}
},
--------------------------------------------- -xer ----------------------------------------
{
-- [[conèixer]], [[desconèixer]], [[reconèixer]]
match = "conèixer",
forms = {
g_infix = "coneg",
}
},
{
-- [[créixer]], [[acréixer]], [[decréixer]], [[recréixer]], [[sobrecréixer]]
match = "créixer",
forms = {
pret = {"creixé", "cresqué"},
pres_sub_unstressed = {"creixe", "cresque"},
pp = "crescud",
irreg = true,
}
},
{
-- [[merèixer]], [[desmerèixer]], [[irèixer-se]]
match = match_against_verbs("rèixer", {"me", "^i"}),
forms = {
pret = {"reixé", "resqué"},
pres_sub_unstressed = {"reixe", "resque"},
pp = "rescud",
irreg = true,
}
},
{
-- [[néixer]]/[[nàixer]], [[renéixer]]/[[renàixer]], [[sobrenéixer]]/[[sobrenàixer]], [[péixer]]/[[pàixer]]
match = match_against_verbs("éixer", {"n", "p"}),
forms = {
stem = "aixe",
fut = "aixer",
pres_stressed = {"eix", "aix"},
pres_1s = "eixo",
pret = {"aixé", "asqué"},
pres_sub_stressed = "eixi",
pres_sub_unstressed = {"aixe", "asque"},
pp = "ascud",
irreg = true,
}
},
{
match = "àixer",
like = "éixer",
},
{
-- [[parèixer]], [[aparèixer]], [[comparèixer]], [[desaparèixer]], [[reaparèixer]]
match = "parèixer",
forms = {
g_infix = "pareg",
}
},
--------------------------------------------- misc ----------------------------------------
{
-- [[cabre]]
match = "cabre",
forms = {
pres_sub_stressed = "càpiga",
pres_sub_unstressed = "capigue",
irreg = true,
}
},
{
-- [[caber]]
match = "caber",
like = "cabre",
},
{
-- [[saber]]
match = "saber",
forms = {
fut = "sabr",
pres_1s = "sé",
pres_sub_stressed = "sàpiga",
pres_sub_unstressed = "sapigue",
imp_2s = "sàpiga",
imp_2p = "sapigueu",
irreg = true,
}
},
{
-- [[poder]]
match = "poder",
forms = {
fut = "podr",
pres_1s = "puc",
pres_sub_stressed = "pugui",
pres_sub_unstressed = "pugue",
g_infix = "pog",
imp_2s = "pugues",
imp_2p = "pugueu",
irreg = true,
}
},
{
-- [[córrer]], [[acórrer]], [[concórrer]], [[decórrer]], [[descórrer]], [[discórrer]], [[encórrer]],
-- [[escórrer]], [[incórrer]], [[ocórrer]], [[recórrer]], [[socórrer]], [[transcórrer]]
match = "córrer",
forms = {
pret = "corregué",
pres_sub_unstressed = {"corre", "corregue"},
pp = "corregud",
irreg = true,
}
},
{
-- [[metre]], [[admetre]], [[arremetre]], [[cometre]], [[comprometre]], [[demetre]], [[descomprometre]],
-- [[emetre]], [[entremetre's]], [[escometre]], [[malmetre]], [[manumetre]], [[ometre]], [[permetre]],
-- [[prometre]], [[readmetre]], [[remetre]], [[retransmetre]], [[sotmetre]], [[trametre]], [[transmetre]]
match = "metre",
forms = {
pp = "mès#",
irreg = true,
}
},
--------------------------------------------------------------------------------------------
-- -ir --
--------------------------------------------------------------------------------------------
{
-- [[acudir]]; NOTE: Separation by meaning does not occur in DCC, DIEC, DEIEC, and DCVB says the distinction
-- is geographical and makes no mention of distinction by meaning. OTOH ca.wikt does say that the pronominal
-- sense "to occur" tends to conjugate non-inchoative.
match = "acudir",
forms = {
eix_infix = {{
form = "+",
footnotes = {'[especially in the sense "to turn up, to be present"]'}
}, {
form = "-",
footnotes = {'[especially in the pronominal sense "to occur"]'}
}}
}
},
-- [[afegir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[ajupir]]
-- [[buixir]]
-- [[bullir]], [[rebullir]]
-- [[cruixir]], [[escruixir]] (Routledge says this is inchoative but DIEC, DEIEC and DCC all disagree; note
-- pres_2s 'cruixes', handled automatically)
-- [[dormir]], [[adormir]]
-- [[funyir]]
-- [[grunyir]]
-- [[munyir]], [[esmunyir]]
-- [[pudir]]
-- [[punyir]]
-- [[retrunyir]]
-- [[sallir]]
-- [[sentir]], [[pressentir]], [[ressentir-se]]; not [[consentir]], with can be either non-inchoative or
-- inchoative, and not [[assentir]] or [[dissentir]], which are only inchoative
match = match_against_verbs("ir", {"ajup", "buix", "bull", "cruix", "dorm", "funy", "gruny", "muny", "pud",
"puny", "retruny", "^sent", "pressent", "^ressent", "sall"}),
forms = {
eix_infix = "-",
}
},
{
-- [[arrupir-se]];
-- [[brumir]];
-- [[brunzir]];
-- [[consumir]], [[resumir]], [[presumir]] (not [[sumir]], [[assumir]], [[subsumir]], which are regular)
-- [[mentir]], [[desmentir]]
-- [[percudir]]; cf. also [[acudir]], which to some extent has separate conjugations per meaning
-- [[consentir]]
match = match_against_verbs("ir", {"arrup", "brum", "brunz", "consum", "^resum", "presum", "ment", "percud",
"consent"}),
forms = {
eix_infix = {"+", "-"},
}
},
-- [[cenyir]]: -- non-inchoative or inchoative in Balearics, inchoative elsewhere
{
-- [[cobrir]], [[descobrir]], [[encobrir]], [[recobrir]], [[redescobrir]]
match = "cobrir",
forms = {
pp = "cobert",
irreg = true,
}
},
{
-- [[collir]], [[acollir]], [[escollir]], [[recollir]]
match = "collir",
forms = {
stressed_stem = "culli",
eix_infix = "-",
irreg = true,
}
},
{
-- [[complir]], [[acomplir]], [[incomplir]]
match = "complir",
forms = {
pp = {"complert", "complid"},
irreg = true,
}
},
{
-- [[cosir]], [[descosir]], [[recosir]]
match = "cosir",
forms = {
stressed_stem = "cusi",
pres_3s = "cús#",
eix_infix = "-",
irreg = true,
}
},
{
-- [[eixir]], [[deseixir-se]]; not [[teixir]] or [[entreteixir]], and not [[reeixir]] or [[sobreeixir]],
-- which have an ï in the stem-stressed forms
match = match_against_verbs("eixir", {"^", "des"}),
forms = {
stressed_stem = "ixi",
eix_infix = "-",
irreg = true,
}
},
{
-- [[reeixir]], [[sobreeixir]]
match = match_against_verbs("eixir", {"^re", "sobre"}),
forms = {
stressed_stem = "ïxi",
eix_infix = "-",
irreg = true,
}
},
-- [[engolir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[escopir]]
match = "escopir",
forms = {
stressed_stem = "escupi",
eix_infix = "-",
irreg = true,
}
},
{
-- [[establir]], [[preestablir]], [[restablir]]
match = "establir",
forms = {
pp = {"establert", "establid"},
irreg = true,
}
},
-- [[ferir]]: -- non-inchoative in Balearics, inchoative elsewhere
-- [[fregir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[fugir]], [[confugir]], [[defugir]], [[enfugir-se]]; pres sing ''fujo, fuges, fuig'' handled by
-- combine_stem_ending(); can't be handled by rule above that lists many non-inchoative verbs because the
-- prefix would be 'fug' and the front-back alternation code doesn't apply to prefixes.
match = "fugir",
forms = {
eix_infix = "-",
}
},
{
-- [[imprimir]], [[reimprimir]], [[sobreimprimir]]; not any other verbs in -primir; write it this way so
-- there's a prefix with a vowel to prevent against the accent in the pp from being removed while still
-- removing it in the feminine.
match = match_against_verbs("primir", {"im"}),
forms = {
pp = "près#",
irreg = true,
}
},
-- [[llegir]]: -- non-inchoative in Valencia and Minorca, inchoative elsewhere
{
-- [[lluir]]: regular inchoative in the figurative meaning "to display (something), to be showy" also in the
-- legal meaning "free from a pecuniary obligation, such as a land-based tax (emphyteusis)"; irregular in the
-- literal meaning "to shine"; use <no_built_in> to get regular conjugation. In the regular conjugation,
-- umlauts appear in the following forms: pres_1p/pres_sub_1p/imp_1p lluïm, pres_2p/pres_sub_2p/imp_2p lluïu,
-- impf_1s/impf_3s lluïa, impf_2s lluïes, impf_3p lluïen, pret_2s lluïres, pret_3p lluïren,
-- impf_sub_2s lluïssis, impf_sub_3p lluïssin, throughout the pp: lluït, lluïda, lluïts, lluïdes. IN the
-- irregular conjugation, umlauts appear in the same places as well as elsewhere in the present subjunctive:
-- pres_sub_1s/pres_sub_3s/imp_3s lluï, pres_sub_2s lluïs, pres_sub_3p/imp_3p lluïn. Notably, they do *NOT*
-- appear in the gerund lluint, the infinitive lluir, or anywhere in the future or conditional. Note that
-- verbs.cat [https://www.verbs.cat/en/conjugation/899-lluir.html] lists additional irregular forms pres_1s
-- lluu, and alternative impf_sub forms in -e- instead of -i- (lluïsses, lluíssem, lluísseu, lluïssen), but
-- these are nonstandard or dialectal per both Routledge and DEIEC.
match = "^lluir",
forms = {
eix_infix = "-",
pres3s = {"lluu", "llu"}, -- generates pres_2s, imp_2s
irreg = true,
}
},
{
-- [[entrelluir]] "to be half-seen", [[relluir]] "to shine", [[traslluir-se]] "to be translucent"; either
-- inchoative or non-inchoative, not distinguished by meaning; note, [[deslluir]] and [[enlluir]] are regular
-- inchoative verbs.
match = match_against_verbs("lluir", {"entre", "^re", "tras"}),
forms = {
eix_infix = {"+", "-"},
pres3s = {"llueix", "lluu", "llú"}, -- generates pres_2s, imp_2s; note, pres_2s will end in -es due to
-- combine_stem_ending()
irreg = true,
}
},
{
-- [[morir]], [[premorir]]; but not [[atemorir]]
match = match_against_verbs("morir", {"^", "pre"}),
forms = {
eix_infix = "-",
pp = "mort",
irreg = true,
}
},
{
-- [[obrir]], [[entreobrir]], [[reobrir]]; not [[cobrir]] and derivatives, not [[empobrir]], so we have to list
-- them individually
match = match_against_verbs("obrir", {"^", "entre", "^re"}),
forms = {
eix_infix = "-",
pp = "obert",
irreg = true,
}
},
{
-- [[oferir]]; but not [[proferir]]
match = "^oferir",
forms = {
pp = {"ofert", "oferid"},
irreg = true,
}
},
-- [[oir]], [[desoir]], [[entreoir]]: -- per Routledge, non-inchoative or inchoative normally but only
-- non-inchoative in Valencian; but all dictionaries disagree and say it is a regular inchoative-only verb.
-- It has the same umlauts as lluir (and [[corroir]], another regular inchoative verb).
{
-- [[omplir]], [[desomplir-se]], [[reomplir]]; not [[complir]] and derivatives, so we have to list them
-- individually
match = match_against_verbs("omplir", {"^", "des", "^re"}),
forms = {
eix_infix = "-",
pp = {"omplert", "omplid"},
irreg = true,
}
},
-- [[penedir-se]]: -- non-inchoative in Balearics, inchoative elsewhere
{
-- [[pruir]] "to itch": same umlauts as in [[lluir]].
match = "^pruir",
forms = {
eix_infix = "-",
pres3s = {"pruu", "pru"}, -- generates pres_2s, imp_2s
irreg = true,
}
},
{
-- [[reblir]]
match = "^reblir",
forms = {
pp = {"reblert", "reblid"},
irreg = true,
}
},
-- [[renyir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[sofrir]]
match = "^sofrir",
forms = {
pp = {"sofert", "sofrid"},
irreg = true,
}
},
{
-- [[sortir]], [[ressortir]], [[sobresortir]]; but not [[assortir]], which is regular inchoative
match = match_against_verbs("sortir", {"^", "^res", "sobre"}),
forms = {
stressed_stem = "surti",
eix_infix = "-",
irreg = true,
}
},
{
-- [[suplir]]
match = "^suplir",
forms = {
pp = {"suplert", "suplid"},
irreg = true,
}
},
-- [[teixir]], [[entreteixir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[tenir]] but not any compounds; highly irregular
match = "^tenir",
forms = {
fut = "tindr",
pres_stressed = "ten",
pres_3s = "té",
imp_2s = {"té", "ten", "tingues"},
imp_2p = {"teniu", "tingueu"},
g_infix = "ting",
}
},
{
-- [[abstenir-se]], [[atenir-se]], [[captenir-se]], [[cartenir]], [[contenir]], [[detenir]], [[entretenir]],
-- [[mantenir]], [[menystenir]], [[obtenir]], [[retenir]], [[sostenir]], [[viltenir]]; highly irregular
match = "tenir",
forms = {
fut = "tindr",
pres_stressed = "ten",
pres_3s = "té",
imp_2s = {"tén", "tingues"},
imp_2p = {"teniu", "tingueu"},
g_infix = "ting",
}
},
{
-- [[tindre]]: variant of [[tenir]]
match = "tindre",
like = "tenir",
},
-- [[tenyir]], [[destenyir]]: -- non-inchoative in Valencia, but [[retenyir]] inchoative or non-inchoative in
-- Valencia? (per Routledge); regular inchoative elsewhere
{
-- [[tossir]] "to cough"
match = "^tossir",
forms = {
stressed_stem = "tussi", -- pres_2s gets 'tusses'
pres_3s = "tus", -- note, pres_3s (a single form override) not pres3s (a stem override, which also affects
-- pres_2s; but imp_2s is physically copied from pres_3s, so imp_2s correctly gets 'tus')
eix_infix = "-",
irreg = true,
}
},
{
-- [[venir]] but not any compounds; highly irregular
match = "^venir",
forms = {
fut = "vindr",
pres_stressed = "ven",
pres_3s = "ve",
imp_2s = "vine",
g_infix = "ving",
}
},
{
-- compounds of [[venir]]: [[advenir]], [[avenir]], [[contravenir]], [[convenir]], [[desavenir-se]],
-- [[desconvenir]], [[entrevenir]], [[esdevenir]], [[intervenir]], [[obvenir]], [[pervenir]], [[prevenir]],
-- [[provenir]], [[reconvenir]], [[revenir]], [[sobrevenir]], [[subvenir]]; but not [[enjovenir]] or
-- [[rejovenir]]; highly irregular
match = match_against_verbs("venir", {"^ad", "^a", "contra", "con", "desa", "entre", "esde", "inter", "ob",
"per", "pre", "pro", "^re", "sobre", "sub"}),
forms = {
fut = "vindr",
pres_stressed = "ven",
pres_3s = "vé",
imp_2s = "vén",
g_infix = "ving",
}
},
{
-- [[vindre]]: variant of [[venir]]
match = "vindre",
like = "venir",
},
-- [[vestir]], [[desvestir]], [[revestir]], maybe [[transvestir]]: non-inchoative in Valencia, inchoative or
-- non-inchoative in the Balearics; regular inchoative elsewhere; but not [[envestir]] or [[investir]], which are
-- regular inchoative everywhere
{
-- [[fer]], [[contrafer]], [[desfer]], [[estrafer]], [[perfer]], [[refer]], [[satisfer]]; highly irregular
match = "fer",
forms = {
fut = "far",
pres_1s = "faj", -- will be converted to 'faig'; 'faig' gets converted to 'faic'
pres_2s = "fàs#",
pres_3s = "fà#",
pres_3p = "fan",
pres_unstressed = "fe",
impf1 = "fei",
impf2 = "fèi",
pres_sub_stressed = "faci",
pres_sub_unstressed = "fe",
pret = "fé",
pret_1s = "fiu",
pret_3s = "feu",
impf_sub_1s = "fés#", -- regular except for base form [[fes]], lacking an accent
impf_sub_3s = "fés#", -- same
imp_2s = "fés#",
pp = "fet",
irreg = true,
}
},
{
-- [[dir]], [[adir-se]], [[contradir]], [[desdir]], [[entredir]], [[interdir]], [[maldir]], [[predir]], [[redir]];
-- behaves like an -er/-re verb
match = match_against_verbs("dir", {"^", "^a", "contra", "des", "entre", "inter", "mal", "pre", "^re"}),
forms = {
stem = "die",
g_infix = "+",
imp_2s = "digues",
imp_2p = "digueu",
pp = "dit",
}
},
{
-- [[dur]], [[endur-se]]; behaves like an -er/-re verb
match = "dur",
forms = {
stem = "due",
g_infix = "+",
pres3s = {"duu", "du"}, -- generates pres_2s, imp_2s
impf1 = "dui",
impf2 = "dúi",
pp = "dut",
}
},
{
-- [[ser]]; highly irregular
match = "^ser",
forms = {
pres_1s = "soc",
pres_2s = "ets",
pres_3s = "és",
pres_1p = "som",
pres_2p = "sou",
pres_3p = "són",
impf1 = "er",
impf2 = "ér",
pres_sub_stressed = "sigui",
pres_sub_unstressed = "sigue",
pret = "fó",
pret_1s = "fui",
pret_3s = "fou",
impf_sub_1s = "fos", -- regular except for lack of accent
impf_sub_3s = "fos", -- same
cond = {"serí", "fór"},
imp_2s = "sigues",
imp_2p = "sigueu",
pp = {"estad", "sigud"},
gerund = {"sent", "essent"},
irreg = true,
}
},
{
-- [[ésser]]; variant of [[ser]]
match = "^ésser",
like = "ser",
},
{
-- [[haver]] as auxiliary; highly irregular
match = "^haver",
var = "aux",
forms = {
pres_1s = "he",
pres_2s = "has",
pres_3s = "ha",
pres_1p = "hem",
pres_2p = "heu",
pres_3p = "han",
fut = "haur",
cond = {"haurí", "haguér"},
pres_sub_stressed = "hagi",
pres_sub_unstressed = "hàgi",
noimp = true,
g_infix = "+",
}
},
{
-- [[haver]] as full verb; highly irregular
match = "^haver",
var = "full",
forms = {
pres_1s = {"hec", "hac"},
pres_stressed = {"heu", "hau"},
fut = "haur",
pres_sub_stressed = "hegui",
g_infix = "+",
}
},
{
-- [[heure]]; variant of full verb [[haver]]
match = "^heure",
like = "haver",
likevar = "full",
},
{
-- [[haure]]; variant of full verb [[haver]]
match = "^haure",
like = "haver",
likevar = "full",
},
}
local function skip_slot(base, slot, allow_overrides)
if not allow_overrides and (base.basic_overrides[slot] or
base.refl and base.basic_reflexive_only_overrides[slot]) then
-- Skip any slots for which there are overrides.
return true
end
if base.only3s and (slot:find("^pp_f") or slot:find("^pp_mp")) then
-- diluviar, atardecer, neviscar; impersonal verbs have only masc sing pp
return true
end
if not slot:find("[123]") then
-- Don't skip non-personal slots.
return false
end
if base.nofinite then
return true
end
if (base.only3s or base.only3sp or base.only3p) and (slot:find("^imp_") or slot:find("^neg_imp_")) then
return true
end
if base.only3s and not slot:find("3s") then
-- diluviar, atardecer, neviscar
return true
end
if base.only3sp and not slot:find("3[sp]") then
-- atañer, concernir
return true
end
if base.only3p and not slot:find("3p") then
-- [[caer cuatro gotas]], [[caer chuzos de punta]], [[entrarle los siete males]]
return true
end
return false
end
local function add_stem_ending(stem, ending)
if ending == "" then
return stem
end
if stem:find("#$") then -- remove final accent when adding a suffix
stem = com.remove_accents((stem:gsub("#$", "")), "final syllable only")
end
return stem .. ending
end
local function process_stem(stem, fn)
if stem:find("#$") then
local stem_no_pound_sign = stem:match("^(.*)#$")
return fn(stem_no_pound_sign) .. "#"
else
return fn(stem)
end
end
-- Add the `stem` to the `ending` and apply any phonetic modifications. `is_full_word` indicates that we're creating
-- a "full word" not a stem, and turns on devoicing of final consonants. `dont_include_prefix` is used when creating
-- stems and indicates not to prepend the prefix in `base.prefix` to the result. `is_pres_sub_stressed` is used when
-- creating the pres_sub_stressed stem, to correctly handle both [[desaiguar]] and [[argüir]], whose respective
-- interactions between ü and i/ï are very tricky.
--
-- WARNING: This function is written very carefully; changes to it can easily have unintended consequences.
local function combine_stem_ending(base, stem, ending, is_full_word, dont_include_prefix, is_pres_sub_stressed)
-- Include the prefix in the stem unless dont_include_prefix is given (used in construct_stems()), or the value of
-- `stem` comes from a user-specified stem or form override.
if not dont_include_prefix and not stem:find(IS_USER_STEM_OVERRIDE) and not stem:find(IS_USER_FORM_OVERRIDE) then
stem = base.prefix .. stem
end
-- A * at the beginning of the ending is a signal to remove a stressed accent from the stem. This may feed any of
-- the following rules.
if ending:find("^%*") then
ending = ending:gsub("^%*", "")
stem = com.remove_accents(stem, "final syllable only")
end
-- If ending begins with s and stem ends in a sibilant, we need an e in between; cf. pres_2s 'apareixes' of
-- [[aparèixer]], pres_2s 'torces' of [[tòrcer]], pres_2s 'fuges' of [[fugir]], pres_2s 'brunzes' of [[brunzir]].
-- This may feed the next rule.
if ending:find("^s") and rfind(stem, "[çjsxz]$") then
ending = "e" .. ending
end
-- By default, stems are in their "back" (standalone) form. Before a front vowel, convert the final consonant to
-- its "front" form so the pronunciation doesn't change.
if rfind(ending, "^" .. front_vowel_c) then
-- adequar -> adeqües
-- enaiguar -> enaigües
-- pegar -> pegues
-- arranjar -> arranges
-- marcar -> marques
-- abraçar -> abraces
stem = com.back_to_front(stem)
end
-- Ending beginning in -i after diphthong ending in V + i compresses the two i's into one (cf. pret_1s 'desmaí' and
-- pres_sub_1s 'desmaï' of [[desmaiar]]). This rule doesn't apply after pseudo-vowel u in gu/qu; cf. pret_1s 'guií'
-- of [[guiar]] and contrast pret_1s 'cruí' of [[cruiar]]. This may feed the next rule.
if rfind(ending, "^[iíï]") and rfind(stem, V .. "i$") and not rfind(stem, "[gq][uü]i$") then
stem = stem:gsub("i$", "")
end
-- If ending begins with i (not í), it must get a diaeresis after a true vowel (not gu/qu, cf. pres_1p 'delinquim'
-- of [[delinquir]], not '#delinquïm'; also not a diphthong ending in u, cf. pres_sub_1s 'apreui' of [[apreuar]]
-- not '#apreuï') to prevent the two merging into a diphthong. Note that ü -> u before ï, but to simplify things
-- we leave the double umlauts in place and remove the first one during postprocessing, in fix_double_umlauts().
-- Cf.:
-- * impf_1s 'raïa' of [[raure]];
-- * pres_sub_1s 'creï' of [[crear]];
-- * pres_sub_1s 'associï' of [[associar]];
-- * impf_1s 'cloïa' of [[cloure]];
-- * pres_1p 'lluïm' of [[lluir]];
-- * pres_1p 'arguïm' of [[argüir]].
if ending:find("^i") and rfind(stem, "[aeiouü]$") and not stem:find("[aeiogq]u$") and
-- Unstressed subjunctive endings of [[enaiguar]] remain without umlaut: enaigüi/enaigüis/enaigüin;
-- but stressed endings of [[argüir]] that begin with 'i' do get an umlaut: arguït, impf. arguïa, including
-- stressed subjunctive endings arguïm/arguïu. In both cases the ending is '-i' as part of the creation of
-- the respective stems. There seems no way of distinguishing the two cases other than with a special flag.
not (rfind(stem, "[gq]ü$") and ending == "i" and is_pres_sub_stressed) then
ending = ending:gsub("^i", "ï")
end
local retval = add_stem_ending(stem, ending)
if retval:find("#$") then -- remove final accent if no vowels in prefix
retval = retval:gsub("#$", "")
if not rfind(base.prefix, V) then
retval = com.remove_accents(retval, "final syllable only")
end
end
if is_full_word then
local saw_is_user_form_override
retval, saw_is_user_form_override = rsubb(retval, IS_USER_FORM_OVERRIDE, "")
retval = retval:gsub(IS_USER_STEM_OVERRIDE, "")
if not saw_is_user_form_override then
-- Devoice final voiced obstruent (cf. pres_2s 'caps', pres_3s 'cap' of [[cabre]]). But not after a
-- consonant (cf. pres_2s 'perds', pres_3s 'perd' of [[perdre]]), except for g -> c, which operates
-- even after a consonant (pres_1s 'resolc' of [[resoldre]], pres_1s 'tinc' of [[tenir]]).
retval = retval:gsub("g(s?)$", "c%1")
retval = rsub(retval, "(" .. V .. ")([bdj])(s?)$", function(before, voiced, after)
local devoice = {
b = "p",
d = "t",
j = "ig", -- pres_3s 'fuj' of [[fugir]] -> 'fuig'
}
return before .. devoice[voiced] .. after
end)
end
end
return retval
end
local function add3(base, slot, stems, endings, footnotes, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(base, stem, ending, "is full word")
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil, footnotes)
end
local function insert_form(base, slot, form)
if not skip_slot(base, slot) then
iut.insert_form(base.forms, slot, form)
end
end
local function insert_forms(base, slot, forms)
if not skip_slot(base, slot) then
iut.insert_forms(base.forms, slot, forms)
end
end
local function add_single_stem_tense(base, slot_pref, stems, s1, s2, s3, p1, p2, p3)
local function addit(slot, ending)
add3(base, slot_pref .. "_" .. slot, stems, ending)
end
addit("1s", s1)
addit("2s", s2)
addit("3s", s3)
addit("1p", p1)
addit("2p", p2)
addit("3p", p3)
end
local function map_general(stemforms, fn)
return iut.map_forms(iut.convert_to_general_list_form(stemforms), fn)
end
local function flatmap_general(stemforms, fn)
return iut.flatmap_forms(iut.convert_to_general_list_form(stemforms), fn)
end
-- Given a stem ending in a conjugation vowel -a/-e/-i/-ï, split into stem base and conjugation vowel, converting the
-- stem base to "back" form if the conjugation vowel is front (hence 'torce' of [[tòrcer]] splits into 'torç' and 'e',
-- and 'fugi' of [[fugir]] splits into 'fuj' and 'i').
local function split_conj_vowel(stem)
local stem_base, conj_vowel = rmatch(stem, "^(.*)([aeiï])$")
if not stem_base then
error(("Internal error: Stem '%s' doesn't end in conjugation vowel a/e/i"):format(stem))
end
if conj_vowel == "ï" then
-- To simplify handling of ï, convert to i. It will be converted back to ï as necessary in
-- combine_stem_ending().
conj_vowel = "i"
end
if rfind(conj_vowel, front_vowel_c) then
stem_base = com.front_to_back(stem_base)
end
return stem_base, conj_vowel
end
local function construct_stems(base)
base.output_stems = {}
local stems = base.output_stems
local bst = base.input_stems
-- YUCK, see combine_stem_ending() for the necessity of is_pres_sub_stressed.
local function combine(stem, ending, is_pres_sub_stressed)
return combine_stem_ending(base, stem, ending, false, "dont include prefix", is_pres_sub_stressed)
end
stems.irreg = bst.irreg or bst.g_infix
-- NOTE: Some stems end in a conjugation or similar vowel, specifically:
-- * `stem` (ends in conjugation vowel -a/-e/-i);
-- * `stressed_stem` (likewise);
-- * `unstressed_stem` (likewise);
-- * `pres_unstressed` (which assumes the form of the gerund minus the -nt; note that `pres_stressed` does *NOT*
-- end in a conjugation vowel, but assumes the stem form; the value of pres_3s will be derived by adding -a for
-- -ar verbs and otherwise adding an -e prop vowel when required, as in [[cobrir]], and otherwise adding no
-- vowel);
-- * `pres_sub_stressed` (which assumes the form of pres_sub_3s and hence usually ends in -i, occasionally -a);
-- * `pres_sub_unstressed` (which assumes the form of pres_sub_1p minus the -m, hence ends in -e or -i).
-- Save stem for use in add_categories_and_annotation() for determining the conjugation class.
stems.stem = bst.stem or base.stem
local eix_infix_stem
if base.conj_vowel == "i" then
-- Save eix_infix value for use in add_categories_and_annotation() for determining whether consonant
-- alternations exist.
stems.eix_infix = bst.eix_infix or bst.g_infix and "-" or "+"
eix_infix_stem = flatmap_general(stems.eix_infix, function(form)
if form == "+" then
return map_general(stems.stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, "eixe")
end)
elseif form == "-" then
return stems.stem
else
return form
end
end)
end
local stressed_stem = bst.stressed_stem or eix_infix_stem or stems.stem
local unstressed_stem = bst.unstressed_stem or stems.stem
-- Add the 'g' that is characteristic of g-infix verbs. We remove a stem-final v, e.g. [[beure]] with stem 'beve'
-- becomes 'beg'.
local function add_g(stemforms)
return map_general(stemforms, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
stem_base = stem_base:gsub("v$", "")
return combine(stem_base, "g")
end)
end
-- Add the 'u' of the pres_3s that is characteristic of g-infix verbs (and conjugation vowel 'e', later removed).
-- We remove a stem-final v, as well as i as part of a diphthong, e.g. [[beure]] with stem 'beve' becomes 'beue'
-- and [[veure]] with stem 'veie' becomes 'veue' (but [[riure]] with stem 'rie' becomes 'riue' not '#rue'). We
-- don't add -u after a consonant, e.g. [[doldre]] with stem 'dole' becomes 'dole' not '#dolue'.
local function add_u(stemforms)
return map_general(stemforms, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
if stem_base:find("v$") then
stem_base = stem_base:gsub("v$", "")
else
stem_base = rsub(stem_base, "(" .. V .. ")i$", "%1")
end
-- Add u after vowel but not after another u, so we get pres_3p 'duen' of [[dur]] not '#duuen'.
if rfind(stem_base, V .. "$") and not stem_base:find("u$") then
return combine(stem_base, "u")
else
return stem_base
end
end)
end
local stressed_g_infix, unstressed_g_infix, g_infix_pres_stressed
if bst.g_infix then
local function flatmap_g_infix(default)
return flatmap_general(bst.g_infix, function(form)
if form == "+" then
return default
else
return form
end
end)
end
stressed_g_infix = flatmap_g_infix(add_g(stressed_stem))
unstressed_g_infix = flatmap_g_infix(add_g(unstressed_stem))
g_infix_pres_stressed = add_u(stressed_stem)
end
stems.pres_unstressed = bst.pres_unstressed or unstressed_stem
stems.pres_stressed =
-- If no_pres_stressed given, pres_stressed stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
bst.pres_stressed or
g_infix_pres_stressed or
map_general(stressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return stem_base
end)
stems.pres1s =
-- If no_pres_stressed given, pres1s stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
stressed_g_infix or
map_general(stems.pres_stressed, function(form)
return combine(form, "o")
end)
stems.pres3s =
-- If no_pres_stressed given, pres3s stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
bst.pres3s or
map_general(stems.pres_stressed, function(form)
if base.conj_vowel == "a" then
return combine(form, "a")
elseif rfind(form, C .. "[lr]$") and not rfind(form, V .. "ll$") then
return combine(form, "e")
else
return form
end
end)
stems.pres3p =
-- If no_pres_stressed given, pres3p stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
map_general(stems.pres_stressed, function(form)
return combine(form, "en")
end)
local function compute_impf_stem(with_accent)
return map_general(stems.pres_unstressed, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
if conj_vowel == "a" then
return combine(stem_base, with_accent and "àv" or "av")
elseif stem_base:find("i#?$") then
form = form:gsub("i#?$", "")
return combine(rmatch(stem_base, "^(.-)" .. V .. "*$"), with_accent and "èi" or "ei")
else
return combine(stem_base, with_accent and "í" or "i") -- i -> ï after a vowel
end
end)
end
stems.impf1 = bst.impf1 or compute_impf_stem(false)
stems.impf2 = bst.impf2 or compute_impf_stem(true)
stems.pret = bst.pret or
unstressed_g_infix and map_general(unstressed_g_infix,
function(form) return combine(form, "é") end
) or
map_general(unstressed_stem, function(form)
local accent_conj_vowel = {
a = "à",
e = "é",
i = "í",
}
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, accent_conj_vowel[conj_vowel])
end)
stems.fut = bst.fut or base.inf_stem
stems.cond = bst.cond or map_general(stems.fut, function(form) return combine(form, "í") end)
stems.pres_sub_stressed = bst.pres_sub_stressed or
stressed_g_infix and map_general(stressed_g_infix, function(form) return combine(form, "i") end) or
map_general(stressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, "i", "is pres_sub_stressed")
end)
stems.pres_sub_unstressed = bst.pres_sub_unstressed or
unstressed_g_infix and map_general(unstressed_g_infix, function(form) return combine(form, "e") end) or
map_general(unstressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, conj_vowel == "i" and conj_vowel or "e")
end)
stems.impf_sub = bst.impf_sub or map_general(stems.pret, function(form)
local stem_base = rmatch(form, "^(.*)à$") -- already in "back" form, no need to convert
if stem_base then
return combine(stem_base, "é")
else
return form
end
end)
stems.pp = bst.pp or
unstressed_g_infix and map_general(unstressed_g_infix,
function(form) return combine(form, "ud") end
) or
map_general(unstressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
-- use combine() so we get 'abduïd' from 'abdu-' of [[abduir]], 'seguid' from 'seg-' from [[seguir]], etc.
return combine(stem_base, (conj_vowel == "e" and "u" or conj_vowel) .. "d")
end)
end
local function a_to_e(base, stems, suffix)
return map_general(stems, function(form)
local stem_base = form:match("^(.-)a$")
if stem_base then
suffix = "e" .. suffix
else
stem_base = form
end
return combine_stem_ending(base, stem_base, suffix, "is full word")
end)
end
local function add_present_indic(base)
local stems = base.output_stems
local function addit(slot, stems, ending)
add3(base, "pres_" .. slot, stems, ending)
end
addit("1s", stems.pres1s, "")
insert_forms(base, "pres_2s", a_to_e(base, stems.pres3s, "s"))
addit("3s", stems.pres3s, "")
insert_forms(base, "pres_1p", a_to_e(base, stems.pres_unstressed, "m"))
insert_forms(base, "pres_2p", a_to_e(base, stems.pres_unstressed, "u"))
addit("3p", stems.pres3p, "")
end
local function add_present_subj(base)
local stems = base.output_stems
local function addit(slot, stems, ending)
add3(base, "pres_sub_" .. slot, stems, ending)
end
-- Regular -ar verb: [[amar]]: ami, amis, ami, amem, ameu, amin
-- Regular -re verb: [[batre]]: bati, batis, bati, batem, bateu, batin (same as -ar verb)
-- Regular -ir verb, no -eix- infix: [[dormir]]: dormi, dormis, dormi, dormim, dormiu, dormin
-- Regular -ir verb, -eix- infix: [[imprimir]]: imprimeixi, imprimeixis, imprimeixi, imprimim, imprimiu, imprimeixin
-- Stem changing in 123s/3p vs. 12p:
-- * -eix- infix (-eix- in all stressed forms: 123s/3p of pres ind/sub, 2s imp)
-- * [[collir]]: culli, cullis, culli, collim, colliu, cullin (cull- in all stressed forms)
-- * [[cabre]]: càpiga, càpigues, càpiga, capiguem, capigueu, càpiguen (also different endings)
addit("1s", stems.pres_sub_stressed, "")
insert_forms(base, "pres_sub_2s", a_to_e(base, stems.pres_sub_stressed, "s"))
addit("3s", stems.pres_sub_stressed, "")
addit("1p", stems.pres_sub_unstressed, "m")
addit("2p", stems.pres_sub_unstressed, "u")
insert_forms(base, "pres_sub_3p", a_to_e(base, stems.pres_sub_stressed, "n"))
end
local function add_finite_non_present(base)
local stems = base.output_stems
local function add_tense(slot, stem, s1, s2, s3, p1, p2, p3)
add_single_stem_tense(base, slot, stem, s1, s2, s3, p1, p2, p3)
end
add_tense("impf", stems.impf1, "a", "es", "a", nil, nil, "en")
add_tense("impf", stems.impf2, nil, nil, nil, "em", "eu", nil)
-- pret_1s ends in -í regardless of the normal vowel of the stem.
insert_forms(base, "pret_1s", map_general(stems.pret, function(form)
local stem_base, conj_vowel = rmatch(form, "^(.*)(" .. V .. ")$")
if not stem_base then
error(("Internal error: Preterite stem '%s' doesn't end in vowel"):format(form))
end
if rfind(conj_vowel, front_vowel_c) then
stem_base = com.front_to_back(stem_base)
end
-- Use combine_stem_ending() to handle back-to-front conversions, e.g. pegà -> peguí for [[pegar]] and ensure
-- that the prefix gets added.
return combine_stem_ending(base, stem_base, "í", "is full word") end))
-- * at the beginning of the ending means to remove an accent from the last vowel of the preterite stem.
add_tense("pret", stems.pret, nil, "*res", "", "rem", "reu", "*ren")
-- * at the beginning of the ending means to remove an accent from the last vowel of the imperfect subjunctive stem.
add_tense("impf_sub", stems.impf_sub, "s", "*ssis", "s", "ssim", "ssiu", "*ssin")
add_tense("fut", stems.fut, "é", "às", "à", "em", "eu", "an")
add_tense("cond", stems.cond, "*a", "*es", "*a", "em", "eu", "*en")
end
local function add_non_finite_forms(base)
local stems = base.output_stems
local function addit(slot, stems, ending, footnotes)
add3(base, slot, stems, ending, footnotes)
end
insert_form(base, "infinitive", {form = base.orig_verb})
-- Also insert "infinitive + reflexive pronoun" combinations if we're handling a reflexive verb. See comment below
-- for "gerund + reflexive pronoun" combinations.
if base.refl then
for _, persnum in ipairs(person_number_list) do
insert_form(base, "infinitive_" .. persnum, {form = base.orig_verb})
end
end
-- Gerunds don't have an umlaut over the i in cases like 'abduint' of 'abduir' (not '#abduïnt').
local pres_unstressed_no_umlaut = map_general(stems.pres_unstressed, function(form)
return rsub(form, "ï$", "i")
end)
addit("gerund", pres_unstressed_no_umlaut, "nt")
-- Also insert "gerund + reflexive pronoun" combinations if we're handling a reflexive verb. We insert exactly the
-- same form as for the bare gerund; later on in add_reflexive_or_fixed_clitic_to_forms(), we add the appropriate
-- clitic pronouns. It's important not to do this for non-reflexive verbs, because in that case, the clitic
-- pronouns won't be added, and {{ca-verb form of}} will wrongly consider all these combinations as possible
-- inflections of the bare gerund. Thanks to [[User:JeffDoozan]] for this bug fix.
if base.refl then
for _, persnum in ipairs(person_number_list) do
addit("gerund_" .. persnum, pres_unstressed_no_umlaut, "nt")
end
end
addit("pp_ms", stems.pp, "")
if not base.pp_inv then
addit("pp_fs", stems.pp, "a")
-- make_plural() handles the complexities of e.g. 'vist' of [[veure]] -> 'vistos'/'vists' and 'romàs' of
-- [[romandre]] -> 'romasos'. We need to use flatmap_general() because make_plural() may return more than one
-- plural, and we need to use map_general() on the result, applying combine_stem_ending(), to ensure that
-- prefixes get properly added and plurals like 'amads' of stem 'amad' of [[amar]] get converted to 'amats'.
insert_forms(base, "pp_mp", map_general(flatmap_general(stems.pp, function(form)
-- Remove any # indicating that an accent will be dropped; it will be dropped in any case by make_plural().
form = form:gsub("#$", "")
return com.make_plural(form, "m")
end), function(form)
return combine_stem_ending(base, form, "", "is full word")
end))
addit("pp_fp", stems.pp, "es")
end
end
local function add_imperatives(base)
if base.noimp then
return
end
-- Copy pres3s to imperative since they are almost always the same.
insert_forms(base, "imp_2s", iut.map_forms(base.forms.pres_3s, function(form) return form end))
-- Copy pres2p to imperative plural since they are almost always the same.
insert_forms(base, "imp_2p", iut.map_forms(base.forms.pres_2p, function(form) return form end))
-- Copy subjunctives to imperatives.
for _, persnum in ipairs({"3s", "1p", "3p"}) do
local from = "pres_sub_" .. persnum
local to = "imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form) return form end))
end
end
local function fix_double_umlauts(base)
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
form.form = form.form:gsub("üï", "uï")
end
end
end
local function process_slot_overrides(base, filter_slot, reflexive_only)
local overrides = reflexive_only and base.basic_reflexive_only_overrides or base.basic_overrides
for slot, forms in pairs(overrides) do
if not filter_slot or filter_slot(slot) then
add3(base, slot, forms, "", nil, "allow overrides")
end
end
end
local function link_clitic(clitic)
return (clitic:gsub("([^ %-]+)", "[[%1]]"))
end
-- Prefix `form` with `clitic`, adding fixed text `between` between them. Add links as appropriate unless the user
-- requested no links. Check whether form already has brackets (as will be the case if the form has a fixed clitic).
local function prefix_clitic_to_form(base, clitic, between, form)
if base.alternant_multiword_spec.args.noautolinkverb then
return clitic .. between .. form
else
local clitic_pref = link_clitic(clitic) .. between
if form:find("%[%[") then
return clitic_pref .. form
else
return clitic_pref .. "[[" .. form .. "]]"
end
end
end
-- Suffix `form` with `clitic`. Add links as appropriate unless the user requested no links. Check whether form already
-- has brackets (as will be the case if the form has a fixed clitic).
local function suffix_clitic_to_form(base, clitic, form)
local autolink = not base.alternant_multiword_spec.args.noautolinkverb
if base.alternant_multiword_spec.args.noautolinkverb then
return form .. clitic
else
local clitic_suf = link_clitic(clitic)
if form:find("%[%[") then
return form .. clitic_suf
else
return "[[" .. form .. "]]" .. clitic_suf
end
end
end
-- Add a reflexive pronoun or fixed clitic (FIXME: not working), as appropriate to the base forms that were generated.
-- `do_joined` means to do only the forms where the pronoun is joined to the end of the form; otherwise, do only the
-- forms where it is not joined and precedes the form.
local function add_reflexive_or_fixed_clitic_to_forms(base, do_reflexive, do_joined)
for _, slotaccel in ipairs(base.alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
local persnum
if slot:find("[123]") then
persnum = slot:match("^.*_(.-)$")
else
persnum = "3s"
end
local function get_proclitic(form)
--if not do_reflexive then
-- return base.clitic
if form:find("^[aeiouh]") then
return proclitic_elided_person_number_to_reflexive_pronoun[persnum]
else
return proclitic_non_elided_person_number_to_reflexive_pronoun[persnum]
end
end
local function get_enclitic(form)
--if not do_reflexive then
-- return base.clitic
if rfind(form, C .. "$") or rfind(form, V .. "[iu]$") and not form:find("[gq]ui$") then
return enclitic_non_elided_person_number_to_reflexive_pronoun[persnum]
else
return enclitic_elided_person_number_to_reflexive_pronoun[persnum]
end
end
if base.forms[slot] then
if do_reflexive and slot:find("^pp_") or slot == "infinitive_linked" then
-- do nothing with reflexive past participles or with infinitive linked (handled at the end)
elseif slot:find("^neg_imp_") then
error("Internal error: Should not have forms set for negative imperative at this stage")
else
local slot_has_suffixed_clitic = slot:find("infinitive") or slot:find("gerund") or slot:find("^imp_")
-- Maybe generate non-reflexive parts and separated syntactic variants for use in
-- {{ca-verb form of}}. See comment in add_slots() above `need_special_verb_form_of_slots`.
-- Check for do_joined so we only run this code once.
if do_reflexive and do_joined and base.alternant_multiword_spec.source_template == "ca-verb form of" and
-- Skip personal variants of infinitives and gerunds so we don't think [[arrependendo]] is a
-- non-reflexive equivalent of [[arrependendo-me]].
not slot:find("infinitive_") and not slot:find("gerund_") then
-- Clone the forms because we will be destructively modifying them just below, adding the reflexive
-- pronoun.
insert_forms(base, slot .. "_non_reflexive", mw.clone(base.forms[slot]))
if slot_has_suffixed_clitic then
insert_forms(base, slot .. "_variant", iut.map_forms(base.forms[slot], function(form)
return prefix_clitic_to_form(base, get_proclitic(form), "... ", form)
end))
end
end
if slot_has_suffixed_clitic then
if do_joined then
-- Add clitic after form.
for _, form in ipairs(base.forms[slot]) do
form.form = suffix_clitic_to_form(base, get_enclitic(form.form), form.form)
end
end
elseif not do_joined then
-- Add clitic before form.
for _, form in ipairs(base.forms[slot]) do
form.form = prefix_clitic_to_form(base, get_proclitic(form.form), "", form.form)
end
end
end
end
end
end
local function handle_infinitive_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{ca-verb}}.
-- We substitute the original lemma (before removing links) for forms that
-- are the same as the lemma, if the original lemma has links.
for _, slot in ipairs({"infinitive"}) do
insert_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
local function generate_negative_imperatives(base)
if base.noimp then
return
end
-- Copy subjunctives to negative imperatives, preceded by "no".
for _, persnum in ipairs(neg_imp_person_number_list) do
local from = "pres_sub_" .. persnum
local to = "neg_imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form)
if base.alternant_multiword_spec.args.noautolinkverb then
return "no " .. form
elseif form:find("%[%[") then
-- already linked, e.g. when reflexive
return "[[no]] " .. form
else
return "[[no]] [[" .. form .. "]]"
end
end))
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
local function conjugate_verb(base)
construct_stems(base)
add_present_indic(base)
add_present_subj(base)
add_finite_non_present(base)
add_non_finite_forms(base)
fix_double_umlauts(base)
-- do non-reflexive non-imperative slot overrides
process_slot_overrides(base, function(slot)
return not slot:find("^imp_") and not slot:find("^neg_imp_")
end)
-- This should happen after process_slot_overrides() in case a derived slot is based on an override
-- (as with the imp_3s of [[dar]], [[estar]]).
add_imperatives(base)
-- do non-reflexive positive imperative slot overrides
process_slot_overrides(base, function(slot)
return slot:find("^imp_")
end)
-- We need to add joined reflexives, then joined and non-joined clitics, then non-joined reflexives, so we get
-- [[arrepéndete]] but [[no]] [[te]] [[arrependas]].
if base.refl then
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", "do joined")
process_slot_overrides(base, nil, "do reflexive") -- do reflexive-only slot overrides
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", false)
end
-- This should happen after add_reflexive_or_fixed_clitic_to_forms() so negative imperatives get the reflexive pronoun
-- and clitic in them.
generate_negative_imperatives(base)
-- do non-reflexive negative imperative slot overrides
-- FIXME: What about reflexive negative imperatives?
process_slot_overrides(base, function(slot)
return slot:find("^neg_imp_")
end)
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma`
-- in handle_infinitive_linked() works correctly and compares unlinked forms to unlinked forms.
handle_infinitive_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
user_basic_overrides = {},
user_stems = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
if inside == "" then
return base
end
local segments = put.parse_balanced_segment_run(inside, "[", "]")
local dot_separated_groups = put.split_alternating_runs(segments, "%.")
for i, dot_separated_group in ipairs(dot_separated_groups) do
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
elseif first_element:find("^var:") then
if #dot_separated_group > 1 then
parse_err(("Can't attach footnotes to 'var:' spec '%s'"):format(first_element))
end
base.var = first_element:match("^var:(.*)$")
elseif first_element:find(":") then
local colon_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*:%s*")
local first_element = colon_separated_groups[1][1]
if #colon_separated_groups[1] > 1 then
parse_err("Can't attach footnotes directly to '" .. first_element .. "' spec; attach them to the " ..
"colon-separated values following the initial colon")
end
if overridable_stems[first_element] then
if base.user_stems[first_element] then
parse_err("Overridable stem '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_stems[first_element] = overridable_stems[first_element](colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a basic override; we validate further later when the possible slots are available
if base.user_basic_overrides[first_element] then
parse_err("Basic override '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_basic_overrides[first_element] = allow_multiple_values_for_override(colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes},
"is form override")
end
else
parse_err("Unrecognized spec '" .. first_element .. "'")
end
end
return base
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, head)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original")
end
-- (2) Remove any links from the lemma, but remember the original form so we can use it below in the 'lemma_linked'
-- form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = head
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
local refl_verb = base.lemma
local verb, refl = rmatch(refl_verb, "^(.-)%-(se)$")
if not verb then
verb, refl = rmatch(refl_verb, "^(.-)('s)$")
end
if not verb then
verb, refl = refl_verb, nil
end
base.user_specified_verb = verb
base.refl = refl
base.verb = base.user_specified_verb
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
elseif base.refl then
-- Reconstruct the linked lemma with separate links around base verb, reflexive pronoun and clitic.
linked_lemma = base.user_specified_verb == base.verb and "[[" .. base.user_specified_verb .. "]]" or
"[[" .. base.verb .. "|" .. base.user_specified_verb .. "]]"
linked_lemma = linked_lemma .. (refl and "-[[" .. refl .. "]]" or "")
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve links in multiword
-- lemmas and include links in non-lemma forms rather than allowing the entire form to be a link.
linked_lemma = iut.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
local function detect_indicator_spec(base)
if (base.only3s and 1 or 0) + (base.only3sp and 1 or 0) + (base.only3p and 1 or 0) > 1 then
error("Only one of 'only3s', 'only3sp' and 'only3p' can be specified")
end
base.forms = {}
base.input_stems = {}
base.basic_overrides = {}
base.basic_reflexive_only_overrides = {}
base.orig_verb = base.verb -- in case of a 'like = "..."' redirect
if not base.no_built_in then
local function match_built_in_spec(verb, built_in_spec)
local prefix, non_prefixed_verb
if type(built_in_spec.match) == "function" then
prefix, non_prefixed_verb = built_in_spec.match(verb)
elseif built_in_spec.match:find("^%^") and rsub(built_in_spec.match, "^%^", "") == verb then
-- begins with ^, for exact match, and matches
prefix, non_prefixed_verb = "", verb
else
prefix, non_prefixed_verb = rmatch(verb, "^(.*)(" .. built_in_spec.match .. ")$")
end
return prefix, non_prefixed_verb
end
local function find_built_in(verb, var)
for _, built_in_spec in ipairs(built_in_conjugations) do
local prefix, non_prefixed_verb = match_built_in_spec(verb, built_in_spec)
if prefix then
if not built_in_spec.var then
if var then
error(("Can't specify a variant spec 'var:%s' with verb '%s'"):format(var, verb))
end
return prefix, non_prefixed_verb, built_in_spec
elseif not var then
local possible_vars = {}
for _, built_in_spec in ipairs(built_in_conjugations) do
local prefix, non_prefixed_verb = match_built_in_spec(verb, built_in_spec)
if prefix then
table.insert(possible_vars, built_in_spec.var)
end
end
error(("For verb '%s', must specify a variant using 'var:...'; possible values are %s"):format(
verb, table.concat(possible_vars, ", ")))
elseif built_in_spec.var == var then
return prefix, non_prefixed_verb, built_in_spec
end
end
end
return nil
end
local prefix, non_prefixed_verb, built_in_spec = find_built_in(base.verb, base.var)
if prefix then
-- we found a built-in verb
if built_in_spec.like then
-- we found a redirect to another verb that has the same conjugation, just a different infinitive
base.verb = prefix .. built_in_spec.like
local new_prefix, new_non_prefixed_verb, new_built_in_spec = find_built_in(base.verb, built_in_spec.likevar)
if new_prefix then
-- redirected to another built-in verb
base.prefix = new_prefix
base.non_prefixed_verb = new_non_prefixed_verb
built_in_spec = new_built_in_spec
else
built_in_spec = nil
end
else
base.prefix = prefix
base.non_prefixed_verb = non_prefixed_verb
end
end
if built_in_spec then
-- we found a built-in verb, possibly redirecting to another built-in verb
for stem, forms in pairs(built_in_spec.forms) do
if type(forms) == "function" then
forms = forms(base, base.prefix)
end
if stem:find("^refl_") then
stem = stem:gsub("^refl_", "")
if not base.alternant_multiword_spec.verb_slots_basic_map[stem] then
error("Internal error: setting for 'refl_" .. stem .. "' does not refer to a basic verb slot")
end
base.basic_reflexive_only_overrides[stem] = forms
elseif base.alternant_multiword_spec.verb_slots_basic_map[stem] then
-- an individual form override of a basic form
base.basic_overrides[stem] = forms
else
base.input_stems[stem] = forms
end
end
end
end
-- Override built-in-verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stems) do
base.input_stems[stem] = values
end
for override, values in pairs(base.user_basic_overrides) do
if not base.alternant_multiword_spec.verb_slots_basic_map[override] then
error("Unrecognized override '" .. override .. "': " .. base.angle_bracket_spec)
end
base.basic_overrides[override] = values
end
base.prefix = base.prefix or ""
base.non_prefixed_verb = base.non_prefixed_verb or base.verb
local inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)(re)$")
if not inf_stem then
inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)([aeiu]r)$")
end
if not inf_stem then
error("Unrecognized infinitive: " .. base.verb)
end
-- Remove accents from e.g. [[parèixer]], [[córrer]].
inf_stem = com.remove_accents(inf_stem)
-- Save full infinitive stem for use in future and conditional.
base.inf_stem = (inf_stem .. suffix):gsub("e$", "")
local stem = inf_stem
if suffix == "re" then
-- verbs in -ldre, -ndre have stem without the d
stem = stem:gsub("([ln])d$", "%1")
elseif suffix == "ur" then
stem = stem .. "u"
end
base.conj_vowel = (suffix == "re" or suffix == "ur") and "e" or suffix:gsub("r$", "")
-- If the stem is followed by a front vowel, convert it to its "back" form before calling combine_stem_ending(),
-- which expects the "back" form of the stem and may convert it back to the "front" form. Don't do this conversion
-- for ï so we leave [[arguïr]] (underlyingly 'argüïr') as 'argu' ("back" form), which becomes 'argü' ("front" form)
-- before front vowel ï and we end up with base.stem containing the underlying form 'argüï'. We remove the first of
-- two umlauts in a row in a postprocessing step (fix_double_umlauts()).
if rfind(suffix, "^[ei]") then
stem = com.front_to_back(stem)
end
-- Use combine_stem_ending() so we get ï if necessary.
base.stem = combine_stem_ending(base, stem, base.conj_vowel, false, "dont include prefix")
-- Propagate built-in-verb indicator flags to `base` and combine with user-specified flags.
for indicator_flag, _ in pairs(indicator_flags) do
base[indicator_flag] = base[indicator_flag] or base.input_stems[indicator_flag]
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
-- Propagate some settings up; some are used internally, others by [[Module:pt-headword]].
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Internal indicator flags. Do these before calling detect_indicator_spec() because add_slots() uses them.
for _, prop in ipairs { "refl", "clitic" } do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
base.alternant_multiword_spec = alternant_multiword_spec
end)
add_slots(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
detect_indicator_spec(base)
-- User-specified indicator flags. Do these after calling detect_indicator_spec() because the latter may set these
-- indicators for built-in verbs.
for prop, _ in pairs(indicator_flags) do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
end)
end
local function add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
local function insert_cat(cat, also_when_multiword)
-- Don't place multiword terms in categories like 'Catalan verbs ending in -ar' to avoid spamming the
-- categories with such terms.
if also_when_multiword or not multiword_lemma then
m_table.insertIfNot(alternant_multiword_spec.categories, "カタルーニャ語 " .. cat)
end
end
if check_for_red_links and alternant_multiword_spec.source_template == "ca-conj" and multiword_lemma then
for _, slot_and_accel in ipairs(alternant_multiword_spec.all_verb_slots) do
local slot = slot_and_accel[1]
local forms = base.forms[slot]
local must_break = false
if forms then
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
local title = mw.title.new(form.form)
if title and not title.exists then
insert_cat("活用表に赤リンクを含む動詞")
must_break = true
break
end
end
end
end
if must_break then
break
end
end
end
map_general(base.output_stems.stem, function(stem)
local stem_base, conj_vowel = split_conj_vowel(stem)
local need_no_eix_infix = true
if conj_vowel ~= base.conj_vowel then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#不規則動詞|混合活用]]")
elseif conj_vowel == "a" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第一変化動詞|第一変化]]")
insert_cat("第一変化動詞")
elseif conj_vowel == "e" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第二変化動詞|第二変化]]")
insert_cat("第二変化動詞")
elseif conj_vowel == "i" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第三変化動詞|第三変化]]")
insert_cat("第三変化動詞")
need_no_eix_infix = false
map_general(base.output_stems.eix_infix, function(form)
if form == "+" then
insert_ann("eix_infix", "接中辞-eix-有り")
insert_cat("-eix-を含む第三変化動詞")
elseif form == "-" then
insert_ann("eix_infix", "接中辞-eix-無し")
insert_cat("-eix-を含まない第三変化動詞")
end
end)
else
error(("Internal error: Stem '%s' doesn't end in conjugation vowel a/e/i and split_conj_vowel() didn't catch it"
):format(stem))
end
if need_no_eix_infix then
insert_ann("eix_infix", "接中辞無し")
end
end)
if base.input_stems.g_infix then
insert_ann("g_infix", "軟口蓋接中辞有り")
insert_cat("軟口蓋接中辞を含む動詞")
else
insert_ann("g_infix", "no infix")
end
if base.output_stems.irreg then
insert_ann("irreg", "不規則")
insert_cat("不規則動詞")
else
insert_ann("irreg", "regular")
end
if base.only3s then
insert_ann("defective", "非人称")
insert_cat("非人称動詞")
elseif base.only3sp then
insert_ann("defective", "第三人称のみ")
insert_cat("第三人称動詞")
elseif base.only3p then
insert_ann("defective", "第三人称複数のみ")
insert_cat("第三人称複数動詞")
elseif base.no_pres_stressed then
insert_ann("defective", "欠如")
insert_cat("欠如動詞")
else
insert_ann("defective", "規則動詞")
end
--if base.clitic then
-- insert_cat("verbs with lexical clitics")
--end
if base.refl then
insert_cat("再帰動詞")
end
local stem_base, conj_vowel = split_conj_vowel(base.stem)
local cons_alt
if conj_vowel == "i" and base.output_stems.eix_infix == "+" then
-- no alternations in verbs like [[afligir]] because all endings are front
elseif stem_base:find("ç$") then
cons_alt = "ç-c"
elseif stem_base:find("c$") then
cons_alt = "c-qu"
elseif stem_base:find("g$") then
cons_alt = "g-gu"
elseif stem_base:find("gu$") then
cons_alt = "gu-gü"
elseif stem_base:find("j$") then
cons_alt = "j-g"
elseif stem_base:find("qu$") then
cons_alt = "qu-qü"
end
if cons_alt then
local desc = cons_alt .. " alternation"
insert_ann("cons_alt", desc)
insert_cat(desc .. "交替の動詞")
else
insert_ann("cons_alt", "non-alternating")
end
end
-- Compute the categories to add the verb to, as well as the annotation to display in the
-- conjugation title bar. We combine the code to do these functions as both categories and
-- title bar contain similar information.
local function compute_categories_and_annotation(alternant_multiword_spec)
alternant_multiword_spec.categories = {}
local ann = {}
alternant_multiword_spec.annotation = ann
ann.conj = {}
ann.g_infix = {}
ann.eix_infix = {}
ann.irreg = {}
ann.defective = {}
ann.cons_alt = {}
local multiword_lemma = false
for _, form in ipairs(alternant_multiword_spec.forms.infinitive) do
if form.form:find(" ") then
multiword_lemma = true
break
end
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
end)
local ann_parts = {}
local conj = table.concat(ann.conj, " or ")
if conj ~= "" then
table.insert(ann_parts, conj)
end
local eix_infix = table.concat(ann.eix_infix, " or ")
if eix_infix ~= "" and eix_infix ~= "no infix" then
table.insert(ann_parts, eix_infix)
end
local irreg = table.concat(ann.irreg, " or ")
if irreg ~= "" and irreg ~= "regular" then
table.insert(ann_parts, irreg)
end
local g_infix = table.concat(ann.g_infix, " or ")
if g_infix ~= "" and g_infix ~= "no infix" then
table.insert(ann_parts, g_infix)
end
local defective = table.concat(ann.defective, " or ")
if defective ~= "" and defective ~= "regular" then
table.insert(ann_parts, defective)
end
local cons_alt = table.concat(ann.cons_alt, " or ")
if cons_alt ~= "" and cons_alt ~= "non-alternating" then
table.insert(ann_parts, cons_alt)
end
alternant_multiword_spec.annotation = table.concat(ann_parts, ", ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = alternant_multiword_spec.forms.infinitive
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec)
local function transform_accel_obj(slot, formobj, accel_obj)
-- No accelerators for negative imperatives, which are always multiword and derived directly from the
-- present subjunctive.
if slot:find("^neg_imp") then
return nil
end
if accel_obj then
accel_obj.form = "verb-form-" .. reconstructed_verb_spec
end
return accel_obj
end
local props = {
lang = lang,
lemmas = lemmas,
transform_accel_obj = transform_accel_obj,
slot_list = alternant_multiword_spec.verb_slots_basic,
}
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote
end
local notes_template = [=[
<div class="roa-footnote-outer-div" style="width:100%;">
<div class="roa-footnote-inner-div">
{footnote}
</div></div>
]=]
local basic_table = [=[
{description}<div class="NavFrame">
<div class="NavHead"> {title} の活用</div>
<div class="NavContent">
{\op}| class="roa-inflection-table" data-toggle-category="inflection"
|-
! colspan="3" class="roa-nonfinite-header" | <span title="infinitiu">不定詞</span>
| colspan="5" | {infinitive}
|-
! colspan="3" class="roa-nonfinite-header" | <span title="gerundi">現在分詞</span>
| colspan="5" | {gerund}
|-
! rowspan="3" colspan="2" class="roa-nonfinite-header" | <span title="participi passat">過去分詞</span>
| colspan="2" class="roa-nonfinite-header" |
! colspan="2" class="roa-nonfinite-header" | 男性
! colspan="2" class="roa-nonfinite-header" | 女性
|-
! colspan="2" class="roa-nonfinite-header" | 単数
| colspan="2" | {pp_ms}
| colspan="2" | {pp_fs}
|-
! colspan="2" class="roa-nonfinite-header" | 複数
| colspan="2" | {pp_mp}
| colspan="2" | {pp_fp}
|-
! colspan="2" rowspan="2" class="roa-person-number-header" | 人称
! colspan="3" class="roa-person-number-header" | 単数
! colspan="3" class="roa-person-number-header" | 複数
|-
! class="roa-person-number-header" style="width:12.5%;" | 第一人称
! class="roa-person-number-header" style="width:12.5%;" | 第二人称
! class="roa-person-number-header" style="width:12.5%;" | 第三人称
! class="roa-person-number-header" style="width:12.5%;" | 第一人称
! class="roa-person-number-header" style="width:12.5%;" | 第二人称
! class="roa-person-number-header" style="width:12.5%;" | 第三人称
|-
! rowspan="6" class="roa-indicative-left-rail" | <span title="indicatiu">直説法</span>
! class="roa-indicative-left-rail" |
! class="roa-indicative-left-rail" | <<jo>>
! class="roa-indicative-left-rail" | <<tu>>
! class="roa-indicative-left-rail" | <<ell>>/<<ella>><br /><<vostè>>
! class="roa-indicative-left-rail" | <<nosaltres>><br /><<nós>>
! class="roa-indicative-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-indicative-left-rail" | <<ells>>/<<elles>><br /><<vostès>>
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="present">現在</span>
| {pres_1s}
| {pres_2s}
| {pres_3s}
| {pres_1p}
| {pres_2p}
| {pres_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="imperfet">不完了過去</span>
| {impf_1s}
| {impf_2s}
| {impf_3s}
| {impf_1p}
| {impf_2p}
| {impf_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="futur">未来</span>
| {fut_1s}
| {fut_2s}
| {fut_3s}
| {fut_1p}
| {fut_2p}
| {fut_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="passat">完了過去</span>
| {pret_1s}
| {pret_2s}
| {pret_3s}
| {pret_1p}
| {pret_2p}
| {pret_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="condicional">可能法</span>
| {cond_1s}
| {cond_2s}
| {cond_3s}
| {cond_1p}
| {cond_2p}
| {cond_3p}
|-
! class="roa-subjunctive-left-rail" rowspan="3" | <span title="subjuntiu">接続法</span>
! class="roa-subjunctive-left-rail" |
! class="roa-subjunctive-left-rail" | <<jo>>
! class="roa-subjunctive-left-rail" | <<tu>>
! class="roa-subjunctive-left-rail" | <<ell>>/<<ella>><br /><<vostè>>
! class="roa-subjunctive-left-rail" | <<nosaltres>><br /><<nós>>
! class="roa-subjunctive-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-subjunctive-left-rail" | <<ells>>/<<elles>><br /><<vostès>>
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | <span title="present">現在</span>
| {pres_sub_1s}
| {pres_sub_2s}
| {pres_sub_3s}
| {pres_sub_1p}
| {pres_sub_2p}
| {pres_sub_3p}
|-
! class="roa-subjunctive-left-rail" style="height:3em;" rowspan="1" | <span title="imperfet">過去</span>
| {impf_sub_1s}
| {impf_sub_2s}
| {impf_sub_3s}
| {impf_sub_1p}
| {impf_sub_2p}
| {impf_sub_3p}
|-
! rowspan="3" class="roa-imperative-left-rail" style="height:3em;" | <span title="imperatiu">命令法</span>
! class="roa-imperative-left-rail" |
! class="roa-imperative-left-rail" | —
! class="roa-imperative-left-rail" | <<tu>>
! class="roa-imperative-left-rail" | <<vostè>>
! class="roa-imperative-left-rail" | <<nosaltres>>
! class="roa-imperative-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-imperative-left-rail" | <<vostès>>
|-
! class="roa-imperative-left-rail" style="height:3em;" | <span title="afirmatiu">-</span>
| —
| {imp_2s}
| {imp_3s}
| {imp_1p}
| {imp_2p}
| {imp_3p}
|-
! class="roa-imperative-left-rail" style="height:3em;" | <span title="negatiu">禁止</span> (<<no>>)
| —
| {neg_imp_2s}
| {neg_imp_3s}
| {neg_imp_1p}
| {neg_imp_2p}
| {neg_imp_3p}
|{\cl}{notes_clause}</div></div>]=]
local function make_table(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
forms.title = link_term(alternant_multiword_spec.lemmas[1].form, nil, "term")
local ann_parts = {}
if alternant_multiword_spec.annotation ~= "" then
table.insert(ann_parts, alternant_multiword_spec.annotation)
end
if alternant_multiword_spec.args.titlenote then
table.insert(ann_parts, alternant_multiword_spec.args.titlenote)
end
local annotation = table.concat(ann_parts, ", ")
if annotation ~= "" then
forms.title = forms.title .. " (" .. annotation .. ")"
end
forms.description = ""
-- Format the table.
forms.footnote = alternant_multiword_spec.footnote_basic
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
local table_with_pronouns = rsub(basic_table, "<<([^<>|]-)|([^<>|]-)>>", link_term)
local table_with_pronouns = rsub(table_with_pronouns, "<<(.-)>>", link_term)
return require("Module:TemplateStyles")("Module:roa-verb/style.css") ..
m_string_utilities.format(table_with_pronouns, forms)
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head)
local PAGENAME = mw.loadData("Module:headword/data").pagename
local function in_template_space()
return mw.title.getCurrentTitle().nsText == "テンプレート"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the
-- current page title or the value of |pagename=; but not when called from {{ca-verb form of}}, where the
-- page title is a non-lemma form. Note that the verb spec may omit the infinitive; e.g. it may be "<i-e>".
-- For this reason, we use the value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "ca-verb form of" and args.pagename or PAGENAME
local head = headword_head or pagename
local arg1 = args[1]
if not arg1 then
if (pagename == "ca-conj" or pagename == "ca-verb" or pagename == "ca-verb form of") and in_template_space() then
arg1 = "amar<>"
else
arg1 = "<>"
end
end
-- When called from {{ca-verb form of}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "ca-verb form of" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "ca-verb form of" and in_template_space() then
verb_form_of_form = "ami"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local refl_clitic_verb, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(refl_clitic_verb, "[^%[]", "")
local right_brackets = rsub(refl_clitic_verb, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(refl_clitic_verb) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
refl_clitic_verb, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = refl_clitic_verb .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local function split_bracketed_runs_into_words(bracketed_runs)
return put.split_alternating_runs(bracketed_runs, " ", "preserve splitchar")
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
-- Split words only on spaces, not on hyphens, because that messes up reflexive verb parsing.
split_bracketed_runs_into_words = split_bracketed_runs_into_words,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
normalize_all_lemmas(alternant_multiword_spec, head)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
slot_list = alternant_multiword_spec.all_verb_slots,
inflect_word_spec = conjugate_verb,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = iut.remove_redundant_links(form.form)
end
end
compute_categories_and_annotation(alternant_multiword_spec)
if args.json and source_template == "ca-conj" then
return require("Module:JSON").toJSON(alternant_multiword_spec.forms)
end
return alternant_multiword_spec
end
-- Entry point for {{ca-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent().args
local params = {
[1] = {},
["titlenote"] = {},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
}
local args = require("Module:parameters").process(parent_args, params)
local alternant_multiword_spec = export.do_generate_forms(args, "ca-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) ..
require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang, nil, nil, force_cat)
end
return export
8t3cg5alvmvtssqspxbmpq0xy0dfqca
2313420
2313418
2026-08-09T09:41:26Z
Kuroco2k
84207
2313420
Scribunto
text/plain
--[=[
This module implements {{ca-conj}} and provides the underlying conjugation functions for {{ca-verb}}
(whose actual formatting is done in [[Module:ca-headword]]).
Authorship: Ben Wing <benwing2>
]=]
local export = {}
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "pres_1s" (present indicative first-person singular), "pres_sub_2s" (present
subjunctive second-person singular) "impf_sub_3p" (imperfect subjunctive third-person plural).
Each slot is filled with zero or more forms.
-- "form" = The conjugated Catalan form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Catalan term. For Catalan, always the infinitive.
]=]
--[=[
FIXME:
--]=]
local lang = require("Module:languages").getByCode("ca")
local m_string_utilities = require("Module:string utilities")
local m_links = require("Module:links")
local m_table = require("Module:table")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local com = require("Module:ca-common")
local force_cat = false -- set to true for debugging
local check_for_red_links = false -- set to false for debugging
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local rsubn = mw.ustring.gsub
local rsub = com.rsub
local u = mw.ustring.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
-- version of rsubn() that returns a 2nd argument boolean indicating whether a substitution was made.
local function rsubb(term, foo, bar)
local retval, nsubs = rsubn(term, foo, bar)
return retval, nsubs > 0
end
local function link_term(term, display, face)
return m_links.full_link({ lang = lang, term = term, alt = display }, face)
end
local front_vowel = "eèéiíï"
local front_vowel_c = "[" .. front_vowel .. "]"
local V = com.V -- vowel regex class
local C = com.C -- consonant regex class
-- IS_USER_STEM_OVERRIDE is prepended to user-supplied stem overrides to prevent `base.prefix` from being prepended.
-- IS_USER_FORM_OVERRIDE is similar but also prevents final devoicing (cf. Balearic pres_1s 'trob' of [[trobar]]).
-- Don't use 0xFFF0 in case we call a [[Module:parse-utilities]] function that uses it temporarily.
local IS_USER_STEM_OVERRIDE = u(0xFFF1)
local IS_USER_FORM_OVERRIDE = u(0xFFF2)
--[=[
Irregular verbs:
-ldre/-ndre verbs:
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
caldre - cal [calent] calia caldrà calgué calgui - calgut,-
coldre colc col colem colia coldré colguí colgui colguem colt,colta
doldre dolc dol dolem dolia doldré dolguí dolgui dolguem dolgut,dolguda
moldre molc mol molem molia moldré molguí molgui molguem molt,molta
oldre olc ol olem olia oldré olguí olgui olguem olgut,olguda
-soldre -solc -sol -solem -solia -soldré -solguí -solgui -solguem -solt,-solta
(absoldre, dissoldre, resoldre)
toldre tolc tol tolem tolia toldré tolguí tolgui tolguem tolt,tolta
romandre romanc roman romanem romania romandré romanguí romangui romanguem romàs,romasa,romasos
encendre encenc encén encenem encenia encendré encenguí encengui encenguem encès,encesa,encesos
fendre fenc fen/-fèn fenem fenia fendré fenguí fengui fenguem fes/-fès,fesa,fesos
(defendre, ofendre)
-pendre -depenc -pèn -penem -penia -pendré -penguí -pengui -penguem -pès,-pesa,-pesos
(dependre,despendre,expendre,suspendre)
prendre prenc pren/-prèn prenem prenia prendré prenguí prengui prenguem pres/-près,presa,presos
(aprendre, comprendre, desprendre, emprendre, reprendre, sorprendre)
-tendre -tenc -tén -tenem -tenia -tendré -tenguí -tengui -tenguem -tès,-tesa,-tesos
(pres2s: atens, pres3p: atenen)
(atendre, contendre, distendre, entendre, estendre, pretendre)
vendre venc ven venem venia vendré venguí vengui venguem venut,venuda
(malvendre, revendre)
fondre fonc fon fonem fonia fondré fonguí fongui fonguem fos/-fós,fosa,fosos
(confondre, difondre, infondre, refondre)
enfondre enfonc enfon enfonem enfonia enfondré enfonguí enfongui enfonguem enfús,enfusa,enfusos
pondre ponc pon ponem ponia pondré ponguí pongui ponguem post,posta,postos
(compondre, correspondre, descompondre, respondre)
tondre tonc ton tonem tonia tondré tonguí tongui tonguem tos,tosa,tosos
cerndre cerno cern cernem cernia cerndré cerní cerni cernem cernut,cernuda
-ler verbs (mostly like -ldre verbs):
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
caler (var. of caldre)
doler (var. of doldre)
soler solc sol solem solia soldré solguí solgui solguem solgut,solguda
valer/valdre valc val valem valia valdré valguí valgui valguem valgut,valguda
(prevaler, equivaler)
other -dre/-tre verbs (regular except sometimes pp):
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
batre bato bat batem batia batré batí bati batem batut,batuda
-metre -meto -met -metem -metia -metré -metí -meti -metem -mès,-mesa,-mesos
(ad-, co-, compro-, e-, entremetre's, mal-, o-, per-, pro-, read-, re-, retrans-, sot-, tra-, trans-)
perdre perdo perd perdem perdia perdré perdí perdi perdem perdut,perduda
-ure verbs
infinitive pres1s pres3s pres1p impf1s impf1p fut1s pret1s sub1s sub1p pp
caure caic cau caiem queia quèiem cauré caiguí caigui caiguem caigut,caiguda
(decaure, recaure)
plaure plac plau plaem plaïa plaíem plauré plaguí plagui plaguem plagut,plaguda
(complaure)
raure rac rau raem raïa raíem rauré raguí ragui raguem ragut,raguda
beure bec beu bevem bevia bevíem beuré beguí begui beguem begut,beguda
(embeure)
creure crec creu creiem creia crèiem creuré creguí cregui creguem cregut,creguda
deure dec deu devem devia devíem deuré deguí degui deguem degut,deguda
jeure jec jeu jaiem jeia jèiem jauré jaguí jegui jaguem jagut,jaguda
(ajeure)
lleure - lleu [-] llevia - lleurà llegué llegui - llegut,-
seure sec seu seiem seia sèiem seuré seguí segui seguem segut,seguda
(asseure)
treure trec treu traiem treia trèiem trauré traguí tregui traguem tret,treta
(abstreure, atreure, contreure, distreure, extreure, retreure, sostreure)
veure veig veu veiem veia vèiem veuré viu,veieres/veres, vegi vegem vist,vista,vists/vistos
(entreveure, preveure, reveure) veié/veu,veiérem/vérem
riure ric riu riem reia rèiem riuré riguí rigui riguem rigut,riguda
(somriure)
(e)scriure escric escriu escrivim escrivia escrivíem escriuré escriví/escriguí escrigui escriguem escrit,escrita
(circumscriure, descriure, inscriure, prescriure, proscriure, subscriure, transcriure)
viure visc viu vivim vivia vivíem viuré visquí visqui visquem viscut,viscuda
(conviure, sobreviure)
cloure cloc clou cloem cloïa cloíem clouré cloguí clogui cloguem clos,closa,closos
(concloure, descloure, encloure, excloure, incloure, recloure)
encloure encloc enclou encloem encloïa encloíem enclouré encloguí enclogui encloguem enclòs,enclosa,enclosos
coure coc cou coem coïa coíem couré coguí cogui coguem cuit/cogut,cuita/coguda
moure moc mou movem movia movíem mouré moguí mogui moguem mogut,moguda
(promoure)
noure noc nou noem noïa noíem nouré noguí nogui noguem nogut,noguda
ploure - plou [plovent] plovia - plourà plogué plogui - plogut,ploguda
-nyer verbs (regular except pp)
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
atènyer atenyo ateny atenyem atenyia atenyeré atenyí atenyi atenyem atès,atesa,atesos
empènyer empenyo empeny empenyem empenyia empenyeré empenyí empenyi empenyem empès,empesa,empesos
estrènyer estrenyo estreny estrenyem estrenyia estrenyeré estrenyí estrenyi estrenyem estret,estreta
estrènyer
(constrènyer,restrènyer)
fènyer fenyo feny fenyem fenyia fenyeré fenyí/fenguí fenyi fenyem fenyut/fengut,fenyuda/fenguda
pertànyer pertanyo pertany pertanyem pertanyia pertanyeré pertanyí/pertanguí pertanyi pertanyem pertanyut/pertangut,pertanyuda/pertanguda
plànyer planyo plany planyem planyia planyeré planyí/planguí planyi planyem plangut/planyut,planguda/planyuda
-xer verbs (NOTE: pres2s in -xes)
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
créixer creixo creix creixem creixia creixeré creixí/cresquí creixi creixem crescut,crescuda
(acréixer,decréixer)
conèixer conec coneix coneixem coneixia coneixeré coneguí conegui coneguem conegut,coneguda
(desconèixer,reconèixer)
merèixer mereixo mereix mereixem mereixia mereixeré mereixí/meresquí mereixi mereixem merescut,merescuda
néixer/ neixo/ neix/ naixem naixia naixeré naixí/nasquí neixi/ naixem/nasquem nascut,nascuda
nàixer naixo naix naixi
(renéixer)
parèixer parec pareix pareixem pareixia pareixeré pareguí paregui pareguem paregut,pareguda
(aparèixer,comparèixer,desaparèixer,reaparèixer)
péixer peixo peix paixem paixia paixeré paixí peixi paixem pascut,pascuda
misc. -er verbs
infinitive pres1s pres3s pres1p impf1s impf1p fut1s pret1s sub1s sub1p pp
córrer corro corre correm corria corríem correré correguí corri correm corregut,correguda
fúmer fumo fum fumem fumia fumíem fumeré fumí fumi fumem fumut,fumuda
prémer premo prem premem premia premíem premeré premí premi premem premut,premuda
(es-, re-)
témer temo tem temem temia temíem temeré temí temi temem temut,temuda
trémer [regular]
tòrcer torço torç torcem torcia torcíem torceré torcí torci torcem torçut,torçuda
(des-) [pres2s torces]
vèncer venço venç vencem vencia vencíem venceré vencí venci vencem vençut,vençuda
(con-, re-) [pres2s vences]
cabre/caber cabo cap cabem cabia cabíem cabré cabí càpiga capiguem cabut,cabuda
[sub2s càpigues]
haver he/haig ha havem/hem havia havíem hauré haguí hagi hàgim/haguem hagut,haguda
[noimp] [cond1s hauria/haguera; impsub2s haguessis/haguesses]
poder puc pot podem podia podíem podré poguí pugui puguem pogut,poguda
saber sé sap sabem sabia sabíem sabré sabí sàpiga sapiguem sabut,sabuda
[imp2s sàpigues, imp2p sapigueu]
voler vull vol volem volia volíem voldré volguí vulgui vulguem volgut,volguda
ser/ésser soc és som era érem seré fui sigui siguem estat/sigut,estada/siguda
[ger sent/essent] [cond1s seria/fora]
[pres: soc,ets,éts,som,sou,són; pret: fui,fores,fou,fórem,fóreu,foren; impsub: fos,fossis,fos,fóssim,fóssiu,fossin]
[imp: sigues,sigueu]
fer faig fa fem feia fèiem faré fiu faci fem fet,feta
[pres3p fan]
[pret: fiu,feres,feu,férem,féreu,feren]
]=]
local all_persons_numbers = {
["1s"] = "1|s",
["2s"] = "2|s",
["3s"] = "3|s",
["1p"] = "1|p",
["2p"] = "2|p",
["3p"] = "3|p",
}
local person_number_list = {"1s", "2s", "3s", "1p", "2p", "3p"}
local imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
local neg_imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
proclitic_non_elided_person_number_to_reflexive_pronoun = {
["1s"] = "em ",
["2s"] = "et ",
["3s"] = "es ",
["1p"] = "ens ",
["2p"] = "us ",
["3p"] = "es ",
}
proclitic_elided_person_number_to_reflexive_pronoun = {
["1s"] = "m'",
["2s"] = "t'",
["3s"] = "s'",
["1p"] = "ens ",
["2p"] = "us ",
["3p"] = "s'",
}
enclitic_non_elided_person_number_to_reflexive_pronoun = {
["1s"] = "-me",
["2s"] = "-te",
["3s"] = "-se",
["1p"] = "-nos",
["2p"] = "-vos",
["3p"] = "-se",
}
enclitic_elided_person_number_to_reflexive_pronoun = {
["1s"] = "'m",
["2s"] = "'t",
["3s"] = "'s",
["1p"] = "'ns",
["2p"] = "-us",
["3p"] = "'s",
}
local indicator_flags = m_table.listToSet {
"no_pres_stressed",
"only3s", "only3sp", "only3p", "noimp",
"pp_inv", "irreg", "no_built_in",
}
-- Initialize all the slots for which we generate forms.
local function add_slots(alternant_multiword_spec)
-- "Basic" slots: All slots that go into the regular table (not the reflexive form-of table).
alternant_multiword_spec.verb_slots_basic = {
{"infinitive", "inf"},
{"infinitive_linked", "inf"},
{"gerund", "ger"},
{"pp_ms", "m|s|past|part"},
{"pp_fs", "f|s|past|part"},
{"pp_mp", "m|p|past|part"},
{"pp_fp", "f|p|past|part"},
}
-- Special slots used to handle non-reflexive parts of reflexive verbs in {{ca-verb form of}}. For example, for a
-- reflexive-only verb like [[arrepentirse]], we want to be able to use {{ca-verb form of}} on [[arrepinta]] (which
-- should mention that it is a part of 'me arrepinta', first-person singular present subjunctive, and
-- 'se arrepinta', third-person singular present subjunctive) or on [[arrepentimos]] (which should mention that it
-- is a part of 'arrepentímonos', first-person plural present indicative or preterite). Similarly, we want to use
-- {{ca-verb form of}} on [[arrepentindo]] (which should mention that it is a part of 'se ... arrepentindo',
-- syntactic variant of [[arrepentíndose]], which is the gerund of [[arrepentirse]]). To do this, we need to be
-- able to map non-reflexive parts like [[arrepinta]], [[arrepentimos]], [[arrepentindo]], etc. to their reflexive
-- equivalent(s), to the tag(s) of the equivalent(s), and, in the case of forms like [[arrepentindo]],
-- [[arrepentir]] and imperatives, to the separated syntactic variant of the verb+clitic combination. We do this by
-- creating slots for the non-reflexive part equivalent of each basic reflexive slot, and for the separated
-- syntactic-variant equivalent of each basic reflexive slot that is formed of verb+clitic. We use slots in this
-- way to deal with multiword lemmas. Note that we run into difficulties mapping between reflexive verbs,
-- non-reflexive part equivalents, and separated syntactic variants if a slot contains more than one form. To
-- handle this, if there are the same number of forms in two slots we're trying to match up, we assume the forms
-- match one-to-one; otherwise we don't match up the two slots (which means {{ca-verb form of}} won't work in this
-- case, but such a case is extremely rare and not worth worrying about). Alternatives that handle this "properly"
-- are significantly more complicated and require non-trivial modifications to [[Module:inflection utilities]].
local need_special_verb_form_of_slots = alternant_multiword_spec.source_template == "ca-verb form of" and
alternant_multiword_spec.refl
if need_special_verb_form_of_slots then
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {
{"infinitive_non_reflexive", "-"},
{"infinitive_variant", "-"},
{"gerund_non_reflexive", "-"},
{"gerund_variant", "-"},
}
else
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {}
end
-- Add entries for a slot with person/number variants.
-- `verb_slots` is the table to add to.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(verb_slots, slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local slot = slot_prefix .. "_" .. persnum
local accel = tag_suffix .. "|" .. persnum_tag
table.insert(verb_slots, {slot, accel})
end
end
-- Add a personal slot (i.e. a slot with person/number variants) to `verb_slots_basic`.
local function add_basic_personal_slot(slot_prefix, tag_suffix, person_number_list, no_special_verb_form_of_slot)
add_personal_slot(alternant_multiword_spec.verb_slots_basic, slot_prefix, tag_suffix, person_number_list)
-- Add special slots for handling non-reflexive parts of reflexive verbs in {{ca-verb form of}}.
-- See comment above in `need_special_verb_form_of_slots`.
if need_special_verb_form_of_slots and not no_special_verb_form_of_slot then
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local basic_slot = slot_prefix .. "_" .. persnum
local accel = tag_suffix .. "|" .. persnum_tag
table.insert(alternant_multiword_spec.verb_slots_reflexive_verb_form_of, {basic_slot .. "_non_reflexive", "-"})
end
end
end
add_basic_personal_slot("pres", "直説法|現在", person_number_list)
add_basic_personal_slot("impf", "直説法|不完全過去", person_number_list)
add_basic_personal_slot("pret", "直説法|完全過去", person_number_list)
add_basic_personal_slot("fut", "直説法|未来", person_number_list)
add_basic_personal_slot("cond", "可能法", person_number_list)
add_basic_personal_slot("pres_sub", "接続法|現在", person_number_list)
add_basic_personal_slot("impf_sub", "接続法|過去", person_number_list)
add_basic_personal_slot("imp", "命令法", imp_person_number_list)
-- Don't need special non-reflexive-part slots because the negative imperative is multiword, of which the
-- individual words are 'no' + subjunctive.
add_basic_personal_slot("neg_imp", "命令法|禁止", neg_imp_person_number_list, "no special verb form of")
-- Don't need special non-reflexive-part slots because we don't want [[arrependendo]] mapping to [[arrependendo-me]]
-- (only [[arrependendo-se]]) or [[arrepender]] mapping to [[arrepender-me]] (only [[arrepender-se]]).
add_basic_personal_slot("infinitive", "inf", person_number_list, "no special verb form of")
add_basic_personal_slot("gerund", "ger", person_number_list, "no special verb form of")
-- Generate the list of all slots.
alternant_multiword_spec.all_verb_slots = {}
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_basic) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_reflexive_verb_form_of) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
alternant_multiword_spec.verb_slots_basic_map = {}
for _, slotaccel in ipairs(alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
alternant_multiword_spec.verb_slots_basic_map[slot] = accel
end
end
local overridable_stems = {}
local function allow_multiple_values_for_override(separated_groups, data, is_form_override)
local retvals = {}
for _, separated_group in ipairs(separated_groups) do
local footnotes = data.fetch_footnotes(separated_group)
local form = separated_group[1]
-- Prepend marker to prevent prefixing with `base.prefix`, and (in the case of form overrides) prevent
-- final devoicing.
if is_form_override then
form = IS_USER_FORM_OVERRIDE .. form
else
form = IS_USER_STEM_OVERRIDE .. form
end
local retval = {form = form, footnotes = footnotes}
table.insert(retvals, retval)
end
return retvals
end
for _, overridable_stem in ipairs {
"stem",
"stressed_stem",
"unstressed_stem",
"pres_unstressed",
"pres_stressed",
"pres3s", -- overrides just pres_2s and pres_3s
-- Don't include pres1s, pres3p; use pres_1s etc. if you need to override just those forms
"impf1",
"impf2",
"pret",
"fut",
"cond",
"pres_sub_stressed",
"pres_sub_unstressed",
"impf_sub",
"pp",
"g_infix",
"eix_infix",
} do
-- Written so we can substitute a different validator; parallel code in [[Module:es-verb]] and [[Module:pt-verb]]
-- has simple_choice validators.
overridable_stems[overridable_stem] = allow_multiple_values_for_override
end
-- Useful as the value of the `match` property of a built-in verb. `main_verb_spec` is a Lua pattern that should match
-- the non-prefixed part of a verb, and `prefix_specs` is a list of Lua patterns that should match the prefixed part of
-- a verb. If a prefix spec is preceded by ^, it must match exactly at the beginning of the verb; otherwise, additional
-- prefixes (e.g. re-, des-) may precede. Return the prefix and main verb.
local function match_against_verbs(main_verb_spec, prefix_specs)
return function(verb)
for _, prefix_spec in ipairs(prefix_specs) do
if prefix_spec:find("^%^") then
-- must match exactly
prefix_spec = prefix_spec:gsub("^%^", "")
if prefix_spec == "" then
-- We can't use the second branch of the if-else statement because an empty () returns the current position
-- in rmatch().
local main_verb = rmatch(verb, "^(" .. main_verb_spec .. ")$")
if main_verb then
return "", main_verb
end
else
local prefix, main_verb = rmatch(verb, "^(" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
else
local prefix, main_verb = rmatch(verb, "^(.*" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
end
return nil
end
end
--[=[
Built-in (usually irregular) conjugations.
Each entry is processed in turn and consists of an object with two fields:
1. match=: Specifies the built-in verbs that match this object.
2. forms=: Specifies the built-in stems and forms for these verbs.
The value of match= is either a string beginning with "^" (match only the specified verb), a string not beginning
with "^" (match any verb ending in that string), or a function that is passed in the verb and should return the prefix
of the verb if it matches, otherwise nil. The function match_against_verbs() is provided to facilitate matching a set
of verbs with a common ending and specific prefixes (e.g. [[ter]] and [[ater]] but not [[abater]], etc.).
The value of forms= is a table specifying stems and individual override forms. Each key of the table names either a
stem (e.g. `pres_stressed`), a stem property (e.g. `g_infix`) or an individual override form (e.g. `pres_1s`).
Each value of a stem can either be a string (a single stem), a list of strings, or a list of objects of the form
{form = STEM, footnotes = {FOONOTES}}. Each value of an individual override should be of exactly the same form except
that the strings specify full forms rather than stems. The values of a stem property depend on the specific property
but are generally strings or booleans.
In order to understand how the stem specifications work, it's important to understand the phonetic modifications done
by combine_stem_ending(). In general, the complexities of predictable prefix, stem and ending modifications are all
handled in this function. In particular:
1. Spelling-based modifications (c/qu, ç/c, g/gu, j/g, gu/gü, qu/qü) occur automatically as appropriate for the ending.
2. If the ending begins with an asterisk, this is a signal to delete the accent on the last syllable of the stem, e.g.
veié -> veierem.
3. If ending begins with i, it may turn into í or ï after an unstressed vowel (in some but not all cases) to prevent the
two merging into a diphthong. See combine_stem_ending() for specifics.
The following stems are recognized [FIXME: This is not correct for Catalan, needs rewriting]:
-- pres_unstressed: The present indicative unstressed stem (1p, 2p). Also controls the imperative 2p
and gerund. Defaults to the infinitive stem (minus the ending -ar/-er/-ir/-or).
-- pres_stressed: The present indicative stressed stem (1s, 2s, 3s, 3p). Also controls the imperative 2s.
Default is empty if indicator `no_pres_stressed`, else a vowel alternation if such an indicator is given
(e.g. `ue`, `ì`), else the infinitive stem.
-- pres1: Special stem for 1s present indicative. Normally, do not set this explicitly. If you need to specify an
irregular 1s present indicative, use the form override pres_1s= to specify the entire form. Defaults to
pres_stressed.
-- pres_sub_unstressed: The present subjunctive unstressed stem (1p, 2p). Defaults to the infinitive stem.
-- pres_sub_stressed: The present subjunctive stressed stem (1s, 2s, 3s, 1p). Defaults to pres1.
-- impf: The imperfect stem (not including the -av-/-i- stem suffix, which is determined by the conjugation). Defaults
to the infinitive stem.
-- pret: The full preterite stem missing only the endings (-ste, -mos, etc.), e.g. 'fige', 'fo'. Only used for verbs
with irregular preterites (pret_conj == "irreg") such as [[facer]], [[poder]], [[traer]], etc. Defaults to
`pret_base` + the conjugation vowel.
-- fut: The future stem. Defaults to the infinitive stem + the conjugation vowel.
-- cond: The conditional stem. Defaults to `fut`.
-- impf_sub: The imperfect subjunctive stem. Defaults to `pret`.
-- pp: The masculine singular past participle. Default is based on the verb conjugation: infinitive stem + '-ado' for
-ar verbs, otherwise infinitive stem + '-ido'.
-- pp_inv: `true` if the past participle exists only in the masculine singular.
]=]
local built_in_conjugations = {
--------------------------------------------------------------------------------------------
-- -ar --
--------------------------------------------------------------------------------------------
-- Orthographic consonant alternations in endings are handled automatically in combine_stem_ending().
{
-- [[aguar]]:
-- pres agúo, agúes, agúa, agüem, agüeu, agúen
-- pres_sub aguï, aguïs, aguï, agüem, agüeu, aguïn
-- contrast a more typical verb in -guar, [[enaiguar]]:
-- pres enaiguo, enaigües, enaigua, enaigüem, enaigüeu, enaigüen
-- pres_sub enaigüi, enaigüis, enaigüi, enaigüem, enaigüeu, enaigüin
match = "^aguar",
forms = {
pres_stressed = "agú",
pres_sub_stressed = "aguï",
irreg = true,
}
},
{
-- [[anar]] (full verb); highly irregular
match = "^anar",
var = "full",
forms = {
fut = "anir",
pres_1s = "vaj", -- will be converted to 'vaig'; 'vaig' gets converted to 'vaic'
pres_2s = "vas",
pres_3s = "va",
pres_3p = "van",
pres_sub_stressed = "vagi",
imp_2s = "ves",
irreg = true,
}
},
{
-- [[anar]] (auxiliary); highly irregular
match = "^anar",
var = "aux",
forms = {
pres_1s = "vaj", -- will be converted to 'vaig'; 'vaig' gets converted to 'vaic'
pres_2s = {"vas", "vares"},
pres_3s = "va",
pres_1p = {"vam", "vàrem"},
pres_2p = {"vau", "vàreu"},
pres_3p = {"van", "varen"},
pres_sub_stressed = "vagi",
pres_sub_unstressed = "vàgi",
impf1 = {},
impf2 = {},
fut = {},
pret = {},
pp = {},
gerund = {},
noimp = true,
irreg = true,
}
},
{
-- [[dar]]
match = "^dar",
forms = {
pres_1s = {form = "do", footnotes = {"[obsolete]"}},
pres_2s = {form = "das", footnotes = {"[obsolete]"}},
pres_3s = {form = "da", footnotes = {"[obsolete]"}},
pres_3p = {form = "dan", footnotes = {"[obsolete]"}},
pres_sub_1s = {form = "de", footnotes = {"[obsolete]"}},
pres_sub_2s = {form = "des", footnotes = {"[obsolete]"}},
pres_sub_3s = {form = "de", footnotes = {"[obsolete]"}},
pres_sub_3p = {form = "den", footnotes = {"[obsolete]"}},
pret_1s = "di", -- regular except for lack of accent
pret_3s = "da", -- regular except for lack of accent
impf_sub_1s = "des", -- regular except for lack of accent
impf_sub_3s = "des", -- regular except for lack of accent
irreg = true,
}
},
{
-- [[estar]]; highly irregular
match = "^estar",
forms = {
pres_2s = "estàs",
pres_3s = "està",
pres_3p = "estan",
g_infix = "estig",
imp_2s = "estigues",
imp_2p = "estigueu",
pp = "estad",
}
},
--------------------------------------------------------------------------------------------
-- -er/-re --
--------------------------------------------------------------------------------------------
-- Regular verbs not needing entries here:
--
-- [[rebre]], [[concebre]], [[decebre]], [[percebre]]
-- [[rompre]]
-- [[fúmer]], [[prémer]], [[témer]], [[trémer]]
-- [[perdre]], [[batre]], [[botre]], [[fotre]], [[retre]]
-- [[tòrcer]], [[vèncer]]
-- etc.
------------------------------------------- -ldre/-ler/-lre --------------------------------------
{
-- [[caldre]], [[doldre]], [[condoldre's]], [[oldre]]
match = match_against_verbs("ldre", {"ca", "do", "^o"}),
forms = {
-- g_infix implies irreg = true
-- g_infix adds -g to pres_1s, sub, pret and pp stems; combine_stem_ending() changes final -g to -c
g_infix = "+",
}
},
{
-- [[caler]]
match = "caler",
like = "caldre",
},
{
-- [[doler]] and compounds
match = "doler",
like = "doldre",
},
{
-- [[dolre]]
match = "dolre",
forms = {
-- see above for g_infix effects
g_infix = "+",
}
},
{
-- [[valer]], [[equivaler]], [[prevaler]], [[sobrevaler]]
match = "valer",
forms = {
-- see above for g_infix effects
fut = "valdr",
g_infix = "+",
}
},
{
-- [[valdre]] and compounds
match = "valdre",
like = "valer",
},
{
-- [[soler]]
match = "^soler", -- this must precede -oldre rule below for alt form [[soldre]]
forms = {
-- see above for g_infix effects
fut = {},
pret = {},
impf_sub = "solgué", -- regular, but we disabled the preterite, which would normally disable impf_sub too
g_infix = "+",
pp = {},
noimp = true,
}
},
{
-- [[soldre]]
match = "^soldre", -- this must precede -oldre rule below
like = "soler",
},
{
-- [[coldre]], [[moldre]], [[absoldre]], [[dissoldre]], [[resoldre]], [[toldre]]
match = "oldre", -- this must follow [[doldre]]/[[oldre]] rule above
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "olt",
}
},
{
-- [[voler]], [[malvoler]]
match = "voler",
forms = {
fut = "voldr",
pres_1s = "vull",
pres_sub_stressed = "vulgui",
pres_sub_unstressed = "vulgue",
g_infix = "+",
imp_2s = "vulgues",
imp_2p = "vulgueu",
}
},
--------------------------------------------- -ndre ----------------------------------------
{
-- [[romandre]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("mandre", {"^ro"}),
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "màs#",
}
},
{
-- [[encendre]], [[atendre]], [[contendre]], [[desentendre's]], [[distendre]], [[entendre]], [[estendre]],
-- [[pretendre]]
match = match_against_verbs("endre", {"enc", "t"}),
forms = {
pres_3s = "én#", -- remove final accent without prefix with vowel; also removed when adding a suffix
-- see above for g_infix effects
g_infix = "+",
pp = "ès#", -- see above for effect of final #
}
},
{
-- [[vendre]], [[malvendre]], [[revendre]]
match = "vendre",
forms = {
pres_3s = "vèn#", -- see above for effect of final #
-- see above for g_infix effects
g_infix = "+",
pp = "venud", -- g_infix would normally make it vengud
}
},
{
-- [[fendre]], [[defendre]], [[ofendre]], [[dependre]], [[despendre]], [[expendre]], [[suspendre]], [[prendre]],
-- [[aprendre]], [[comprendre]], [[desprendre]], [[emprendre]], [[reprendre]], [[sorprendre]]
match = "endre", -- this must follow previous -endre rules above
forms = {
pres_3s = "èn#", -- see above for effect of final #
-- see above for g_infix effects
g_infix = "+",
pp = "ès#", -- see above for effect of final #
}
},
{
-- [[enfondre]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("fondre", {"^en"}),
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "fús#",
}
},
{
-- [[pondre]], [[compondre]], [[correspondre]], [[descompondre]], [[despondre's]], [[respondre]]
match = "pondre",
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "post",
}
},
{
-- [[fondre]], [[confondre]], [[difondre]], [[infondre]], [[refondre]], [[tondre]]
match = "ondre", -- this must follow previous -ondre rules above
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "ós#", -- see above for effect of final #
}
},
--------------------------------------------- -nyer ----------------------------------------
{
-- [[atènyer]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("tènyer", {"^a"}),
forms = {
pp = "tès#",
irreg = true,
}
},
{
-- [[empènyer]], [[espènyer]]
match = match_against_verbs("pènyer", {"^em", "^es"}),
forms = {
pp = "pès#",
irreg = true,
}
},
{
-- [[estrènyer]], [[constrènyer]], [[destrènyer]], [[restrènyer]]
match = match_against_verbs("strènyer", {"^e", "con", "^de", "^re"}),
forms = {
pp = "stret",
irreg = true,
}
},
{
-- [[fènyer]]
match = "fènyer",
forms = {
pp = {"fengud", "fenyud"},
irreg = true,
}
},
{
-- [[júnyer]]
match = "júnyer",
like = "junyir",
},
{
-- [[plànyer]], [[complànyer]], [[pertànyer]]
match = match_against_verbs("ànyer", {"pl", "pert"}),
forms = {
pp = {"angud", "anyud"},
irreg = true,
}
},
--------------------------------------------- -aure ----------------------------------------
{
-- [[caure]], [[decaure]], [[recaure]]
match = "caure",
forms = {
-- stem ending in -ai and imperfect in -ia causes special stressed imperfect logic to take effect; we get
-- impf1s queia, impf1p quèiem (preceding vowel changed to è and attached to initial consonant using
-- combine_stem_ending(), which changes c- to qu-)
stem = "caie", -- i dropped by g_infix before u
-- g_infix implies irreg = true
-- g_infix adds -g to pres_1s, sub, pret and pp stems; combine_stem_ending() changes final -g to -c
-- g_infix sets pres_stressed to end in -u, removing a preceding -i or -v
g_infix = "+",
}
},
{
-- [[plaure]], [[complaure]]
match = "plaure",
forms = {
stem = "plae", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
}
},
{
-- [[raure]]
match = "^raure",
forms = {
stem = "rae", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = {"ragud", "ras"},
}
},
--------------------------------------------- -eure ----------------------------------------
{
-- [[beure]], [[embeure]], [[deure]], [[lleure]]
match = match_against_verbs("eure", {"b", "d", "ll"}),
forms = {
stem = "eve", -- v dropped by g_infix before g and u
g_infix = "+",
}
},
{
-- [[creure]], [[seure]], [[asseure]]
match = match_against_verbs("eure", {"cr", "s"}),
forms = {
stem = "ee",
pres_unstressed = "eie", -- affects pres_1p, pres_2p, gerund, imperfect (see [[caure]])
g_infix = "+",
}
},
{
-- [[jeure]], [[ajeure]]
match = "jeure",
forms = {
fut = "jaur", -- affects future and cond
stressed_stem = "jee", -- affects stressed forms, which get g added by g_infix by added except for
-- pres_stressed, which gets u added (controls pres_3s, pres_2s, pres_3p)
unstressed_stem = "jae", -- affects unstressed_stem, which get g added by g_infix
pres_stressed = {"jeu", "jau"},
pres_unstressed = "jaie", -- affects pres_1p, pres_2p, gerund, imperfect (see [[caure]])
pres_1s = {"jec", "jac"},
impf1 = "jei", -- otherwise we'd get impf_1s '#geia' etc.
impf2 = "jèi",
g_infix = "+",
}
},
{
match = "jaure",
like = "jeure",
},
{
-- [[treure]], [[abstreure]], [[atreure]], [[bestreure]], [[contreure]], [[detreure]], [[distreure]],
-- [[extreure]], [[retreure], [[retrotreure]], [[sostreure]]
match = "treure",
forms = {
-- like [[jeure]] except for irregular pp
fut = "traur",
stressed_stem = "tree",
unstressed_stem = "trae",
pres_stressed = {"treu", "trau"},
pres_unstressed = "traie",
pres_1s = {"trec", "trac"},
g_infix = "+",
pp = "tret",
}
},
{
match = "traure",
like = "treure",
},
{
-- [[veure]], [[entreveure]], [[preveure]], [[reveure]]
match = "veure",
forms = {
stem = "veie",
-- impf1s veia, impf1p vèiem (preceding vowel changed to è)
pres_stressed = "veu",
pres_1s = "vej", -- will be converted to 'veig'; 'veig' gets converted to 'veic'
pres_sub_stressed = "vegi",
pres_sub_unstressed = "vege",
pret = {"veié", "vé"},
pret_1s = "viu",
pret_3s = {"veié", "veu"},
impf_sub = "veié",
pp = "vist",
imp_2s = "veges",
imp_2p = {"vegeu", "veieu"},
irreg = true,
}
},
--------------------------------------------- -iure ----------------------------------------
{
-- [[escriure]], [[circumscriure]], [[descriure]], [[inscriure]], [[prescriure]], [[proscriure]],
-- [[subscriure]], [[transcriure]]
match = "scriure",
forms = {
stem = "scrivi", -- v dropped by g_infix before g and u; pres_1p/pres_2p have -ir endings
g_infix = "+",
pret = {"scriví", "scrigué"},
pp = "scrit",
}
},
{
-- [[riure]], [[somriure]]
match = "riure", -- must follow rule for 'scriure'
forms = {
stem = "rie",
-- impf1s reia, impf1p rèiem (preceding vowel changed to è)
g_infix = "+",
}
},
{
-- [[viure]], [[conviure]], [[desviure's]], [[sobreviure]]
match = "viure",
forms = {
stem = "vivi", -- v dropped by g_infix before g and u; pres_1p/pres_2p have -ir endings
g_infix = "visc", -- applies to pres1s, sub, pret, pp
}
},
--------------------------------------------- -oure ----------------------------------------
{
-- [[cloure]], [[concloure]], [[descloure]], [[encloure]], [[excloure]], [[incloure]], [[recloure]]
match = "cloure",
forms = {
stem = "cloe", -- ï in impf1s cloïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = "clòs#", -- remove final accent without prefix with vowel; also removed when adding a suffix
}
},
{
-- [[coure]] "to cook"
match = "coure",
var = "cook",
forms = {
stem = "coe", -- ï in impf1s coïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = "cuit",
}
},
{
-- [[coure]] "to sting"
match = "coure",
var = "sting",
forms = {
stem = "coe", -- ï in impf1s coïa gets generated automatically by combine_stem_ending()
g_infix = "+",
-- pp regular 'cogud'
}
},
{
-- [[moure]], [[promoure]], [[remoure]], [[somoure]], [[ploure]]
match = match_against_verbs("oure", {"m", "pl"}),
forms = {
stem = "ove", -- v dropped by g_infix before g and u
g_infix = "+",
}
},
{
-- [[noure]]
match = "noure",
forms = {
stem = "noe", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
}
},
--------------------------------------------- -xer ----------------------------------------
{
-- [[conèixer]], [[desconèixer]], [[reconèixer]]
match = "conèixer",
forms = {
g_infix = "coneg",
}
},
{
-- [[créixer]], [[acréixer]], [[decréixer]], [[recréixer]], [[sobrecréixer]]
match = "créixer",
forms = {
pret = {"creixé", "cresqué"},
pres_sub_unstressed = {"creixe", "cresque"},
pp = "crescud",
irreg = true,
}
},
{
-- [[merèixer]], [[desmerèixer]], [[irèixer-se]]
match = match_against_verbs("rèixer", {"me", "^i"}),
forms = {
pret = {"reixé", "resqué"},
pres_sub_unstressed = {"reixe", "resque"},
pp = "rescud",
irreg = true,
}
},
{
-- [[néixer]]/[[nàixer]], [[renéixer]]/[[renàixer]], [[sobrenéixer]]/[[sobrenàixer]], [[péixer]]/[[pàixer]]
match = match_against_verbs("éixer", {"n", "p"}),
forms = {
stem = "aixe",
fut = "aixer",
pres_stressed = {"eix", "aix"},
pres_1s = "eixo",
pret = {"aixé", "asqué"},
pres_sub_stressed = "eixi",
pres_sub_unstressed = {"aixe", "asque"},
pp = "ascud",
irreg = true,
}
},
{
match = "àixer",
like = "éixer",
},
{
-- [[parèixer]], [[aparèixer]], [[comparèixer]], [[desaparèixer]], [[reaparèixer]]
match = "parèixer",
forms = {
g_infix = "pareg",
}
},
--------------------------------------------- misc ----------------------------------------
{
-- [[cabre]]
match = "cabre",
forms = {
pres_sub_stressed = "càpiga",
pres_sub_unstressed = "capigue",
irreg = true,
}
},
{
-- [[caber]]
match = "caber",
like = "cabre",
},
{
-- [[saber]]
match = "saber",
forms = {
fut = "sabr",
pres_1s = "sé",
pres_sub_stressed = "sàpiga",
pres_sub_unstressed = "sapigue",
imp_2s = "sàpiga",
imp_2p = "sapigueu",
irreg = true,
}
},
{
-- [[poder]]
match = "poder",
forms = {
fut = "podr",
pres_1s = "puc",
pres_sub_stressed = "pugui",
pres_sub_unstressed = "pugue",
g_infix = "pog",
imp_2s = "pugues",
imp_2p = "pugueu",
irreg = true,
}
},
{
-- [[córrer]], [[acórrer]], [[concórrer]], [[decórrer]], [[descórrer]], [[discórrer]], [[encórrer]],
-- [[escórrer]], [[incórrer]], [[ocórrer]], [[recórrer]], [[socórrer]], [[transcórrer]]
match = "córrer",
forms = {
pret = "corregué",
pres_sub_unstressed = {"corre", "corregue"},
pp = "corregud",
irreg = true,
}
},
{
-- [[metre]], [[admetre]], [[arremetre]], [[cometre]], [[comprometre]], [[demetre]], [[descomprometre]],
-- [[emetre]], [[entremetre's]], [[escometre]], [[malmetre]], [[manumetre]], [[ometre]], [[permetre]],
-- [[prometre]], [[readmetre]], [[remetre]], [[retransmetre]], [[sotmetre]], [[trametre]], [[transmetre]]
match = "metre",
forms = {
pp = "mès#",
irreg = true,
}
},
--------------------------------------------------------------------------------------------
-- -ir --
--------------------------------------------------------------------------------------------
{
-- [[acudir]]; NOTE: Separation by meaning does not occur in DCC, DIEC, DEIEC, and DCVB says the distinction
-- is geographical and makes no mention of distinction by meaning. OTOH ca.wikt does say that the pronominal
-- sense "to occur" tends to conjugate non-inchoative.
match = "acudir",
forms = {
eix_infix = {{
form = "+",
footnotes = {'[especially in the sense "to turn up, to be present"]'}
}, {
form = "-",
footnotes = {'[especially in the pronominal sense "to occur"]'}
}}
}
},
-- [[afegir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[ajupir]]
-- [[buixir]]
-- [[bullir]], [[rebullir]]
-- [[cruixir]], [[escruixir]] (Routledge says this is inchoative but DIEC, DEIEC and DCC all disagree; note
-- pres_2s 'cruixes', handled automatically)
-- [[dormir]], [[adormir]]
-- [[funyir]]
-- [[grunyir]]
-- [[munyir]], [[esmunyir]]
-- [[pudir]]
-- [[punyir]]
-- [[retrunyir]]
-- [[sallir]]
-- [[sentir]], [[pressentir]], [[ressentir-se]]; not [[consentir]], with can be either non-inchoative or
-- inchoative, and not [[assentir]] or [[dissentir]], which are only inchoative
match = match_against_verbs("ir", {"ajup", "buix", "bull", "cruix", "dorm", "funy", "gruny", "muny", "pud",
"puny", "retruny", "^sent", "pressent", "^ressent", "sall"}),
forms = {
eix_infix = "-",
}
},
{
-- [[arrupir-se]];
-- [[brumir]];
-- [[brunzir]];
-- [[consumir]], [[resumir]], [[presumir]] (not [[sumir]], [[assumir]], [[subsumir]], which are regular)
-- [[mentir]], [[desmentir]]
-- [[percudir]]; cf. also [[acudir]], which to some extent has separate conjugations per meaning
-- [[consentir]]
match = match_against_verbs("ir", {"arrup", "brum", "brunz", "consum", "^resum", "presum", "ment", "percud",
"consent"}),
forms = {
eix_infix = {"+", "-"},
}
},
-- [[cenyir]]: -- non-inchoative or inchoative in Balearics, inchoative elsewhere
{
-- [[cobrir]], [[descobrir]], [[encobrir]], [[recobrir]], [[redescobrir]]
match = "cobrir",
forms = {
pp = "cobert",
irreg = true,
}
},
{
-- [[collir]], [[acollir]], [[escollir]], [[recollir]]
match = "collir",
forms = {
stressed_stem = "culli",
eix_infix = "-",
irreg = true,
}
},
{
-- [[complir]], [[acomplir]], [[incomplir]]
match = "complir",
forms = {
pp = {"complert", "complid"},
irreg = true,
}
},
{
-- [[cosir]], [[descosir]], [[recosir]]
match = "cosir",
forms = {
stressed_stem = "cusi",
pres_3s = "cús#",
eix_infix = "-",
irreg = true,
}
},
{
-- [[eixir]], [[deseixir-se]]; not [[teixir]] or [[entreteixir]], and not [[reeixir]] or [[sobreeixir]],
-- which have an ï in the stem-stressed forms
match = match_against_verbs("eixir", {"^", "des"}),
forms = {
stressed_stem = "ixi",
eix_infix = "-",
irreg = true,
}
},
{
-- [[reeixir]], [[sobreeixir]]
match = match_against_verbs("eixir", {"^re", "sobre"}),
forms = {
stressed_stem = "ïxi",
eix_infix = "-",
irreg = true,
}
},
-- [[engolir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[escopir]]
match = "escopir",
forms = {
stressed_stem = "escupi",
eix_infix = "-",
irreg = true,
}
},
{
-- [[establir]], [[preestablir]], [[restablir]]
match = "establir",
forms = {
pp = {"establert", "establid"},
irreg = true,
}
},
-- [[ferir]]: -- non-inchoative in Balearics, inchoative elsewhere
-- [[fregir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[fugir]], [[confugir]], [[defugir]], [[enfugir-se]]; pres sing ''fujo, fuges, fuig'' handled by
-- combine_stem_ending(); can't be handled by rule above that lists many non-inchoative verbs because the
-- prefix would be 'fug' and the front-back alternation code doesn't apply to prefixes.
match = "fugir",
forms = {
eix_infix = "-",
}
},
{
-- [[imprimir]], [[reimprimir]], [[sobreimprimir]]; not any other verbs in -primir; write it this way so
-- there's a prefix with a vowel to prevent against the accent in the pp from being removed while still
-- removing it in the feminine.
match = match_against_verbs("primir", {"im"}),
forms = {
pp = "près#",
irreg = true,
}
},
-- [[llegir]]: -- non-inchoative in Valencia and Minorca, inchoative elsewhere
{
-- [[lluir]]: regular inchoative in the figurative meaning "to display (something), to be showy" also in the
-- legal meaning "free from a pecuniary obligation, such as a land-based tax (emphyteusis)"; irregular in the
-- literal meaning "to shine"; use <no_built_in> to get regular conjugation. In the regular conjugation,
-- umlauts appear in the following forms: pres_1p/pres_sub_1p/imp_1p lluïm, pres_2p/pres_sub_2p/imp_2p lluïu,
-- impf_1s/impf_3s lluïa, impf_2s lluïes, impf_3p lluïen, pret_2s lluïres, pret_3p lluïren,
-- impf_sub_2s lluïssis, impf_sub_3p lluïssin, throughout the pp: lluït, lluïda, lluïts, lluïdes. IN the
-- irregular conjugation, umlauts appear in the same places as well as elsewhere in the present subjunctive:
-- pres_sub_1s/pres_sub_3s/imp_3s lluï, pres_sub_2s lluïs, pres_sub_3p/imp_3p lluïn. Notably, they do *NOT*
-- appear in the gerund lluint, the infinitive lluir, or anywhere in the future or conditional. Note that
-- verbs.cat [https://www.verbs.cat/en/conjugation/899-lluir.html] lists additional irregular forms pres_1s
-- lluu, and alternative impf_sub forms in -e- instead of -i- (lluïsses, lluíssem, lluísseu, lluïssen), but
-- these are nonstandard or dialectal per both Routledge and DEIEC.
match = "^lluir",
forms = {
eix_infix = "-",
pres3s = {"lluu", "llu"}, -- generates pres_2s, imp_2s
irreg = true,
}
},
{
-- [[entrelluir]] "to be half-seen", [[relluir]] "to shine", [[traslluir-se]] "to be translucent"; either
-- inchoative or non-inchoative, not distinguished by meaning; note, [[deslluir]] and [[enlluir]] are regular
-- inchoative verbs.
match = match_against_verbs("lluir", {"entre", "^re", "tras"}),
forms = {
eix_infix = {"+", "-"},
pres3s = {"llueix", "lluu", "llú"}, -- generates pres_2s, imp_2s; note, pres_2s will end in -es due to
-- combine_stem_ending()
irreg = true,
}
},
{
-- [[morir]], [[premorir]]; but not [[atemorir]]
match = match_against_verbs("morir", {"^", "pre"}),
forms = {
eix_infix = "-",
pp = "mort",
irreg = true,
}
},
{
-- [[obrir]], [[entreobrir]], [[reobrir]]; not [[cobrir]] and derivatives, not [[empobrir]], so we have to list
-- them individually
match = match_against_verbs("obrir", {"^", "entre", "^re"}),
forms = {
eix_infix = "-",
pp = "obert",
irreg = true,
}
},
{
-- [[oferir]]; but not [[proferir]]
match = "^oferir",
forms = {
pp = {"ofert", "oferid"},
irreg = true,
}
},
-- [[oir]], [[desoir]], [[entreoir]]: -- per Routledge, non-inchoative or inchoative normally but only
-- non-inchoative in Valencian; but all dictionaries disagree and say it is a regular inchoative-only verb.
-- It has the same umlauts as lluir (and [[corroir]], another regular inchoative verb).
{
-- [[omplir]], [[desomplir-se]], [[reomplir]]; not [[complir]] and derivatives, so we have to list them
-- individually
match = match_against_verbs("omplir", {"^", "des", "^re"}),
forms = {
eix_infix = "-",
pp = {"omplert", "omplid"},
irreg = true,
}
},
-- [[penedir-se]]: -- non-inchoative in Balearics, inchoative elsewhere
{
-- [[pruir]] "to itch": same umlauts as in [[lluir]].
match = "^pruir",
forms = {
eix_infix = "-",
pres3s = {"pruu", "pru"}, -- generates pres_2s, imp_2s
irreg = true,
}
},
{
-- [[reblir]]
match = "^reblir",
forms = {
pp = {"reblert", "reblid"},
irreg = true,
}
},
-- [[renyir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[sofrir]]
match = "^sofrir",
forms = {
pp = {"sofert", "sofrid"},
irreg = true,
}
},
{
-- [[sortir]], [[ressortir]], [[sobresortir]]; but not [[assortir]], which is regular inchoative
match = match_against_verbs("sortir", {"^", "^res", "sobre"}),
forms = {
stressed_stem = "surti",
eix_infix = "-",
irreg = true,
}
},
{
-- [[suplir]]
match = "^suplir",
forms = {
pp = {"suplert", "suplid"},
irreg = true,
}
},
-- [[teixir]], [[entreteixir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[tenir]] but not any compounds; highly irregular
match = "^tenir",
forms = {
fut = "tindr",
pres_stressed = "ten",
pres_3s = "té",
imp_2s = {"té", "ten", "tingues"},
imp_2p = {"teniu", "tingueu"},
g_infix = "ting",
}
},
{
-- [[abstenir-se]], [[atenir-se]], [[captenir-se]], [[cartenir]], [[contenir]], [[detenir]], [[entretenir]],
-- [[mantenir]], [[menystenir]], [[obtenir]], [[retenir]], [[sostenir]], [[viltenir]]; highly irregular
match = "tenir",
forms = {
fut = "tindr",
pres_stressed = "ten",
pres_3s = "té",
imp_2s = {"tén", "tingues"},
imp_2p = {"teniu", "tingueu"},
g_infix = "ting",
}
},
{
-- [[tindre]]: variant of [[tenir]]
match = "tindre",
like = "tenir",
},
-- [[tenyir]], [[destenyir]]: -- non-inchoative in Valencia, but [[retenyir]] inchoative or non-inchoative in
-- Valencia? (per Routledge); regular inchoative elsewhere
{
-- [[tossir]] "to cough"
match = "^tossir",
forms = {
stressed_stem = "tussi", -- pres_2s gets 'tusses'
pres_3s = "tus", -- note, pres_3s (a single form override) not pres3s (a stem override, which also affects
-- pres_2s; but imp_2s is physically copied from pres_3s, so imp_2s correctly gets 'tus')
eix_infix = "-",
irreg = true,
}
},
{
-- [[venir]] but not any compounds; highly irregular
match = "^venir",
forms = {
fut = "vindr",
pres_stressed = "ven",
pres_3s = "ve",
imp_2s = "vine",
g_infix = "ving",
}
},
{
-- compounds of [[venir]]: [[advenir]], [[avenir]], [[contravenir]], [[convenir]], [[desavenir-se]],
-- [[desconvenir]], [[entrevenir]], [[esdevenir]], [[intervenir]], [[obvenir]], [[pervenir]], [[prevenir]],
-- [[provenir]], [[reconvenir]], [[revenir]], [[sobrevenir]], [[subvenir]]; but not [[enjovenir]] or
-- [[rejovenir]]; highly irregular
match = match_against_verbs("venir", {"^ad", "^a", "contra", "con", "desa", "entre", "esde", "inter", "ob",
"per", "pre", "pro", "^re", "sobre", "sub"}),
forms = {
fut = "vindr",
pres_stressed = "ven",
pres_3s = "vé",
imp_2s = "vén",
g_infix = "ving",
}
},
{
-- [[vindre]]: variant of [[venir]]
match = "vindre",
like = "venir",
},
-- [[vestir]], [[desvestir]], [[revestir]], maybe [[transvestir]]: non-inchoative in Valencia, inchoative or
-- non-inchoative in the Balearics; regular inchoative elsewhere; but not [[envestir]] or [[investir]], which are
-- regular inchoative everywhere
{
-- [[fer]], [[contrafer]], [[desfer]], [[estrafer]], [[perfer]], [[refer]], [[satisfer]]; highly irregular
match = "fer",
forms = {
fut = "far",
pres_1s = "faj", -- will be converted to 'faig'; 'faig' gets converted to 'faic'
pres_2s = "fàs#",
pres_3s = "fà#",
pres_3p = "fan",
pres_unstressed = "fe",
impf1 = "fei",
impf2 = "fèi",
pres_sub_stressed = "faci",
pres_sub_unstressed = "fe",
pret = "fé",
pret_1s = "fiu",
pret_3s = "feu",
impf_sub_1s = "fés#", -- regular except for base form [[fes]], lacking an accent
impf_sub_3s = "fés#", -- same
imp_2s = "fés#",
pp = "fet",
irreg = true,
}
},
{
-- [[dir]], [[adir-se]], [[contradir]], [[desdir]], [[entredir]], [[interdir]], [[maldir]], [[predir]], [[redir]];
-- behaves like an -er/-re verb
match = match_against_verbs("dir", {"^", "^a", "contra", "des", "entre", "inter", "mal", "pre", "^re"}),
forms = {
stem = "die",
g_infix = "+",
imp_2s = "digues",
imp_2p = "digueu",
pp = "dit",
}
},
{
-- [[dur]], [[endur-se]]; behaves like an -er/-re verb
match = "dur",
forms = {
stem = "due",
g_infix = "+",
pres3s = {"duu", "du"}, -- generates pres_2s, imp_2s
impf1 = "dui",
impf2 = "dúi",
pp = "dut",
}
},
{
-- [[ser]]; highly irregular
match = "^ser",
forms = {
pres_1s = "soc",
pres_2s = "ets",
pres_3s = "és",
pres_1p = "som",
pres_2p = "sou",
pres_3p = "són",
impf1 = "er",
impf2 = "ér",
pres_sub_stressed = "sigui",
pres_sub_unstressed = "sigue",
pret = "fó",
pret_1s = "fui",
pret_3s = "fou",
impf_sub_1s = "fos", -- regular except for lack of accent
impf_sub_3s = "fos", -- same
cond = {"serí", "fór"},
imp_2s = "sigues",
imp_2p = "sigueu",
pp = {"estad", "sigud"},
gerund = {"sent", "essent"},
irreg = true,
}
},
{
-- [[ésser]]; variant of [[ser]]
match = "^ésser",
like = "ser",
},
{
-- [[haver]] as auxiliary; highly irregular
match = "^haver",
var = "aux",
forms = {
pres_1s = "he",
pres_2s = "has",
pres_3s = "ha",
pres_1p = "hem",
pres_2p = "heu",
pres_3p = "han",
fut = "haur",
cond = {"haurí", "haguér"},
pres_sub_stressed = "hagi",
pres_sub_unstressed = "hàgi",
noimp = true,
g_infix = "+",
}
},
{
-- [[haver]] as full verb; highly irregular
match = "^haver",
var = "full",
forms = {
pres_1s = {"hec", "hac"},
pres_stressed = {"heu", "hau"},
fut = "haur",
pres_sub_stressed = "hegui",
g_infix = "+",
}
},
{
-- [[heure]]; variant of full verb [[haver]]
match = "^heure",
like = "haver",
likevar = "full",
},
{
-- [[haure]]; variant of full verb [[haver]]
match = "^haure",
like = "haver",
likevar = "full",
},
}
local function skip_slot(base, slot, allow_overrides)
if not allow_overrides and (base.basic_overrides[slot] or
base.refl and base.basic_reflexive_only_overrides[slot]) then
-- Skip any slots for which there are overrides.
return true
end
if base.only3s and (slot:find("^pp_f") or slot:find("^pp_mp")) then
-- diluviar, atardecer, neviscar; impersonal verbs have only masc sing pp
return true
end
if not slot:find("[123]") then
-- Don't skip non-personal slots.
return false
end
if base.nofinite then
return true
end
if (base.only3s or base.only3sp or base.only3p) and (slot:find("^imp_") or slot:find("^neg_imp_")) then
return true
end
if base.only3s and not slot:find("3s") then
-- diluviar, atardecer, neviscar
return true
end
if base.only3sp and not slot:find("3[sp]") then
-- atañer, concernir
return true
end
if base.only3p and not slot:find("3p") then
-- [[caer cuatro gotas]], [[caer chuzos de punta]], [[entrarle los siete males]]
return true
end
return false
end
local function add_stem_ending(stem, ending)
if ending == "" then
return stem
end
if stem:find("#$") then -- remove final accent when adding a suffix
stem = com.remove_accents((stem:gsub("#$", "")), "final syllable only")
end
return stem .. ending
end
local function process_stem(stem, fn)
if stem:find("#$") then
local stem_no_pound_sign = stem:match("^(.*)#$")
return fn(stem_no_pound_sign) .. "#"
else
return fn(stem)
end
end
-- Add the `stem` to the `ending` and apply any phonetic modifications. `is_full_word` indicates that we're creating
-- a "full word" not a stem, and turns on devoicing of final consonants. `dont_include_prefix` is used when creating
-- stems and indicates not to prepend the prefix in `base.prefix` to the result. `is_pres_sub_stressed` is used when
-- creating the pres_sub_stressed stem, to correctly handle both [[desaiguar]] and [[argüir]], whose respective
-- interactions between ü and i/ï are very tricky.
--
-- WARNING: This function is written very carefully; changes to it can easily have unintended consequences.
local function combine_stem_ending(base, stem, ending, is_full_word, dont_include_prefix, is_pres_sub_stressed)
-- Include the prefix in the stem unless dont_include_prefix is given (used in construct_stems()), or the value of
-- `stem` comes from a user-specified stem or form override.
if not dont_include_prefix and not stem:find(IS_USER_STEM_OVERRIDE) and not stem:find(IS_USER_FORM_OVERRIDE) then
stem = base.prefix .. stem
end
-- A * at the beginning of the ending is a signal to remove a stressed accent from the stem. This may feed any of
-- the following rules.
if ending:find("^%*") then
ending = ending:gsub("^%*", "")
stem = com.remove_accents(stem, "final syllable only")
end
-- If ending begins with s and stem ends in a sibilant, we need an e in between; cf. pres_2s 'apareixes' of
-- [[aparèixer]], pres_2s 'torces' of [[tòrcer]], pres_2s 'fuges' of [[fugir]], pres_2s 'brunzes' of [[brunzir]].
-- This may feed the next rule.
if ending:find("^s") and rfind(stem, "[çjsxz]$") then
ending = "e" .. ending
end
-- By default, stems are in their "back" (standalone) form. Before a front vowel, convert the final consonant to
-- its "front" form so the pronunciation doesn't change.
if rfind(ending, "^" .. front_vowel_c) then
-- adequar -> adeqües
-- enaiguar -> enaigües
-- pegar -> pegues
-- arranjar -> arranges
-- marcar -> marques
-- abraçar -> abraces
stem = com.back_to_front(stem)
end
-- Ending beginning in -i after diphthong ending in V + i compresses the two i's into one (cf. pret_1s 'desmaí' and
-- pres_sub_1s 'desmaï' of [[desmaiar]]). This rule doesn't apply after pseudo-vowel u in gu/qu; cf. pret_1s 'guií'
-- of [[guiar]] and contrast pret_1s 'cruí' of [[cruiar]]. This may feed the next rule.
if rfind(ending, "^[iíï]") and rfind(stem, V .. "i$") and not rfind(stem, "[gq][uü]i$") then
stem = stem:gsub("i$", "")
end
-- If ending begins with i (not í), it must get a diaeresis after a true vowel (not gu/qu, cf. pres_1p 'delinquim'
-- of [[delinquir]], not '#delinquïm'; also not a diphthong ending in u, cf. pres_sub_1s 'apreui' of [[apreuar]]
-- not '#apreuï') to prevent the two merging into a diphthong. Note that ü -> u before ï, but to simplify things
-- we leave the double umlauts in place and remove the first one during postprocessing, in fix_double_umlauts().
-- Cf.:
-- * impf_1s 'raïa' of [[raure]];
-- * pres_sub_1s 'creï' of [[crear]];
-- * pres_sub_1s 'associï' of [[associar]];
-- * impf_1s 'cloïa' of [[cloure]];
-- * pres_1p 'lluïm' of [[lluir]];
-- * pres_1p 'arguïm' of [[argüir]].
if ending:find("^i") and rfind(stem, "[aeiouü]$") and not stem:find("[aeiogq]u$") and
-- Unstressed subjunctive endings of [[enaiguar]] remain without umlaut: enaigüi/enaigüis/enaigüin;
-- but stressed endings of [[argüir]] that begin with 'i' do get an umlaut: arguït, impf. arguïa, including
-- stressed subjunctive endings arguïm/arguïu. In both cases the ending is '-i' as part of the creation of
-- the respective stems. There seems no way of distinguishing the two cases other than with a special flag.
not (rfind(stem, "[gq]ü$") and ending == "i" and is_pres_sub_stressed) then
ending = ending:gsub("^i", "ï")
end
local retval = add_stem_ending(stem, ending)
if retval:find("#$") then -- remove final accent if no vowels in prefix
retval = retval:gsub("#$", "")
if not rfind(base.prefix, V) then
retval = com.remove_accents(retval, "final syllable only")
end
end
if is_full_word then
local saw_is_user_form_override
retval, saw_is_user_form_override = rsubb(retval, IS_USER_FORM_OVERRIDE, "")
retval = retval:gsub(IS_USER_STEM_OVERRIDE, "")
if not saw_is_user_form_override then
-- Devoice final voiced obstruent (cf. pres_2s 'caps', pres_3s 'cap' of [[cabre]]). But not after a
-- consonant (cf. pres_2s 'perds', pres_3s 'perd' of [[perdre]]), except for g -> c, which operates
-- even after a consonant (pres_1s 'resolc' of [[resoldre]], pres_1s 'tinc' of [[tenir]]).
retval = retval:gsub("g(s?)$", "c%1")
retval = rsub(retval, "(" .. V .. ")([bdj])(s?)$", function(before, voiced, after)
local devoice = {
b = "p",
d = "t",
j = "ig", -- pres_3s 'fuj' of [[fugir]] -> 'fuig'
}
return before .. devoice[voiced] .. after
end)
end
end
return retval
end
local function add3(base, slot, stems, endings, footnotes, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(base, stem, ending, "is full word")
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil, footnotes)
end
local function insert_form(base, slot, form)
if not skip_slot(base, slot) then
iut.insert_form(base.forms, slot, form)
end
end
local function insert_forms(base, slot, forms)
if not skip_slot(base, slot) then
iut.insert_forms(base.forms, slot, forms)
end
end
local function add_single_stem_tense(base, slot_pref, stems, s1, s2, s3, p1, p2, p3)
local function addit(slot, ending)
add3(base, slot_pref .. "_" .. slot, stems, ending)
end
addit("1s", s1)
addit("2s", s2)
addit("3s", s3)
addit("1p", p1)
addit("2p", p2)
addit("3p", p3)
end
local function map_general(stemforms, fn)
return iut.map_forms(iut.convert_to_general_list_form(stemforms), fn)
end
local function flatmap_general(stemforms, fn)
return iut.flatmap_forms(iut.convert_to_general_list_form(stemforms), fn)
end
-- Given a stem ending in a conjugation vowel -a/-e/-i/-ï, split into stem base and conjugation vowel, converting the
-- stem base to "back" form if the conjugation vowel is front (hence 'torce' of [[tòrcer]] splits into 'torç' and 'e',
-- and 'fugi' of [[fugir]] splits into 'fuj' and 'i').
local function split_conj_vowel(stem)
local stem_base, conj_vowel = rmatch(stem, "^(.*)([aeiï])$")
if not stem_base then
error(("Internal error: Stem '%s' doesn't end in conjugation vowel a/e/i"):format(stem))
end
if conj_vowel == "ï" then
-- To simplify handling of ï, convert to i. It will be converted back to ï as necessary in
-- combine_stem_ending().
conj_vowel = "i"
end
if rfind(conj_vowel, front_vowel_c) then
stem_base = com.front_to_back(stem_base)
end
return stem_base, conj_vowel
end
local function construct_stems(base)
base.output_stems = {}
local stems = base.output_stems
local bst = base.input_stems
-- YUCK, see combine_stem_ending() for the necessity of is_pres_sub_stressed.
local function combine(stem, ending, is_pres_sub_stressed)
return combine_stem_ending(base, stem, ending, false, "dont include prefix", is_pres_sub_stressed)
end
stems.irreg = bst.irreg or bst.g_infix
-- NOTE: Some stems end in a conjugation or similar vowel, specifically:
-- * `stem` (ends in conjugation vowel -a/-e/-i);
-- * `stressed_stem` (likewise);
-- * `unstressed_stem` (likewise);
-- * `pres_unstressed` (which assumes the form of the gerund minus the -nt; note that `pres_stressed` does *NOT*
-- end in a conjugation vowel, but assumes the stem form; the value of pres_3s will be derived by adding -a for
-- -ar verbs and otherwise adding an -e prop vowel when required, as in [[cobrir]], and otherwise adding no
-- vowel);
-- * `pres_sub_stressed` (which assumes the form of pres_sub_3s and hence usually ends in -i, occasionally -a);
-- * `pres_sub_unstressed` (which assumes the form of pres_sub_1p minus the -m, hence ends in -e or -i).
-- Save stem for use in add_categories_and_annotation() for determining the conjugation class.
stems.stem = bst.stem or base.stem
local eix_infix_stem
if base.conj_vowel == "i" then
-- Save eix_infix value for use in add_categories_and_annotation() for determining whether consonant
-- alternations exist.
stems.eix_infix = bst.eix_infix or bst.g_infix and "-" or "+"
eix_infix_stem = flatmap_general(stems.eix_infix, function(form)
if form == "+" then
return map_general(stems.stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, "eixe")
end)
elseif form == "-" then
return stems.stem
else
return form
end
end)
end
local stressed_stem = bst.stressed_stem or eix_infix_stem or stems.stem
local unstressed_stem = bst.unstressed_stem or stems.stem
-- Add the 'g' that is characteristic of g-infix verbs. We remove a stem-final v, e.g. [[beure]] with stem 'beve'
-- becomes 'beg'.
local function add_g(stemforms)
return map_general(stemforms, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
stem_base = stem_base:gsub("v$", "")
return combine(stem_base, "g")
end)
end
-- Add the 'u' of the pres_3s that is characteristic of g-infix verbs (and conjugation vowel 'e', later removed).
-- We remove a stem-final v, as well as i as part of a diphthong, e.g. [[beure]] with stem 'beve' becomes 'beue'
-- and [[veure]] with stem 'veie' becomes 'veue' (but [[riure]] with stem 'rie' becomes 'riue' not '#rue'). We
-- don't add -u after a consonant, e.g. [[doldre]] with stem 'dole' becomes 'dole' not '#dolue'.
local function add_u(stemforms)
return map_general(stemforms, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
if stem_base:find("v$") then
stem_base = stem_base:gsub("v$", "")
else
stem_base = rsub(stem_base, "(" .. V .. ")i$", "%1")
end
-- Add u after vowel but not after another u, so we get pres_3p 'duen' of [[dur]] not '#duuen'.
if rfind(stem_base, V .. "$") and not stem_base:find("u$") then
return combine(stem_base, "u")
else
return stem_base
end
end)
end
local stressed_g_infix, unstressed_g_infix, g_infix_pres_stressed
if bst.g_infix then
local function flatmap_g_infix(default)
return flatmap_general(bst.g_infix, function(form)
if form == "+" then
return default
else
return form
end
end)
end
stressed_g_infix = flatmap_g_infix(add_g(stressed_stem))
unstressed_g_infix = flatmap_g_infix(add_g(unstressed_stem))
g_infix_pres_stressed = add_u(stressed_stem)
end
stems.pres_unstressed = bst.pres_unstressed or unstressed_stem
stems.pres_stressed =
-- If no_pres_stressed given, pres_stressed stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
bst.pres_stressed or
g_infix_pres_stressed or
map_general(stressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return stem_base
end)
stems.pres1s =
-- If no_pres_stressed given, pres1s stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
stressed_g_infix or
map_general(stems.pres_stressed, function(form)
return combine(form, "o")
end)
stems.pres3s =
-- If no_pres_stressed given, pres3s stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
bst.pres3s or
map_general(stems.pres_stressed, function(form)
if base.conj_vowel == "a" then
return combine(form, "a")
elseif rfind(form, C .. "[lr]$") and not rfind(form, V .. "ll$") then
return combine(form, "e")
else
return form
end
end)
stems.pres3p =
-- If no_pres_stressed given, pres3p stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
map_general(stems.pres_stressed, function(form)
return combine(form, "en")
end)
local function compute_impf_stem(with_accent)
return map_general(stems.pres_unstressed, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
if conj_vowel == "a" then
return combine(stem_base, with_accent and "àv" or "av")
elseif stem_base:find("i#?$") then
form = form:gsub("i#?$", "")
return combine(rmatch(stem_base, "^(.-)" .. V .. "*$"), with_accent and "èi" or "ei")
else
return combine(stem_base, with_accent and "í" or "i") -- i -> ï after a vowel
end
end)
end
stems.impf1 = bst.impf1 or compute_impf_stem(false)
stems.impf2 = bst.impf2 or compute_impf_stem(true)
stems.pret = bst.pret or
unstressed_g_infix and map_general(unstressed_g_infix,
function(form) return combine(form, "é") end
) or
map_general(unstressed_stem, function(form)
local accent_conj_vowel = {
a = "à",
e = "é",
i = "í",
}
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, accent_conj_vowel[conj_vowel])
end)
stems.fut = bst.fut or base.inf_stem
stems.cond = bst.cond or map_general(stems.fut, function(form) return combine(form, "í") end)
stems.pres_sub_stressed = bst.pres_sub_stressed or
stressed_g_infix and map_general(stressed_g_infix, function(form) return combine(form, "i") end) or
map_general(stressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, "i", "is pres_sub_stressed")
end)
stems.pres_sub_unstressed = bst.pres_sub_unstressed or
unstressed_g_infix and map_general(unstressed_g_infix, function(form) return combine(form, "e") end) or
map_general(unstressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, conj_vowel == "i" and conj_vowel or "e")
end)
stems.impf_sub = bst.impf_sub or map_general(stems.pret, function(form)
local stem_base = rmatch(form, "^(.*)à$") -- already in "back" form, no need to convert
if stem_base then
return combine(stem_base, "é")
else
return form
end
end)
stems.pp = bst.pp or
unstressed_g_infix and map_general(unstressed_g_infix,
function(form) return combine(form, "ud") end
) or
map_general(unstressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
-- use combine() so we get 'abduïd' from 'abdu-' of [[abduir]], 'seguid' from 'seg-' from [[seguir]], etc.
return combine(stem_base, (conj_vowel == "e" and "u" or conj_vowel) .. "d")
end)
end
local function a_to_e(base, stems, suffix)
return map_general(stems, function(form)
local stem_base = form:match("^(.-)a$")
if stem_base then
suffix = "e" .. suffix
else
stem_base = form
end
return combine_stem_ending(base, stem_base, suffix, "is full word")
end)
end
local function add_present_indic(base)
local stems = base.output_stems
local function addit(slot, stems, ending)
add3(base, "pres_" .. slot, stems, ending)
end
addit("1s", stems.pres1s, "")
insert_forms(base, "pres_2s", a_to_e(base, stems.pres3s, "s"))
addit("3s", stems.pres3s, "")
insert_forms(base, "pres_1p", a_to_e(base, stems.pres_unstressed, "m"))
insert_forms(base, "pres_2p", a_to_e(base, stems.pres_unstressed, "u"))
addit("3p", stems.pres3p, "")
end
local function add_present_subj(base)
local stems = base.output_stems
local function addit(slot, stems, ending)
add3(base, "pres_sub_" .. slot, stems, ending)
end
-- Regular -ar verb: [[amar]]: ami, amis, ami, amem, ameu, amin
-- Regular -re verb: [[batre]]: bati, batis, bati, batem, bateu, batin (same as -ar verb)
-- Regular -ir verb, no -eix- infix: [[dormir]]: dormi, dormis, dormi, dormim, dormiu, dormin
-- Regular -ir verb, -eix- infix: [[imprimir]]: imprimeixi, imprimeixis, imprimeixi, imprimim, imprimiu, imprimeixin
-- Stem changing in 123s/3p vs. 12p:
-- * -eix- infix (-eix- in all stressed forms: 123s/3p of pres ind/sub, 2s imp)
-- * [[collir]]: culli, cullis, culli, collim, colliu, cullin (cull- in all stressed forms)
-- * [[cabre]]: càpiga, càpigues, càpiga, capiguem, capigueu, càpiguen (also different endings)
addit("1s", stems.pres_sub_stressed, "")
insert_forms(base, "pres_sub_2s", a_to_e(base, stems.pres_sub_stressed, "s"))
addit("3s", stems.pres_sub_stressed, "")
addit("1p", stems.pres_sub_unstressed, "m")
addit("2p", stems.pres_sub_unstressed, "u")
insert_forms(base, "pres_sub_3p", a_to_e(base, stems.pres_sub_stressed, "n"))
end
local function add_finite_non_present(base)
local stems = base.output_stems
local function add_tense(slot, stem, s1, s2, s3, p1, p2, p3)
add_single_stem_tense(base, slot, stem, s1, s2, s3, p1, p2, p3)
end
add_tense("impf", stems.impf1, "a", "es", "a", nil, nil, "en")
add_tense("impf", stems.impf2, nil, nil, nil, "em", "eu", nil)
-- pret_1s ends in -í regardless of the normal vowel of the stem.
insert_forms(base, "pret_1s", map_general(stems.pret, function(form)
local stem_base, conj_vowel = rmatch(form, "^(.*)(" .. V .. ")$")
if not stem_base then
error(("Internal error: Preterite stem '%s' doesn't end in vowel"):format(form))
end
if rfind(conj_vowel, front_vowel_c) then
stem_base = com.front_to_back(stem_base)
end
-- Use combine_stem_ending() to handle back-to-front conversions, e.g. pegà -> peguí for [[pegar]] and ensure
-- that the prefix gets added.
return combine_stem_ending(base, stem_base, "í", "is full word") end))
-- * at the beginning of the ending means to remove an accent from the last vowel of the preterite stem.
add_tense("pret", stems.pret, nil, "*res", "", "rem", "reu", "*ren")
-- * at the beginning of the ending means to remove an accent from the last vowel of the imperfect subjunctive stem.
add_tense("impf_sub", stems.impf_sub, "s", "*ssis", "s", "ssim", "ssiu", "*ssin")
add_tense("fut", stems.fut, "é", "às", "à", "em", "eu", "an")
add_tense("cond", stems.cond, "*a", "*es", "*a", "em", "eu", "*en")
end
local function add_non_finite_forms(base)
local stems = base.output_stems
local function addit(slot, stems, ending, footnotes)
add3(base, slot, stems, ending, footnotes)
end
insert_form(base, "infinitive", {form = base.orig_verb})
-- Also insert "infinitive + reflexive pronoun" combinations if we're handling a reflexive verb. See comment below
-- for "gerund + reflexive pronoun" combinations.
if base.refl then
for _, persnum in ipairs(person_number_list) do
insert_form(base, "infinitive_" .. persnum, {form = base.orig_verb})
end
end
-- Gerunds don't have an umlaut over the i in cases like 'abduint' of 'abduir' (not '#abduïnt').
local pres_unstressed_no_umlaut = map_general(stems.pres_unstressed, function(form)
return rsub(form, "ï$", "i")
end)
addit("gerund", pres_unstressed_no_umlaut, "nt")
-- Also insert "gerund + reflexive pronoun" combinations if we're handling a reflexive verb. We insert exactly the
-- same form as for the bare gerund; later on in add_reflexive_or_fixed_clitic_to_forms(), we add the appropriate
-- clitic pronouns. It's important not to do this for non-reflexive verbs, because in that case, the clitic
-- pronouns won't be added, and {{ca-verb form of}} will wrongly consider all these combinations as possible
-- inflections of the bare gerund. Thanks to [[User:JeffDoozan]] for this bug fix.
if base.refl then
for _, persnum in ipairs(person_number_list) do
addit("gerund_" .. persnum, pres_unstressed_no_umlaut, "nt")
end
end
addit("pp_ms", stems.pp, "")
if not base.pp_inv then
addit("pp_fs", stems.pp, "a")
-- make_plural() handles the complexities of e.g. 'vist' of [[veure]] -> 'vistos'/'vists' and 'romàs' of
-- [[romandre]] -> 'romasos'. We need to use flatmap_general() because make_plural() may return more than one
-- plural, and we need to use map_general() on the result, applying combine_stem_ending(), to ensure that
-- prefixes get properly added and plurals like 'amads' of stem 'amad' of [[amar]] get converted to 'amats'.
insert_forms(base, "pp_mp", map_general(flatmap_general(stems.pp, function(form)
-- Remove any # indicating that an accent will be dropped; it will be dropped in any case by make_plural().
form = form:gsub("#$", "")
return com.make_plural(form, "m")
end), function(form)
return combine_stem_ending(base, form, "", "is full word")
end))
addit("pp_fp", stems.pp, "es")
end
end
local function add_imperatives(base)
if base.noimp then
return
end
-- Copy pres3s to imperative since they are almost always the same.
insert_forms(base, "imp_2s", iut.map_forms(base.forms.pres_3s, function(form) return form end))
-- Copy pres2p to imperative plural since they are almost always the same.
insert_forms(base, "imp_2p", iut.map_forms(base.forms.pres_2p, function(form) return form end))
-- Copy subjunctives to imperatives.
for _, persnum in ipairs({"3s", "1p", "3p"}) do
local from = "pres_sub_" .. persnum
local to = "imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form) return form end))
end
end
local function fix_double_umlauts(base)
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
form.form = form.form:gsub("üï", "uï")
end
end
end
local function process_slot_overrides(base, filter_slot, reflexive_only)
local overrides = reflexive_only and base.basic_reflexive_only_overrides or base.basic_overrides
for slot, forms in pairs(overrides) do
if not filter_slot or filter_slot(slot) then
add3(base, slot, forms, "", nil, "allow overrides")
end
end
end
local function link_clitic(clitic)
return (clitic:gsub("([^ %-]+)", "[[%1]]"))
end
-- Prefix `form` with `clitic`, adding fixed text `between` between them. Add links as appropriate unless the user
-- requested no links. Check whether form already has brackets (as will be the case if the form has a fixed clitic).
local function prefix_clitic_to_form(base, clitic, between, form)
if base.alternant_multiword_spec.args.noautolinkverb then
return clitic .. between .. form
else
local clitic_pref = link_clitic(clitic) .. between
if form:find("%[%[") then
return clitic_pref .. form
else
return clitic_pref .. "[[" .. form .. "]]"
end
end
end
-- Suffix `form` with `clitic`. Add links as appropriate unless the user requested no links. Check whether form already
-- has brackets (as will be the case if the form has a fixed clitic).
local function suffix_clitic_to_form(base, clitic, form)
local autolink = not base.alternant_multiword_spec.args.noautolinkverb
if base.alternant_multiword_spec.args.noautolinkverb then
return form .. clitic
else
local clitic_suf = link_clitic(clitic)
if form:find("%[%[") then
return form .. clitic_suf
else
return "[[" .. form .. "]]" .. clitic_suf
end
end
end
-- Add a reflexive pronoun or fixed clitic (FIXME: not working), as appropriate to the base forms that were generated.
-- `do_joined` means to do only the forms where the pronoun is joined to the end of the form; otherwise, do only the
-- forms where it is not joined and precedes the form.
local function add_reflexive_or_fixed_clitic_to_forms(base, do_reflexive, do_joined)
for _, slotaccel in ipairs(base.alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
local persnum
if slot:find("[123]") then
persnum = slot:match("^.*_(.-)$")
else
persnum = "3s"
end
local function get_proclitic(form)
--if not do_reflexive then
-- return base.clitic
if form:find("^[aeiouh]") then
return proclitic_elided_person_number_to_reflexive_pronoun[persnum]
else
return proclitic_non_elided_person_number_to_reflexive_pronoun[persnum]
end
end
local function get_enclitic(form)
--if not do_reflexive then
-- return base.clitic
if rfind(form, C .. "$") or rfind(form, V .. "[iu]$") and not form:find("[gq]ui$") then
return enclitic_non_elided_person_number_to_reflexive_pronoun[persnum]
else
return enclitic_elided_person_number_to_reflexive_pronoun[persnum]
end
end
if base.forms[slot] then
if do_reflexive and slot:find("^pp_") or slot == "infinitive_linked" then
-- do nothing with reflexive past participles or with infinitive linked (handled at the end)
elseif slot:find("^neg_imp_") then
error("Internal error: Should not have forms set for negative imperative at this stage")
else
local slot_has_suffixed_clitic = slot:find("infinitive") or slot:find("gerund") or slot:find("^imp_")
-- Maybe generate non-reflexive parts and separated syntactic variants for use in
-- {{ca-verb form of}}. See comment in add_slots() above `need_special_verb_form_of_slots`.
-- Check for do_joined so we only run this code once.
if do_reflexive and do_joined and base.alternant_multiword_spec.source_template == "ca-verb form of" and
-- Skip personal variants of infinitives and gerunds so we don't think [[arrependendo]] is a
-- non-reflexive equivalent of [[arrependendo-me]].
not slot:find("infinitive_") and not slot:find("gerund_") then
-- Clone the forms because we will be destructively modifying them just below, adding the reflexive
-- pronoun.
insert_forms(base, slot .. "_non_reflexive", mw.clone(base.forms[slot]))
if slot_has_suffixed_clitic then
insert_forms(base, slot .. "_variant", iut.map_forms(base.forms[slot], function(form)
return prefix_clitic_to_form(base, get_proclitic(form), "... ", form)
end))
end
end
if slot_has_suffixed_clitic then
if do_joined then
-- Add clitic after form.
for _, form in ipairs(base.forms[slot]) do
form.form = suffix_clitic_to_form(base, get_enclitic(form.form), form.form)
end
end
elseif not do_joined then
-- Add clitic before form.
for _, form in ipairs(base.forms[slot]) do
form.form = prefix_clitic_to_form(base, get_proclitic(form.form), "", form.form)
end
end
end
end
end
end
local function handle_infinitive_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{ca-verb}}.
-- We substitute the original lemma (before removing links) for forms that
-- are the same as the lemma, if the original lemma has links.
for _, slot in ipairs({"infinitive"}) do
insert_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
local function generate_negative_imperatives(base)
if base.noimp then
return
end
-- Copy subjunctives to negative imperatives, preceded by "no".
for _, persnum in ipairs(neg_imp_person_number_list) do
local from = "pres_sub_" .. persnum
local to = "neg_imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form)
if base.alternant_multiword_spec.args.noautolinkverb then
return "no " .. form
elseif form:find("%[%[") then
-- already linked, e.g. when reflexive
return "[[no]] " .. form
else
return "[[no]] [[" .. form .. "]]"
end
end))
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
local function conjugate_verb(base)
construct_stems(base)
add_present_indic(base)
add_present_subj(base)
add_finite_non_present(base)
add_non_finite_forms(base)
fix_double_umlauts(base)
-- do non-reflexive non-imperative slot overrides
process_slot_overrides(base, function(slot)
return not slot:find("^imp_") and not slot:find("^neg_imp_")
end)
-- This should happen after process_slot_overrides() in case a derived slot is based on an override
-- (as with the imp_3s of [[dar]], [[estar]]).
add_imperatives(base)
-- do non-reflexive positive imperative slot overrides
process_slot_overrides(base, function(slot)
return slot:find("^imp_")
end)
-- We need to add joined reflexives, then joined and non-joined clitics, then non-joined reflexives, so we get
-- [[arrepéndete]] but [[no]] [[te]] [[arrependas]].
if base.refl then
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", "do joined")
process_slot_overrides(base, nil, "do reflexive") -- do reflexive-only slot overrides
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", false)
end
-- This should happen after add_reflexive_or_fixed_clitic_to_forms() so negative imperatives get the reflexive pronoun
-- and clitic in them.
generate_negative_imperatives(base)
-- do non-reflexive negative imperative slot overrides
-- FIXME: What about reflexive negative imperatives?
process_slot_overrides(base, function(slot)
return slot:find("^neg_imp_")
end)
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma`
-- in handle_infinitive_linked() works correctly and compares unlinked forms to unlinked forms.
handle_infinitive_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
user_basic_overrides = {},
user_stems = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
if inside == "" then
return base
end
local segments = put.parse_balanced_segment_run(inside, "[", "]")
local dot_separated_groups = put.split_alternating_runs(segments, "%.")
for i, dot_separated_group in ipairs(dot_separated_groups) do
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
elseif first_element:find("^var:") then
if #dot_separated_group > 1 then
parse_err(("Can't attach footnotes to 'var:' spec '%s'"):format(first_element))
end
base.var = first_element:match("^var:(.*)$")
elseif first_element:find(":") then
local colon_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*:%s*")
local first_element = colon_separated_groups[1][1]
if #colon_separated_groups[1] > 1 then
parse_err("Can't attach footnotes directly to '" .. first_element .. "' spec; attach them to the " ..
"colon-separated values following the initial colon")
end
if overridable_stems[first_element] then
if base.user_stems[first_element] then
parse_err("Overridable stem '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_stems[first_element] = overridable_stems[first_element](colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a basic override; we validate further later when the possible slots are available
if base.user_basic_overrides[first_element] then
parse_err("Basic override '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_basic_overrides[first_element] = allow_multiple_values_for_override(colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes},
"is form override")
end
else
parse_err("Unrecognized spec '" .. first_element .. "'")
end
end
return base
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, head)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original")
end
-- (2) Remove any links from the lemma, but remember the original form so we can use it below in the 'lemma_linked'
-- form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = head
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
local refl_verb = base.lemma
local verb, refl = rmatch(refl_verb, "^(.-)%-(se)$")
if not verb then
verb, refl = rmatch(refl_verb, "^(.-)('s)$")
end
if not verb then
verb, refl = refl_verb, nil
end
base.user_specified_verb = verb
base.refl = refl
base.verb = base.user_specified_verb
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
elseif base.refl then
-- Reconstruct the linked lemma with separate links around base verb, reflexive pronoun and clitic.
linked_lemma = base.user_specified_verb == base.verb and "[[" .. base.user_specified_verb .. "]]" or
"[[" .. base.verb .. "|" .. base.user_specified_verb .. "]]"
linked_lemma = linked_lemma .. (refl and "-[[" .. refl .. "]]" or "")
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve links in multiword
-- lemmas and include links in non-lemma forms rather than allowing the entire form to be a link.
linked_lemma = iut.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
local function detect_indicator_spec(base)
if (base.only3s and 1 or 0) + (base.only3sp and 1 or 0) + (base.only3p and 1 or 0) > 1 then
error("Only one of 'only3s', 'only3sp' and 'only3p' can be specified")
end
base.forms = {}
base.input_stems = {}
base.basic_overrides = {}
base.basic_reflexive_only_overrides = {}
base.orig_verb = base.verb -- in case of a 'like = "..."' redirect
if not base.no_built_in then
local function match_built_in_spec(verb, built_in_spec)
local prefix, non_prefixed_verb
if type(built_in_spec.match) == "function" then
prefix, non_prefixed_verb = built_in_spec.match(verb)
elseif built_in_spec.match:find("^%^") and rsub(built_in_spec.match, "^%^", "") == verb then
-- begins with ^, for exact match, and matches
prefix, non_prefixed_verb = "", verb
else
prefix, non_prefixed_verb = rmatch(verb, "^(.*)(" .. built_in_spec.match .. ")$")
end
return prefix, non_prefixed_verb
end
local function find_built_in(verb, var)
for _, built_in_spec in ipairs(built_in_conjugations) do
local prefix, non_prefixed_verb = match_built_in_spec(verb, built_in_spec)
if prefix then
if not built_in_spec.var then
if var then
error(("Can't specify a variant spec 'var:%s' with verb '%s'"):format(var, verb))
end
return prefix, non_prefixed_verb, built_in_spec
elseif not var then
local possible_vars = {}
for _, built_in_spec in ipairs(built_in_conjugations) do
local prefix, non_prefixed_verb = match_built_in_spec(verb, built_in_spec)
if prefix then
table.insert(possible_vars, built_in_spec.var)
end
end
error(("For verb '%s', must specify a variant using 'var:...'; possible values are %s"):format(
verb, table.concat(possible_vars, ", ")))
elseif built_in_spec.var == var then
return prefix, non_prefixed_verb, built_in_spec
end
end
end
return nil
end
local prefix, non_prefixed_verb, built_in_spec = find_built_in(base.verb, base.var)
if prefix then
-- we found a built-in verb
if built_in_spec.like then
-- we found a redirect to another verb that has the same conjugation, just a different infinitive
base.verb = prefix .. built_in_spec.like
local new_prefix, new_non_prefixed_verb, new_built_in_spec = find_built_in(base.verb, built_in_spec.likevar)
if new_prefix then
-- redirected to another built-in verb
base.prefix = new_prefix
base.non_prefixed_verb = new_non_prefixed_verb
built_in_spec = new_built_in_spec
else
built_in_spec = nil
end
else
base.prefix = prefix
base.non_prefixed_verb = non_prefixed_verb
end
end
if built_in_spec then
-- we found a built-in verb, possibly redirecting to another built-in verb
for stem, forms in pairs(built_in_spec.forms) do
if type(forms) == "function" then
forms = forms(base, base.prefix)
end
if stem:find("^refl_") then
stem = stem:gsub("^refl_", "")
if not base.alternant_multiword_spec.verb_slots_basic_map[stem] then
error("Internal error: setting for 'refl_" .. stem .. "' does not refer to a basic verb slot")
end
base.basic_reflexive_only_overrides[stem] = forms
elseif base.alternant_multiword_spec.verb_slots_basic_map[stem] then
-- an individual form override of a basic form
base.basic_overrides[stem] = forms
else
base.input_stems[stem] = forms
end
end
end
end
-- Override built-in-verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stems) do
base.input_stems[stem] = values
end
for override, values in pairs(base.user_basic_overrides) do
if not base.alternant_multiword_spec.verb_slots_basic_map[override] then
error("Unrecognized override '" .. override .. "': " .. base.angle_bracket_spec)
end
base.basic_overrides[override] = values
end
base.prefix = base.prefix or ""
base.non_prefixed_verb = base.non_prefixed_verb or base.verb
local inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)(re)$")
if not inf_stem then
inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)([aeiu]r)$")
end
if not inf_stem then
error("Unrecognized infinitive: " .. base.verb)
end
-- Remove accents from e.g. [[parèixer]], [[córrer]].
inf_stem = com.remove_accents(inf_stem)
-- Save full infinitive stem for use in future and conditional.
base.inf_stem = (inf_stem .. suffix):gsub("e$", "")
local stem = inf_stem
if suffix == "re" then
-- verbs in -ldre, -ndre have stem without the d
stem = stem:gsub("([ln])d$", "%1")
elseif suffix == "ur" then
stem = stem .. "u"
end
base.conj_vowel = (suffix == "re" or suffix == "ur") and "e" or suffix:gsub("r$", "")
-- If the stem is followed by a front vowel, convert it to its "back" form before calling combine_stem_ending(),
-- which expects the "back" form of the stem and may convert it back to the "front" form. Don't do this conversion
-- for ï so we leave [[arguïr]] (underlyingly 'argüïr') as 'argu' ("back" form), which becomes 'argü' ("front" form)
-- before front vowel ï and we end up with base.stem containing the underlying form 'argüï'. We remove the first of
-- two umlauts in a row in a postprocessing step (fix_double_umlauts()).
if rfind(suffix, "^[ei]") then
stem = com.front_to_back(stem)
end
-- Use combine_stem_ending() so we get ï if necessary.
base.stem = combine_stem_ending(base, stem, base.conj_vowel, false, "dont include prefix")
-- Propagate built-in-verb indicator flags to `base` and combine with user-specified flags.
for indicator_flag, _ in pairs(indicator_flags) do
base[indicator_flag] = base[indicator_flag] or base.input_stems[indicator_flag]
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
-- Propagate some settings up; some are used internally, others by [[Module:pt-headword]].
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Internal indicator flags. Do these before calling detect_indicator_spec() because add_slots() uses them.
for _, prop in ipairs { "refl", "clitic" } do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
base.alternant_multiword_spec = alternant_multiword_spec
end)
add_slots(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
detect_indicator_spec(base)
-- User-specified indicator flags. Do these after calling detect_indicator_spec() because the latter may set these
-- indicators for built-in verbs.
for prop, _ in pairs(indicator_flags) do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
end)
end
local function add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
local function insert_cat(cat, also_when_multiword)
-- Don't place multiword terms in categories like 'Catalan verbs ending in -ar' to avoid spamming the
-- categories with such terms.
if also_when_multiword or not multiword_lemma then
m_table.insertIfNot(alternant_multiword_spec.categories, "カタルーニャ語 " .. cat)
end
end
if check_for_red_links and alternant_multiword_spec.source_template == "ca-conj" and multiword_lemma then
for _, slot_and_accel in ipairs(alternant_multiword_spec.all_verb_slots) do
local slot = slot_and_accel[1]
local forms = base.forms[slot]
local must_break = false
if forms then
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
local title = mw.title.new(form.form)
if title and not title.exists then
insert_cat("活用表に赤リンクを含む動詞")
must_break = true
break
end
end
end
end
if must_break then
break
end
end
end
map_general(base.output_stems.stem, function(stem)
local stem_base, conj_vowel = split_conj_vowel(stem)
local need_no_eix_infix = true
if conj_vowel ~= base.conj_vowel then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#不規則動詞|混合活用]]")
elseif conj_vowel == "a" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第一変化動詞|第一変化]]")
insert_cat("第一変化動詞")
elseif conj_vowel == "e" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第二変化動詞|第二変化]]")
insert_cat("第二変化動詞")
elseif conj_vowel == "i" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第三変化動詞|第三変化]]")
insert_cat("第三変化動詞")
need_no_eix_infix = false
map_general(base.output_stems.eix_infix, function(form)
if form == "+" then
insert_ann("eix_infix", "接中辞-eix-有り")
insert_cat("-eix-を含む第三変化動詞")
elseif form == "-" then
insert_ann("eix_infix", "接中辞-eix-無し")
insert_cat("-eix-を含まない第三変化動詞")
end
end)
else
error(("Internal error: Stem '%s' doesn't end in conjugation vowel a/e/i and split_conj_vowel() didn't catch it"
):format(stem))
end
if need_no_eix_infix then
insert_ann("eix_infix", "接中辞無し")
end
end)
if base.input_stems.g_infix then
insert_ann("g_infix", "軟口蓋接中辞有り")
insert_cat("軟口蓋接中辞を含む動詞")
else
insert_ann("g_infix", "no infix")
end
if base.output_stems.irreg then
insert_ann("irreg", "不規則")
insert_cat("不規則動詞")
else
insert_ann("irreg", "regular")
end
if base.only3s then
insert_ann("defective", "非人称")
insert_cat("非人称動詞")
elseif base.only3sp then
insert_ann("defective", "第三人称のみ")
insert_cat("第三人称動詞")
elseif base.only3p then
insert_ann("defective", "第三人称複数のみ")
insert_cat("第三人称複数動詞")
elseif base.no_pres_stressed then
insert_ann("defective", "欠如")
insert_cat("欠如動詞")
else
insert_ann("defective", "規則動詞")
end
--if base.clitic then
-- insert_cat("verbs with lexical clitics")
--end
if base.refl then
insert_cat("再帰動詞")
end
local stem_base, conj_vowel = split_conj_vowel(base.stem)
local cons_alt
if conj_vowel == "i" and base.output_stems.eix_infix == "+" then
-- no alternations in verbs like [[afligir]] because all endings are front
elseif stem_base:find("ç$") then
cons_alt = "ç-c"
elseif stem_base:find("c$") then
cons_alt = "c-qu"
elseif stem_base:find("g$") then
cons_alt = "g-gu"
elseif stem_base:find("gu$") then
cons_alt = "gu-gü"
elseif stem_base:find("j$") then
cons_alt = "j-g"
elseif stem_base:find("qu$") then
cons_alt = "qu-qü"
end
if cons_alt then
local desc = cons_alt .. " alternation"
insert_ann("cons_alt", desc)
insert_cat(desc .. "交替の動詞")
else
insert_ann("cons_alt", "non-alternating")
end
end
-- Compute the categories to add the verb to, as well as the annotation to display in the
-- conjugation title bar. We combine the code to do these functions as both categories and
-- title bar contain similar information.
local function compute_categories_and_annotation(alternant_multiword_spec)
alternant_multiword_spec.categories = {}
local ann = {}
alternant_multiword_spec.annotation = ann
ann.conj = {}
ann.g_infix = {}
ann.eix_infix = {}
ann.irreg = {}
ann.defective = {}
ann.cons_alt = {}
local multiword_lemma = false
for _, form in ipairs(alternant_multiword_spec.forms.infinitive) do
if form.form:find(" ") then
multiword_lemma = true
break
end
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
end)
local ann_parts = {}
local conj = table.concat(ann.conj, " or ")
if conj ~= "" then
table.insert(ann_parts, conj)
end
local eix_infix = table.concat(ann.eix_infix, " or ")
if eix_infix ~= "" and eix_infix ~= "no infix" then
table.insert(ann_parts, eix_infix)
end
local irreg = table.concat(ann.irreg, " or ")
if irreg ~= "" and irreg ~= "regular" then
table.insert(ann_parts, irreg)
end
local g_infix = table.concat(ann.g_infix, " or ")
if g_infix ~= "" and g_infix ~= "no infix" then
table.insert(ann_parts, g_infix)
end
local defective = table.concat(ann.defective, " or ")
if defective ~= "" and defective ~= "regular" then
table.insert(ann_parts, defective)
end
local cons_alt = table.concat(ann.cons_alt, " or ")
if cons_alt ~= "" and cons_alt ~= "non-alternating" then
table.insert(ann_parts, cons_alt)
end
alternant_multiword_spec.annotation = table.concat(ann_parts, ", ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = alternant_multiword_spec.forms.infinitive
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec)
local function transform_accel_obj(slot, formobj, accel_obj)
-- No accelerators for negative imperatives, which are always multiword and derived directly from the
-- present subjunctive.
if slot:find("^neg_imp") then
return nil
end
if accel_obj then
accel_obj.form = "verb-form-" .. reconstructed_verb_spec
end
return accel_obj
end
local props = {
lang = lang,
lemmas = lemmas,
transform_accel_obj = transform_accel_obj,
slot_list = alternant_multiword_spec.verb_slots_basic,
}
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote
end
local notes_template = [=[
<div class="roa-footnote-outer-div" style="width:100%;">
<div class="roa-footnote-inner-div">
{footnote}
</div></div>
]=]
local basic_table = [=[
{description}<div class="NavFrame">
<div class="NavHead"> {title} の活用</div>
<div class="NavContent">
{\op}| class="roa-inflection-table" data-toggle-category="inflection"
|-
! colspan="3" class="roa-nonfinite-header" | <span title="infinitiu">不定詞</span>
| colspan="5" | {infinitive}
|-
! colspan="3" class="roa-nonfinite-header" | <span title="gerundi">現在分詞</span>
| colspan="5" | {gerund}
|-
! rowspan="3" colspan="2" class="roa-nonfinite-header" | <span title="participi passat">過去分詞</span>
| colspan="2" class="roa-nonfinite-header" |
! colspan="2" class="roa-nonfinite-header" | 男性
! colspan="2" class="roa-nonfinite-header" | 女性
|-
! colspan="2" class="roa-nonfinite-header" | 単数
| colspan="2" | {pp_ms}
| colspan="2" | {pp_fs}
|-
! colspan="2" class="roa-nonfinite-header" | 複数
| colspan="2" | {pp_mp}
| colspan="2" | {pp_fp}
|-
! colspan="2" rowspan="2" class="roa-person-number-header" | 人称
! colspan="3" class="roa-person-number-header" | 単数
! colspan="3" class="roa-person-number-header" | 複数
|-
! class="roa-person-number-header" style="width:12.5%;" | 第一人称
! class="roa-person-number-header" style="width:12.5%;" | 第二人称
! class="roa-person-number-header" style="width:12.5%;" | 第三人称
! class="roa-person-number-header" style="width:12.5%;" | 第一人称
! class="roa-person-number-header" style="width:12.5%;" | 第二人称
! class="roa-person-number-header" style="width:12.5%;" | 第三人称
|-
! rowspan="6" class="roa-indicative-left-rail" | <span title="indicatiu">直説法</span>
! class="roa-indicative-left-rail" |
! class="roa-indicative-left-rail" | <<jo>>
! class="roa-indicative-left-rail" | <<tu>>
! class="roa-indicative-left-rail" | <<ell>>/<<ella>><br /><<vostè>>
! class="roa-indicative-left-rail" | <<nosaltres>><br /><<nós>>
! class="roa-indicative-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-indicative-left-rail" | <<ells>>/<<elles>><br /><<vostès>>
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="present">現在</span>
| {pres_1s}
| {pres_2s}
| {pres_3s}
| {pres_1p}
| {pres_2p}
| {pres_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="imperfet">不完了過去</span>
| {impf_1s}
| {impf_2s}
| {impf_3s}
| {impf_1p}
| {impf_2p}
| {impf_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="futur">未来</span>
| {fut_1s}
| {fut_2s}
| {fut_3s}
| {fut_1p}
| {fut_2p}
| {fut_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="passat">完了過去</span>
| {pret_1s}
| {pret_2s}
| {pret_3s}
| {pret_1p}
| {pret_2p}
| {pret_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="condicional">可能法</span>
| {cond_1s}
| {cond_2s}
| {cond_3s}
| {cond_1p}
| {cond_2p}
| {cond_3p}
|-
! class="roa-subjunctive-left-rail" rowspan="3" | <span title="subjuntiu">接続法</span>
! class="roa-subjunctive-left-rail" |
! class="roa-subjunctive-left-rail" | <<jo>>
! class="roa-subjunctive-left-rail" | <<tu>>
! class="roa-subjunctive-left-rail" | <<ell>>/<<ella>><br /><<vostè>>
! class="roa-subjunctive-left-rail" | <<nosaltres>><br /><<nós>>
! class="roa-subjunctive-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-subjunctive-left-rail" | <<ells>>/<<elles>><br /><<vostès>>
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | <span title="present">現在</span>
| {pres_sub_1s}
| {pres_sub_2s}
| {pres_sub_3s}
| {pres_sub_1p}
| {pres_sub_2p}
| {pres_sub_3p}
|-
! class="roa-subjunctive-left-rail" style="height:3em;" rowspan="1" | <span title="imperfet">過去</span>
| {impf_sub_1s}
| {impf_sub_2s}
| {impf_sub_3s}
| {impf_sub_1p}
| {impf_sub_2p}
| {impf_sub_3p}
|-
! rowspan="3" class="roa-imperative-left-rail" style="height:3em;" | <span title="imperatiu">命令法</span>
! class="roa-imperative-left-rail" |
! class="roa-imperative-left-rail" | —
! class="roa-imperative-left-rail" | <<tu>>
! class="roa-imperative-left-rail" | <<vostè>>
! class="roa-imperative-left-rail" | <<nosaltres>>
! class="roa-imperative-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-imperative-left-rail" | <<vostès>>
|-
! class="roa-imperative-left-rail" style="height:3em;" | <span title="afirmatiu">-</span>
| —
| {imp_2s}
| {imp_3s}
| {imp_1p}
| {imp_2p}
| {imp_3p}
|-
! class="roa-imperative-left-rail" style="height:3em;" | <span title="negatiu">禁止</span> (<<no>>)
| —
| {neg_imp_2s}
| {neg_imp_3s}
| {neg_imp_1p}
| {neg_imp_2p}
| {neg_imp_3p}
|{\cl}{notes_clause}</div></div>]=]
local function make_table(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
forms.title = link_term(alternant_multiword_spec.lemmas[1].form, nil, "term")
local ann_parts = {}
if alternant_multiword_spec.annotation ~= "" then
table.insert(ann_parts, alternant_multiword_spec.annotation)
end
if alternant_multiword_spec.args.titlenote then
table.insert(ann_parts, alternant_multiword_spec.args.titlenote)
end
local annotation = table.concat(ann_parts, ", ")
if annotation ~= "" then
forms.title = forms.title .. " (" .. annotation .. ")"
end
forms.description = ""
-- Format the table.
forms.footnote = alternant_multiword_spec.footnote_basic
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
local table_with_pronouns = rsub(basic_table, "<<([^<>|]-)|([^<>|]-)>>", link_term)
local table_with_pronouns = rsub(table_with_pronouns, "<<(.-)>>", link_term)
return require("Module:TemplateStyles")("Module:roa-verb/style.css") ..
m_string_utilities.format(table_with_pronouns, forms)
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head)
local PAGENAME = mw.loadData("Module:headword/data").pagename
local function in_template_space()
return mw.title.getCurrentTitle().nsText == "テンプレート"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the
-- current page title or the value of |pagename=; but not when called from {{ca-verb form of}}, where the
-- page title is a non-lemma form. Note that the verb spec may omit the infinitive; e.g. it may be "<i-e>".
-- For this reason, we use the value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "ca-verb form of" and args.pagename or PAGENAME
local head = headword_head or pagename
local arg1 = args[1]
if not arg1 then
if (pagename == "ca-conj" or pagename == "ca-verb" or pagename == "ca-verb form of" or pagename == "ca-conjug") and in_template_space() then
arg1 = "amar<>"
else
arg1 = "<>"
end
end
-- When called from {{ca-verb form of}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "ca-verb form of" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "ca-verb form of" and in_template_space() then
verb_form_of_form = "ami"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local refl_clitic_verb, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(refl_clitic_verb, "[^%[]", "")
local right_brackets = rsub(refl_clitic_verb, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(refl_clitic_verb) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
refl_clitic_verb, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = refl_clitic_verb .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local function split_bracketed_runs_into_words(bracketed_runs)
return put.split_alternating_runs(bracketed_runs, " ", "preserve splitchar")
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
-- Split words only on spaces, not on hyphens, because that messes up reflexive verb parsing.
split_bracketed_runs_into_words = split_bracketed_runs_into_words,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
normalize_all_lemmas(alternant_multiword_spec, head)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
slot_list = alternant_multiword_spec.all_verb_slots,
inflect_word_spec = conjugate_verb,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = iut.remove_redundant_links(form.form)
end
end
compute_categories_and_annotation(alternant_multiword_spec)
if args.json and source_template == "ca-conj" then
return require("Module:JSON").toJSON(alternant_multiword_spec.forms)
end
return alternant_multiword_spec
end
-- Entry point for {{ca-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent().args
local params = {
[1] = {},
["titlenote"] = {},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
}
local args = require("Module:parameters").process(parent_args, params)
local alternant_multiword_spec = export.do_generate_forms(args, "ca-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) ..
require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang, nil, nil, force_cat)
end
return export
g60z1mktornke5hixabhd0tk8z1w4qa
2313425
2313420
2026-08-09T09:43:49Z
Kuroco2k
84207
2313425
Scribunto
text/plain
--[=[
This module implements {{ca-conj}} and provides the underlying conjugation functions for {{ca-verb}}
(whose actual formatting is done in [[Module:ca-headword]]).
Authorship: Ben Wing <benwing2>
]=]
local export = {}
--[=[
TERMINOLOGY:
-- "slot" = A particular combination of tense/mood/person/number/etc.
Example slot names for verbs are "pres_1s" (present indicative first-person singular), "pres_sub_2s" (present
subjunctive second-person singular) "impf_sub_3p" (imperfect subjunctive third-person plural).
Each slot is filled with zero or more forms.
-- "form" = The conjugated Catalan form representing the value of a given slot.
-- "lemma" = The dictionary form of a given Catalan term. For Catalan, always the infinitive.
]=]
--[=[
FIXME:
--]=]
local lang = require("Module:languages").getByCode("ca")
local m_string_utilities = require("Module:string utilities")
local m_links = require("Module:links")
local m_table = require("Module:table")
local iut = require("Module:inflection utilities")
local put = require("Module:parse utilities")
local com = require("Module:ca-common")
local force_cat = false -- set to true for debugging
local check_for_red_links = false -- set to false for debugging
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local rsubn = mw.ustring.gsub
local rsub = com.rsub
local u = mw.ustring.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
-- version of rsubn() that returns a 2nd argument boolean indicating whether a substitution was made.
local function rsubb(term, foo, bar)
local retval, nsubs = rsubn(term, foo, bar)
return retval, nsubs > 0
end
local function link_term(term, display, face)
return m_links.full_link({ lang = lang, term = term, alt = display }, face)
end
local front_vowel = "eèéiíï"
local front_vowel_c = "[" .. front_vowel .. "]"
local V = com.V -- vowel regex class
local C = com.C -- consonant regex class
-- IS_USER_STEM_OVERRIDE is prepended to user-supplied stem overrides to prevent `base.prefix` from being prepended.
-- IS_USER_FORM_OVERRIDE is similar but also prevents final devoicing (cf. Balearic pres_1s 'trob' of [[trobar]]).
-- Don't use 0xFFF0 in case we call a [[Module:parse-utilities]] function that uses it temporarily.
local IS_USER_STEM_OVERRIDE = u(0xFFF1)
local IS_USER_FORM_OVERRIDE = u(0xFFF2)
--[=[
Irregular verbs:
-ldre/-ndre verbs:
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
caldre - cal [calent] calia caldrà calgué calgui - calgut,-
coldre colc col colem colia coldré colguí colgui colguem colt,colta
doldre dolc dol dolem dolia doldré dolguí dolgui dolguem dolgut,dolguda
moldre molc mol molem molia moldré molguí molgui molguem molt,molta
oldre olc ol olem olia oldré olguí olgui olguem olgut,olguda
-soldre -solc -sol -solem -solia -soldré -solguí -solgui -solguem -solt,-solta
(absoldre, dissoldre, resoldre)
toldre tolc tol tolem tolia toldré tolguí tolgui tolguem tolt,tolta
romandre romanc roman romanem romania romandré romanguí romangui romanguem romàs,romasa,romasos
encendre encenc encén encenem encenia encendré encenguí encengui encenguem encès,encesa,encesos
fendre fenc fen/-fèn fenem fenia fendré fenguí fengui fenguem fes/-fès,fesa,fesos
(defendre, ofendre)
-pendre -depenc -pèn -penem -penia -pendré -penguí -pengui -penguem -pès,-pesa,-pesos
(dependre,despendre,expendre,suspendre)
prendre prenc pren/-prèn prenem prenia prendré prenguí prengui prenguem pres/-près,presa,presos
(aprendre, comprendre, desprendre, emprendre, reprendre, sorprendre)
-tendre -tenc -tén -tenem -tenia -tendré -tenguí -tengui -tenguem -tès,-tesa,-tesos
(pres2s: atens, pres3p: atenen)
(atendre, contendre, distendre, entendre, estendre, pretendre)
vendre venc ven venem venia vendré venguí vengui venguem venut,venuda
(malvendre, revendre)
fondre fonc fon fonem fonia fondré fonguí fongui fonguem fos/-fós,fosa,fosos
(confondre, difondre, infondre, refondre)
enfondre enfonc enfon enfonem enfonia enfondré enfonguí enfongui enfonguem enfús,enfusa,enfusos
pondre ponc pon ponem ponia pondré ponguí pongui ponguem post,posta,postos
(compondre, correspondre, descompondre, respondre)
tondre tonc ton tonem tonia tondré tonguí tongui tonguem tos,tosa,tosos
cerndre cerno cern cernem cernia cerndré cerní cerni cernem cernut,cernuda
-ler verbs (mostly like -ldre verbs):
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
caler (var. of caldre)
doler (var. of doldre)
soler solc sol solem solia soldré solguí solgui solguem solgut,solguda
valer/valdre valc val valem valia valdré valguí valgui valguem valgut,valguda
(prevaler, equivaler)
other -dre/-tre verbs (regular except sometimes pp):
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
batre bato bat batem batia batré batí bati batem batut,batuda
-metre -meto -met -metem -metia -metré -metí -meti -metem -mès,-mesa,-mesos
(ad-, co-, compro-, e-, entremetre's, mal-, o-, per-, pro-, read-, re-, retrans-, sot-, tra-, trans-)
perdre perdo perd perdem perdia perdré perdí perdi perdem perdut,perduda
-ure verbs
infinitive pres1s pres3s pres1p impf1s impf1p fut1s pret1s sub1s sub1p pp
caure caic cau caiem queia quèiem cauré caiguí caigui caiguem caigut,caiguda
(decaure, recaure)
plaure plac plau plaem plaïa plaíem plauré plaguí plagui plaguem plagut,plaguda
(complaure)
raure rac rau raem raïa raíem rauré raguí ragui raguem ragut,raguda
beure bec beu bevem bevia bevíem beuré beguí begui beguem begut,beguda
(embeure)
creure crec creu creiem creia crèiem creuré creguí cregui creguem cregut,creguda
deure dec deu devem devia devíem deuré deguí degui deguem degut,deguda
jeure jec jeu jaiem jeia jèiem jauré jaguí jegui jaguem jagut,jaguda
(ajeure)
lleure - lleu [-] llevia - lleurà llegué llegui - llegut,-
seure sec seu seiem seia sèiem seuré seguí segui seguem segut,seguda
(asseure)
treure trec treu traiem treia trèiem trauré traguí tregui traguem tret,treta
(abstreure, atreure, contreure, distreure, extreure, retreure, sostreure)
veure veig veu veiem veia vèiem veuré viu,veieres/veres, vegi vegem vist,vista,vists/vistos
(entreveure, preveure, reveure) veié/veu,veiérem/vérem
riure ric riu riem reia rèiem riuré riguí rigui riguem rigut,riguda
(somriure)
(e)scriure escric escriu escrivim escrivia escrivíem escriuré escriví/escriguí escrigui escriguem escrit,escrita
(circumscriure, descriure, inscriure, prescriure, proscriure, subscriure, transcriure)
viure visc viu vivim vivia vivíem viuré visquí visqui visquem viscut,viscuda
(conviure, sobreviure)
cloure cloc clou cloem cloïa cloíem clouré cloguí clogui cloguem clos,closa,closos
(concloure, descloure, encloure, excloure, incloure, recloure)
encloure encloc enclou encloem encloïa encloíem enclouré encloguí enclogui encloguem enclòs,enclosa,enclosos
coure coc cou coem coïa coíem couré coguí cogui coguem cuit/cogut,cuita/coguda
moure moc mou movem movia movíem mouré moguí mogui moguem mogut,moguda
(promoure)
noure noc nou noem noïa noíem nouré noguí nogui noguem nogut,noguda
ploure - plou [plovent] plovia - plourà plogué plogui - plogut,ploguda
-nyer verbs (regular except pp)
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
atènyer atenyo ateny atenyem atenyia atenyeré atenyí atenyi atenyem atès,atesa,atesos
empènyer empenyo empeny empenyem empenyia empenyeré empenyí empenyi empenyem empès,empesa,empesos
estrènyer estrenyo estreny estrenyem estrenyia estrenyeré estrenyí estrenyi estrenyem estret,estreta
estrènyer
(constrènyer,restrènyer)
fènyer fenyo feny fenyem fenyia fenyeré fenyí/fenguí fenyi fenyem fenyut/fengut,fenyuda/fenguda
pertànyer pertanyo pertany pertanyem pertanyia pertanyeré pertanyí/pertanguí pertanyi pertanyem pertanyut/pertangut,pertanyuda/pertanguda
plànyer planyo plany planyem planyia planyeré planyí/planguí planyi planyem plangut/planyut,planguda/planyuda
-xer verbs (NOTE: pres2s in -xes)
infinitive pres1s pres3s pres1p impf1s fut1s pret1s sub1s sub1p pp
créixer creixo creix creixem creixia creixeré creixí/cresquí creixi creixem crescut,crescuda
(acréixer,decréixer)
conèixer conec coneix coneixem coneixia coneixeré coneguí conegui coneguem conegut,coneguda
(desconèixer,reconèixer)
merèixer mereixo mereix mereixem mereixia mereixeré mereixí/meresquí mereixi mereixem merescut,merescuda
néixer/ neixo/ neix/ naixem naixia naixeré naixí/nasquí neixi/ naixem/nasquem nascut,nascuda
nàixer naixo naix naixi
(renéixer)
parèixer parec pareix pareixem pareixia pareixeré pareguí paregui pareguem paregut,pareguda
(aparèixer,comparèixer,desaparèixer,reaparèixer)
péixer peixo peix paixem paixia paixeré paixí peixi paixem pascut,pascuda
misc. -er verbs
infinitive pres1s pres3s pres1p impf1s impf1p fut1s pret1s sub1s sub1p pp
córrer corro corre correm corria corríem correré correguí corri correm corregut,correguda
fúmer fumo fum fumem fumia fumíem fumeré fumí fumi fumem fumut,fumuda
prémer premo prem premem premia premíem premeré premí premi premem premut,premuda
(es-, re-)
témer temo tem temem temia temíem temeré temí temi temem temut,temuda
trémer [regular]
tòrcer torço torç torcem torcia torcíem torceré torcí torci torcem torçut,torçuda
(des-) [pres2s torces]
vèncer venço venç vencem vencia vencíem venceré vencí venci vencem vençut,vençuda
(con-, re-) [pres2s vences]
cabre/caber cabo cap cabem cabia cabíem cabré cabí càpiga capiguem cabut,cabuda
[sub2s càpigues]
haver he/haig ha havem/hem havia havíem hauré haguí hagi hàgim/haguem hagut,haguda
[noimp] [cond1s hauria/haguera; impsub2s haguessis/haguesses]
poder puc pot podem podia podíem podré poguí pugui puguem pogut,poguda
saber sé sap sabem sabia sabíem sabré sabí sàpiga sapiguem sabut,sabuda
[imp2s sàpigues, imp2p sapigueu]
voler vull vol volem volia volíem voldré volguí vulgui vulguem volgut,volguda
ser/ésser soc és som era érem seré fui sigui siguem estat/sigut,estada/siguda
[ger sent/essent] [cond1s seria/fora]
[pres: soc,ets,éts,som,sou,són; pret: fui,fores,fou,fórem,fóreu,foren; impsub: fos,fossis,fos,fóssim,fóssiu,fossin]
[imp: sigues,sigueu]
fer faig fa fem feia fèiem faré fiu faci fem fet,feta
[pres3p fan]
[pret: fiu,feres,feu,férem,féreu,feren]
]=]
local all_persons_numbers = {
["1s"] = "1|s",
["2s"] = "2|s",
["3s"] = "3|s",
["1p"] = "1|p",
["2p"] = "2|p",
["3p"] = "3|p",
}
local person_number_list = {"1s", "2s", "3s", "1p", "2p", "3p"}
local imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
local neg_imp_person_number_list = {"2s", "3s", "1p", "2p", "3p"}
proclitic_non_elided_person_number_to_reflexive_pronoun = {
["1s"] = "em ",
["2s"] = "et ",
["3s"] = "es ",
["1p"] = "ens ",
["2p"] = "us ",
["3p"] = "es ",
}
proclitic_elided_person_number_to_reflexive_pronoun = {
["1s"] = "m'",
["2s"] = "t'",
["3s"] = "s'",
["1p"] = "ens ",
["2p"] = "us ",
["3p"] = "s'",
}
enclitic_non_elided_person_number_to_reflexive_pronoun = {
["1s"] = "-me",
["2s"] = "-te",
["3s"] = "-se",
["1p"] = "-nos",
["2p"] = "-vos",
["3p"] = "-se",
}
enclitic_elided_person_number_to_reflexive_pronoun = {
["1s"] = "'m",
["2s"] = "'t",
["3s"] = "'s",
["1p"] = "'ns",
["2p"] = "-us",
["3p"] = "'s",
}
local indicator_flags = m_table.listToSet {
"no_pres_stressed",
"only3s", "only3sp", "only3p", "noimp",
"pp_inv", "irreg", "no_built_in",
}
-- Initialize all the slots for which we generate forms.
local function add_slots(alternant_multiword_spec)
-- "Basic" slots: All slots that go into the regular table (not the reflexive form-of table).
alternant_multiword_spec.verb_slots_basic = {
{"infinitive", "inf"},
{"infinitive_linked", "inf"},
{"gerund", "ger"},
{"pp_ms", "m|s|past|part"},
{"pp_fs", "f|s|past|part"},
{"pp_mp", "m|p|past|part"},
{"pp_fp", "f|p|past|part"},
}
-- Special slots used to handle non-reflexive parts of reflexive verbs in {{ca-verb form of}}. For example, for a
-- reflexive-only verb like [[arrepentirse]], we want to be able to use {{ca-verb form of}} on [[arrepinta]] (which
-- should mention that it is a part of 'me arrepinta', first-person singular present subjunctive, and
-- 'se arrepinta', third-person singular present subjunctive) or on [[arrepentimos]] (which should mention that it
-- is a part of 'arrepentímonos', first-person plural present indicative or preterite). Similarly, we want to use
-- {{ca-verb form of}} on [[arrepentindo]] (which should mention that it is a part of 'se ... arrepentindo',
-- syntactic variant of [[arrepentíndose]], which is the gerund of [[arrepentirse]]). To do this, we need to be
-- able to map non-reflexive parts like [[arrepinta]], [[arrepentimos]], [[arrepentindo]], etc. to their reflexive
-- equivalent(s), to the tag(s) of the equivalent(s), and, in the case of forms like [[arrepentindo]],
-- [[arrepentir]] and imperatives, to the separated syntactic variant of the verb+clitic combination. We do this by
-- creating slots for the non-reflexive part equivalent of each basic reflexive slot, and for the separated
-- syntactic-variant equivalent of each basic reflexive slot that is formed of verb+clitic. We use slots in this
-- way to deal with multiword lemmas. Note that we run into difficulties mapping between reflexive verbs,
-- non-reflexive part equivalents, and separated syntactic variants if a slot contains more than one form. To
-- handle this, if there are the same number of forms in two slots we're trying to match up, we assume the forms
-- match one-to-one; otherwise we don't match up the two slots (which means {{ca-verb form of}} won't work in this
-- case, but such a case is extremely rare and not worth worrying about). Alternatives that handle this "properly"
-- are significantly more complicated and require non-trivial modifications to [[Module:inflection utilities]].
local need_special_verb_form_of_slots = alternant_multiword_spec.source_template == "ca-verb form of" and
alternant_multiword_spec.refl
if need_special_verb_form_of_slots then
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {
{"infinitive_non_reflexive", "-"},
{"infinitive_variant", "-"},
{"gerund_non_reflexive", "-"},
{"gerund_variant", "-"},
}
else
alternant_multiword_spec.verb_slots_reflexive_verb_form_of = {}
end
-- Add entries for a slot with person/number variants.
-- `verb_slots` is the table to add to.
-- `slot_prefix` is the prefix of the slot, typically specifying the tense/aspect.
-- `tag_suffix` is a string listing the set of inflection tags to add after the person/number tags.
-- `person_number_list` is a list of the person/number slot suffixes to add to `slot_prefix`.
local function add_personal_slot(verb_slots, slot_prefix, tag_suffix, person_number_list)
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local slot = slot_prefix .. "_" .. persnum
local accel = tag_suffix .. "|" .. persnum_tag
table.insert(verb_slots, {slot, accel})
end
end
-- Add a personal slot (i.e. a slot with person/number variants) to `verb_slots_basic`.
local function add_basic_personal_slot(slot_prefix, tag_suffix, person_number_list, no_special_verb_form_of_slot)
add_personal_slot(alternant_multiword_spec.verb_slots_basic, slot_prefix, tag_suffix, person_number_list)
-- Add special slots for handling non-reflexive parts of reflexive verbs in {{ca-verb form of}}.
-- See comment above in `need_special_verb_form_of_slots`.
if need_special_verb_form_of_slots and not no_special_verb_form_of_slot then
for _, persnum in ipairs(person_number_list) do
local persnum_tag = all_persons_numbers[persnum]
local basic_slot = slot_prefix .. "_" .. persnum
local accel = tag_suffix .. "|" .. persnum_tag
table.insert(alternant_multiword_spec.verb_slots_reflexive_verb_form_of, {basic_slot .. "_non_reflexive", "-"})
end
end
end
add_basic_personal_slot("pres", "直説法|現在", person_number_list)
add_basic_personal_slot("impf", "直説法|不完全過去", person_number_list)
add_basic_personal_slot("pret", "直説法|完全過去", person_number_list)
add_basic_personal_slot("fut", "直説法|未来", person_number_list)
add_basic_personal_slot("cond", "可能法", person_number_list)
add_basic_personal_slot("pres_sub", "接続法|現在", person_number_list)
add_basic_personal_slot("impf_sub", "接続法|過去", person_number_list)
add_basic_personal_slot("imp", "命令法", imp_person_number_list)
-- Don't need special non-reflexive-part slots because the negative imperative is multiword, of which the
-- individual words are 'no' + subjunctive.
add_basic_personal_slot("neg_imp", "命令法|禁止", neg_imp_person_number_list, "no special verb form of")
-- Don't need special non-reflexive-part slots because we don't want [[arrependendo]] mapping to [[arrependendo-me]]
-- (only [[arrependendo-se]]) or [[arrepender]] mapping to [[arrepender-me]] (only [[arrepender-se]]).
add_basic_personal_slot("infinitive", "inf", person_number_list, "no special verb form of")
add_basic_personal_slot("gerund", "ger", person_number_list, "no special verb form of")
-- Generate the list of all slots.
alternant_multiword_spec.all_verb_slots = {}
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_basic) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
for _, slot_and_accel in ipairs(alternant_multiword_spec.verb_slots_reflexive_verb_form_of) do
table.insert(alternant_multiword_spec.all_verb_slots, slot_and_accel)
end
alternant_multiword_spec.verb_slots_basic_map = {}
for _, slotaccel in ipairs(alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
alternant_multiword_spec.verb_slots_basic_map[slot] = accel
end
end
local overridable_stems = {}
local function allow_multiple_values_for_override(separated_groups, data, is_form_override)
local retvals = {}
for _, separated_group in ipairs(separated_groups) do
local footnotes = data.fetch_footnotes(separated_group)
local form = separated_group[1]
-- Prepend marker to prevent prefixing with `base.prefix`, and (in the case of form overrides) prevent
-- final devoicing.
if is_form_override then
form = IS_USER_FORM_OVERRIDE .. form
else
form = IS_USER_STEM_OVERRIDE .. form
end
local retval = {form = form, footnotes = footnotes}
table.insert(retvals, retval)
end
return retvals
end
for _, overridable_stem in ipairs {
"stem",
"stressed_stem",
"unstressed_stem",
"pres_unstressed",
"pres_stressed",
"pres3s", -- overrides just pres_2s and pres_3s
-- Don't include pres1s, pres3p; use pres_1s etc. if you need to override just those forms
"impf1",
"impf2",
"pret",
"fut",
"cond",
"pres_sub_stressed",
"pres_sub_unstressed",
"impf_sub",
"pp",
"g_infix",
"eix_infix",
} do
-- Written so we can substitute a different validator; parallel code in [[Module:es-verb]] and [[Module:pt-verb]]
-- has simple_choice validators.
overridable_stems[overridable_stem] = allow_multiple_values_for_override
end
-- Useful as the value of the `match` property of a built-in verb. `main_verb_spec` is a Lua pattern that should match
-- the non-prefixed part of a verb, and `prefix_specs` is a list of Lua patterns that should match the prefixed part of
-- a verb. If a prefix spec is preceded by ^, it must match exactly at the beginning of the verb; otherwise, additional
-- prefixes (e.g. re-, des-) may precede. Return the prefix and main verb.
local function match_against_verbs(main_verb_spec, prefix_specs)
return function(verb)
for _, prefix_spec in ipairs(prefix_specs) do
if prefix_spec:find("^%^") then
-- must match exactly
prefix_spec = prefix_spec:gsub("^%^", "")
if prefix_spec == "" then
-- We can't use the second branch of the if-else statement because an empty () returns the current position
-- in rmatch().
local main_verb = rmatch(verb, "^(" .. main_verb_spec .. ")$")
if main_verb then
return "", main_verb
end
else
local prefix, main_verb = rmatch(verb, "^(" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
else
local prefix, main_verb = rmatch(verb, "^(.*" .. prefix_spec .. ")(" .. main_verb_spec .. ")$")
if prefix then
return prefix, main_verb
end
end
end
return nil
end
end
--[=[
Built-in (usually irregular) conjugations.
Each entry is processed in turn and consists of an object with two fields:
1. match=: Specifies the built-in verbs that match this object.
2. forms=: Specifies the built-in stems and forms for these verbs.
The value of match= is either a string beginning with "^" (match only the specified verb), a string not beginning
with "^" (match any verb ending in that string), or a function that is passed in the verb and should return the prefix
of the verb if it matches, otherwise nil. The function match_against_verbs() is provided to facilitate matching a set
of verbs with a common ending and specific prefixes (e.g. [[ter]] and [[ater]] but not [[abater]], etc.).
The value of forms= is a table specifying stems and individual override forms. Each key of the table names either a
stem (e.g. `pres_stressed`), a stem property (e.g. `g_infix`) or an individual override form (e.g. `pres_1s`).
Each value of a stem can either be a string (a single stem), a list of strings, or a list of objects of the form
{form = STEM, footnotes = {FOONOTES}}. Each value of an individual override should be of exactly the same form except
that the strings specify full forms rather than stems. The values of a stem property depend on the specific property
but are generally strings or booleans.
In order to understand how the stem specifications work, it's important to understand the phonetic modifications done
by combine_stem_ending(). In general, the complexities of predictable prefix, stem and ending modifications are all
handled in this function. In particular:
1. Spelling-based modifications (c/qu, ç/c, g/gu, j/g, gu/gü, qu/qü) occur automatically as appropriate for the ending.
2. If the ending begins with an asterisk, this is a signal to delete the accent on the last syllable of the stem, e.g.
veié -> veierem.
3. If ending begins with i, it may turn into í or ï after an unstressed vowel (in some but not all cases) to prevent the
two merging into a diphthong. See combine_stem_ending() for specifics.
The following stems are recognized [FIXME: This is not correct for Catalan, needs rewriting]:
-- pres_unstressed: The present indicative unstressed stem (1p, 2p). Also controls the imperative 2p
and gerund. Defaults to the infinitive stem (minus the ending -ar/-er/-ir/-or).
-- pres_stressed: The present indicative stressed stem (1s, 2s, 3s, 3p). Also controls the imperative 2s.
Default is empty if indicator `no_pres_stressed`, else a vowel alternation if such an indicator is given
(e.g. `ue`, `ì`), else the infinitive stem.
-- pres1: Special stem for 1s present indicative. Normally, do not set this explicitly. If you need to specify an
irregular 1s present indicative, use the form override pres_1s= to specify the entire form. Defaults to
pres_stressed.
-- pres_sub_unstressed: The present subjunctive unstressed stem (1p, 2p). Defaults to the infinitive stem.
-- pres_sub_stressed: The present subjunctive stressed stem (1s, 2s, 3s, 1p). Defaults to pres1.
-- impf: The imperfect stem (not including the -av-/-i- stem suffix, which is determined by the conjugation). Defaults
to the infinitive stem.
-- pret: The full preterite stem missing only the endings (-ste, -mos, etc.), e.g. 'fige', 'fo'. Only used for verbs
with irregular preterites (pret_conj == "irreg") such as [[facer]], [[poder]], [[traer]], etc. Defaults to
`pret_base` + the conjugation vowel.
-- fut: The future stem. Defaults to the infinitive stem + the conjugation vowel.
-- cond: The conditional stem. Defaults to `fut`.
-- impf_sub: The imperfect subjunctive stem. Defaults to `pret`.
-- pp: The masculine singular past participle. Default is based on the verb conjugation: infinitive stem + '-ado' for
-ar verbs, otherwise infinitive stem + '-ido'.
-- pp_inv: `true` if the past participle exists only in the masculine singular.
]=]
local built_in_conjugations = {
--------------------------------------------------------------------------------------------
-- -ar --
--------------------------------------------------------------------------------------------
-- Orthographic consonant alternations in endings are handled automatically in combine_stem_ending().
{
-- [[aguar]]:
-- pres agúo, agúes, agúa, agüem, agüeu, agúen
-- pres_sub aguï, aguïs, aguï, agüem, agüeu, aguïn
-- contrast a more typical verb in -guar, [[enaiguar]]:
-- pres enaiguo, enaigües, enaigua, enaigüem, enaigüeu, enaigüen
-- pres_sub enaigüi, enaigüis, enaigüi, enaigüem, enaigüeu, enaigüin
match = "^aguar",
forms = {
pres_stressed = "agú",
pres_sub_stressed = "aguï",
irreg = true,
}
},
{
-- [[anar]] (full verb); highly irregular
match = "^anar",
var = "full",
forms = {
fut = "anir",
pres_1s = "vaj", -- will be converted to 'vaig'; 'vaig' gets converted to 'vaic'
pres_2s = "vas",
pres_3s = "va",
pres_3p = "van",
pres_sub_stressed = "vagi",
imp_2s = "ves",
irreg = true,
}
},
{
-- [[anar]] (auxiliary); highly irregular
match = "^anar",
var = "aux",
forms = {
pres_1s = "vaj", -- will be converted to 'vaig'; 'vaig' gets converted to 'vaic'
pres_2s = {"vas", "vares"},
pres_3s = "va",
pres_1p = {"vam", "vàrem"},
pres_2p = {"vau", "vàreu"},
pres_3p = {"van", "varen"},
pres_sub_stressed = "vagi",
pres_sub_unstressed = "vàgi",
impf1 = {},
impf2 = {},
fut = {},
pret = {},
pp = {},
gerund = {},
noimp = true,
irreg = true,
}
},
{
-- [[dar]]
match = "^dar",
forms = {
pres_1s = {form = "do", footnotes = {"[obsolete]"}},
pres_2s = {form = "das", footnotes = {"[obsolete]"}},
pres_3s = {form = "da", footnotes = {"[obsolete]"}},
pres_3p = {form = "dan", footnotes = {"[obsolete]"}},
pres_sub_1s = {form = "de", footnotes = {"[obsolete]"}},
pres_sub_2s = {form = "des", footnotes = {"[obsolete]"}},
pres_sub_3s = {form = "de", footnotes = {"[obsolete]"}},
pres_sub_3p = {form = "den", footnotes = {"[obsolete]"}},
pret_1s = "di", -- regular except for lack of accent
pret_3s = "da", -- regular except for lack of accent
impf_sub_1s = "des", -- regular except for lack of accent
impf_sub_3s = "des", -- regular except for lack of accent
irreg = true,
}
},
{
-- [[estar]]; highly irregular
match = "^estar",
forms = {
pres_2s = "estàs",
pres_3s = "està",
pres_3p = "estan",
g_infix = "estig",
imp_2s = "estigues",
imp_2p = "estigueu",
pp = "estad",
}
},
--------------------------------------------------------------------------------------------
-- -er/-re --
--------------------------------------------------------------------------------------------
-- Regular verbs not needing entries here:
--
-- [[rebre]], [[concebre]], [[decebre]], [[percebre]]
-- [[rompre]]
-- [[fúmer]], [[prémer]], [[témer]], [[trémer]]
-- [[perdre]], [[batre]], [[botre]], [[fotre]], [[retre]]
-- [[tòrcer]], [[vèncer]]
-- etc.
------------------------------------------- -ldre/-ler/-lre --------------------------------------
{
-- [[caldre]], [[doldre]], [[condoldre's]], [[oldre]]
match = match_against_verbs("ldre", {"ca", "do", "^o"}),
forms = {
-- g_infix implies irreg = true
-- g_infix adds -g to pres_1s, sub, pret and pp stems; combine_stem_ending() changes final -g to -c
g_infix = "+",
}
},
{
-- [[caler]]
match = "caler",
like = "caldre",
},
{
-- [[doler]] and compounds
match = "doler",
like = "doldre",
},
{
-- [[dolre]]
match = "dolre",
forms = {
-- see above for g_infix effects
g_infix = "+",
}
},
{
-- [[valer]], [[equivaler]], [[prevaler]], [[sobrevaler]]
match = "valer",
forms = {
-- see above for g_infix effects
fut = "valdr",
g_infix = "+",
}
},
{
-- [[valdre]] and compounds
match = "valdre",
like = "valer",
},
{
-- [[soler]]
match = "^soler", -- this must precede -oldre rule below for alt form [[soldre]]
forms = {
-- see above for g_infix effects
fut = {},
pret = {},
impf_sub = "solgué", -- regular, but we disabled the preterite, which would normally disable impf_sub too
g_infix = "+",
pp = {},
noimp = true,
}
},
{
-- [[soldre]]
match = "^soldre", -- this must precede -oldre rule below
like = "soler",
},
{
-- [[coldre]], [[moldre]], [[absoldre]], [[dissoldre]], [[resoldre]], [[toldre]]
match = "oldre", -- this must follow [[doldre]]/[[oldre]] rule above
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "olt",
}
},
{
-- [[voler]], [[malvoler]]
match = "voler",
forms = {
fut = "voldr",
pres_1s = "vull",
pres_sub_stressed = "vulgui",
pres_sub_unstressed = "vulgue",
g_infix = "+",
imp_2s = "vulgues",
imp_2p = "vulgueu",
}
},
--------------------------------------------- -ndre ----------------------------------------
{
-- [[romandre]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("mandre", {"^ro"}),
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "màs#",
}
},
{
-- [[encendre]], [[atendre]], [[contendre]], [[desentendre's]], [[distendre]], [[entendre]], [[estendre]],
-- [[pretendre]]
match = match_against_verbs("endre", {"enc", "t"}),
forms = {
pres_3s = "én#", -- remove final accent without prefix with vowel; also removed when adding a suffix
-- see above for g_infix effects
g_infix = "+",
pp = "ès#", -- see above for effect of final #
}
},
{
-- [[vendre]], [[malvendre]], [[revendre]]
match = "vendre",
forms = {
pres_3s = "vèn#", -- see above for effect of final #
-- see above for g_infix effects
g_infix = "+",
pp = "venud", -- g_infix would normally make it vengud
}
},
{
-- [[fendre]], [[defendre]], [[ofendre]], [[dependre]], [[despendre]], [[expendre]], [[suspendre]], [[prendre]],
-- [[aprendre]], [[comprendre]], [[desprendre]], [[emprendre]], [[reprendre]], [[sorprendre]]
match = "endre", -- this must follow previous -endre rules above
forms = {
pres_3s = "èn#", -- see above for effect of final #
-- see above for g_infix effects
g_infix = "+",
pp = "ès#", -- see above for effect of final #
}
},
{
-- [[enfondre]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("fondre", {"^en"}),
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "fús#",
}
},
{
-- [[pondre]], [[compondre]], [[correspondre]], [[descompondre]], [[despondre's]], [[respondre]]
match = "pondre",
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "post",
}
},
{
-- [[fondre]], [[confondre]], [[difondre]], [[infondre]], [[refondre]], [[tondre]]
match = "ondre", -- this must follow previous -ondre rules above
forms = {
-- see above for g_infix effects
g_infix = "+",
pp = "ós#", -- see above for effect of final #
}
},
--------------------------------------------- -nyer ----------------------------------------
{
-- [[atènyer]]; write it this way so there's a prefix with a vowel to prevent against the accent in the pp
-- from being removed while still removing it in the feminine.
match = match_against_verbs("tènyer", {"^a"}),
forms = {
pp = "tès#",
irreg = true,
}
},
{
-- [[empènyer]], [[espènyer]]
match = match_against_verbs("pènyer", {"^em", "^es"}),
forms = {
pp = "pès#",
irreg = true,
}
},
{
-- [[estrènyer]], [[constrènyer]], [[destrènyer]], [[restrènyer]]
match = match_against_verbs("strènyer", {"^e", "con", "^de", "^re"}),
forms = {
pp = "stret",
irreg = true,
}
},
{
-- [[fènyer]]
match = "fènyer",
forms = {
pp = {"fengud", "fenyud"},
irreg = true,
}
},
{
-- [[júnyer]]
match = "júnyer",
like = "junyir",
},
{
-- [[plànyer]], [[complànyer]], [[pertànyer]]
match = match_against_verbs("ànyer", {"pl", "pert"}),
forms = {
pp = {"angud", "anyud"},
irreg = true,
}
},
--------------------------------------------- -aure ----------------------------------------
{
-- [[caure]], [[decaure]], [[recaure]]
match = "caure",
forms = {
-- stem ending in -ai and imperfect in -ia causes special stressed imperfect logic to take effect; we get
-- impf1s queia, impf1p quèiem (preceding vowel changed to è and attached to initial consonant using
-- combine_stem_ending(), which changes c- to qu-)
stem = "caie", -- i dropped by g_infix before u
-- g_infix implies irreg = true
-- g_infix adds -g to pres_1s, sub, pret and pp stems; combine_stem_ending() changes final -g to -c
-- g_infix sets pres_stressed to end in -u, removing a preceding -i or -v
g_infix = "+",
}
},
{
-- [[plaure]], [[complaure]]
match = "plaure",
forms = {
stem = "plae", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
}
},
{
-- [[raure]]
match = "^raure",
forms = {
stem = "rae", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = {"ragud", "ras"},
}
},
--------------------------------------------- -eure ----------------------------------------
{
-- [[beure]], [[embeure]], [[deure]], [[lleure]]
match = match_against_verbs("eure", {"b", "d", "ll"}),
forms = {
stem = "eve", -- v dropped by g_infix before g and u
g_infix = "+",
}
},
{
-- [[creure]], [[seure]], [[asseure]]
match = match_against_verbs("eure", {"cr", "s"}),
forms = {
stem = "ee",
pres_unstressed = "eie", -- affects pres_1p, pres_2p, gerund, imperfect (see [[caure]])
g_infix = "+",
}
},
{
-- [[jeure]], [[ajeure]]
match = "jeure",
forms = {
fut = "jaur", -- affects future and cond
stressed_stem = "jee", -- affects stressed forms, which get g added by g_infix by added except for
-- pres_stressed, which gets u added (controls pres_3s, pres_2s, pres_3p)
unstressed_stem = "jae", -- affects unstressed_stem, which get g added by g_infix
pres_stressed = {"jeu", "jau"},
pres_unstressed = "jaie", -- affects pres_1p, pres_2p, gerund, imperfect (see [[caure]])
pres_1s = {"jec", "jac"},
impf1 = "jei", -- otherwise we'd get impf_1s '#geia' etc.
impf2 = "jèi",
g_infix = "+",
}
},
{
match = "jaure",
like = "jeure",
},
{
-- [[treure]], [[abstreure]], [[atreure]], [[bestreure]], [[contreure]], [[detreure]], [[distreure]],
-- [[extreure]], [[retreure], [[retrotreure]], [[sostreure]]
match = "treure",
forms = {
-- like [[jeure]] except for irregular pp
fut = "traur",
stressed_stem = "tree",
unstressed_stem = "trae",
pres_stressed = {"treu", "trau"},
pres_unstressed = "traie",
pres_1s = {"trec", "trac"},
g_infix = "+",
pp = "tret",
}
},
{
match = "traure",
like = "treure",
},
{
-- [[veure]], [[entreveure]], [[preveure]], [[reveure]]
match = "veure",
forms = {
stem = "veie",
-- impf1s veia, impf1p vèiem (preceding vowel changed to è)
pres_stressed = "veu",
pres_1s = "vej", -- will be converted to 'veig'; 'veig' gets converted to 'veic'
pres_sub_stressed = "vegi",
pres_sub_unstressed = "vege",
pret = {"veié", "vé"},
pret_1s = "viu",
pret_3s = {"veié", "veu"},
impf_sub = "veié",
pp = "vist",
imp_2s = "veges",
imp_2p = {"vegeu", "veieu"},
irreg = true,
}
},
--------------------------------------------- -iure ----------------------------------------
{
-- [[escriure]], [[circumscriure]], [[descriure]], [[inscriure]], [[prescriure]], [[proscriure]],
-- [[subscriure]], [[transcriure]]
match = "scriure",
forms = {
stem = "scrivi", -- v dropped by g_infix before g and u; pres_1p/pres_2p have -ir endings
g_infix = "+",
pret = {"scriví", "scrigué"},
pp = "scrit",
}
},
{
-- [[riure]], [[somriure]]
match = "riure", -- must follow rule for 'scriure'
forms = {
stem = "rie",
-- impf1s reia, impf1p rèiem (preceding vowel changed to è)
g_infix = "+",
}
},
{
-- [[viure]], [[conviure]], [[desviure's]], [[sobreviure]]
match = "viure",
forms = {
stem = "vivi", -- v dropped by g_infix before g and u; pres_1p/pres_2p have -ir endings
g_infix = "visc", -- applies to pres1s, sub, pret, pp
}
},
--------------------------------------------- -oure ----------------------------------------
{
-- [[cloure]], [[concloure]], [[descloure]], [[encloure]], [[excloure]], [[incloure]], [[recloure]]
match = "cloure",
forms = {
stem = "cloe", -- ï in impf1s cloïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = "clòs#", -- remove final accent without prefix with vowel; also removed when adding a suffix
}
},
{
-- [[coure]] "to cook"
match = "coure",
var = "cook",
forms = {
stem = "coe", -- ï in impf1s coïa gets generated automatically by combine_stem_ending()
g_infix = "+",
pp = "cuit",
}
},
{
-- [[coure]] "to sting"
match = "coure",
var = "sting",
forms = {
stem = "coe", -- ï in impf1s coïa gets generated automatically by combine_stem_ending()
g_infix = "+",
-- pp regular 'cogud'
}
},
{
-- [[moure]], [[promoure]], [[remoure]], [[somoure]], [[ploure]]
match = match_against_verbs("oure", {"m", "pl"}),
forms = {
stem = "ove", -- v dropped by g_infix before g and u
g_infix = "+",
}
},
{
-- [[noure]]
match = "noure",
forms = {
stem = "noe", -- ï in impf1s -aïa gets generated automatically by combine_stem_ending()
g_infix = "+",
}
},
--------------------------------------------- -xer ----------------------------------------
{
-- [[conèixer]], [[desconèixer]], [[reconèixer]]
match = "conèixer",
forms = {
g_infix = "coneg",
}
},
{
-- [[créixer]], [[acréixer]], [[decréixer]], [[recréixer]], [[sobrecréixer]]
match = "créixer",
forms = {
pret = {"creixé", "cresqué"},
pres_sub_unstressed = {"creixe", "cresque"},
pp = "crescud",
irreg = true,
}
},
{
-- [[merèixer]], [[desmerèixer]], [[irèixer-se]]
match = match_against_verbs("rèixer", {"me", "^i"}),
forms = {
pret = {"reixé", "resqué"},
pres_sub_unstressed = {"reixe", "resque"},
pp = "rescud",
irreg = true,
}
},
{
-- [[néixer]]/[[nàixer]], [[renéixer]]/[[renàixer]], [[sobrenéixer]]/[[sobrenàixer]], [[péixer]]/[[pàixer]]
match = match_against_verbs("éixer", {"n", "p"}),
forms = {
stem = "aixe",
fut = "aixer",
pres_stressed = {"eix", "aix"},
pres_1s = "eixo",
pret = {"aixé", "asqué"},
pres_sub_stressed = "eixi",
pres_sub_unstressed = {"aixe", "asque"},
pp = "ascud",
irreg = true,
}
},
{
match = "àixer",
like = "éixer",
},
{
-- [[parèixer]], [[aparèixer]], [[comparèixer]], [[desaparèixer]], [[reaparèixer]]
match = "parèixer",
forms = {
g_infix = "pareg",
}
},
--------------------------------------------- misc ----------------------------------------
{
-- [[cabre]]
match = "cabre",
forms = {
pres_sub_stressed = "càpiga",
pres_sub_unstressed = "capigue",
irreg = true,
}
},
{
-- [[caber]]
match = "caber",
like = "cabre",
},
{
-- [[saber]]
match = "saber",
forms = {
fut = "sabr",
pres_1s = "sé",
pres_sub_stressed = "sàpiga",
pres_sub_unstressed = "sapigue",
imp_2s = "sàpiga",
imp_2p = "sapigueu",
irreg = true,
}
},
{
-- [[poder]]
match = "poder",
forms = {
fut = "podr",
pres_1s = "puc",
pres_sub_stressed = "pugui",
pres_sub_unstressed = "pugue",
g_infix = "pog",
imp_2s = "pugues",
imp_2p = "pugueu",
irreg = true,
}
},
{
-- [[córrer]], [[acórrer]], [[concórrer]], [[decórrer]], [[descórrer]], [[discórrer]], [[encórrer]],
-- [[escórrer]], [[incórrer]], [[ocórrer]], [[recórrer]], [[socórrer]], [[transcórrer]]
match = "córrer",
forms = {
pret = "corregué",
pres_sub_unstressed = {"corre", "corregue"},
pp = "corregud",
irreg = true,
}
},
{
-- [[metre]], [[admetre]], [[arremetre]], [[cometre]], [[comprometre]], [[demetre]], [[descomprometre]],
-- [[emetre]], [[entremetre's]], [[escometre]], [[malmetre]], [[manumetre]], [[ometre]], [[permetre]],
-- [[prometre]], [[readmetre]], [[remetre]], [[retransmetre]], [[sotmetre]], [[trametre]], [[transmetre]]
match = "metre",
forms = {
pp = "mès#",
irreg = true,
}
},
--------------------------------------------------------------------------------------------
-- -ir --
--------------------------------------------------------------------------------------------
{
-- [[acudir]]; NOTE: Separation by meaning does not occur in DCC, DIEC, DEIEC, and DCVB says the distinction
-- is geographical and makes no mention of distinction by meaning. OTOH ca.wikt does say that the pronominal
-- sense "to occur" tends to conjugate non-inchoative.
match = "acudir",
forms = {
eix_infix = {{
form = "+",
footnotes = {'[especially in the sense "to turn up, to be present"]'}
}, {
form = "-",
footnotes = {'[especially in the pronominal sense "to occur"]'}
}}
}
},
-- [[afegir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[ajupir]]
-- [[buixir]]
-- [[bullir]], [[rebullir]]
-- [[cruixir]], [[escruixir]] (Routledge says this is inchoative but DIEC, DEIEC and DCC all disagree; note
-- pres_2s 'cruixes', handled automatically)
-- [[dormir]], [[adormir]]
-- [[funyir]]
-- [[grunyir]]
-- [[munyir]], [[esmunyir]]
-- [[pudir]]
-- [[punyir]]
-- [[retrunyir]]
-- [[sallir]]
-- [[sentir]], [[pressentir]], [[ressentir-se]]; not [[consentir]], with can be either non-inchoative or
-- inchoative, and not [[assentir]] or [[dissentir]], which are only inchoative
match = match_against_verbs("ir", {"ajup", "buix", "bull", "cruix", "dorm", "funy", "gruny", "muny", "pud",
"puny", "retruny", "^sent", "pressent", "^ressent", "sall"}),
forms = {
eix_infix = "-",
}
},
{
-- [[arrupir-se]];
-- [[brumir]];
-- [[brunzir]];
-- [[consumir]], [[resumir]], [[presumir]] (not [[sumir]], [[assumir]], [[subsumir]], which are regular)
-- [[mentir]], [[desmentir]]
-- [[percudir]]; cf. also [[acudir]], which to some extent has separate conjugations per meaning
-- [[consentir]]
match = match_against_verbs("ir", {"arrup", "brum", "brunz", "consum", "^resum", "presum", "ment", "percud",
"consent"}),
forms = {
eix_infix = {"+", "-"},
}
},
-- [[cenyir]]: -- non-inchoative or inchoative in Balearics, inchoative elsewhere
{
-- [[cobrir]], [[descobrir]], [[encobrir]], [[recobrir]], [[redescobrir]]
match = "cobrir",
forms = {
pp = "cobert",
irreg = true,
}
},
{
-- [[collir]], [[acollir]], [[escollir]], [[recollir]]
match = "collir",
forms = {
stressed_stem = "culli",
eix_infix = "-",
irreg = true,
}
},
{
-- [[complir]], [[acomplir]], [[incomplir]]
match = "complir",
forms = {
pp = {"complert", "complid"},
irreg = true,
}
},
{
-- [[cosir]], [[descosir]], [[recosir]]
match = "cosir",
forms = {
stressed_stem = "cusi",
pres_3s = "cús#",
eix_infix = "-",
irreg = true,
}
},
{
-- [[eixir]], [[deseixir-se]]; not [[teixir]] or [[entreteixir]], and not [[reeixir]] or [[sobreeixir]],
-- which have an ï in the stem-stressed forms
match = match_against_verbs("eixir", {"^", "des"}),
forms = {
stressed_stem = "ixi",
eix_infix = "-",
irreg = true,
}
},
{
-- [[reeixir]], [[sobreeixir]]
match = match_against_verbs("eixir", {"^re", "sobre"}),
forms = {
stressed_stem = "ïxi",
eix_infix = "-",
irreg = true,
}
},
-- [[engolir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[escopir]]
match = "escopir",
forms = {
stressed_stem = "escupi",
eix_infix = "-",
irreg = true,
}
},
{
-- [[establir]], [[preestablir]], [[restablir]]
match = "establir",
forms = {
pp = {"establert", "establid"},
irreg = true,
}
},
-- [[ferir]]: -- non-inchoative in Balearics, inchoative elsewhere
-- [[fregir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[fugir]], [[confugir]], [[defugir]], [[enfugir-se]]; pres sing ''fujo, fuges, fuig'' handled by
-- combine_stem_ending(); can't be handled by rule above that lists many non-inchoative verbs because the
-- prefix would be 'fug' and the front-back alternation code doesn't apply to prefixes.
match = "fugir",
forms = {
eix_infix = "-",
}
},
{
-- [[imprimir]], [[reimprimir]], [[sobreimprimir]]; not any other verbs in -primir; write it this way so
-- there's a prefix with a vowel to prevent against the accent in the pp from being removed while still
-- removing it in the feminine.
match = match_against_verbs("primir", {"im"}),
forms = {
pp = "près#",
irreg = true,
}
},
-- [[llegir]]: -- non-inchoative in Valencia and Minorca, inchoative elsewhere
{
-- [[lluir]]: regular inchoative in the figurative meaning "to display (something), to be showy" also in the
-- legal meaning "free from a pecuniary obligation, such as a land-based tax (emphyteusis)"; irregular in the
-- literal meaning "to shine"; use <no_built_in> to get regular conjugation. In the regular conjugation,
-- umlauts appear in the following forms: pres_1p/pres_sub_1p/imp_1p lluïm, pres_2p/pres_sub_2p/imp_2p lluïu,
-- impf_1s/impf_3s lluïa, impf_2s lluïes, impf_3p lluïen, pret_2s lluïres, pret_3p lluïren,
-- impf_sub_2s lluïssis, impf_sub_3p lluïssin, throughout the pp: lluït, lluïda, lluïts, lluïdes. IN the
-- irregular conjugation, umlauts appear in the same places as well as elsewhere in the present subjunctive:
-- pres_sub_1s/pres_sub_3s/imp_3s lluï, pres_sub_2s lluïs, pres_sub_3p/imp_3p lluïn. Notably, they do *NOT*
-- appear in the gerund lluint, the infinitive lluir, or anywhere in the future or conditional. Note that
-- verbs.cat [https://www.verbs.cat/en/conjugation/899-lluir.html] lists additional irregular forms pres_1s
-- lluu, and alternative impf_sub forms in -e- instead of -i- (lluïsses, lluíssem, lluísseu, lluïssen), but
-- these are nonstandard or dialectal per both Routledge and DEIEC.
match = "^lluir",
forms = {
eix_infix = "-",
pres3s = {"lluu", "llu"}, -- generates pres_2s, imp_2s
irreg = true,
}
},
{
-- [[entrelluir]] "to be half-seen", [[relluir]] "to shine", [[traslluir-se]] "to be translucent"; either
-- inchoative or non-inchoative, not distinguished by meaning; note, [[deslluir]] and [[enlluir]] are regular
-- inchoative verbs.
match = match_against_verbs("lluir", {"entre", "^re", "tras"}),
forms = {
eix_infix = {"+", "-"},
pres3s = {"llueix", "lluu", "llú"}, -- generates pres_2s, imp_2s; note, pres_2s will end in -es due to
-- combine_stem_ending()
irreg = true,
}
},
{
-- [[morir]], [[premorir]]; but not [[atemorir]]
match = match_against_verbs("morir", {"^", "pre"}),
forms = {
eix_infix = "-",
pp = "mort",
irreg = true,
}
},
{
-- [[obrir]], [[entreobrir]], [[reobrir]]; not [[cobrir]] and derivatives, not [[empobrir]], so we have to list
-- them individually
match = match_against_verbs("obrir", {"^", "entre", "^re"}),
forms = {
eix_infix = "-",
pp = "obert",
irreg = true,
}
},
{
-- [[oferir]]; but not [[proferir]]
match = "^oferir",
forms = {
pp = {"ofert", "oferid"},
irreg = true,
}
},
-- [[oir]], [[desoir]], [[entreoir]]: -- per Routledge, non-inchoative or inchoative normally but only
-- non-inchoative in Valencian; but all dictionaries disagree and say it is a regular inchoative-only verb.
-- It has the same umlauts as lluir (and [[corroir]], another regular inchoative verb).
{
-- [[omplir]], [[desomplir-se]], [[reomplir]]; not [[complir]] and derivatives, so we have to list them
-- individually
match = match_against_verbs("omplir", {"^", "des", "^re"}),
forms = {
eix_infix = "-",
pp = {"omplert", "omplid"},
irreg = true,
}
},
-- [[penedir-se]]: -- non-inchoative in Balearics, inchoative elsewhere
{
-- [[pruir]] "to itch": same umlauts as in [[lluir]].
match = "^pruir",
forms = {
eix_infix = "-",
pres3s = {"pruu", "pru"}, -- generates pres_2s, imp_2s
irreg = true,
}
},
{
-- [[reblir]]
match = "^reblir",
forms = {
pp = {"reblert", "reblid"},
irreg = true,
}
},
-- [[renyir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[sofrir]]
match = "^sofrir",
forms = {
pp = {"sofert", "sofrid"},
irreg = true,
}
},
{
-- [[sortir]], [[ressortir]], [[sobresortir]]; but not [[assortir]], which is regular inchoative
match = match_against_verbs("sortir", {"^", "^res", "sobre"}),
forms = {
stressed_stem = "surti",
eix_infix = "-",
irreg = true,
}
},
{
-- [[suplir]]
match = "^suplir",
forms = {
pp = {"suplert", "suplid"},
irreg = true,
}
},
-- [[teixir]], [[entreteixir]]: -- non-inchoative in Valencia, inchoative elsewhere
{
-- [[tenir]] but not any compounds; highly irregular
match = "^tenir",
forms = {
fut = "tindr",
pres_stressed = "ten",
pres_3s = "té",
imp_2s = {"té", "ten", "tingues"},
imp_2p = {"teniu", "tingueu"},
g_infix = "ting",
}
},
{
-- [[abstenir-se]], [[atenir-se]], [[captenir-se]], [[cartenir]], [[contenir]], [[detenir]], [[entretenir]],
-- [[mantenir]], [[menystenir]], [[obtenir]], [[retenir]], [[sostenir]], [[viltenir]]; highly irregular
match = "tenir",
forms = {
fut = "tindr",
pres_stressed = "ten",
pres_3s = "té",
imp_2s = {"tén", "tingues"},
imp_2p = {"teniu", "tingueu"},
g_infix = "ting",
}
},
{
-- [[tindre]]: variant of [[tenir]]
match = "tindre",
like = "tenir",
},
-- [[tenyir]], [[destenyir]]: -- non-inchoative in Valencia, but [[retenyir]] inchoative or non-inchoative in
-- Valencia? (per Routledge); regular inchoative elsewhere
{
-- [[tossir]] "to cough"
match = "^tossir",
forms = {
stressed_stem = "tussi", -- pres_2s gets 'tusses'
pres_3s = "tus", -- note, pres_3s (a single form override) not pres3s (a stem override, which also affects
-- pres_2s; but imp_2s is physically copied from pres_3s, so imp_2s correctly gets 'tus')
eix_infix = "-",
irreg = true,
}
},
{
-- [[venir]] but not any compounds; highly irregular
match = "^venir",
forms = {
fut = "vindr",
pres_stressed = "ven",
pres_3s = "ve",
imp_2s = "vine",
g_infix = "ving",
}
},
{
-- compounds of [[venir]]: [[advenir]], [[avenir]], [[contravenir]], [[convenir]], [[desavenir-se]],
-- [[desconvenir]], [[entrevenir]], [[esdevenir]], [[intervenir]], [[obvenir]], [[pervenir]], [[prevenir]],
-- [[provenir]], [[reconvenir]], [[revenir]], [[sobrevenir]], [[subvenir]]; but not [[enjovenir]] or
-- [[rejovenir]]; highly irregular
match = match_against_verbs("venir", {"^ad", "^a", "contra", "con", "desa", "entre", "esde", "inter", "ob",
"per", "pre", "pro", "^re", "sobre", "sub"}),
forms = {
fut = "vindr",
pres_stressed = "ven",
pres_3s = "vé",
imp_2s = "vén",
g_infix = "ving",
}
},
{
-- [[vindre]]: variant of [[venir]]
match = "vindre",
like = "venir",
},
-- [[vestir]], [[desvestir]], [[revestir]], maybe [[transvestir]]: non-inchoative in Valencia, inchoative or
-- non-inchoative in the Balearics; regular inchoative elsewhere; but not [[envestir]] or [[investir]], which are
-- regular inchoative everywhere
{
-- [[fer]], [[contrafer]], [[desfer]], [[estrafer]], [[perfer]], [[refer]], [[satisfer]]; highly irregular
match = "fer",
forms = {
fut = "far",
pres_1s = "faj", -- will be converted to 'faig'; 'faig' gets converted to 'faic'
pres_2s = "fàs#",
pres_3s = "fà#",
pres_3p = "fan",
pres_unstressed = "fe",
impf1 = "fei",
impf2 = "fèi",
pres_sub_stressed = "faci",
pres_sub_unstressed = "fe",
pret = "fé",
pret_1s = "fiu",
pret_3s = "feu",
impf_sub_1s = "fés#", -- regular except for base form [[fes]], lacking an accent
impf_sub_3s = "fés#", -- same
imp_2s = "fés#",
pp = "fet",
irreg = true,
}
},
{
-- [[dir]], [[adir-se]], [[contradir]], [[desdir]], [[entredir]], [[interdir]], [[maldir]], [[predir]], [[redir]];
-- behaves like an -er/-re verb
match = match_against_verbs("dir", {"^", "^a", "contra", "des", "entre", "inter", "mal", "pre", "^re"}),
forms = {
stem = "die",
g_infix = "+",
imp_2s = "digues",
imp_2p = "digueu",
pp = "dit",
}
},
{
-- [[dur]], [[endur-se]]; behaves like an -er/-re verb
match = "dur",
forms = {
stem = "due",
g_infix = "+",
pres3s = {"duu", "du"}, -- generates pres_2s, imp_2s
impf1 = "dui",
impf2 = "dúi",
pp = "dut",
}
},
{
-- [[ser]]; highly irregular
match = "^ser",
forms = {
pres_1s = "soc",
pres_2s = "ets",
pres_3s = "és",
pres_1p = "som",
pres_2p = "sou",
pres_3p = "són",
impf1 = "er",
impf2 = "ér",
pres_sub_stressed = "sigui",
pres_sub_unstressed = "sigue",
pret = "fó",
pret_1s = "fui",
pret_3s = "fou",
impf_sub_1s = "fos", -- regular except for lack of accent
impf_sub_3s = "fos", -- same
cond = {"serí", "fór"},
imp_2s = "sigues",
imp_2p = "sigueu",
pp = {"estad", "sigud"},
gerund = {"sent", "essent"},
irreg = true,
}
},
{
-- [[ésser]]; variant of [[ser]]
match = "^ésser",
like = "ser",
},
{
-- [[haver]] as auxiliary; highly irregular
match = "^haver",
var = "aux",
forms = {
pres_1s = "he",
pres_2s = "has",
pres_3s = "ha",
pres_1p = "hem",
pres_2p = "heu",
pres_3p = "han",
fut = "haur",
cond = {"haurí", "haguér"},
pres_sub_stressed = "hagi",
pres_sub_unstressed = "hàgi",
noimp = true,
g_infix = "+",
}
},
{
-- [[haver]] as full verb; highly irregular
match = "^haver",
var = "full",
forms = {
pres_1s = {"hec", "hac"},
pres_stressed = {"heu", "hau"},
fut = "haur",
pres_sub_stressed = "hegui",
g_infix = "+",
}
},
{
-- [[heure]]; variant of full verb [[haver]]
match = "^heure",
like = "haver",
likevar = "full",
},
{
-- [[haure]]; variant of full verb [[haver]]
match = "^haure",
like = "haver",
likevar = "full",
},
}
local function skip_slot(base, slot, allow_overrides)
if not allow_overrides and (base.basic_overrides[slot] or
base.refl and base.basic_reflexive_only_overrides[slot]) then
-- Skip any slots for which there are overrides.
return true
end
if base.only3s and (slot:find("^pp_f") or slot:find("^pp_mp")) then
-- diluviar, atardecer, neviscar; impersonal verbs have only masc sing pp
return true
end
if not slot:find("[123]") then
-- Don't skip non-personal slots.
return false
end
if base.nofinite then
return true
end
if (base.only3s or base.only3sp or base.only3p) and (slot:find("^imp_") or slot:find("^neg_imp_")) then
return true
end
if base.only3s and not slot:find("3s") then
-- diluviar, atardecer, neviscar
return true
end
if base.only3sp and not slot:find("3[sp]") then
-- atañer, concernir
return true
end
if base.only3p and not slot:find("3p") then
-- [[caer cuatro gotas]], [[caer chuzos de punta]], [[entrarle los siete males]]
return true
end
return false
end
local function add_stem_ending(stem, ending)
if ending == "" then
return stem
end
if stem:find("#$") then -- remove final accent when adding a suffix
stem = com.remove_accents((stem:gsub("#$", "")), "final syllable only")
end
return stem .. ending
end
local function process_stem(stem, fn)
if stem:find("#$") then
local stem_no_pound_sign = stem:match("^(.*)#$")
return fn(stem_no_pound_sign) .. "#"
else
return fn(stem)
end
end
-- Add the `stem` to the `ending` and apply any phonetic modifications. `is_full_word` indicates that we're creating
-- a "full word" not a stem, and turns on devoicing of final consonants. `dont_include_prefix` is used when creating
-- stems and indicates not to prepend the prefix in `base.prefix` to the result. `is_pres_sub_stressed` is used when
-- creating the pres_sub_stressed stem, to correctly handle both [[desaiguar]] and [[argüir]], whose respective
-- interactions between ü and i/ï are very tricky.
--
-- WARNING: This function is written very carefully; changes to it can easily have unintended consequences.
local function combine_stem_ending(base, stem, ending, is_full_word, dont_include_prefix, is_pres_sub_stressed)
-- Include the prefix in the stem unless dont_include_prefix is given (used in construct_stems()), or the value of
-- `stem` comes from a user-specified stem or form override.
if not dont_include_prefix and not stem:find(IS_USER_STEM_OVERRIDE) and not stem:find(IS_USER_FORM_OVERRIDE) then
stem = base.prefix .. stem
end
-- A * at the beginning of the ending is a signal to remove a stressed accent from the stem. This may feed any of
-- the following rules.
if ending:find("^%*") then
ending = ending:gsub("^%*", "")
stem = com.remove_accents(stem, "final syllable only")
end
-- If ending begins with s and stem ends in a sibilant, we need an e in between; cf. pres_2s 'apareixes' of
-- [[aparèixer]], pres_2s 'torces' of [[tòrcer]], pres_2s 'fuges' of [[fugir]], pres_2s 'brunzes' of [[brunzir]].
-- This may feed the next rule.
if ending:find("^s") and rfind(stem, "[çjsxz]$") then
ending = "e" .. ending
end
-- By default, stems are in their "back" (standalone) form. Before a front vowel, convert the final consonant to
-- its "front" form so the pronunciation doesn't change.
if rfind(ending, "^" .. front_vowel_c) then
-- adequar -> adeqües
-- enaiguar -> enaigües
-- pegar -> pegues
-- arranjar -> arranges
-- marcar -> marques
-- abraçar -> abraces
stem = com.back_to_front(stem)
end
-- Ending beginning in -i after diphthong ending in V + i compresses the two i's into one (cf. pret_1s 'desmaí' and
-- pres_sub_1s 'desmaï' of [[desmaiar]]). This rule doesn't apply after pseudo-vowel u in gu/qu; cf. pret_1s 'guií'
-- of [[guiar]] and contrast pret_1s 'cruí' of [[cruiar]]. This may feed the next rule.
if rfind(ending, "^[iíï]") and rfind(stem, V .. "i$") and not rfind(stem, "[gq][uü]i$") then
stem = stem:gsub("i$", "")
end
-- If ending begins with i (not í), it must get a diaeresis after a true vowel (not gu/qu, cf. pres_1p 'delinquim'
-- of [[delinquir]], not '#delinquïm'; also not a diphthong ending in u, cf. pres_sub_1s 'apreui' of [[apreuar]]
-- not '#apreuï') to prevent the two merging into a diphthong. Note that ü -> u before ï, but to simplify things
-- we leave the double umlauts in place and remove the first one during postprocessing, in fix_double_umlauts().
-- Cf.:
-- * impf_1s 'raïa' of [[raure]];
-- * pres_sub_1s 'creï' of [[crear]];
-- * pres_sub_1s 'associï' of [[associar]];
-- * impf_1s 'cloïa' of [[cloure]];
-- * pres_1p 'lluïm' of [[lluir]];
-- * pres_1p 'arguïm' of [[argüir]].
if ending:find("^i") and rfind(stem, "[aeiouü]$") and not stem:find("[aeiogq]u$") and
-- Unstressed subjunctive endings of [[enaiguar]] remain without umlaut: enaigüi/enaigüis/enaigüin;
-- but stressed endings of [[argüir]] that begin with 'i' do get an umlaut: arguït, impf. arguïa, including
-- stressed subjunctive endings arguïm/arguïu. In both cases the ending is '-i' as part of the creation of
-- the respective stems. There seems no way of distinguishing the two cases other than with a special flag.
not (rfind(stem, "[gq]ü$") and ending == "i" and is_pres_sub_stressed) then
ending = ending:gsub("^i", "ï")
end
local retval = add_stem_ending(stem, ending)
if retval:find("#$") then -- remove final accent if no vowels in prefix
retval = retval:gsub("#$", "")
if not rfind(base.prefix, V) then
retval = com.remove_accents(retval, "final syllable only")
end
end
if is_full_word then
local saw_is_user_form_override
retval, saw_is_user_form_override = rsubb(retval, IS_USER_FORM_OVERRIDE, "")
retval = retval:gsub(IS_USER_STEM_OVERRIDE, "")
if not saw_is_user_form_override then
-- Devoice final voiced obstruent (cf. pres_2s 'caps', pres_3s 'cap' of [[cabre]]). But not after a
-- consonant (cf. pres_2s 'perds', pres_3s 'perd' of [[perdre]]), except for g -> c, which operates
-- even after a consonant (pres_1s 'resolc' of [[resoldre]], pres_1s 'tinc' of [[tenir]]).
retval = retval:gsub("g(s?)$", "c%1")
retval = rsub(retval, "(" .. V .. ")([bdj])(s?)$", function(before, voiced, after)
local devoice = {
b = "p",
d = "t",
j = "ig", -- pres_3s 'fuj' of [[fugir]] -> 'fuig'
}
return before .. devoice[voiced] .. after
end)
end
end
return retval
end
local function add3(base, slot, stems, endings, footnotes, allow_overrides)
if skip_slot(base, slot, allow_overrides) then
return
end
local function do_combine_stem_ending(stem, ending)
return combine_stem_ending(base, stem, ending, "is full word")
end
iut.add_forms(base.forms, slot, stems, endings, do_combine_stem_ending, nil, nil, footnotes)
end
local function insert_form(base, slot, form)
if not skip_slot(base, slot) then
iut.insert_form(base.forms, slot, form)
end
end
local function insert_forms(base, slot, forms)
if not skip_slot(base, slot) then
iut.insert_forms(base.forms, slot, forms)
end
end
local function add_single_stem_tense(base, slot_pref, stems, s1, s2, s3, p1, p2, p3)
local function addit(slot, ending)
add3(base, slot_pref .. "_" .. slot, stems, ending)
end
addit("1s", s1)
addit("2s", s2)
addit("3s", s3)
addit("1p", p1)
addit("2p", p2)
addit("3p", p3)
end
local function map_general(stemforms, fn)
return iut.map_forms(iut.convert_to_general_list_form(stemforms), fn)
end
local function flatmap_general(stemforms, fn)
return iut.flatmap_forms(iut.convert_to_general_list_form(stemforms), fn)
end
-- Given a stem ending in a conjugation vowel -a/-e/-i/-ï, split into stem base and conjugation vowel, converting the
-- stem base to "back" form if the conjugation vowel is front (hence 'torce' of [[tòrcer]] splits into 'torç' and 'e',
-- and 'fugi' of [[fugir]] splits into 'fuj' and 'i').
local function split_conj_vowel(stem)
local stem_base, conj_vowel = rmatch(stem, "^(.*)([aeiï])$")
if not stem_base then
error(("Internal error: Stem '%s' doesn't end in conjugation vowel a/e/i"):format(stem))
end
if conj_vowel == "ï" then
-- To simplify handling of ï, convert to i. It will be converted back to ï as necessary in
-- combine_stem_ending().
conj_vowel = "i"
end
if rfind(conj_vowel, front_vowel_c) then
stem_base = com.front_to_back(stem_base)
end
return stem_base, conj_vowel
end
local function construct_stems(base)
base.output_stems = {}
local stems = base.output_stems
local bst = base.input_stems
-- YUCK, see combine_stem_ending() for the necessity of is_pres_sub_stressed.
local function combine(stem, ending, is_pres_sub_stressed)
return combine_stem_ending(base, stem, ending, false, "dont include prefix", is_pres_sub_stressed)
end
stems.irreg = bst.irreg or bst.g_infix
-- NOTE: Some stems end in a conjugation or similar vowel, specifically:
-- * `stem` (ends in conjugation vowel -a/-e/-i);
-- * `stressed_stem` (likewise);
-- * `unstressed_stem` (likewise);
-- * `pres_unstressed` (which assumes the form of the gerund minus the -nt; note that `pres_stressed` does *NOT*
-- end in a conjugation vowel, but assumes the stem form; the value of pres_3s will be derived by adding -a for
-- -ar verbs and otherwise adding an -e prop vowel when required, as in [[cobrir]], and otherwise adding no
-- vowel);
-- * `pres_sub_stressed` (which assumes the form of pres_sub_3s and hence usually ends in -i, occasionally -a);
-- * `pres_sub_unstressed` (which assumes the form of pres_sub_1p minus the -m, hence ends in -e or -i).
-- Save stem for use in add_categories_and_annotation() for determining the conjugation class.
stems.stem = bst.stem or base.stem
local eix_infix_stem
if base.conj_vowel == "i" then
-- Save eix_infix value for use in add_categories_and_annotation() for determining whether consonant
-- alternations exist.
stems.eix_infix = bst.eix_infix or bst.g_infix and "-" or "+"
eix_infix_stem = flatmap_general(stems.eix_infix, function(form)
if form == "+" then
return map_general(stems.stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, "eixe")
end)
elseif form == "-" then
return stems.stem
else
return form
end
end)
end
local stressed_stem = bst.stressed_stem or eix_infix_stem or stems.stem
local unstressed_stem = bst.unstressed_stem or stems.stem
-- Add the 'g' that is characteristic of g-infix verbs. We remove a stem-final v, e.g. [[beure]] with stem 'beve'
-- becomes 'beg'.
local function add_g(stemforms)
return map_general(stemforms, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
stem_base = stem_base:gsub("v$", "")
return combine(stem_base, "g")
end)
end
-- Add the 'u' of the pres_3s that is characteristic of g-infix verbs (and conjugation vowel 'e', later removed).
-- We remove a stem-final v, as well as i as part of a diphthong, e.g. [[beure]] with stem 'beve' becomes 'beue'
-- and [[veure]] with stem 'veie' becomes 'veue' (but [[riure]] with stem 'rie' becomes 'riue' not '#rue'). We
-- don't add -u after a consonant, e.g. [[doldre]] with stem 'dole' becomes 'dole' not '#dolue'.
local function add_u(stemforms)
return map_general(stemforms, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
if stem_base:find("v$") then
stem_base = stem_base:gsub("v$", "")
else
stem_base = rsub(stem_base, "(" .. V .. ")i$", "%1")
end
-- Add u after vowel but not after another u, so we get pres_3p 'duen' of [[dur]] not '#duuen'.
if rfind(stem_base, V .. "$") and not stem_base:find("u$") then
return combine(stem_base, "u")
else
return stem_base
end
end)
end
local stressed_g_infix, unstressed_g_infix, g_infix_pres_stressed
if bst.g_infix then
local function flatmap_g_infix(default)
return flatmap_general(bst.g_infix, function(form)
if form == "+" then
return default
else
return form
end
end)
end
stressed_g_infix = flatmap_g_infix(add_g(stressed_stem))
unstressed_g_infix = flatmap_g_infix(add_g(unstressed_stem))
g_infix_pres_stressed = add_u(stressed_stem)
end
stems.pres_unstressed = bst.pres_unstressed or unstressed_stem
stems.pres_stressed =
-- If no_pres_stressed given, pres_stressed stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
bst.pres_stressed or
g_infix_pres_stressed or
map_general(stressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return stem_base
end)
stems.pres1s =
-- If no_pres_stressed given, pres1s stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
stressed_g_infix or
map_general(stems.pres_stressed, function(form)
return combine(form, "o")
end)
stems.pres3s =
-- If no_pres_stressed given, pres3s stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
bst.pres3s or
map_general(stems.pres_stressed, function(form)
if base.conj_vowel == "a" then
return combine(form, "a")
elseif rfind(form, C .. "[lr]$") and not rfind(form, V .. "ll$") then
return combine(form, "e")
else
return form
end
end)
stems.pres3p =
-- If no_pres_stressed given, pres3p stem should be empty so no forms are generated.
base.no_pres_stressed and {} or
map_general(stems.pres_stressed, function(form)
return combine(form, "en")
end)
local function compute_impf_stem(with_accent)
return map_general(stems.pres_unstressed, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
if conj_vowel == "a" then
return combine(stem_base, with_accent and "àv" or "av")
elseif stem_base:find("i#?$") then
form = form:gsub("i#?$", "")
return combine(rmatch(stem_base, "^(.-)" .. V .. "*$"), with_accent and "èi" or "ei")
else
return combine(stem_base, with_accent and "í" or "i") -- i -> ï after a vowel
end
end)
end
stems.impf1 = bst.impf1 or compute_impf_stem(false)
stems.impf2 = bst.impf2 or compute_impf_stem(true)
stems.pret = bst.pret or
unstressed_g_infix and map_general(unstressed_g_infix,
function(form) return combine(form, "é") end
) or
map_general(unstressed_stem, function(form)
local accent_conj_vowel = {
a = "à",
e = "é",
i = "í",
}
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, accent_conj_vowel[conj_vowel])
end)
stems.fut = bst.fut or base.inf_stem
stems.cond = bst.cond or map_general(stems.fut, function(form) return combine(form, "í") end)
stems.pres_sub_stressed = bst.pres_sub_stressed or
stressed_g_infix and map_general(stressed_g_infix, function(form) return combine(form, "i") end) or
map_general(stressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, "i", "is pres_sub_stressed")
end)
stems.pres_sub_unstressed = bst.pres_sub_unstressed or
unstressed_g_infix and map_general(unstressed_g_infix, function(form) return combine(form, "e") end) or
map_general(unstressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
return combine(stem_base, conj_vowel == "i" and conj_vowel or "e")
end)
stems.impf_sub = bst.impf_sub or map_general(stems.pret, function(form)
local stem_base = rmatch(form, "^(.*)à$") -- already in "back" form, no need to convert
if stem_base then
return combine(stem_base, "é")
else
return form
end
end)
stems.pp = bst.pp or
unstressed_g_infix and map_general(unstressed_g_infix,
function(form) return combine(form, "ud") end
) or
map_general(unstressed_stem, function(form)
local stem_base, conj_vowel = split_conj_vowel(form)
-- use combine() so we get 'abduïd' from 'abdu-' of [[abduir]], 'seguid' from 'seg-' from [[seguir]], etc.
return combine(stem_base, (conj_vowel == "e" and "u" or conj_vowel) .. "d")
end)
end
local function a_to_e(base, stems, suffix)
return map_general(stems, function(form)
local stem_base = form:match("^(.-)a$")
if stem_base then
suffix = "e" .. suffix
else
stem_base = form
end
return combine_stem_ending(base, stem_base, suffix, "is full word")
end)
end
local function add_present_indic(base)
local stems = base.output_stems
local function addit(slot, stems, ending)
add3(base, "pres_" .. slot, stems, ending)
end
addit("1s", stems.pres1s, "")
insert_forms(base, "pres_2s", a_to_e(base, stems.pres3s, "s"))
addit("3s", stems.pres3s, "")
insert_forms(base, "pres_1p", a_to_e(base, stems.pres_unstressed, "m"))
insert_forms(base, "pres_2p", a_to_e(base, stems.pres_unstressed, "u"))
addit("3p", stems.pres3p, "")
end
local function add_present_subj(base)
local stems = base.output_stems
local function addit(slot, stems, ending)
add3(base, "pres_sub_" .. slot, stems, ending)
end
-- Regular -ar verb: [[amar]]: ami, amis, ami, amem, ameu, amin
-- Regular -re verb: [[batre]]: bati, batis, bati, batem, bateu, batin (same as -ar verb)
-- Regular -ir verb, no -eix- infix: [[dormir]]: dormi, dormis, dormi, dormim, dormiu, dormin
-- Regular -ir verb, -eix- infix: [[imprimir]]: imprimeixi, imprimeixis, imprimeixi, imprimim, imprimiu, imprimeixin
-- Stem changing in 123s/3p vs. 12p:
-- * -eix- infix (-eix- in all stressed forms: 123s/3p of pres ind/sub, 2s imp)
-- * [[collir]]: culli, cullis, culli, collim, colliu, cullin (cull- in all stressed forms)
-- * [[cabre]]: càpiga, càpigues, càpiga, capiguem, capigueu, càpiguen (also different endings)
addit("1s", stems.pres_sub_stressed, "")
insert_forms(base, "pres_sub_2s", a_to_e(base, stems.pres_sub_stressed, "s"))
addit("3s", stems.pres_sub_stressed, "")
addit("1p", stems.pres_sub_unstressed, "m")
addit("2p", stems.pres_sub_unstressed, "u")
insert_forms(base, "pres_sub_3p", a_to_e(base, stems.pres_sub_stressed, "n"))
end
local function add_finite_non_present(base)
local stems = base.output_stems
local function add_tense(slot, stem, s1, s2, s3, p1, p2, p3)
add_single_stem_tense(base, slot, stem, s1, s2, s3, p1, p2, p3)
end
add_tense("impf", stems.impf1, "a", "es", "a", nil, nil, "en")
add_tense("impf", stems.impf2, nil, nil, nil, "em", "eu", nil)
-- pret_1s ends in -í regardless of the normal vowel of the stem.
insert_forms(base, "pret_1s", map_general(stems.pret, function(form)
local stem_base, conj_vowel = rmatch(form, "^(.*)(" .. V .. ")$")
if not stem_base then
error(("Internal error: Preterite stem '%s' doesn't end in vowel"):format(form))
end
if rfind(conj_vowel, front_vowel_c) then
stem_base = com.front_to_back(stem_base)
end
-- Use combine_stem_ending() to handle back-to-front conversions, e.g. pegà -> peguí for [[pegar]] and ensure
-- that the prefix gets added.
return combine_stem_ending(base, stem_base, "í", "is full word") end))
-- * at the beginning of the ending means to remove an accent from the last vowel of the preterite stem.
add_tense("pret", stems.pret, nil, "*res", "", "rem", "reu", "*ren")
-- * at the beginning of the ending means to remove an accent from the last vowel of the imperfect subjunctive stem.
add_tense("impf_sub", stems.impf_sub, "s", "*ssis", "s", "ssim", "ssiu", "*ssin")
add_tense("fut", stems.fut, "é", "às", "à", "em", "eu", "an")
add_tense("cond", stems.cond, "*a", "*es", "*a", "em", "eu", "*en")
end
local function add_non_finite_forms(base)
local stems = base.output_stems
local function addit(slot, stems, ending, footnotes)
add3(base, slot, stems, ending, footnotes)
end
insert_form(base, "infinitive", {form = base.orig_verb})
-- Also insert "infinitive + reflexive pronoun" combinations if we're handling a reflexive verb. See comment below
-- for "gerund + reflexive pronoun" combinations.
if base.refl then
for _, persnum in ipairs(person_number_list) do
insert_form(base, "infinitive_" .. persnum, {form = base.orig_verb})
end
end
-- Gerunds don't have an umlaut over the i in cases like 'abduint' of 'abduir' (not '#abduïnt').
local pres_unstressed_no_umlaut = map_general(stems.pres_unstressed, function(form)
return rsub(form, "ï$", "i")
end)
addit("gerund", pres_unstressed_no_umlaut, "nt")
-- Also insert "gerund + reflexive pronoun" combinations if we're handling a reflexive verb. We insert exactly the
-- same form as for the bare gerund; later on in add_reflexive_or_fixed_clitic_to_forms(), we add the appropriate
-- clitic pronouns. It's important not to do this for non-reflexive verbs, because in that case, the clitic
-- pronouns won't be added, and {{ca-verb form of}} will wrongly consider all these combinations as possible
-- inflections of the bare gerund. Thanks to [[User:JeffDoozan]] for this bug fix.
if base.refl then
for _, persnum in ipairs(person_number_list) do
addit("gerund_" .. persnum, pres_unstressed_no_umlaut, "nt")
end
end
addit("pp_ms", stems.pp, "")
if not base.pp_inv then
addit("pp_fs", stems.pp, "a")
-- make_plural() handles the complexities of e.g. 'vist' of [[veure]] -> 'vistos'/'vists' and 'romàs' of
-- [[romandre]] -> 'romasos'. We need to use flatmap_general() because make_plural() may return more than one
-- plural, and we need to use map_general() on the result, applying combine_stem_ending(), to ensure that
-- prefixes get properly added and plurals like 'amads' of stem 'amad' of [[amar]] get converted to 'amats'.
insert_forms(base, "pp_mp", map_general(flatmap_general(stems.pp, function(form)
-- Remove any # indicating that an accent will be dropped; it will be dropped in any case by make_plural().
form = form:gsub("#$", "")
return com.make_plural(form, "m")
end), function(form)
return combine_stem_ending(base, form, "", "is full word")
end))
addit("pp_fp", stems.pp, "es")
end
end
local function add_imperatives(base)
if base.noimp then
return
end
-- Copy pres3s to imperative since they are almost always the same.
insert_forms(base, "imp_2s", iut.map_forms(base.forms.pres_3s, function(form) return form end))
-- Copy pres2p to imperative plural since they are almost always the same.
insert_forms(base, "imp_2p", iut.map_forms(base.forms.pres_2p, function(form) return form end))
-- Copy subjunctives to imperatives.
for _, persnum in ipairs({"3s", "1p", "3p"}) do
local from = "pres_sub_" .. persnum
local to = "imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form) return form end))
end
end
local function fix_double_umlauts(base)
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
form.form = form.form:gsub("üï", "uï")
end
end
end
local function process_slot_overrides(base, filter_slot, reflexive_only)
local overrides = reflexive_only and base.basic_reflexive_only_overrides or base.basic_overrides
for slot, forms in pairs(overrides) do
if not filter_slot or filter_slot(slot) then
add3(base, slot, forms, "", nil, "allow overrides")
end
end
end
local function link_clitic(clitic)
return (clitic:gsub("([^ %-]+)", "[[%1]]"))
end
-- Prefix `form` with `clitic`, adding fixed text `between` between them. Add links as appropriate unless the user
-- requested no links. Check whether form already has brackets (as will be the case if the form has a fixed clitic).
local function prefix_clitic_to_form(base, clitic, between, form)
if base.alternant_multiword_spec.args.noautolinkverb then
return clitic .. between .. form
else
local clitic_pref = link_clitic(clitic) .. between
if form:find("%[%[") then
return clitic_pref .. form
else
return clitic_pref .. "[[" .. form .. "]]"
end
end
end
-- Suffix `form` with `clitic`. Add links as appropriate unless the user requested no links. Check whether form already
-- has brackets (as will be the case if the form has a fixed clitic).
local function suffix_clitic_to_form(base, clitic, form)
local autolink = not base.alternant_multiword_spec.args.noautolinkverb
if base.alternant_multiword_spec.args.noautolinkverb then
return form .. clitic
else
local clitic_suf = link_clitic(clitic)
if form:find("%[%[") then
return form .. clitic_suf
else
return "[[" .. form .. "]]" .. clitic_suf
end
end
end
-- Add a reflexive pronoun or fixed clitic (FIXME: not working), as appropriate to the base forms that were generated.
-- `do_joined` means to do only the forms where the pronoun is joined to the end of the form; otherwise, do only the
-- forms where it is not joined and precedes the form.
local function add_reflexive_or_fixed_clitic_to_forms(base, do_reflexive, do_joined)
for _, slotaccel in ipairs(base.alternant_multiword_spec.verb_slots_basic) do
local slot, accel = unpack(slotaccel)
local persnum
if slot:find("[123]") then
persnum = slot:match("^.*_(.-)$")
else
persnum = "3s"
end
local function get_proclitic(form)
--if not do_reflexive then
-- return base.clitic
if form:find("^[aeiouh]") then
return proclitic_elided_person_number_to_reflexive_pronoun[persnum]
else
return proclitic_non_elided_person_number_to_reflexive_pronoun[persnum]
end
end
local function get_enclitic(form)
--if not do_reflexive then
-- return base.clitic
if rfind(form, C .. "$") or rfind(form, V .. "[iu]$") and not form:find("[gq]ui$") then
return enclitic_non_elided_person_number_to_reflexive_pronoun[persnum]
else
return enclitic_elided_person_number_to_reflexive_pronoun[persnum]
end
end
if base.forms[slot] then
if do_reflexive and slot:find("^pp_") or slot == "infinitive_linked" then
-- do nothing with reflexive past participles or with infinitive linked (handled at the end)
elseif slot:find("^neg_imp_") then
error("Internal error: Should not have forms set for negative imperative at this stage")
else
local slot_has_suffixed_clitic = slot:find("infinitive") or slot:find("gerund") or slot:find("^imp_")
-- Maybe generate non-reflexive parts and separated syntactic variants for use in
-- {{ca-verb form of}}. See comment in add_slots() above `need_special_verb_form_of_slots`.
-- Check for do_joined so we only run this code once.
if do_reflexive and do_joined and base.alternant_multiword_spec.source_template == "ca-verb form of" and
-- Skip personal variants of infinitives and gerunds so we don't think [[arrependendo]] is a
-- non-reflexive equivalent of [[arrependendo-me]].
not slot:find("infinitive_") and not slot:find("gerund_") then
-- Clone the forms because we will be destructively modifying them just below, adding the reflexive
-- pronoun.
insert_forms(base, slot .. "_non_reflexive", mw.clone(base.forms[slot]))
if slot_has_suffixed_clitic then
insert_forms(base, slot .. "_variant", iut.map_forms(base.forms[slot], function(form)
return prefix_clitic_to_form(base, get_proclitic(form), "... ", form)
end))
end
end
if slot_has_suffixed_clitic then
if do_joined then
-- Add clitic after form.
for _, form in ipairs(base.forms[slot]) do
form.form = suffix_clitic_to_form(base, get_enclitic(form.form), form.form)
end
end
elseif not do_joined then
-- Add clitic before form.
for _, form in ipairs(base.forms[slot]) do
form.form = prefix_clitic_to_form(base, get_proclitic(form.form), "", form.form)
end
end
end
end
end
end
local function handle_infinitive_linked(base)
-- Compute linked versions of potential lemma slots, for use in {{ca-verb}}.
-- We substitute the original lemma (before removing links) for forms that
-- are the same as the lemma, if the original lemma has links.
for _, slot in ipairs({"infinitive"}) do
insert_forms(base, slot .. "_linked", iut.map_forms(base.forms[slot], function(form)
if form == base.lemma and rfind(base.linked_lemma, "%[%[") then
return base.linked_lemma
else
return form
end
end))
end
end
local function generate_negative_imperatives(base)
if base.noimp then
return
end
-- Copy subjunctives to negative imperatives, preceded by "no".
for _, persnum in ipairs(neg_imp_person_number_list) do
local from = "pres_sub_" .. persnum
local to = "neg_imp_" .. persnum
insert_forms(base, to, iut.map_forms(base.forms[from], function(form)
if base.alternant_multiword_spec.args.noautolinkverb then
return "no " .. form
elseif form:find("%[%[") then
-- already linked, e.g. when reflexive
return "[[no]] " .. form
else
return "[[no]] [[" .. form .. "]]"
end
end))
end
end
-- Process specs given by the user using 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'.
local function process_addnote_specs(base)
for _, spec in ipairs(base.addnote_specs) do
for _, slot_spec in ipairs(spec.slot_specs) do
slot_spec = "^" .. slot_spec .. "$"
for slot, forms in pairs(base.forms) do
if rfind(slot, slot_spec) then
-- To save on memory, side-effect the existing forms.
for _, form in ipairs(forms) do
form.footnotes = iut.combine_footnotes(form.footnotes, spec.footnotes)
end
end
end
end
end
end
local function add_missing_links_to_forms(base)
-- Any forms without links should get them now. Redundant ones will be stripped later.
for slot, forms in pairs(base.forms) do
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
form.form = "[[" .. form.form .. "]]"
end
end
end
end
local function conjugate_verb(base)
construct_stems(base)
add_present_indic(base)
add_present_subj(base)
add_finite_non_present(base)
add_non_finite_forms(base)
fix_double_umlauts(base)
-- do non-reflexive non-imperative slot overrides
process_slot_overrides(base, function(slot)
return not slot:find("^imp_") and not slot:find("^neg_imp_")
end)
-- This should happen after process_slot_overrides() in case a derived slot is based on an override
-- (as with the imp_3s of [[dar]], [[estar]]).
add_imperatives(base)
-- do non-reflexive positive imperative slot overrides
process_slot_overrides(base, function(slot)
return slot:find("^imp_")
end)
-- We need to add joined reflexives, then joined and non-joined clitics, then non-joined reflexives, so we get
-- [[arrepéndete]] but [[no]] [[te]] [[arrependas]].
if base.refl then
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", "do joined")
process_slot_overrides(base, nil, "do reflexive") -- do reflexive-only slot overrides
add_reflexive_or_fixed_clitic_to_forms(base, "do reflexive", false)
end
-- This should happen after add_reflexive_or_fixed_clitic_to_forms() so negative imperatives get the reflexive pronoun
-- and clitic in them.
generate_negative_imperatives(base)
-- do non-reflexive negative imperative slot overrides
-- FIXME: What about reflexive negative imperatives?
process_slot_overrides(base, function(slot)
return slot:find("^neg_imp_")
end)
-- This should happen before add_missing_links_to_forms() so that the comparison `form == base.lemma`
-- in handle_infinitive_linked() works correctly and compares unlinked forms to unlinked forms.
handle_infinitive_linked(base)
process_addnote_specs(base)
if not base.alternant_multiword_spec.args.noautolinkverb then
add_missing_links_to_forms(base)
end
end
local function parse_indicator_spec(angle_bracket_spec)
-- Store the original angle bracket spec so we can reconstruct the overall conj spec with the lemma(s) in them.
local base = {
angle_bracket_spec = angle_bracket_spec,
user_basic_overrides = {},
user_stems = {},
addnote_specs = {},
}
local function parse_err(msg)
error(msg .. ": " .. angle_bracket_spec)
end
local function fetch_footnotes(separated_group)
local footnotes
for j = 2, #separated_group - 1, 2 do
if separated_group[j + 1] ~= "" then
parse_err("Extraneous text after bracketed footnotes: '" .. table.concat(separated_group) .. "'")
end
if not footnotes then
footnotes = {}
end
table.insert(footnotes, separated_group[j])
end
return footnotes
end
local inside = angle_bracket_spec:match("^<(.*)>$")
assert(inside)
if inside == "" then
return base
end
local segments = put.parse_balanced_segment_run(inside, "[", "]")
local dot_separated_groups = put.split_alternating_runs(segments, "%.")
for i, dot_separated_group in ipairs(dot_separated_groups) do
local first_element = dot_separated_group[1]
if first_element == "addnote" then
local spec_and_footnotes = fetch_footnotes(dot_separated_group)
if #spec_and_footnotes < 2 then
parse_err("Spec with 'addnote' should be of the form 'addnote[SLOTSPEC][FOOTNOTE][FOOTNOTE][...]'")
end
local slot_spec = table.remove(spec_and_footnotes, 1)
local slot_spec_inside = rmatch(slot_spec, "^%[(.*)%]$")
if not slot_spec_inside then
parse_err("Internal error: slot_spec " .. slot_spec .. " should be surrounded with brackets")
end
local slot_specs = rsplit(slot_spec_inside, ",")
-- FIXME: Here, [[Module:it-verb]] called strip_spaces(). Generally we don't do this. Should we?
table.insert(base.addnote_specs, {slot_specs = slot_specs, footnotes = spec_and_footnotes})
elseif indicator_flags[first_element] then
if #dot_separated_group > 1 then
parse_err("No footnotes allowed with '" .. first_element .. "' spec")
end
if base[first_element] then
parse_err("Spec '" .. first_element .. "' specified twice")
end
base[first_element] = true
elseif first_element:find("^var:") then
if #dot_separated_group > 1 then
parse_err(("Can't attach footnotes to 'var:' spec '%s'"):format(first_element))
end
base.var = first_element:match("^var:(.*)$")
elseif first_element:find(":") then
local colon_separated_groups = put.split_alternating_runs(dot_separated_group, "%s*:%s*")
local first_element = colon_separated_groups[1][1]
if #colon_separated_groups[1] > 1 then
parse_err("Can't attach footnotes directly to '" .. first_element .. "' spec; attach them to the " ..
"colon-separated values following the initial colon")
end
if overridable_stems[first_element] then
if base.user_stems[first_element] then
parse_err("Overridable stem '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_stems[first_element] = overridable_stems[first_element](colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes})
else -- assume a basic override; we validate further later when the possible slots are available
if base.user_basic_overrides[first_element] then
parse_err("Basic override '" .. first_element .. "' specified twice")
end
table.remove(colon_separated_groups, 1)
base.user_basic_overrides[first_element] = allow_multiple_values_for_override(colon_separated_groups,
{prefix = first_element, base = base, parse_err = parse_err, fetch_footnotes = fetch_footnotes},
"is form override")
end
else
parse_err("Unrecognized spec '" .. first_element .. "'")
end
end
return base
end
-- Normalize all lemmas, substituting the pagename for blank lemmas and adding links to multiword lemmas.
local function normalize_all_lemmas(alternant_multiword_spec, head)
-- (1) Add links to all before and after text. Remember the original text so we can reconstruct the verb spec later.
if not alternant_multiword_spec.args.noautolinktext then
iut.add_links_to_before_and_after_text(alternant_multiword_spec, "remember original")
end
-- (2) Remove any links from the lemma, but remember the original form so we can use it below in the 'lemma_linked'
-- form.
iut.map_word_specs(alternant_multiword_spec, function(base)
if base.lemma == "" then
base.lemma = head
end
base.user_specified_lemma = base.lemma
base.lemma = m_links.remove_links(base.lemma)
local refl_verb = base.lemma
local verb, refl = rmatch(refl_verb, "^(.-)%-(se)$")
if not verb then
verb, refl = rmatch(refl_verb, "^(.-)('s)$")
end
if not verb then
verb, refl = refl_verb, nil
end
base.user_specified_verb = verb
base.refl = refl
base.verb = base.user_specified_verb
local linked_lemma
if alternant_multiword_spec.args.noautolinkverb or base.user_specified_lemma:find("%[%[") then
linked_lemma = base.user_specified_lemma
elseif base.refl then
-- Reconstruct the linked lemma with separate links around base verb, reflexive pronoun and clitic.
linked_lemma = base.user_specified_verb == base.verb and "[[" .. base.user_specified_verb .. "]]" or
"[[" .. base.verb .. "|" .. base.user_specified_verb .. "]]"
linked_lemma = linked_lemma .. (refl and "-[[" .. refl .. "]]" or "")
else
-- Add links to the lemma so the user doesn't specifically need to, since we preserve links in multiword
-- lemmas and include links in non-lemma forms rather than allowing the entire form to be a link.
linked_lemma = iut.add_links(base.user_specified_lemma)
end
base.linked_lemma = linked_lemma
end)
end
local function detect_indicator_spec(base)
if (base.only3s and 1 or 0) + (base.only3sp and 1 or 0) + (base.only3p and 1 or 0) > 1 then
error("Only one of 'only3s', 'only3sp' and 'only3p' can be specified")
end
base.forms = {}
base.input_stems = {}
base.basic_overrides = {}
base.basic_reflexive_only_overrides = {}
base.orig_verb = base.verb -- in case of a 'like = "..."' redirect
if not base.no_built_in then
local function match_built_in_spec(verb, built_in_spec)
local prefix, non_prefixed_verb
if type(built_in_spec.match) == "function" then
prefix, non_prefixed_verb = built_in_spec.match(verb)
elseif built_in_spec.match:find("^%^") and rsub(built_in_spec.match, "^%^", "") == verb then
-- begins with ^, for exact match, and matches
prefix, non_prefixed_verb = "", verb
else
prefix, non_prefixed_verb = rmatch(verb, "^(.*)(" .. built_in_spec.match .. ")$")
end
return prefix, non_prefixed_verb
end
local function find_built_in(verb, var)
for _, built_in_spec in ipairs(built_in_conjugations) do
local prefix, non_prefixed_verb = match_built_in_spec(verb, built_in_spec)
if prefix then
if not built_in_spec.var then
if var then
error(("Can't specify a variant spec 'var:%s' with verb '%s'"):format(var, verb))
end
return prefix, non_prefixed_verb, built_in_spec
elseif not var then
local possible_vars = {}
for _, built_in_spec in ipairs(built_in_conjugations) do
local prefix, non_prefixed_verb = match_built_in_spec(verb, built_in_spec)
if prefix then
table.insert(possible_vars, built_in_spec.var)
end
end
error(("For verb '%s', must specify a variant using 'var:...'; possible values are %s"):format(
verb, table.concat(possible_vars, ", ")))
elseif built_in_spec.var == var then
return prefix, non_prefixed_verb, built_in_spec
end
end
end
return nil
end
local prefix, non_prefixed_verb, built_in_spec = find_built_in(base.verb, base.var)
if prefix then
-- we found a built-in verb
if built_in_spec.like then
-- we found a redirect to another verb that has the same conjugation, just a different infinitive
base.verb = prefix .. built_in_spec.like
local new_prefix, new_non_prefixed_verb, new_built_in_spec = find_built_in(base.verb, built_in_spec.likevar)
if new_prefix then
-- redirected to another built-in verb
base.prefix = new_prefix
base.non_prefixed_verb = new_non_prefixed_verb
built_in_spec = new_built_in_spec
else
built_in_spec = nil
end
else
base.prefix = prefix
base.non_prefixed_verb = non_prefixed_verb
end
end
if built_in_spec then
-- we found a built-in verb, possibly redirecting to another built-in verb
for stem, forms in pairs(built_in_spec.forms) do
if type(forms) == "function" then
forms = forms(base, base.prefix)
end
if stem:find("^refl_") then
stem = stem:gsub("^refl_", "")
if not base.alternant_multiword_spec.verb_slots_basic_map[stem] then
error("Internal error: setting for 'refl_" .. stem .. "' does not refer to a basic verb slot")
end
base.basic_reflexive_only_overrides[stem] = forms
elseif base.alternant_multiword_spec.verb_slots_basic_map[stem] then
-- an individual form override of a basic form
base.basic_overrides[stem] = forms
else
base.input_stems[stem] = forms
end
end
end
end
-- Override built-in-verb stems and overrides with user-specified ones.
for stem, values in pairs(base.user_stems) do
base.input_stems[stem] = values
end
for override, values in pairs(base.user_basic_overrides) do
if not base.alternant_multiword_spec.verb_slots_basic_map[override] then
error("Unrecognized override '" .. override .. "': " .. base.angle_bracket_spec)
end
base.basic_overrides[override] = values
end
base.prefix = base.prefix or ""
base.non_prefixed_verb = base.non_prefixed_verb or base.verb
local inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)(re)$")
if not inf_stem then
inf_stem, suffix = rmatch(base.non_prefixed_verb, "^(.*)([aeiu]r)$")
end
if not inf_stem then
error("Unrecognized infinitive: " .. base.verb)
end
-- Remove accents from e.g. [[parèixer]], [[córrer]].
inf_stem = com.remove_accents(inf_stem)
-- Save full infinitive stem for use in future and conditional.
base.inf_stem = (inf_stem .. suffix):gsub("e$", "")
local stem = inf_stem
if suffix == "re" then
-- verbs in -ldre, -ndre have stem without the d
stem = stem:gsub("([ln])d$", "%1")
elseif suffix == "ur" then
stem = stem .. "u"
end
base.conj_vowel = (suffix == "re" or suffix == "ur") and "e" or suffix:gsub("r$", "")
-- If the stem is followed by a front vowel, convert it to its "back" form before calling combine_stem_ending(),
-- which expects the "back" form of the stem and may convert it back to the "front" form. Don't do this conversion
-- for ï so we leave [[arguïr]] (underlyingly 'argüïr') as 'argu' ("back" form), which becomes 'argü' ("front" form)
-- before front vowel ï and we end up with base.stem containing the underlying form 'argüï'. We remove the first of
-- two umlauts in a row in a postprocessing step (fix_double_umlauts()).
if rfind(suffix, "^[ei]") then
stem = com.front_to_back(stem)
end
-- Use combine_stem_ending() so we get ï if necessary.
base.stem = combine_stem_ending(base, stem, base.conj_vowel, false, "dont include prefix")
-- Propagate built-in-verb indicator flags to `base` and combine with user-specified flags.
for indicator_flag, _ in pairs(indicator_flags) do
base[indicator_flag] = base[indicator_flag] or base.input_stems[indicator_flag]
end
end
local function detect_all_indicator_specs(alternant_multiword_spec)
-- Propagate some settings up; some are used internally, others by [[Module:pt-headword]].
iut.map_word_specs(alternant_multiword_spec, function(base)
-- Internal indicator flags. Do these before calling detect_indicator_spec() because add_slots() uses them.
for _, prop in ipairs { "refl", "clitic" } do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
base.alternant_multiword_spec = alternant_multiword_spec
end)
add_slots(alternant_multiword_spec)
iut.map_word_specs(alternant_multiword_spec, function(base)
detect_indicator_spec(base)
-- User-specified indicator flags. Do these after calling detect_indicator_spec() because the latter may set these
-- indicators for built-in verbs.
for prop, _ in pairs(indicator_flags) do
if base[prop] then
alternant_multiword_spec[prop] = true
end
end
end)
end
local function add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
local function insert_ann(anntype, value)
m_table.insertIfNot(alternant_multiword_spec.annotation[anntype], value)
end
local function insert_cat(cat, also_when_multiword)
-- Don't place multiword terms in categories like 'Catalan verbs ending in -ar' to avoid spamming the
-- categories with such terms.
if also_when_multiword or not multiword_lemma then
m_table.insertIfNot(alternant_multiword_spec.categories, "カタルーニャ語 " .. cat)
end
end
if check_for_red_links and alternant_multiword_spec.source_template == "ca-conj" and multiword_lemma then
for _, slot_and_accel in ipairs(alternant_multiword_spec.all_verb_slots) do
local slot = slot_and_accel[1]
local forms = base.forms[slot]
local must_break = false
if forms then
for _, form in ipairs(forms) do
if not form.form:find("%[%[") then
local title = mw.title.new(form.form)
if title and not title.exists then
insert_cat("活用表に赤リンクを含む動詞")
must_break = true
break
end
end
end
end
if must_break then
break
end
end
end
map_general(base.output_stems.stem, function(stem)
local stem_base, conj_vowel = split_conj_vowel(stem)
local need_no_eix_infix = true
if conj_vowel ~= base.conj_vowel then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#不規則動詞|混合活用]]")
elseif conj_vowel == "a" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第一変化動詞|第一変化]]")
insert_cat("第一変化動詞")
elseif conj_vowel == "e" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第二変化動詞|第二変化]]")
insert_cat("第二変化動詞")
elseif conj_vowel == "i" then
insert_ann("conj", "[[付録:カタルーニャ語の動詞#第三変化動詞|第三変化]]")
insert_cat("第三変化動詞")
need_no_eix_infix = false
map_general(base.output_stems.eix_infix, function(form)
if form == "+" then
insert_ann("eix_infix", "接中辞-eix-有り")
insert_cat("-eix-を含む第三変化動詞")
elseif form == "-" then
insert_ann("eix_infix", "接中辞-eix-無し")
insert_cat("-eix-を含まない第三変化動詞")
end
end)
else
error(("Internal error: Stem '%s' doesn't end in conjugation vowel a/e/i and split_conj_vowel() didn't catch it"
):format(stem))
end
if need_no_eix_infix then
insert_ann("eix_infix", "接中辞無し")
end
end)
if base.input_stems.g_infix then
insert_ann("g_infix", "軟口蓋接中辞有り")
insert_cat("軟口蓋接中辞を含む動詞")
else
insert_ann("g_infix", "no infix")
end
if base.output_stems.irreg then
insert_ann("irreg", "不規則")
insert_cat("不規則動詞")
else
insert_ann("irreg", "regular")
end
if base.only3s then
insert_ann("defective", "非人称")
insert_cat("非人称動詞")
elseif base.only3sp then
insert_ann("defective", "第三人称のみ")
insert_cat("第三人称動詞")
elseif base.only3p then
insert_ann("defective", "第三人称複数のみ")
insert_cat("第三人称複数動詞")
elseif base.no_pres_stressed then
insert_ann("defective", "欠如")
insert_cat("欠如動詞")
else
insert_ann("defective", "regular")
end
--if base.clitic then
-- insert_cat("verbs with lexical clitics")
--end
if base.refl then
insert_cat("再帰動詞")
end
local stem_base, conj_vowel = split_conj_vowel(base.stem)
local cons_alt
if conj_vowel == "i" and base.output_stems.eix_infix == "+" then
-- no alternations in verbs like [[afligir]] because all endings are front
elseif stem_base:find("ç$") then
cons_alt = "ç-c"
elseif stem_base:find("c$") then
cons_alt = "c-qu"
elseif stem_base:find("g$") then
cons_alt = "g-gu"
elseif stem_base:find("gu$") then
cons_alt = "gu-gü"
elseif stem_base:find("j$") then
cons_alt = "j-g"
elseif stem_base:find("qu$") then
cons_alt = "qu-qü"
end
if cons_alt then
local desc = cons_alt .. " alternation"
insert_ann("cons_alt", desc)
insert_cat(desc .. "交替の動詞")
else
insert_ann("cons_alt", "non-alternating")
end
end
-- Compute the categories to add the verb to, as well as the annotation to display in the
-- conjugation title bar. We combine the code to do these functions as both categories and
-- title bar contain similar information.
local function compute_categories_and_annotation(alternant_multiword_spec)
alternant_multiword_spec.categories = {}
local ann = {}
alternant_multiword_spec.annotation = ann
ann.conj = {}
ann.g_infix = {}
ann.eix_infix = {}
ann.irreg = {}
ann.defective = {}
ann.cons_alt = {}
local multiword_lemma = false
for _, form in ipairs(alternant_multiword_spec.forms.infinitive) do
if form.form:find(" ") then
multiword_lemma = true
break
end
end
iut.map_word_specs(alternant_multiword_spec, function(base)
add_categories_and_annotation(alternant_multiword_spec, base, multiword_lemma)
end)
local ann_parts = {}
local conj = table.concat(ann.conj, " or ")
if conj ~= "" then
table.insert(ann_parts, conj)
end
local eix_infix = table.concat(ann.eix_infix, " or ")
if eix_infix ~= "" and eix_infix ~= "no infix" then
table.insert(ann_parts, eix_infix)
end
local irreg = table.concat(ann.irreg, " or ")
if irreg ~= "" and irreg ~= "regular" then
table.insert(ann_parts, irreg)
end
local g_infix = table.concat(ann.g_infix, " or ")
if g_infix ~= "" and g_infix ~= "no infix" then
table.insert(ann_parts, g_infix)
end
local defective = table.concat(ann.defective, " or ")
if defective ~= "" and defective ~= "regular" then
table.insert(ann_parts, defective)
end
local cons_alt = table.concat(ann.cons_alt, " or ")
if cons_alt ~= "" and cons_alt ~= "non-alternating" then
table.insert(ann_parts, cons_alt)
end
alternant_multiword_spec.annotation = table.concat(ann_parts, ", ")
end
local function show_forms(alternant_multiword_spec)
local lemmas = alternant_multiword_spec.forms.infinitive
alternant_multiword_spec.lemmas = lemmas -- save for later use in make_table()
local reconstructed_verb_spec = iut.reconstruct_original_spec(alternant_multiword_spec)
local function transform_accel_obj(slot, formobj, accel_obj)
-- No accelerators for negative imperatives, which are always multiword and derived directly from the
-- present subjunctive.
if slot:find("^neg_imp") then
return nil
end
if accel_obj then
accel_obj.form = "verb-form-" .. reconstructed_verb_spec
end
return accel_obj
end
local props = {
lang = lang,
lemmas = lemmas,
transform_accel_obj = transform_accel_obj,
slot_list = alternant_multiword_spec.verb_slots_basic,
}
iut.show_forms(alternant_multiword_spec.forms, props)
alternant_multiword_spec.footnote_basic = alternant_multiword_spec.forms.footnote
end
local notes_template = [=[
<div class="roa-footnote-outer-div" style="width:100%;">
<div class="roa-footnote-inner-div">
{footnote}
</div></div>
]=]
local basic_table = [=[
{description}<div class="NavFrame">
<div class="NavHead"> {title} の活用</div>
<div class="NavContent">
{\op}| class="roa-inflection-table" data-toggle-category="inflection"
|-
! colspan="3" class="roa-nonfinite-header" | <span title="infinitiu">不定詞</span>
| colspan="5" | {infinitive}
|-
! colspan="3" class="roa-nonfinite-header" | <span title="gerundi">現在分詞</span>
| colspan="5" | {gerund}
|-
! rowspan="3" colspan="2" class="roa-nonfinite-header" | <span title="participi passat">過去分詞</span>
| colspan="2" class="roa-nonfinite-header" |
! colspan="2" class="roa-nonfinite-header" | 男性
! colspan="2" class="roa-nonfinite-header" | 女性
|-
! colspan="2" class="roa-nonfinite-header" | 単数
| colspan="2" | {pp_ms}
| colspan="2" | {pp_fs}
|-
! colspan="2" class="roa-nonfinite-header" | 複数
| colspan="2" | {pp_mp}
| colspan="2" | {pp_fp}
|-
! colspan="2" rowspan="2" class="roa-person-number-header" | 人称
! colspan="3" class="roa-person-number-header" | 単数
! colspan="3" class="roa-person-number-header" | 複数
|-
! class="roa-person-number-header" style="width:12.5%;" | 第一人称
! class="roa-person-number-header" style="width:12.5%;" | 第二人称
! class="roa-person-number-header" style="width:12.5%;" | 第三人称
! class="roa-person-number-header" style="width:12.5%;" | 第一人称
! class="roa-person-number-header" style="width:12.5%;" | 第二人称
! class="roa-person-number-header" style="width:12.5%;" | 第三人称
|-
! rowspan="6" class="roa-indicative-left-rail" | <span title="indicatiu">直説法</span>
! class="roa-indicative-left-rail" |
! class="roa-indicative-left-rail" | <<jo>>
! class="roa-indicative-left-rail" | <<tu>>
! class="roa-indicative-left-rail" | <<ell>>/<<ella>><br /><<vostè>>
! class="roa-indicative-left-rail" | <<nosaltres>><br /><<nós>>
! class="roa-indicative-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-indicative-left-rail" | <<ells>>/<<elles>><br /><<vostès>>
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="present">現在</span>
| {pres_1s}
| {pres_2s}
| {pres_3s}
| {pres_1p}
| {pres_2p}
| {pres_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="imperfet">不完了過去</span>
| {impf_1s}
| {impf_2s}
| {impf_3s}
| {impf_1p}
| {impf_2p}
| {impf_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="futur">未来</span>
| {fut_1s}
| {fut_2s}
| {fut_3s}
| {fut_1p}
| {fut_2p}
| {fut_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="passat">完了過去</span>
| {pret_1s}
| {pret_2s}
| {pret_3s}
| {pret_1p}
| {pret_2p}
| {pret_3p}
|-
! class="roa-indicative-left-rail" style="height:3em;" | <span title="condicional">可能法</span>
| {cond_1s}
| {cond_2s}
| {cond_3s}
| {cond_1p}
| {cond_2p}
| {cond_3p}
|-
! class="roa-subjunctive-left-rail" rowspan="3" | <span title="subjuntiu">接続法</span>
! class="roa-subjunctive-left-rail" |
! class="roa-subjunctive-left-rail" | <<jo>>
! class="roa-subjunctive-left-rail" | <<tu>>
! class="roa-subjunctive-left-rail" | <<ell>>/<<ella>><br /><<vostè>>
! class="roa-subjunctive-left-rail" | <<nosaltres>><br /><<nós>>
! class="roa-subjunctive-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-subjunctive-left-rail" | <<ells>>/<<elles>><br /><<vostès>>
|-
! class="roa-subjunctive-left-rail" style="height:3em;" | <span title="present">現在</span>
| {pres_sub_1s}
| {pres_sub_2s}
| {pres_sub_3s}
| {pres_sub_1p}
| {pres_sub_2p}
| {pres_sub_3p}
|-
! class="roa-subjunctive-left-rail" style="height:3em;" rowspan="1" | <span title="imperfet">過去</span>
| {impf_sub_1s}
| {impf_sub_2s}
| {impf_sub_3s}
| {impf_sub_1p}
| {impf_sub_2p}
| {impf_sub_3p}
|-
! rowspan="3" class="roa-imperative-left-rail" style="height:3em;" | <span title="imperatiu">命令法</span>
! class="roa-imperative-left-rail" |
! class="roa-imperative-left-rail" | —
! class="roa-imperative-left-rail" | <<tu>>
! class="roa-imperative-left-rail" | <<vostè>>
! class="roa-imperative-left-rail" | <<nosaltres>>
! class="roa-imperative-left-rail" | <<vosaltres>><br /><<vós>>
! class="roa-imperative-left-rail" | <<vostès>>
|-
! class="roa-imperative-left-rail" style="height:3em;" | <span title="afirmatiu">-</span>
| —
| {imp_2s}
| {imp_3s}
| {imp_1p}
| {imp_2p}
| {imp_3p}
|-
! class="roa-imperative-left-rail" style="height:3em;" | <span title="negatiu">禁止</span> (<<no>>)
| —
| {neg_imp_2s}
| {neg_imp_3s}
| {neg_imp_1p}
| {neg_imp_2p}
| {neg_imp_3p}
|{\cl}{notes_clause}</div></div>]=]
local function make_table(alternant_multiword_spec)
local forms = alternant_multiword_spec.forms
forms.title = link_term(alternant_multiword_spec.lemmas[1].form, nil, "term")
local ann_parts = {}
if alternant_multiword_spec.annotation ~= "" then
table.insert(ann_parts, alternant_multiword_spec.annotation)
end
if alternant_multiword_spec.args.titlenote then
table.insert(ann_parts, alternant_multiword_spec.args.titlenote)
end
local annotation = table.concat(ann_parts, ", ")
if annotation ~= "" then
forms.title = forms.title .. " (" .. annotation .. ")"
end
forms.description = ""
-- Format the table.
forms.footnote = alternant_multiword_spec.footnote_basic
forms.notes_clause = forms.footnote ~= "" and m_string_utilities.format(notes_template, forms) or ""
local table_with_pronouns = rsub(basic_table, "<<([^<>|]-)|([^<>|]-)>>", link_term)
local table_with_pronouns = rsub(table_with_pronouns, "<<(.-)>>", link_term)
return require("Module:TemplateStyles")("Module:roa-verb/style.css") ..
m_string_utilities.format(table_with_pronouns, forms)
end
-- Externally callable function to parse and conjugate a verb given user-specified arguments.
-- Return value is WORD_SPEC, an object where the conjugated forms are in `WORD_SPEC.forms`
-- for each slot. If there are no values for a slot, the slot key will be missing. The value
-- for a given slot is a list of objects {form=FORM, footnotes=FOOTNOTES}.
function export.do_generate_forms(args, source_template, headword_head)
local PAGENAME = mw.loadData("Module:headword/data").pagename
local function in_template_space()
return mw.title.getCurrentTitle().nsText == "テンプレート"
end
-- Determine the verb spec we're being asked to generate the conjugation of. This may be taken from the
-- current page title or the value of |pagename=; but not when called from {{ca-verb form of}}, where the
-- page title is a non-lemma form. Note that the verb spec may omit the infinitive; e.g. it may be "<i-e>".
-- For this reason, we use the value of `pagename` computed here down below, when calling normalize_all_lemmas().
local pagename = source_template ~= "ca-verb form of" and args.pagename or PAGENAME
local head = headword_head or pagename
local arg1 = args[1]
if not arg1 then
if (pagename == "ca-conj" or pagename == "ca-verb" or pagename == "ca-verb form of" or pagename == "ca-conjug") and in_template_space() then
arg1 = "amar<>"
else
arg1 = "<>"
end
end
-- When called from {{ca-verb form of}}, determine the non-lemma form whose inflections we're being asked to
-- determine. This normally comes from the page title or the value of |pagename=.
local verb_form_of_form
if source_template == "ca-verb form of" then
verb_form_of_form = args.pagename
if not verb_form_of_form then
if PAGENAME == "ca-verb form of" and in_template_space() then
verb_form_of_form = "ami"
else
verb_form_of_form = PAGENAME
end
end
end
local incorporated_headword_head_into_lemma = false
if arg1:find("^<.*>$") then -- missing lemma
if head:find(" ") then
-- If multiword lemma, try to add arg spec after the first word.
-- Try to preserve the brackets in the part after the verb, but don't do it
-- if there aren't the same number of left and right brackets in the verb
-- (which means the verb was linked as part of a larger expression).
local refl_clitic_verb, post = rmatch(head, "^(.-)( .*)$")
local left_brackets = rsub(refl_clitic_verb, "[^%[]", "")
local right_brackets = rsub(refl_clitic_verb, "[^%]]", "")
if #left_brackets == #right_brackets then
arg1 = iut.remove_redundant_links(refl_clitic_verb) .. arg1 .. post
incorporated_headword_head_into_lemma = true
else
-- Try again using the form without links.
local linkless_head = m_links.remove_links(head)
if linkless_head:find(" ") then
refl_clitic_verb, post = rmatch(linkless_head, "^(.-)( .*)$")
arg1 = refl_clitic_verb .. arg1 .. post
else
error("Unable to incorporate <...> spec into explicit head due to a multiword linked verb or " ..
"unbalanced brackets; please include <> explicitly: " .. arg1)
end
end
else
-- Will be incorporated through `head` below in the call to normalize_all_lemmas().
incorporated_headword_head_into_lemma = true
end
end
local function split_bracketed_runs_into_words(bracketed_runs)
return put.split_alternating_runs(bracketed_runs, " ", "preserve splitchar")
end
local parse_props = {
parse_indicator_spec = parse_indicator_spec,
-- Split words only on spaces, not on hyphens, because that messes up reflexive verb parsing.
split_bracketed_runs_into_words = split_bracketed_runs_into_words,
allow_default_indicator = true,
allow_blank_lemma = true,
}
local alternant_multiword_spec = iut.parse_inflected_text(arg1, parse_props)
alternant_multiword_spec.pos = pos or "verbs"
alternant_multiword_spec.args = args
alternant_multiword_spec.source_template = source_template
alternant_multiword_spec.verb_form_of_form = verb_form_of_form
alternant_multiword_spec.incorporated_headword_head_into_lemma = incorporated_headword_head_into_lemma
normalize_all_lemmas(alternant_multiword_spec, head)
detect_all_indicator_specs(alternant_multiword_spec)
local inflect_props = {
slot_list = alternant_multiword_spec.all_verb_slots,
inflect_word_spec = conjugate_verb,
-- We add links around the generated verbal forms rather than allow the entire multiword
-- expression to be a link, so ensure that user-specified links get included as well.
include_user_specified_links = true,
}
iut.inflect_multiword_or_alternant_multiword_spec(alternant_multiword_spec, inflect_props)
-- Remove redundant brackets around entire forms.
for slot, forms in pairs(alternant_multiword_spec.forms) do
for _, form in ipairs(forms) do
form.form = iut.remove_redundant_links(form.form)
end
end
compute_categories_and_annotation(alternant_multiword_spec)
if args.json and source_template == "ca-conj" then
return require("Module:JSON").toJSON(alternant_multiword_spec.forms)
end
return alternant_multiword_spec
end
-- Entry point for {{ca-conj}}. Template-callable function to parse and conjugate a verb given
-- user-specified arguments and generate a displayable table of the conjugated forms.
function export.show(frame)
local parent_args = frame:getParent().args
local params = {
[1] = {},
["titlenote"] = {},
["noautolinktext"] = {type = "boolean"},
["noautolinkverb"] = {type = "boolean"},
["pagename"] = {}, -- for testing/documentation pages
["json"] = {type = "boolean"}, -- for bot use
}
local args = require("Module:parameters").process(parent_args, params)
local alternant_multiword_spec = export.do_generate_forms(args, "ca-conj")
if type(alternant_multiword_spec) == "string" then
-- JSON return value
return alternant_multiword_spec
end
show_forms(alternant_multiword_spec)
return make_table(alternant_multiword_spec) ..
require("Module:utilities").format_categories(alternant_multiword_spec.categories, lang, nil, nil, force_cat)
end
return export
lb3o5u4k1f2lrfgte08b7b2cpnjfhue
2313426
2313425
2026-08-09T09:48:26Z
Kuroco2k
84207
だめそう...。
2313426
Scribunto
text/plain
--[=[
This module contains functions for creating inflection tables for Catalan
verbs.
Notice:
The bot [[User:MewBot]] uses this module to automatically create entries
for verb forms. If you change how this module works, please notify
the bot owner so the bot can be updated!
]=]--
local m_utilities = require("モジュール:utilities")
local com = require("モジュール:ca-common")
local export = {}
local lang = require("モジュール:languages").getByCode("ca")
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
local conj_type = frame.args[1] or error("活用の種類が指定されていません。モジュールの呼び出しにパラメータ1を与えて下さい。")
local args = frame:getParent().args
PAGENAME = mw.title.getCurrentTitle().text
NAMESPACE = mw.title.getCurrentTitle().nsText
local forms, title, categories
if conj_type == "ar" then
forms, title, categories = conj_1(args)
elseif conj_type == "re" or conj_type == "er" then
forms, title, categories = conj_2(args)
elseif conj_type == "dre" or conj_type == "ure_ïa" then
forms, title, categories = conj_2_velar(args)
elseif conj_type == "ir_eix" then
forms, title, categories = conj_3(args, true)
elseif conj_type == "ir_no_eix" then
forms, title, categories = conj_3(args, false)
else
error("Unknown conjugation type '" .. conj_type .. "'")
end
if args["bot"] or "" ~= "" then
return make_bot_list(forms, sep ~= "")
else
return make_table(forms, title) .. m_utilities.format_categories(categories, lang)
end
end
-- Conjugate a first conjugation verb (-ar)
function conj_1(args)
local forms = {}
local categories = {"カタルーニャ語 第一変化動詞"}
local title = "[[付録:カタルーニャ語 動詞#第一変化動詞|第一変化]]"
local stems = {}
stems.back = args[1] or (NAMESPACE == "テンプレート" and "-") or error("The first parameter is missing")
make_stems(stems, "a")
forms["infinitive"] = stems.back .. "ar"
forms["pres_part"] = stems.back .. "ant"
forms["past_part"] = stems.back .. "at"
make_pres_1(forms, stems)
make_impf(forms, stems, "a")
make_futr_cond(forms, stems.back .. "a")
make_pret(forms, stems, "a")
make_pres_sub(forms, stems, "a")
make_impf_sub(forms, stems, "a")
-- The verb "donar" gets accents on two of the forms,
-- to distinguish them from the noun "dona".
if stems.back == "don" then
forms["pres_ind_2sg"] = "dónes"
forms["pres_ind_3sg"] = "dóna"
forms["impr_2sg"] = "dóna"
end
return forms, title, categories
end
-- Conjugate a second conjugation verb in -re or unstressed -er
function conj_2(args)
local forms = {}
local categories = {"カタルーニャ語 第二変化動詞"}
local title = "[[付録:カタルーニャ語 動詞#第二変化動詞|第二変化]]"
local stems = {}
stems.front_stressedA = args[1] or (NAMESPACE == "テンプレート" and "-") or error("The first parameter is missing")
stems.front = args[2]; if stems.front == "" then stems.front = nil end
if stems.front then
title = title .. ", 強勢がある時語幹が変化"
table.insert(categories, "カタルーニャ語 語幹が変化する第二変化動詞")
end
make_stems(stems, "e")
if stems.front:find("[cmxs]$") or stems.front:find("ny$") or stems.front:find("rr$") then
forms["infinitive"] = stems.front_stressedA .. "er"
make_futr_cond(forms, stems.front .. "e")
elseif stems.front:find("[ln]$") then
forms["infinitive"] = stems.back_stressed .. "dre"
make_futr_cond(forms, stems.back .. "d")
else
forms["infinitive"] = stems.back_stressed .. "re"
make_futr_cond(forms, stems.back)
end
forms["pres_part"] = stems.front .. "ent"
forms["past_part"] = stems.back .. "ut"
make_pres_23(forms, stems, "e")
make_impf(forms, stems, "e")
make_pret(forms, stems, "e")
make_pres_sub(forms, stems, "e")
make_impf_sub(forms, stems, "e")
local past_part = args["past_part"] or ""
if past_part ~= "" then
forms["past_part"] = past_part
title = title .. ", 不規則過去分詞"
table.insert(categories, "カタルーニャ語 不規則過去分詞の第二変化動詞")
end
return forms, title, categories
end
-- Conjugate a second conjugation verb (-re) with velar infix
function conj_2_velar(args)
local forms = {}
local categories = {"カタルーニャ語 第二変化動詞"}
local title = "[[付録:カタルーニャ語 動詞#Velar-infix stems|second conjugation with velar infix]]"
local stems = {}
stems.front_stressedA = args[1] or (NAMESPACE == "テンプレート" and "-n") or error("The first parameter is missing")
stems.front = args[2]; if stems.front == "" then stems.front = nil end
make_stems(stems, "e")
local velar_stems = {}
velar_stems.back_stressedA = stems.back_stressedA:gsub("v$", "") .. "g"
velar_stems.back = stems.back:gsub("v$", "") .. "g"
make_stems(velar_stems, "e")
if stems.back_stressed:find("[aeiouv]$") then
forms["infinitive"] = stems.back_stressed:gsub("v$", "") .. "ure"
make_futr_cond(forms, stems.back:gsub("v$", "") .. "u")
elseif stems.back_stressed:find("[ln]$") then
forms["infinitive"] = stems.back_stressed .. "dre"
make_futr_cond(forms, stems.back .. "d")
else
error("Invalid stem")
end
forms["pres_part"] = stems.front .. "ent"
forms["past_part"] = velar_stems.back .. "ut"
make_pres_23(forms, stems, "e"); forms["pres_ind_1sg"] = velar_stems.final_stressed
make_impf(forms, stems, "e")
make_pret(forms, velar_stems, "e")
make_pres_sub(forms, velar_stems, "e")
make_impf_sub(forms, velar_stems, "e")
local past_part = args["past_part"] or ""
if past_part ~= "" then
forms["past_part"] = past_part
title = title .. ", 不規則過去分詞"
table.insert(categories, "カタルーニャ語 不規則過去分詞の第二変化動詞")
end
return forms, title, categories
end
-- Conjugate a third conjugation verb (-ir)
function conj_3(args, eix)
local forms = {}
local categories = {"カタルーニャ語 第三変化動詞"}
local title
local stems = {}
stems.front = args[1] or (NAMESPACE == "テンプレート" and "-") or error("The first parameter is missing")
if eix then
table.insert(categories, "カタルーニャ語 -eix-を含む第三変化動詞")
title = "[[付録:カタルーニャ語 動詞#-eix-有り|第三変化動詞(接中辞-eix-有り)]]"
stems.front_stressedA = stems.front .. "eix"
else
table.insert(categories, "カタルーニャ語 -eix-を含まない第三変化動詞")
title = "[[付録:カタルーニャ語 動詞#-eix-無し|第三変化動詞(接中辞-eix-無し)]]"
stems.front_stressedA = args[2]; if stems.front_stressedA == "" then stems.front_stressedA = nil end
if stems.front_stressedA then
title = title .. ", 強勢がある時語幹が変化"
table.insert(categories, "カタルーニャ語 語幹が変化する第三変化動詞")
end
end
make_stems(stems, "i")
forms["infinitive"] = stems.front .. "ir"
forms["pres_part"] = stems.front .. "int"
forms["past_part"] = stems.front_i .. "t"
make_pres_23(forms, stems, "i")
make_impf(forms, stems, "i")
make_futr_cond(forms, stems.front .. "i")
make_pret(forms, stems, "i")
make_pres_sub(forms, stems, "i")
make_impf_sub(forms, stems, "i")
local past_part = args["past_part"] or ""
if past_part ~= "" then
forms["past_part"] = past_part
title = title .. ", 不規則過去分詞"
table.insert(categories, "カタルーニャ語 不規則過去分詞の第三変化動詞")
end
return forms, title, categories
end
-- Create the various base stems that endings are attached to.
function make_stems(stems)
if stems.back or stems.back_stressedA then
stems.back_stressedA = stems.back_stressedA or stems.back
stems.front_stressedA = com.back_to_front(stems.back_stressedA)
stems.back_stressed = com.remove_accents(stems.back_stressedA)
stems.front_stressed = com.remove_accents(stems.front_stressedA)
stems.back = stems.back or stems.back_stressed
stems.front = com.back_to_front(stems.back)
elseif stems.front or stems.front_stressedA then
stems.front_stressedA = stems.front_stressedA or stems.front
stems.back_stressedA = com.front_to_back(stems.front_stressedA)
stems.front_stressed = com.remove_accents(stems.front_stressedA)
stems.back_stressed = com.remove_accents(stems.back_stressedA)
stems.front = stems.front or stems.front_stressed
stems.back = com.front_to_back(stems.front)
else
error("語幹が与えられていません。")
end
-- Does this verb need a diaeresis when endings with -i are attached?
-- Verbs in -aiar, -eiar etc. lose the final -i of the stem
-- when another -i is attached.
local diaeresis = (stems.back:find("[aeiou]$") and not stems.back:find("[aeiou]u$"))
local diaeresis_stressed = (stems.back_stressed:find("[aeiou]$") and not stems.back_stressed:find("[aeiou]u$"))
stems.front_no_i = stems.front:gsub("([aeiou])i$", "%1")
stems.front_stressed_no_i = stems.front_stressed:gsub("([aeiou])i$", "%1")
stems.front_i = stems.front_no_i:gsub("ü$", "u") .. (diaeresis and "ï" or "i")
stems.front_stressed_i = stems.front_stressed_no_i:gsub("ü$", "u") .. (diaeresis_stressed and "ï" or "i")
-- Stems that are used with no following syllable, which have final devoicing.
if stems.back_stressed:find("s$") or stems.back_stressed:find("[ei]n$") then
if stems.back_stressedA:find("[aeiou]") then
stems.final_stressedA = stems.back_stressedA:gsub("ss$", "s")
else
stems.final_stressedA = stems.back_stressed:gsub("ss$", "s")
end
-- l and r can't stand between a consonant and the end or another consonant,
-- so an epenthetic vowel is inserted.
elseif stems.back_stressed:find("[bpdtgc][lr]$") then
stems.final_stressedA = stems.front_stressed .. "e"
elseif stems.back_stressed:find("[aeiou][bd]$") then
stems.final_stressedA = stems.back_stressed:gsub("b$", "p"):gsub("d$", "t")
else
stems.final_stressedA = stems.back_stressed:gsub("g$", "c"):gsub("j$", "ig")
end
stems.final_stressed = com.remove_accents(stems.final_stressedA)
end
function make_pres_1(forms, stems)
forms["pres_ind_1sg"] = stems.back_stressed .. "o"
forms["pres_ind_2sg"] = stems.front_stressed .. "es"
forms["pres_ind_3sg"] = stems.back_stressed .. "a"
forms["pres_ind_1pl"] = stems.front .. "em"
forms["pres_ind_2pl"] = stems.front .. "eu"
forms["pres_ind_3pl"] = stems.front_stressed .. "en"
forms["impr_2sg"] = forms["pres_ind_3sg"]
forms["impr_2pl"] = forms["pres_ind_2pl"]
end
function make_pres_23(forms, stems, vowel)
forms["pres_ind_1sg"] = stems.back_stressed .. "o"
forms["pres_ind_3pl"] = stems.front_stressed .. "en"
-- The 2nd and 3rd person singular present forms have special forms because
-- of the way sounds are combined in them.
forms["pres_ind_2sg"] = stems.final_stressed .. "s"
forms["pres_ind_3sg"] = stems.final_stressedA
-- Verbs ending in a sibilant consonant get an epenthetic vowel
-- in the 2nd person singular.
if stems.front_stressed:find("[cgsx]$") then
forms["pres_ind_2sg"] = stems.front_stressed .. "es"
-- Verbs ending in a vowel add -u in some forms.
elseif stems.back_stressed:find("u$") then
forms["pres_ind_2sg"] = stems.front_stressed .. "us"
forms["pres_ind_3sg"] = stems.front_stressed .. "u"
elseif stems.back_stressed:find("[aeiov]$") then
forms["pres_ind_2sg"] = stems.front_stressed:gsub("v$", "") .. "us"
forms["pres_ind_3sg"] = stems.front_stressed:gsub("v$", "") .. "u"
forms["pres_ind_3pl"] = stems.front_stressed:gsub("v$", "") .. "uen"
end
if vowel == "i" then
forms["pres_ind_1pl"] = stems.front_i .. "m"
forms["pres_ind_2pl"] = stems.front_i .. "u"
else
forms["pres_ind_1pl"] = stems.front .. "em"
forms["pres_ind_2pl"] = stems.front .. "eu"
end
forms["impr_2sg"] = forms["pres_ind_3sg"]
forms["impr_2pl"] = forms["pres_ind_2pl"]
end
function make_impf(forms, stems, vowel)
local stem = stems.back .. "av"
local stemA = stems.back .. "àv"
if vowel ~= "a" then
stem = stems.front_i
stemA = stems.front .. "í"
end
forms["impf_ind_1sg"] = stem .. "a"
forms["impf_ind_2sg"] = stem .. "es"
forms["impf_ind_3sg"] = stem .. "a"
forms["impf_ind_1pl"] = stemA .. "em"
forms["impf_ind_2pl"] = stemA .. "eu"
forms["impf_ind_3pl"] = stem .. "en"
end
function make_pret(forms, stems, vowel)
local stem = stems.back .. "a"
local stemA = stems.back .. "à"
if vowel == "e" then
stem = stems.front .. "e"
stemA = stems.front .. "é"
elseif vowel == "i" then
stem = stems.front_i
stemA = stems.front .. "í"
end
forms["pret_ind_1sg"] = stems.front_no_i .. "í"
forms["pret_ind_2sg"] = stem .. "res"
forms["pret_ind_3sg"] = stemA
forms["pret_ind_1pl"] = stemA .. "rem"
forms["pret_ind_2pl"] = stemA .. "reu"
forms["pret_ind_3pl"] = stem .. "ren"
end
function make_futr_cond(forms, stem)
forms["futr_ind_1sg"] = stem .. "ré"
forms["futr_ind_2sg"] = stem .. "ràs"
forms["futr_ind_3sg"] = stem .. "rà"
forms["futr_ind_1pl"] = stem .. "rem"
forms["futr_ind_2pl"] = stem .. "reu"
forms["futr_ind_3pl"] = stem .. "ran"
forms["cond_1sg"] = stem .. "ria"
forms["cond_2sg"] = stem .. "ries"
forms["cond_3sg"] = stem .. "ria"
forms["cond_1pl"] = stem .. "ríem"
forms["cond_2pl"] = stem .. "ríeu"
forms["cond_3pl"] = stem .. "rien"
end
function make_pres_sub(forms, stems, vowel)
forms["pres_sub_1sg"] = stems.front_stressed_i
forms["pres_sub_2sg"] = stems.front_stressed_i .. "s"
forms["pres_sub_3sg"] = stems.front_stressed_i
if vowel == "i" then
forms["pres_sub_1pl"] = stems.front_i .. "m"
forms["pres_sub_2pl"] = stems.front_i .. "u"
else
forms["pres_sub_1pl"] = stems.front .. "em"
forms["pres_sub_2pl"] = stems.front .. "eu"
end
forms["pres_sub_3pl"] = stems.front_stressed_i .. "n"
forms["impr_3sg"] = forms["pres_sub_3sg"]
forms["impr_1pl"] = forms["pres_sub_1pl"]
forms["impr_3pl"] = forms["pres_sub_3pl"]
end
function make_impf_sub(forms, stems, vowel)
local stem = stems.front .. "e"
local stemA = stems.front .. "é"
if vowel == "i" then
stem = stems.front_i
stemA = stems.front .. "í"
end
forms["impf_sub_1sg"] = stemA .. "s"
forms["impf_sub_2sg"] = stem .. "ssis"
forms["impf_sub_3sg"] = stemA .. "s"
forms["impf_sub_1pl"] = stemA .. "ssim"
forms["impf_sub_2pl"] = stemA .. "ssiu"
forms["impf_sub_3pl"] = stem .. "ssin"
end
-- Make the table
function make_table(forms, title)
-- Make links out of all forms
for key, form in pairs(forms) do
forms[key] = com.link_form(form)
end
return [=[
<div class="NavFrame">
<div class="NavHead" style="text-align: left">'']=] .. forms["infinitive"] .. "''の活用" .. (title and " (" .. title .. ")" or "") .. [=[</div>
<div class="NavContent">
{| style="width:100%;background:#F0F0F0;;padding:.3em"
|-
! colspan="3" style="background:#e2e4c0;" | 不定詞
| colspan="5" style=";"| ]=] .. forms["infinitive"] .. [=[
|-
! colspan="3" style="background:#e2e4c0;" | 現在分詞
| colspan="5" style=";"| ]=] .. forms["pres_part"] .. [=[
|-
! colspan="3" style="background:#e2e4c0;" | 過去分詞
| colspan="5" style=";"| ]=] .. forms["past_part"] .. [=[
|-
! colspan="2" rowspan="2" style="background:#e2e4cb;" | 人称
! colspan="3" style="background:#e2e4cb;" | 単数
! colspan="3" style="background:#e2e4cb;" | 複数
|-
! style="background:#e2e4cb;;width:12.5%" | 一人称
! style="background:#e2e4cb;;width:12.5%" | 二人称
! style="background:#e2e4cb;;width:12.5%" | 三人称
! style="background:#e2e4cb;;width:12.5%" | 一人称
! style="background:#e2e4cb;;width:12.5%" | 二人称
! style="background:#e2e4cb;;width:12.5%" | 三人称
|-
! rowspan="6" style="background:#c0cfe4;" | 直説法
! style="background:#c0cfe4;" |
! style="background:#c0cfe4;" | [[jo]]
! style="background:#c0cfe4;" | [[tu]]
! style="background:#c0cfe4;" | [[ell]]/[[ella]]<br />[[vostè]]
! style="background:#c0cfe4;" | [[nosaltres]]<br />[[nós]]
! style="background:#c0cfe4;" | [[vosaltres]]<br />[[vós]]
! style="background:#c0cfe4;" | [[ells]]/[[elles]]<br />[[vostès]]
|-
! style="height:3em;background:#c0cfe4;" | 現在
| style=";" | ]=] .. forms["pres_ind_1sg"] .. [=[
| style=";" | ]=] .. forms["pres_ind_2sg"] .. [=[
| style=";" | ]=] .. forms["pres_ind_3sg"] .. [=[
| style=";" | ]=] .. forms["pres_ind_1pl"] .. [=[
| style=";" | ]=] .. forms["pres_ind_2pl"] .. [=[
| style=";" | ]=] .. forms["pres_ind_3pl"] .. [=[
|-
! style="height:3em;background:#c0cfe4;" | 不完了過去
| style=";" | ]=] .. forms["impf_ind_1sg"] .. [=[
| style=";" | ]=] .. forms["impf_ind_2sg"] .. [=[
| style=";" | ]=] .. forms["impf_ind_3sg"] .. [=[
| style=";" | ]=] .. forms["impf_ind_1pl"] .. [=[
| style=";" | ]=] .. forms["impf_ind_2pl"] .. [=[
| style=";" | ]=] .. forms["impf_ind_3pl"] .. [=[
|-
! style="height:3em;background:#c0cfe4;" | 未来
| style=";" | ]=] .. forms["futr_ind_1sg"] .. [=[
| style=";" | ]=] .. forms["futr_ind_2sg"] .. [=[
| style=";" | ]=] .. forms["futr_ind_3sg"] .. [=[
| style=";" | ]=] .. forms["futr_ind_1pl"] .. [=[
| style=";" | ]=] .. forms["futr_ind_2pl"] .. [=[
| style=";" | ]=] .. forms["futr_ind_3pl"] .. [=[
|-
! style="height:3em;background:#c0cfe4;" | 完了過去
| style=";" | ]=] .. forms["pret_ind_1sg"] .. [=[
| style=";" | ]=] .. forms["pret_ind_2sg"] .. [=[
| style=";" | ]=] .. forms["pret_ind_3sg"] .. [=[
| style=";" | ]=] .. forms["pret_ind_1pl"] .. [=[
| style=";" | ]=] .. forms["pret_ind_2pl"] .. [=[
| style=";" | ]=] .. forms["pret_ind_3pl"] .. [=[
|-
! style="height:3em;background:#c0cfe4;" | 過去未来・可能法
| style=";" | ]=] .. forms["cond_1sg"] .. [=[
| style=";" | ]=] .. forms["cond_2sg"] .. [=[
| style=";" | ]=] .. forms["cond_3sg"] .. [=[
| style=";" | ]=] .. forms["cond_1pl"] .. [=[
| style=";" | ]=] .. forms["cond_2pl"] .. [=[
| style=";" | ]=] .. forms["cond_3pl"] .. [=[
|-
! style="background:#c0e4c0;" rowspan="3" | 接続法
! style="background:#c0e4c0;" |
! style="background:#c0e4c0;" | jo
! style="background:#c0e4c0;" | tu
! style="background:#c0e4c0;" | ell/ella<br />vostè
! style="background:#c0e4c0;" | nosaltres<br />nós
! style="background:#c0e4c0;" | vosaltres<br />vós
! style="background:#c0e4c0;" | ells/elles<br />vostès
|-
! style="height:3em;background:#c0e4c0;" | 現在
| style=";" | ]=] .. forms["pres_sub_1sg"] .. [=[
| style=";" | ]=] .. forms["pres_sub_2sg"] .. [=[
| style=";" | ]=] .. forms["pres_sub_3sg"] .. [=[
| style=";" | ]=] .. forms["pres_sub_1pl"] .. [=[
| style=";" | ]=] .. forms["pres_sub_2pl"] .. [=[
| style=";" | ]=] .. forms["pres_sub_3pl"] .. [=[
|-
! style="height:3em;background:#c0e4c0;" rowspan="1" | 過去
| style=";" | ]=] .. forms["impf_sub_1sg"] .. [=[
| style=";" | ]=] .. forms["impf_sub_2sg"] .. [=[
| style=";" | ]=] .. forms["impf_sub_3sg"] .. [=[
| style=";" | ]=] .. forms["impf_sub_1pl"] .. [=[
| style=";" | ]=] .. forms["impf_sub_2pl"] .. [=[
| style=";" | ]=] .. forms["impf_sub_3pl"] .. [=[
|-
! colspan="2" rowspan="2" style="height:3em;background:#e4d4c0;" | 命令法
! style="background:#e4d4c0;" | —
! style="background:#e4d4c0;" | tu
! style="background:#e4d4c0;" | vostè
! style="background:#e4d4c0;" | nosaltres
! style="background:#e4d4c0;" | vosaltres<br />vós
! style="background:#e4d4c0;" | vostès
|-
| —
| style=";" | ]=] .. forms["impr_2sg"] .. [=[
| style=";" | ]=] .. forms["impr_3sg"] .. [=[
| style=";" | ]=] .. forms["impr_1pl"] .. [=[
| style=";" | ]=] .. forms["impr_2pl"] .. [=[
| style=";" | ]=] .. forms["impr_3pl"] .. [=[
|}</div></div>]=]
end
-- This generates machine-readable output, which allows formbots to easily
-- parse the output of the module.
function make_bot_list(forms)
local ret = ""
for key, form in pairs(forms) do
ret = ret .. "* " .. key .. "=" .. form .. "\n"
end
return ret
end
return export
fmly1loex8jsc0wg2x3hxkad4629mf0
モジュール:ca-common
828
121396
2313407
2286434
2026-08-09T09:00:12Z
Kuroco2k
84207
[[:en:Module:ca-common]]
2313407
Scribunto
text/plain
local export = {}
local romut_module = "Module:romance utilities"
local unaccented_vowel = "aeiouïü"
local accented_vowel = "àèéíòóú"
local vowel = unaccented_vowel .. accented_vowel
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsubn = mw.ustring.gsub
local usub = mw.ustring.sub
-- version of rsubn() that discards all but the first return value
function export.rsub(term, foo, bar)
local retval = rsubn(term, foo, bar)
return retval
end
local rsub = export.rsub
export.V = "[" .. vowel .. "]"
export.UV = "[" .. unaccented_vowel .. "]"
export.AV = "[" .. accented_vowel .. "]"
export.C = "[^" .. vowel .. "]"
local V = export.V
local UV = export.UV
local AV = export.AV
local C = export.C
-- Used when forming the feminine of adjectives in -i. Those with the stressed vowel 'e' or 'o' always seem to have è, ò.
local accent_vowel = {
["a"] = "à",
["e"] = "è",
["i"] = "í",
["o"] = "ò",
["u"] = "ú",
}
local prepositions = {
-- a + optional article (including salat)
"al?s? ",
-- de + optional article (including salat)
"del?s? ",
"d'",
-- ca + optional article (including salat and [[en]])
"can? ",
"cal?s? ",
-- per + optional article
"per ",
"pels? ",
-- others
"en ",
"amb ",
"cap ",
"com ",
"entre ",
"sense ",
"sobre ",
}
-- Make a link out of a form, or show a dash if empty.
function export.link_form(form, tag)
if not PAGENAME then
PAGENAME = mw.loadData("Module:headword/data").pagename
end
if type(form) == "table" then
for n, subform in pairs(form) do
form[n] = export.link_form(subform, tag)
end
return table.concat(form, ", ")
else
if form ~= "" then
return "<" .. (tag or "span") .. " lang=\"ca\">[[" .. form .. (form ~= PAGENAME and "#カタルーニャ語|" .. form or "") .. "]]</" .. (tag or "span") .. ">"
else
return "—"
end
end
end
-- Remove accents from any of the vowels in a word.
-- If an accented í follows another vowel, a diaeresis is added following
-- normal Catalan spelling rules.
function export.remove_accents(word, final_syllable_only)
word = rsub(
word,
"(.?.?)([àèéíòóú])(" .. (final_syllable_only and export.C .. "*" or ".*") .. ")$",
function (preceding, vowel, after)
if vowel == "í" then
if preceding:find("^[gq]u$") then
return preceding .. "i" .. after
elseif rfind(preceding, "[aeiouü]$") then
return preceding .. "ï" .. after
end
end
-- Decompose the accented vowel to an unaccented vowel (a, e, i, o, u)
-- plus an acute or grave; return the unaccented vowel.
return preceding .. mw.ustring.toNFD(vowel):sub(1, 1) .. after
end)
return word
end
-- Apply alternation of the final consonant of a stem, converting the form used before a back vowel into the form used
-- before a front vowel.
function export.back_to_front(stem)
return (stem
:gsub("qu$", "qü") -- adequar -> adeqües
:gsub("c$", "qu") -- marcar -> marques
:gsub("ç$", "c") -- abraçar -> abraces
:gsub("gu$", "gü") -- enaiguar -> enaigües
:gsub("g$", "gu") -- pegar -> pegues
:gsub("j$", "g") -- arranjar -> arranges
)
end
-- Apply alternation of the final consonant of a stem, converting the form used before a front vowel into the form used
-- before a back vowel.
function export.front_to_back(stem)
return (stem
:gsub("c$", "ç") -- torcer -> torço
:gsub("qu$", "c")
:gsub("qü$", "qu")
:gsub("g$", "j") -- fugir -> fujo
:gsub("gu$", "g")
:gsub("gü$", "gu")
)
end
-----------------------------------------------------------------------------------------
-- Inflection functions --
-----------------------------------------------------------------------------------------
-- Given a term `term`, if the term is multiword (either through spaces or hyphens), handle inflection of the term by
-- calling handle_multiword() in [[Module:romance utilities]]. `special` indicates which parts of the multiword term to
-- inflect, and `inflect` is a function of one argument to inflect the individual parts of the term. As an optimization,
-- if the term is not multiword and `special` is not given, do nothing.
local function call_handle_multiword(term, special, inflect, allow_multiple)
if not special and not term:find("[ %-]") then
return nil
end
local retval = require(romut_module).handle_multiword(term, special, inflect, prepositions)
if retval and #retval > 0 then
if allow_multiple then
return retval
end
if #retval ~= 1 then
error("Internal error: Should have only one return value from inflection function: " .. table.concat(retval, ","))
end
return retval[1]
end
return nil
end
function export.make_feminine(base, special)
local retval = call_handle_multiword(base, special, export.make_feminine)
if retval then
return retval
end
-- special cases
-- -able, -ible, -uble
if base:find("ble$") or
-- stressed -al/-ar in a multisyllabic word (not [[gal]], [[anòmal]], or [[car]], [[clar]], [[rar]], [[var]],
-- [[isòbar]], [[èuscar]], [[búlgar]], [[tàrtar]]/[[tàtar]], [[càtar]], [[àvar]])
(rfind(base, V .. "[^ ]*a[lr]$") and not rfind(base, AV .. "[^ ]*a[lr]$")) or
-- -ant in a multisyllabic word (not [[mant]], [[tant]], also [[quant]] but that needs manual handling)
-- -ent in a multisyllabic word (not [[lent]]; some other words in -lent have feminine in -a but not all)
rfind(base, V .. "[^ ]*[ae]nt$") or
-- Words in -aç, -iç, -oç (not [[descalç]], [[dolç]], [[agredolç]]; [[balbuç]] has -a and needs manual handling)
rfind(base, V .. "ç$") or
-- Words in -il including when non-stressed ([[hàbil]], [[dèbil]], [[mòbil]], [[fàcil]], [[símil]], [[tàmil]],
-- etc.); but not words in -òfil, -èfil, etc.
base:find("[^f]il$") then
return base
end
-- final vowel -> -a
if base:find("a$") then return base end
if base:find("o$") then return (base:gsub("o$", "a")) end
if base:find("e$") then return export.front_to_back(base:gsub("e$", "")) .. "a" end
-- -u -> -va
if base:find(UV .. "u$") then return (base:gsub("u$", "v") .. "a") end
-- accented vowel -> -na
if rfind(base, AV .. "$") then return export.remove_accents(base) .. "na" end
-- accented vowel + -s -> -sa
if rfind(base, AV .. "s$") then return export.remove_accents(base) .. "a" end
-- vowel + consonant(s) + i -> accent the first vowel, add -a
local prev, first_vowel, cons = rmatch(base, "^(.*)([aeo])i(" .. C .. "+)i$")
if first_vowel then
-- At least [[malaisi]]
return prev .. accent_vowel[first_vowel] .. "i" .. cons .. "ia"
end
local prev, first_vowel, cons = rmatch(base, "^(.*)(" .. UV .. ")(" .. C .. "+)i$")
if first_vowel then
return prev .. accent_vowel[first_vowel] .. cons .. "ia"
end
-- multisyllabic -at/-it/-ut (also -ït/-üt) with stress on the final vowel -> -ada/-ida/-uda
local mod_base = rsub(base, "([gq])u(" .. UV .. ")", "%1w%2") -- hack so we don't treat the u in qu/gu as a vowel
if (rfind(mod_base, V .. "[^ ]*[aiu]t$") and not rfind(mod_base, AV .. "[^ ]*[aiu]t$") and
not rfind(mod_base, "[aeo][iu]t$")) or rfind(mod_base, "[ïü]t$") then
return rsub(base, "t$", "da")
end
return base .. "a"
end
function export.make_plural(base, gender, special)
local retval = call_handle_multiword(base, special,
function(term) return export.make_plural(term, gender) end, "allow multiple")
if retval then
return retval
end
-- a -> es
if base:find("a$") then return {export.back_to_front(base:gsub("a$", "")) .. "es"} end
-- accented vowel -> -ns
if rfind(base, AV .. "$") then
return {export.remove_accents(base) .. "ns"}
end
if gender == "m" then
if rfind(base, AV .. "s$") then
return {export.remove_accents(base) .. "os"}
end
if rfind(base, "[sçxz]$") then
return {base .. "os"}
end
if base:find("sc$") or base:find("[sx]t$") then
return {base .. "s", base .. "os"}
end
end
if gender == "f" then
if base:find("s$") then return {base} end
if base:find("sc$") or base:find("[sx]t$") then
return {base .. "s", base .. "es"}
end
end
if base:find("eig$") then
return {base .. "s", rsub(base, "ig$", "jos")}
end
return {base .. "s"}
end
return export
l28rwfli5x3mz2fv8ms9csfbnyxeqxy
ветер
0
131022
2313219
2241575
2026-08-08T23:23:32Z
Kuroco2k
84207
wikify
2313219
wikitext
text/x-wiki
=={{mk}}==
==={{etym}}===
{{proto|Slavic|větrъ}} < {{proto|Indo-European|h₂weh₁-}}
==={{pron}}===
*{{IPA|ˈvɛtɛr}}
==={{noun}}===
{{head|mk|noun|g=m|tr=veter}}
[[Category:{{mk}}_気象]]
#{{ふりがな|風|かぜ}}
===={{drv}}====
*{{l|mk|ветер во магла|sc=Cyrl}}
==={{seealso}}===
*{{l|mk|ветар|sc=Cyrl}}
=={{ru}}==
==={{etym}}===
{{proto|Slavic|větrъ}} < {{proto|Indo-European|h₂weh₁-}}
==={{pron}}===
*{{IPA1|ˈvʲetʲɪr}}
*発音 :[[File:Ru-ветер.ogg]]
==={{noun}}===
{{head|ru|noun|head=ве́тер|tr=véter|g=m|不活動体}}
[[Category:{{ru}}_気象]]
[[Category:{{ru}}_身体症状]]
#{{ふりがな|風|かぜ}}
# (''複数形'' - ве́тры)[[鼓腸]]
{{ru-decl-noun|ве́тер|ве́тры, ветра́|ве́тра, ве́тру|ве́тров, ветро́в|ве́тру|ве́трам, ветра́м|ве́тер|ве́тры, ветра́|ве́тром|ве́трами, ветра́ми|о ве́тре|о ве́трах, о ветра́х|на ветру́|}}
===={{rel}}====
*{{l|ru|ветерок}}
*{{l|ru|ветреный}}
*{{l|ru|ветряк}}
*{{l|ru|ветрянка}}
*{{l|ru|звёздный ветер}}
*{{l|ru|поветрие}}
*{{l|ru|солнечный ветер}}
7irz0xhgiafa4fh4ymngs4i8pfbvc1z
писать
0
147633
2313472
2312148
2026-08-09T11:58:40Z
Kuroco2k
84207
2313472
wikitext
text/x-wiki
=={{L|ru}}==
==={{etym}}1===
{{etyl|cu|ru}} [[пьсати]] < {{etyl|sla-pro|ru}} {{recons|pьsati|lang=sla-pro}}, {{recons|pisati|lang=sla-pro}} < {{etyl|ine-pro|ru}} {{recons|peyk-|lang=ine-pro}}
===={{pron}}====
*{{IPA|lang=ru|pʲɪˈsatʲ}} :[[File:Ru-писать.ogg]]
===={{verb}}====
{{head|ru|verb|head=писа́ть|tr=pisátʹ|不完了体||完了体:|[[написать|написа́ть]]}}
#{{おくりがな2|書|か|く|かく}}。
====={{conjug}}=====
{{ru-conj|impf|6c+p|писа́ть}}
{{ru-conj|impf|6c+p|писа́ть|old=1}}
====={{rel}}=====
{{top}}
*{{l|ru|вписать}}
*{{l|ru|писаться}}
*{{l|ru|написаться}}
*{{l|ru|вписаться}}
*{{l|ru|выписать}}
*{{l|ru|выписаться}}
*{{l|ru|выписка}}
*{{l|ru|дописать}}
*{{l|ru|живопись}}
*{{l|ru|записать}}
*{{l|ru|записаться}}
*{{l|ru|записка}}
*{{l|ru|запись}}
*{{l|ru|надписать}}
*{{l|ru|описать}}
*{{l|ru|описка}}
*{{l|ru|отписать}}
*{{l|ru|отписка}}
*{{l|ru|переписать}}
*{{l|ru|переписываться}}
*{{l|ru|переписка}}
*{{l|ru|перепись}}
*{{l|ru|подписать}}
*{{l|ru|подписаться}}
*{{l|ru|подпись}}
*{{l|ru|писанина}}
*{{l|ru|писатель}}
*{{l|ru|письмо}}
*{{l|ru|предписать}}
*{{l|ru|предписание}}
*{{l|ru|приписать}}
*{{l|ru|приписка}}
*{{l|ru|прописать}}
*{{l|ru|прописаться}}
*{{l|ru|прописка}}
*{{l|ru|пропись}}
*{{l|ru|расписать}}
*{{l|ru|расписаться}}
*{{l|ru|расписка}}
*{{l|ru|списать}}
*{{l|ru|список}}
{{bottom}}
==={{etym}}2===
{{etyl|de|ru}} ''[[pissen]]'' < {{etyl|fro|ru}} ''[[pissier]]'' < {{etyl|VL.|ru}} {{recons|pissio|pissiō|lang=la}}
===={{pron}}====
*{{IPA|lang=ru|ˈpʲisətʲ}}
===={{verb}}====
{{head|ru|verb|head=пи́сать|tr=písatʹ|不完了体||完了体:|[[пописать|попи́сать]]}}
[[Category:{{ru}}_卑語]]
[[Category:{{ru}}_蔑称]]
#[[小便]]をする。
#(卑語)[[性的]]に[[欲情]]する。
====={{conjug}}=====
{{ru-conj|impf-intr|1a|пи́сать}}
====={{rel}}=====
*{{l|ru|писька}}
*{{l|ru|описать}}
*{{l|ru|описаться}}
bwl85ddcbgqc3h5tngcapqavc57abxg
突入
0
148332
2313121
1740999
2026-08-08T14:11:13Z
M-30722
1202
2313121
wikitext
text/x-wiki
{{kana-DEFAULTSORT|とつにゅう}}
=={{L|ja}}==
{{ja-kanjitab|とつ|にゅう|yomi=o}}
==={{pron}}===
{{ja-pron|とつにゅう|acc=0}}
{{ja-accent-common|region=京阪|h||とつにゅー}}
==={{noun}}===
{{ja-noun-suru|とつにゅう}}
[[Category:{{ja}}_軍事]]
# [[いきなり]]押し入ること。いきおいよく入ること。[[危険]]のある中へ[[注意]]や[[覚悟]]をもって進むこと。
#* 大気圏'''突入'''
# [[重大]]な[[局面]]に入ること。
==={{verb}}===
{{ja-verb-suru|とつにゅう}}
# いきなり押し入る。いきおいよく入る。危険のある中へ注意や覚悟をもって進む。
#* 警官隊が'''突入'''した。
# 重大な局面に入る。(大袈裟に)[[時期]]に入る。
#* ストライキに'''突入'''した。
#* この番組もついに五年目に'''突入'''しました。
{{日本語サ変活用}}
=={{L|ko}}==
==={{noun}}===
{{ko-head|noun|돌입|cat2=軍事}}
#(日本語に同じ)
=={{L|vi}}==
==={{verb}}===
{{vi-head|verb|đột|nhập}}
#突入する。
0wltedif34jslbj02kj4c9p55mbl7cv
柏树
0
153597
2313360
1198597
2026-08-09T05:05:48Z
Jiba1219
100610
2313360
wikitext
text/x-wiki
{{DEFAULTSORT:bai3shu4}}
=={{L|zh}}==
{{wikipedia|lang=zh}}
==={{pron}}===
{{cmn-pron|bǎishù|bóshù|z=n}}
{{yue-pron|paak3 syu6|h=n}}
{{nan-pron|qz:peh-chhiū}}
{{hak-pron|h=bag shu˖}}
{{wuu-pron|sh:7paq zy}}
{{gan-pron|'bah6 xy5}}
==={{noun}}===
{{zhchars|t=柏樹}}
#{{wikipedia-s|コノテガシワ}}。
===={{syn}}====
*[[侧柏]]/[[側柏]]
{{zh-cat|bai3shu4|名詞|木|hsk=丙}}
{{yue-cat|paak3syu6|名詞|木}}
{{nan-cat|peh4chhiu7|名詞|木}}
{{wuu-cat|pah4zy3|名詞|木}}
{{gan-cat|bah6xy5|名詞|木}}
qy5hphto4og19xfydu1wunvgpmr8o0u
柏樹
0
153599
2313359
2212940
2026-08-09T05:04:22Z
Jiba1219
100610
/* {{L|zh}} */
2313359
wikitext
text/x-wiki
{{kana-DEFAULTSORT|はくじゅ}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[はくじゅ]]}}
#{{タグ|ja|木}}{{ふりがな|榧|かや}}。
#{{タグ|ja|木}}{{ふりがな|児手柏|このてがしわ}}。
#{{タグ|ja|木}}[[柏槇]]。
=={{L|zh}}==
{{wikipedia|lang=zh}}
==={{pron}}===
{{cmn-pron|bǎishù|bóshù}}
{{yue-pron|paak3 syu6}}
{{nan-pron|qz:peh-chhiū}}
{{hak-pron|pak-su|h=bag shu˖}}
{{wuu-pron|sh:7paq zy}}
{{gan-pron|'bah6 xy5}}
==={{noun}}===
{{zhchars|s=柏树}}
#[[コノテガシワ]]。
===={{syn}}====
*{{zh-l|侧柏}}
{{zh-cat|bai3shu4|名詞|木}}
{{yue-cat|paak3syu6|名詞|木}}
{{nan-cat|peh4chhiu7|名詞|木}}
{{hak-cat|pak5su4|名詞|木}}
{{wuu-cat|pah4zy3|名詞|木}}
{{gan-cat|bah6xy5|名詞|木}}
dy4nwivslfh7ntog6lc9orrz6vw2v04
chi
0
162607
2313198
2189527
2026-08-08T23:01:00Z
Kuroco2k
84207
2313198
wikitext
text/x-wiki
{{also|Chi|chì|chí|chỉ|chị|Ch'i}}
=={{symb}}==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2B|zh}}
=={{L|atc}}==
==={{noun}}===
{{head|atc|noun}}
#{{ふりがな|火|ひ}}。
=={{L|amu}}==
==={{noun}}===
{{head|amu|noun}}
#{{タグ|amu|家族}}[[祖父]]、[[おじいさん]]。
==={{adverb}}===
{{head|amu|adverb}}
#〜でない。
=={{L|it}}==
==={{pron}}===
{{it-pr|chi*<audio:It-chi.ogg>}}
==={{etym}}===
{{etyl|la|it}} {{m|la|quis}} < {{etyl|ine-pro|it}} {{m|ine-pro|*kʷís|*kʷís, *kʷos}}
==={{pronoun}}===
{{head|it|pronoun|不変化}}
#{{タグ|it|疑問詞}}[[だれ|誰]]。
#[[だれでも|誰でも]]。
#:{{syn|it|chiunque}}
===={{trans}}====
{{trans-see|語義1|だれ}}
{{trans-see|語義2|誰でも}}
===={{rel}}====
* {{l|it|che}}, {{l|it|cui}}, {{l|it|il quale}}
====={{drv}}=====
;{{pronoun}}:
* [[chiunque]]
===参考文献===
* ''Dizionario Garzanti Inglese: Italiano Inglese/Inglese Italiano''. Milano: [[w:it:Garzanti_Editore|Garzanti Editore]], 1972
=={{L|cy}}==
==={{pron}}===
* {{IPA|lang=cy|χiː}}
* {{rhymes|lang=cy|iː|s=1}}
* {{homophones|lang=cy|’chi}}
==={{etym}}1===
{{etyl|wlm|cy}} {{m|wlm|chwi}} < {{etyl|cel-pro|cy}} {{m|cel-pro|*swīs}} < {{etyl|ine-pro|cy}} {{m|ine-pro|*wos}}
===={{alter}}====
* {{l|cy|chwi}} (文章語)
===={{pronoun}}====
{{head|cy|pronoun}}
#[[あなたたち]]。
==={{etym}}2===
===={{noun}}====
{{head|cy|noun form|g=m}}
#{{l|cy|ci}}の帯気音化。
{{cy-mut-auto|ci}}
=={{L|en}}==
{{wikipedia|Chi|lang=en}}
==={{etym}}1===
===={{pron}}====
* {{IPA|lang=en|kaɪ}}
===={{noun}}====
{{en-noun|s|-}}
# [[ギリシア文字]]の第[[二十二|22]]番目。[[Χ]]、[[χ]]。
==={{etym}}2===
* {{etyl|zh|en}} {{m|zh|氣}}より。
===={{alter}}====
* {{l|en|ch'i}}, {{l|en|qi}}
===={{pron}}====
* {{IPA|lang=en|t͡ʃiː}}
===={{noun}}====
{{en-noun|!}}
#{{タグ|en|伝統中国医学}}[[鍼灸術]]などの[[東洋医学]]における「[[気]]」の概念。
===参考文献===
* {{書誌・ランダムハウス2}}
* 井上永幸・他 編『ウィズダム英和辞典 第2版』三省堂、2007年。ISBN 4-385-10569-3
=={{L|nl}}==
==={{etym}}===
{{bor|nl|grc|χεῖ}}
==={{pron}}===
* {{IPA|lang=nl|xi}}
* {{音声|nl|Nl-chi.ogg|IPA=[χij]}}
==={{noun}}===
{{nl-noun|g=m|g2=f|chi's|chi'tje}}
#(ギリシア文字)[[Χ]]、[[χ]]。
=={{L|grt}}==
==={{alter}}===
* {{l|grt|চি}}
==={{etym}}===
{{etyl|tbq-bdq-pro|grt}} {{m|tbq-bdg-pro|*tɯi¹}} < {{etyl|sit-pro|grt}} {{m|sit-pro|*s-turʔ}}
==={{noun}}===
{{head|grt|noun}}
#{{ふりがな|水|みず}}。
===={{drv}}====
{{col|lang=grt|chibatram|chibima|chibol|chidari|chidek|chiga|chigitok|chiganduri|chijima|chiklok|chimik|chipek|chirama|chiret|chiriking|chiring|chisam|chisikwilwilgip|chitingkilok|kramchi|mikchi}}
=={{L|kw}}==
==={{alter}}===
* {{alter+|kw|chy||標準}}
* {{alter+|kw|chei||RLC}}
==={{etym}}===
{{etyl|cel-bry-pro|kw}} {{m|cel-bry-pro|*tɨɣ}} < {{etyl|cel-pro|kw}} {{m|cel-pro|*tegos}} < {{etyl|ine-pro|kw}} {{m|ine-pro|*(s)teg-}}
==={{pron}}===
* {{IPA|lang=kw|[tʃiː]|a=RMC}}
==={{noun}}===
{{kw-noun|m|r}}
#{{タグ|kw|建物}}{{ふりがな|家|いえ}}。
===={{drv}}====
{{col4|lang=kw|kigti|popti|asklotti|gwerthji|chanjya chi|Chi an Arydhi|chi dolli|chi golyow|chi gweder|chi gwedhen|chi gwynn|chi tiek|chi unnik|chi unnleur|chi-ladha|gwrys y'n chi|ordenor chi|abatti|Chi an Gemmynyon|batti|bosti|klavji|folji|bragji|pronterji|golowji|hwelji|arbrovji|leti|lenji|managhti|rannji|gwiskti|diwotti|gevelji|jynnji|skolji|koskti|ska'ti,skathti|leughti|yerji|manerji|Chiow an Senedh|chilader,chiladores|chiladrans|golghti|arghanti|pennti|bowji|dyji|greunji|gwaraji|gwariji|gwesti|gwithti|horji|kanatti|karrji|keunji|kleghti|koffiji|kolji|krowji|latti|lyverji|marghti|melinji|meneghiji|merji|porthorji|pusketti|souderji|spisti|sterji}}
==={{adverb}}===
{{head|kw|adverb}}
#家で。
{{kw-mut}}
=={{L|trp}}==
==={{numeral}}===
{{head|trp|numeral}}
#[[十]]。
=={{L|sdc}}==
==={{etym}}===
{{etyl|la|sdc}} {{m|la|quia}}, {{m|la|quod}}
==={{pron}}===
* {{IPA|lang=sdc|ki}}
==={{conjunction}}===
{{head|sdc|conjunction}}
#~こと。
#~[[よりも]]〜。
===={{drv}}====
* {{l|sdc|daghì}}
===={{rel}}====
* {{l|sdc|che}}
==={{pronoun}}===
{{head|sdc|pronoun}}
#{{タグ|sdc|関係詞}}~である人・もの。
==={{adjective}}===
{{head|sdc|adjective}}
#(詠嘆){{おくりがな2|何|なん|て|なんて}}。
=={{L|sc}}==
==={{etym}}===
{{etyl|la|sc}} {{m|la|quid}} < {{etyl|itc-pro|sc}} {{m|itc-pro|*kʷid}} < {{etyl|ine-pro|sc}} {{m|ine-pro|*kʷid}}
==={{pron}}===
* {{IPA|lang=sc|ki}}
==={{conjunction}}===
{{head|sc|conjunction}}
#{{タグ|sc|Limba Sarda Comuna}}~こと。
==={{pronoun}}===
{{head|sc|pronoun}}
#{{タグ|sc|関係詞|Limba Sarda Comuna}}~である人・もの。
=={{L|es}}==
==={{etym}}===
{{m|es|sí}}
==={{pron}}===
{{es-pr}}
==={{particle}}===
{{head|es|particle}}
#{{タグ|es|幼児語}}{{l|es|sí}}に同じ。
#: {{ant|es|ño}}
=={{L|zom}}==
==={{etym}}1===
{{etyl|tbq-kuk-pro|zom}} {{m|tbq-kuk-pro|*tsii}} < {{etyl|sit-pro|zom}} {{m|sit-pro|*dzəy}}
===={{pron}}====
* {{IPA|lang=zom|ci˧}}
===={{noun}}====
{{head|zom|noun}}
#{{タグ|zom|植物学}}{{ふりがな|種|たね}}。
==={{etym}}2===
{{etyl|tbq-kuk-pro|zom}} {{m|tbq-kuk-pro|*tsii}} < {{etyl|sit-pro|zom}} {{m|sit-pro|*m-tsji}}
===={{pron}}====
* {{IPA|lang=zom|ci˧˩}}
===={{noun}}====
{{head|zom|noun}}
#{{タグ|zom|調味料}}{{ふりがな|塩|しお}}。
=={{L|nrf}}==
==={{pron}}===
* {{音声|nrf|Jer-chi.ogg|a=Jersey}}
==={{adjective}}===
{{nrf-adj|f=chiéthe|mp=chièrs}}
#{{l|nrf|chièr}}の異形。
=={{L|vi}}==
==={{pron}}===
{{vi-pron}}
* {{音声|vi|LL-Q9199 (vie)-Penn Zero MSSJ-chi.wav|a=Hanoi}}
==={{etym}}1===
漢字 [[支]]より
===={{noun}}====
{{head|vi|noun|kanji=支|sort=chi1 chi}}
#{{タグ|vi|分類学|sort=chi1 chi}}[[属]]。
#: {{syn|vi|giống}}
====={{drv}}=====
{{col3|lang=vi|chi bộ|chi cục|chi đoàn|chi đội|chi hội|chi nhánh|chi uỷ}}
===={{verb}}====
{{head|vi|verb|sort=chi1 chi}}
#[[支出]]する。
====={{drv}}=====
{{col3|lang=vi|bội chi|chi dùng|chi phí|chi tiêu|chi trả|dự chi|tạm chi|thu chi}}
==={{etym}}2===
漢字 [[肢]]より
===={{noun}}====
{{head|vi|noun|kanji=肢|sort=chi1 chi}}
#{{タグ|vi|formal|解剖学|sort=chi1 chi}}{{ふりがな|手足|てあし}}、[[四肢]]。
====={{drv}}=====
{{col3|lang=vi|tứ chi|chi trước|chi sau}}
==={{etym}}3===
{{etyl|mkh-vie-pro|vi}} {{m|mkh-vie-pro|*ciː}}
===={{pronoun}}====
{{head|vi|pronoun|kanji=之|sort=chi1 chi}}
#{{タグ|vi|中部ベトナム|literary|elsewhere}}{{ふりがな|何|なに}}。
#: {{syn|vi|gì}}
====={{drv}}=====
{{col3|lang=vi|không có chi|hèn chi|chưa chi|chi mô|huống chi|phải chi|can chi|hề chi|phương chi|chi bằng}}
===={{adverb}}====
{{head|vi|adverb|kanji=之|sort=chi1 chi}}
#{{タグ|vi|中部ベトナム|南ベトナム}}何のために。
=={{L|yol}}==
==={{etym}}===
{{etyl|enm|yol}} {{m|enm|chaye}}
==={{pron}}===
* {{IPA|lang=yol|t͡ʃai̯}}
==={{noun}}===
{{head|yol|noun}}
#[[少量]]。
#: {{syn|yol|smaddereen}}
=={{L|lld}}==
==={{etym}}===
{{etyl|la|lld}} {{m|la|quis}} < {{etyl|ine-pro|lld}} {{m|ine-pro|*kʷís}}
==={{pronoun}}===
{{head|lld|pronoun}}
#{{タグ|lld|疑問詞}}{{ふりがな|誰|だれ}}。
#{{おくりがな2|誰|だれ|でも|だれでも}}。
=={{L|lmo}}==
==={{pronoun}}===
{{head|lmo|pronoun}}
#{{タグ|lmo|疑問詞}}{{ふりがな|誰|だれ}}。
2k3qbgre57laa9fwhm46fsb6cg9sun5
córrer
0
174680
2313415
1652848
2026-08-09T09:33:07Z
Kuroco2k
84207
2313415
wikitext
text/x-wiki
{{DEFAULTSORT:correr córrer}}
=={{L|oc}}==
==={{etym}}===
{{etyl|pro|oc}} < {{etyl|la|oc}} ''[[currere]]''
==={{verb}}===
{{oc-verb|córr|er}}
#{{おくりがな2|走|はし|る|はしる}}。
----
=={{L|ca}}==
==={{etym}}===
{{etyl|pro|ca}} < {{etyl|la|ca}} ''[[currere]]''
==={{pron}}===
* {{rhymes|ore(ɾ)}}
==={{verb}}===
{{ca-verb|pres_1_sg=corro|past_part=corregut}}
#{{おくりがな2|走|はし|る|はしる}}。
==={{conjug}}====
[[témer]]のように活用するが、完了過去及び接続法過去では語幹''correg-'' 、現在第三人称単数形及び命令法第二人称では''-e'' が付く。
{{ca-conj}}
===={{rel}}====
* [[correguda]] {{f}}
* [[correguera]] {{f}}
* [[corrent]] ''形容詞'', {{m}}
* [[correntia]] {{f}}
* [[corrents]] ''副詞''
* [[recórrer]] ''動詞''
lfy9knwkq1obdtoznt59xfstvpqjaen
2313422
2313415
2026-08-09T09:42:07Z
Kuroco2k
84207
/* {{conjug}}= */
2313422
wikitext
text/x-wiki
{{DEFAULTSORT:correr córrer}}
=={{L|oc}}==
==={{etym}}===
{{etyl|pro|oc}} < {{etyl|la|oc}} ''[[currere]]''
==={{verb}}===
{{oc-verb|córr|er}}
#{{おくりがな2|走|はし|る|はしる}}。
----
=={{L|ca}}==
==={{etym}}===
{{etyl|pro|ca}} < {{etyl|la|ca}} ''[[currere]]''
==={{pron}}===
* {{rhymes|ore(ɾ)}}
==={{verb}}===
{{ca-verb|pres_1_sg=corro|past_part=corregut}}
#{{おくりがな2|走|はし|る|はしる}}。
===={{conjug}}====
[[témer]]のように活用するが、完了過去及び接続法過去では語幹''correg-'' 、現在第三人称単数形及び命令法第二人称では''-e'' が付く。
{{ca-conjug}}
===={{rel}}====
* [[correguda]] {{f}}
* [[correguera]] {{f}}
* [[corrent]] ''形容詞'', {{m}}
* [[correntia]] {{f}}
* [[corrents]] ''副詞''
* [[recórrer]] ''動詞''
lho4b0xltsqrtz05viz7jwypbfd4ois
2313427
2313422
2026-08-09T09:48:51Z
Kuroco2k
84207
2313427
wikitext
text/x-wiki
{{DEFAULTSORT:correr córrer}}
=={{L|oc}}==
==={{etym}}===
{{etyl|pro|oc}} < {{etyl|la|oc}} ''[[currere]]''
==={{verb}}===
{{oc-verb|córr|er}}
#{{おくりがな2|走|はし|る|はしる}}。
----
=={{L|ca}}==
==={{etym}}===
{{etyl|pro|ca}} < {{etyl|la|ca}} ''[[currere]]''
==={{pron}}===
* {{rhymes|ore(ɾ)}}
==={{verb}}===
{{ca-verb|pres_1_sg=corro|past_part=corregut}}
#{{おくりがな2|走|はし|る|はしる}}。
[[témer]]のように活用するが完了過去及び接続法過去では語幹''correg-'' 、現在第三人称単数形及び命令法第二人称では''-e'' が付く。
{{ca-conj-er2|corr|infinitive=córrer<!--
-->|past_part=corregut<!--
-->|pres_ind_2_sg=corres<!--
-->|pres_ind_3_sg=corre<!--
-->|pret_ind_stem=corregu<!--
-->|pres_sub_1_pl2=correguem<!--
-->|pres_sub_2_pl2=corregueu<!--
-->|impf_sub_stem=corregu<!--
-->}}
===={{rel}}====
* [[correguda]] {{f}}
* [[correguera]] {{f}}
* [[corrent]] ''形容詞'', {{m}}
* [[correntia]] {{f}}
* [[corrents]] ''副詞''
* [[recórrer]] ''動詞''
m7d7mgtx40y6iu0h935h6r9fp6efyx5
ѕвезда
0
175672
2313218
1540720
2026-08-08T23:23:32Z
Kuroco2k
84207
wikify
2313218
wikitext
text/x-wiki
=={{mk}}==
==={{etym}}===
{{etyl|sla-pro|mk}} {{recons|gvězda|lang=sla-pro}}
==={{pron}}===
*{{IPA|ˈd͡zvɛzda}}
==={{noun}}===
{{head|mk|noun|cat2=天体|g=f|tr=dzvezda}}
#{{ふりがな|星|ほし}}。[[恒星]]。
{{mk-decl-noun-f|ѕвезд}}
===={{drv}}====
*{{l|mk|ѕвезден}}
*{{l|mk|ѕвездест}}
b1649h3l938nqe3z4gi0ix8e0x7rr1k
sov
0
189445
2313140
1547335
2026-08-08T22:38:12Z
Kuroco2k
84207
2313140
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|3|sov}}
----
== {{nb}} ==
[[category: {{nb}} ]]
=== {{verb}} ===
[[category: {{nb}} {{verb}} 定形]]
'''sov'''
# [[sove]]の現在形。
# [[sove]]の命令形。
{{stub|他}}
gslfy2jreneml57sze1q8kwebktonnv
баба
0
196570
2313220
1388129
2026-08-08T23:23:31Z
Kuroco2k
84207
wikify
2313220
wikitext
text/x-wiki
=={{av}}==
==={{alter}}===
*{{l|av|буба|sc=Cyrl}}
==={{noun}}===
{{head|av|noun}}
# {{ふりがな|母|はは}}。
===={{seealso}}====
*{{l|av|эбел|sc=Cyrl}}
=={{uk}}==
==={{pron}}===
*音声 :[[File:uk-баба.ogg]]
==={{noun}}===
{{head|uk|noun|g=f|{{animate}}|属格 {{l|uk|ба́би|sc=Cyrl}}| 主格複数 {{l|uk|баби́|sc=Cyrl}}}}
# [[祖母]]、[[おばあさん]]。
# 焼き菓子の一種、[[w:ババ (菓子)|ババ]]。
# [[魔女]]。
# [[あばずれ]](恋人又は妻)。
===={{syn}}====
語義2
*{{l|uk|бабка|sc=Cyrl}}
===={{decl}}====
{{uk-decl-noun|ба́ба|баби́|ба́би|баб, бабі́в|ба́бі|баба́м|ба́бу|баб, бабі́в|ба́бою|баба́ми|ба́бі|баба́х|ба́бо|баби́}}
=={{cu}}==
==={{noun}}===
{{head|cu|noun|g=f}}(グラゴール文字: {{l|cu|ⰱⰰⰱⰰ}})
# [[祖母]]、[[おばあさん]]。
# [[産婆]]、[[助産婦]]。
# {{ふりがな|乳母|うば}}。
=={{orv}}==
==={{noun}}===
{{head|orv|noun|g=f}}
# [[既婚]][[婦人]]。
# [[産婆]]、[[助産婦]]。
# [[予言者]]。
# {{context|lang=orv|複数形で}} [[女性]]。
===={{desc}}====
*{{ru}}: {{l|ru|баба|ба́ба|sc=Cyrl}}
*{{uk}}: {{l|uk|баба|ба́ба|sc=Cyrl}}
=={{sh}}==
==={{pron}}===
*{{IPA|bâba|lang=sh}}
==={{noun}}===
{{sh-noun|g=f|head=ба̏ба|c|baba|bȁba}}
# [[祖母]]、[[おばあさん]]。
# {{context|lang=sh|通常は|pejorative}} [[老婆]]、[[おばあさん]]。
# {{context|lang=sh|pejorative}} [[婦人]]。
===={{decl}}====
{{sh-decl-noun|sc=Cyrl
|ба̏ба|бабе
|бабе|ба̑ба̄
|баби|бабама
|бабу|бабе
|бабо|бабе
|баби|бабама
|бабом|бабама
}}
===={{syn}}====
語義1
*{{l|sh|sc=Cyrl|ба́ка}}, {{l|sh|sc=Cyrl|нена}}
=={{bg}}==
==={{pron}}===
*{{IPA|ˈbabə|lang=bg}}
==={{noun}}===
{{head|bg|noun|head=баба|sc=Cyrl|tr=bába|g=f}}
# [[祖母]]、[[おばあさん]]。
# [[老婆]]、[[おばあさん]]。
# [[義母]] (妻の母)。
# [[産婆]]、[[助産婦]]。
# [[魔女]]。
# [[婦人]]、[[ご婦人]]。
# {{ふりがな|猿|さる}}
===={{decl}}====
{{bg-noun-f-a1|баб}}
=={{mk}}==
==={{pron}}===
*{{IPA|ˈbaba|lang=mk}}
==={{noun}}===
{{head|mk|noun|g=f|複数形:{{l|mk|баби|sc=Cyrl}}}}
# [[祖母]]、[[おばあさん]]。
# [[老婆]]、[[おばあさん]]。
# [[義母]] (妻の母)。
# [[産婆]]、[[助産婦]]。
<!--
===={{decl}}====
{{mk-decl-noun-f|баб}}
-->
=={{ru}}==
==={{pron}}===
*{{IPA0|[ˈbabə]}} :[[File:ru-баба.ogg]]
==={{noun}}===
{{ru-noun|head=ба́ба|tr=bába|g=f}}
# {{context|lang=ru|pejorative}} [[婦人]]、[[女性]]。
#* {{unicode|Все ба́бы — [[дура|ду́ры]]; все [[мужик|мужики́]] — [[сволочь|сво́лочи]]|''}}
#*:女はみんなおろかで、男はみんなろくでなしだ。
# {{context|lang=ru|幼児語:{{l|ru|бабушка|sc=Cyrl}}の略}} [[おばあさん]]、[[おばあちゃん]]。
#* {{unicode|[[мама|Ма́ма]], [[а]] [[где]] '''ба́ба'''?}}
#*:ママ、おばあちゃんはどこ?
# {{context|lang=ru|informal|又は|archaic|{{l|ru|бабушка|sc=Cyrl}}の略}} [[老婆]]。
#* {{unicode|Жи́ли-бы́ли [[дед]] [[да]] '''ба́ба'''}}
#*:昔々、おじいさんとおばあさんが住んでいました。
# {{context|lang=ru|colloquial|slang|pejorative}} [[ばばあ]]。
#* {{unicode|Кто [[э́та]] '''ба́ба'''?}}
#*:あのばばあは誰だ。
# {{context|lang=ru|obsolete}} [[義母]]。
# (技術) くい打ちの落としづち。
# {{context|lang=ru|cooking}} 焼き菓子の一種、[[w:ババ (菓子)|ババ]]。
#* {{unicode|ро́мовая ба́ба}}
#*:ラムケーキ
===={{decl}}====
{{ru-noun-table|ба́ба|a=ai}}
===={{rel}}====
*{{l|ru|ба́бушка|sc=Cyrl}}, {{l|ru|бабёнка|sc=Cyrl}}
*{{l|ru|Ба́ба-Яга́|sc=Cyrl}}, {{l|ru|Бабий Яр|sc=Cyrl}}
*{{l|ru|бабу́ся|sc=Cyrl}}, {{l|ru|ба́бка|sc=Cyrl}}, {{l|ru|ба́бник|sc=Cyrl}}, {{l|ru|бабство|sc=Cyrl}}
*{{l|ru|ба́бий|sc=Cyrl}}, {{l|ru|бабский|sc=Cyrl}}
*{{l|ru|сне́жная ба́ба|sc=Cyrl}}
*{{l|ru|ка́менная ба́ба|sc=Cyrl}}
casmc4d1p33wkzlexz1v2kdkdlty5b1
ほそぼそ
0
203449
2313087
1927771
2026-08-08T12:26:19Z
うーむ
129171
/* 副詞 */
2313087
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|ぼそぼそ}}
=={{ja}}==
==={{pron}}===
{{ja-pron|acc=3}}
==={{adverb}}===
{{head|ja|adverb}}【[[細細]]】<br>
(「と」を伴うことがある。)
#[[非常]]に[[ほそい|細い]]さま。
#*或薄ら寒い秋の日の暮、彼は一本の唐黍(からきび)に忽(たちまち)この画家を思ひ出した。丈の高い唐黍は荒あらしい葉をよろつたまま、盛り土の上には神経のやうに'''細ぼそ'''と根を露あらはしてゐた。(芥川龍之介『或阿呆の一生』「二十二 或画家」昭和2年)
#[[かろうじて|辛うじて]][[つづく|続い]]ているさま。
s96krgn73ef3khk520xpdok6q3609j1
こうばん
0
209850
2313123
2218052
2026-08-08T14:38:59Z
鍼灸
112313
2313123
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|こうはん|ごうはん|ごうばん}}
=={{ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
* 【[[交番]]】[[警察]][[組織]]で、[[市街地]]などに[[警察官]]が[[勤務]]する[[詰め所]]。
* 【[[降板]]】[[担当]]していた[[役割]]を[[やめる|辞める]]こと。
* 【[[香盤]]】1:[[香道]]に[[つかう|使われる]][[盤]]。2:[[劇場]]の[[座席]][[表]]。
020brkjqmsjv49ehh924eukro4424cc
くとう
0
210986
2313277
1880607
2026-08-09T00:17:54Z
鍼灸
112313
2313277
wikitext
text/x-wiki
{{also|くどう|ぐとう|ぐどう}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[苦闘]]】[[くるしみ|苦しみ]]を[[こらえる|堪え]]ながら[[たたかう|戦う]]こと。
*【[[句読]]】①[[文章]]中の[[きれめ|切れ目]]。②[[漢文]]の[[よむ|読み]]方。[[素読]]。
*【[[句頭]]】①[[語句]]の[[冒頭]]。②[[雅楽]]で、[[うた|歌]]の冒頭を[[独唱]]する人。
*【[[口頭]]】[[文書]]に{{スル|対|し}}て、[[くち|口]]で[[いう|言う]]こと。
*【[[狗盗]]】[[こそどろ]]。
*【[[九島]]】九つの島。
*【[[九等]]】第九位。
*【[[九頭]]】(動物が)九匹。
cepabn0oksh1kc0zewm0getqncjovpc
nog
0
215088
2313149
994303
2026-08-08T22:38:15Z
Kuroco2k
84207
2313149
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|nog}}
{{stub|他}}
dvc2n09t8iaovwdg2a1wat7mlsibpd8
arz
0
215095
2313141
994325
2026-08-08T22:38:12Z
Kuroco2k
84207
2313141
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|3|arz}}
{{stub|他}}
jr3wcxi1n2sp6txijfhnvw2fy11nhlx
bla
0
215097
2313188
994338
2026-08-08T22:48:39Z
Kuroco2k
84207
2313188
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|bla}}
{{stub|他}}
luxgjd7trx3ks378ajx54h98ozvfx8l
bul
0
215099
2313142
994341
2026-08-08T22:38:13Z
Kuroco2k
84207
2313142
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|bg}}
{{stub|他}}
a0uzvvnb3zqur4ar8bsqj968vqp0hsg
caa
0
215100
2313171
994342
2026-08-08T22:48:34Z
Kuroco2k
84207
2313171
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|3|caa}}
{{stub|他}}
jorua5hv9hmw5gocg7xdtinw52q3rez
arn
0
215101
2313187
994324
2026-08-08T22:48:39Z
Kuroco2k
84207
2313187
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|arn}}
{{stub|他}}
j5b4cu2gy4cahic7eonrqrxzvu2uy64
tib
0
215106
2313196
2203522
2026-08-08T23:01:00Z
Kuroco2k
84207
2313196
wikitext
text/x-wiki
{{also|TiB}}
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2B|bo}}
===={{rel}}====
*[[bod]]
=={{L|uz}}==
{{uz-variant|c=тиб}}
==={{etym}}===
{{etyl|chg|uz}} {{m|chg|طب}} < {{etyl|ar|uz}} {{m|ar|طِبّ}}
==={{noun}}===
{{uz-noun}}
#{{タグ|uz|医学|label=no|sort=*}}[[医学]]。
===={{rel}}====
* {{l|uz|tibbiy}}
=={{L|kmr}}==
==={{etym}}===
{{etyl|ar|kmr}} {{m|ar|طِبّ}}
==={{noun}}===
{{kmr-noun|f}}
#{{タグ|kmr|医学|label=no|sort=*}}[[医学]]。
{{kmr-decl-noun|f}}
===={{rel}}====
* {{l|kmr|tebîb}}
* {{l|kmr|tibî}}
=={{L|zpw}}==
==={{numeral}}===
{{head|zpw|numeral}}
#[[一]]。
=={{L|ztl}}==
==={{numeral}}===
{{head|ztl|numeral}}
#[[一]]。
=={{L|jbo}}==
===Rafsi===
{{jbo-rafsi}}
#{{l|jbo|tinbe}}のrafsi。
{{stub|他}}
mubx2sz6h4mbnlr56rnebqwa8tg6xt1
cac
0
215107
2313144
994343
2026-08-08T22:38:14Z
Kuroco2k
84207
2313144
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|3|cac}}
{{stub|他}}
qkvz0b24f6b91g8z4bq3og2cvxljepa
cdo
0
215108
2313175
1359826
2026-08-08T22:48:35Z
Kuroco2k
84207
2313175
wikitext
text/x-wiki
{{also|CDO}}
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|3|cdo}}
qliop7oqxx82gcu6xp4rud7c7d3av9r
ceb
0
215110
2313161
994345
2026-08-08T22:48:30Z
Kuroco2k
84207
2313161
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|ceb}}
{{stub|他}}
mm1v1ozr0c8a3sw0uq78h8yza089so9
ces
0
215111
2313152
994346
2026-08-08T22:38:16Z
Kuroco2k
84207
2313152
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|cs}}
===={{rel}}====
*[[cze]]
{{stub|他}}
g71u60jalctudicnineighd886j2w5p
cze
0
215112
2313195
2170937
2026-08-08T23:01:00Z
Kuroco2k
84207
2313195
wikitext
text/x-wiki
{{also|CZE}}
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2B|cs}}
===={{rel}}====
*[[ces]]
eea4rh6k5e040sf74rioam59j0pdwga
chm
0
215114
2313177
994348
2026-08-08T22:48:35Z
Kuroco2k
84207
2313177
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|chm}}
{{stub|他}}
cj9rd2hf5174fbc3dr5m23r33ul62lt
chr
0
215115
2313183
994436
2026-08-08T22:48:37Z
Kuroco2k
84207
2313183
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|chr}}
{{stub|他}}
nsrh2l2j4o0k7srceernygls52qyf1v
cmn
0
215117
2313189
994351
2026-08-08T22:48:39Z
Kuroco2k
84207
2313189
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|3|cmn}}
jfk9o9xovn6lf08k2753y6s11h5430i
crh
0
215120
2313163
994355
2026-08-08T22:48:31Z
Kuroco2k
84207
2313163
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|crh}}
as69orp72hp05cvux0ifr02v0mrikbz
csb
0
215121
2313180
994356
2026-08-08T22:48:36Z
Kuroco2k
84207
2313180
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|csb}}
i3amsg48c01kjo2qejm7mvcpvua0vzy
wel
0
215123
2313194
2087530
2026-08-08T23:00:59Z
Kuroco2k
84207
2313194
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2B|cy}}
{{stub|他}}
tcn6mycgifx1hoi4s4nqsog8t7n1djv
ger
0
215128
2313193
2203504
2026-08-08T23:00:59Z
Kuroco2k
84207
2313193
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2B|de}}
===={{rel}}====
*[[deu]]
=={{L|jbo}}==
===Rafsi===
{{jbo-rafsi}}
#{{l|jbo|gerku}}のrafsi。
{{stub|他}}
7g4343j5a5zz9db13o3gsjtfa9h3s00
dlm
0
215131
2313168
994437
2026-08-08T22:48:33Z
Kuroco2k
84207
2313168
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|3|dlm}}
{{stub|他}}
jyv2fbw20qhomjgkksf0y558zvfigju
dsb
0
215132
2313137
994438
2026-08-08T22:38:11Z
Kuroco2k
84207
2313137
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|dsb}}
ewtsvy950ztwgxsx4e1ckgldafuoodp
fas
0
215137
2313148
994444
2026-08-08T22:38:15Z
Kuroco2k
84207
2313148
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2T&3|fa}}
{{stub|他}}
57o7qqx0h8h1mnelfguufcynfyc2atb
fro
0
215141
2313146
1988088
2026-08-08T22:38:14Z
Kuroco2k
84207
2313146
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|fro}}
{{stub|他}}
=={{en}}==
==={{preposition}}===
#「[[from]]」に同じ。
#*In watching its pendulum swing to and fro, many hours had he spent while a boy.
#**彼(老翁)は子どものころ、何時間もずっとそれ(大時計)の振り子があっちに振れたり、こっちに振れたりするのを見ていたものだ。(Henry Clay Work, 1876 "My Grandfather's Clock")
mfzouhi2ke4i4652yjl1bvtj9yvtjrr
frr
0
215142
2313139
994450
2026-08-08T22:38:12Z
Kuroco2k
84207
2313139
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|frr}}
qa3p3oreqy6wpgip9xxec2jlpt6um04
stq
0
215144
2313136
994452
2026-08-08T22:38:11Z
Kuroco2k
84207
2313136
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|3|stq}}
6iqifk4bjwos1qwoimwk6649fwf62v6
glg
0
215145
2313178
994458
2026-08-08T22:48:36Z
Kuroco2k
84207
2313178
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|gl}}
{{stub|他}}
gwlj6cnw7r8uew22o4yw0yn5xr5oxgc
gil
0
215146
2313143
994459
2026-08-08T22:38:13Z
Kuroco2k
84207
2313143
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|gil}}
{{stub|他}}
3rx5bxylwr0fbf2eaasxda40q98aek6
grc
0
215149
2313162
994463
2026-08-08T22:48:30Z
Kuroco2k
84207
2313162
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|grc}}
9qsgkc2p8trdbcmr81qbef1oqexzboe
heb
0
215150
2313147
994468
2026-08-08T22:38:15Z
Kuroco2k
84207
2313147
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|he}}
{{stub|他}}
a7wk6aum7x6o1imsqni3q2ep37tibsp
huq
0
215153
2313182
994472
2026-08-08T22:48:37Z
Kuroco2k
84207
2313182
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|3|huq}}
{{stub|他}}
mpexiedf474u2xffqjz6kjrk19jn59i
ind
0
215154
2313145
994475
2026-08-08T22:38:14Z
Kuroco2k
84207
2313145
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|id}}
{{stub|他}}
5n80144mz57v0jm65anhxxcn132lj3d
ita
0
215155
2313154
1881975
2026-08-08T22:38:17Z
Kuroco2k
84207
2313154
wikitext
text/x-wiki
{{also|ĩta}}
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|it}}
{{stub|他}}
----
=={{L|ain}}==
{{ain-kana}}
==={{pron}}===
* {{ain-IPA}}
==={{etym}}===
{{bor|ain|ja|いた|板}}
==={{noun}}===
{{head|ain|noun}}
# {{ふりがな|板|いた}}。{{ふりがな|床板|とこいた}}。{{ふりがな|盆|ぼん}}。{{ふりがな|台|だい}}。
#* {{quote|ain|ポロ ス アニ スパ ワ '''イタ''' チキㇱマ イサㇺ カネ ノ イコイプンパ。|大きな鍋で煮て、掴む場所がないほど'''お盆'''にのせ、私達に差し出した。|tr=[[poro]] [[su]] [[ani]] [[supa]] [[wa]] '''[[ita]]''' [[ci=]][[kisma]] [[isam]] [[kane]] [[no]] [[i=]][[koypunpa]].|ref=<ref>{{citation|author=平賀さだも|title=10-1 ウエペケㇾ「オタサムン カムイ ヘカッタㇻ」(オタサㇺのカムイの子ども達)|publisher=文化庁 アイヌ語の保存・継承に必要なアーカイブ化に関する調査研究事業|journal=第2年次調査研究報告書2/3|year=1969|publication-date=2015年3月}}</ref>}}
#* {{quote|ain|オラ フイペ オㇿ エムㇱ クㇱパレパ ワ '''イタ''' チキㇱマ イサㇺ カネ|それから肝臓に刃物を通して、'''お盆'''に持つところが無いほど山盛りにして|tr=[[ora]] [[huype]] [[or]] [[emus]] [[kusparepa]] [[wa]] '''[[ita]]''' [[cikisma]] [[isam]] [[kane]]|ref=<ref>{{citation|author=貝澤とぅるしの|title=6-1 ウエペケㇾ「ヌサコㇿカムイ イカオピューキ」(祭壇を司る神さまが私 を助けた)|publisher=文化庁 アイヌ語の保存・継承に必要なアーカイブ化に関する調査研究事業|journal=第2年次調査研究報告書1/3|year=1969|publication-date=2015年3月}}</ref>}}
===出典===
{{Reflist}}
----
=={{L|ki}}==
===語源1===
===={{pron|ki}}====
* {{IPA|ita}}
====動詞====
{{head|ki|verb}}(不定形: {{l|ki|gũita}})
# [[しめる|絞める]]<ref name="lea1940">{{R:ki:Armstrong|p=361}}</ref><ref name="tgb">{{R:Benson1964|entry=ita|p=191}}</ref>。
=====派生語=====
名詞:
* {{l|ki|mũita-thũa|g=c3}}
===語源2===
===={{pron|ki}}====
* {{IPA|ita}}
====動詞====
{{head|ki|verb}}(不定形: {{l|ki|gũita}})
# [[そそぐ|注ぐ]]<ref name="lea1940" />。
# [[もれる|漏れる]]<ref name="tgb" />。[[こぼれる]]。
=====派生語=====
動詞:
* {{l|ki|itanga|gũitanga}}
名詞:
* {{l|ki|mũiti|g=c1}}
成句:
* {{l|ki|kĩiniĩ gĩtaita}}
===語源3===
===={{pron|ki}}====
* {{IPA|ìtǎ}}
: {{ki-tonal classes|-|2|Benson=no}}
*〔キアンブ方言〕
**〔リムル方言〕{{IPA|ìtǎꜜ}}
:: {{ki-アクセントの型|昇型}}
====名詞====
{{ki-noun|10}} あるいは {{ki-noun|5}}
# [[侵略]]あるいは[[略奪]][[行為]]のために[[組織]]された[[軍団]]<ref name="tgb" />。
=====参照=====
* {{l|ki|mbirarũ}}, {{l|ki|mbũtũ}}
===脚注===
<references />
rm8emhdrf1jj218wiy0lxnfjxa2wtw3
kjh
0
215162
2313184
994488
2026-08-08T22:48:38Z
Kuroco2k
84207
2313184
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|3|kjh}}
e9651a806i2cjk8edbs3iqok7bredjw
koi
0
215163
2313150
994490
2026-08-08T22:38:15Z
Kuroco2k
84207
2313150
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|3|koi}}
{{stub|他}}
rktx7is5nzx7sd815d2hggwsx4ncld6
kpv
0
215164
2313185
994492
2026-08-08T22:48:38Z
Kuroco2k
84207
2313185
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|3|kpv}}
ht2vcehrfhqkd30olwlxs272issirn4
xmf
0
215170
2313176
994505
2026-08-08T22:48:35Z
Kuroco2k
84207
2313176
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|3|xmf}}
97r0tc2ymlv61ywpgm5m9tuiy0umenf
wym
0
215171
2313165
994508
2026-08-08T22:48:32Z
Kuroco2k
84207
2313165
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|3|wym}}
s90z3gr0i8yf9i927c38hgf0fjjt9ih
ukr
0
215172
2313169
994510
2026-08-08T22:48:33Z
Kuroco2k
84207
2313169
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|uk}}
i4ujny5wassjlibh3qi27ckz8gnmjza
uzn
0
215180
2313190
994522
2026-08-08T22:48:40Z
Kuroco2k
84207
2313190
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|3|uzn}}
czd9cggrve3kec9og7i3buu2wmgpd5i
uzs
0
215181
2313186
994523
2026-08-08T22:48:39Z
Kuroco2k
84207
2313186
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|3|uzs}}
anpe1y9pb1d9ympadyq610dfyi96xo0
udm
0
215184
2313166
994528
2026-08-08T22:48:32Z
Kuroco2k
84207
2313166
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|udm}}
su9f0cec3j1ny55bssxvu8mical5bzs
tyv
0
215189
2313181
994534
2026-08-08T22:48:37Z
Kuroco2k
84207
2313181
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|tyv}}
{{stub|他}}
jtu19vv21ss3eww0oqj51buq6hz006m
tvl
0
215190
2313164
994535
2026-08-08T22:48:31Z
Kuroco2k
84207
2313164
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|tvl}}
5n3o28axmbh6kb7zls8530934dfykpv
trv
0
215193
2313179
994539
2026-08-08T22:48:36Z
Kuroco2k
84207
2313179
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|3|trv}}
kv9827yox6ovno7i39jy95oa01ut3vq
tpi
0
215216
2313138
994563
2026-08-08T22:38:12Z
Kuroco2k
84207
2313138
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|tpi}}
{{stub|他}}
nhzo9xvg8pzpwfz0obfpk3uvzvuwtim
toj
0
215282
2313174
994682
2026-08-08T22:48:34Z
Kuroco2k
84207
2313174
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|3|toj}}
{{stub|他}}
2v3j4fdjhj7jexk1ywaehtqm8jbfdhn
mdf
0
215292
2313167
994700
2026-08-08T22:48:32Z
Kuroco2k
84207
2313167
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|mdf}}
{{stub|他}}
05nv05xj8gnjfyl1ssk36xgbi2ezb07
slk
0
215296
2313173
994714
2026-08-08T22:48:34Z
Kuroco2k
84207
2313173
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2T&3|sk}}
===={{rel}}====
*[[slo]]
j3v0m7p9affwk97lkhfmy3hqe6bl1kk
slo
0
215297
2313172
2170902
2026-08-08T22:48:34Z
Kuroco2k
84207
2313172
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2B|sk}}
=={{L|jbo}}==
===Rafsi===
{{jbo-rafsi}}
#{{l|jbo|solji}}のrafsi。
{{stub|他}}
8alv2raprqn6gr79b1o9ev4wskxiov5
ラバ
0
237683
2313224
1757399
2026-08-08T23:25:59Z
Kuroco2k
84207
2313224
wikitext
text/x-wiki
{{also|らば|ラバー}}{{DEFAULTSORT:らは らば}}
=={{ja}}==
[[Category:{{ja}}]]
==={{noun}}:動物===
{{wikipedia}}
[[Category:{{ja}}_{{noun}}]]
[[Category:{{ja}}_ウマ科]]
'''ラバ'''【[[騾馬]]】
#(学術的表記){{ふりがな|雄|おす}}の[[ロバ]]と{{ふりがな|雌馬|めうま}}の交雑種。[[ミュール]]。
===={{rel}}====
*[[ケッテイ]]
===={{trans}}====
{{trans-top}}
*[[{{am}}]]<!--* Amharic-->: {{t|am|በቅሎ}}
*[[{{an}}]]<!--* Aragonese-->: {{t|an|mula|f}}
*[[{{ar}}]]<!--* Arabic-->: {{t|ar|بَغَل|m}}
**[[{{arz}}]]<!--*Egyptian Arabic-->: {{t|arz|بغل|m|tr=baḡl}} (集合名詞), {{t|arz|بغلة|f|tr=baḡla}} (単数形)
*[[{{ast}}]]<!--* Asturian-->: {{t+|ast|mulu|m}}, {{t+|ast|mula|f}}, {{t+|ast|burreñu|m}}, {{t+|ast|burreña|f}}
*[[{{az}}]]<!--* Azerbaijani-->: {{t+|az|qatır}}
*[[{{be}}]]<!--* Belarusian-->: {{t|be|мул|m|sc=Cyrl}}
*[[{{bg}}]]<!--* Bulgarian-->: {{t+|bg|муле|n|sc=Cyrl}}
*[[{{bn}}]]<!--* Bengali-->: {{t+|bn|খচ্চর}}
*[[{{bo}}]]<!--* Tibetan-->: {{t|bo|དྲེལ}}
*[[{{ca}}]]<!--* Catalan-->: {{t+|ca|mul|m}}, {{t+|ca|mula|f}}, {{t+|ca|matxo|m}}
*[[{{chr}}]]<!--* Cherokee-->: {{t|chr|ᏗᎦᎵᏰᏅᎯᏓ|sc=Cher}}
*[[{{cop}}]]<!--* Coptic-->: {{t|cop|ⲧⲉⲙⲑⲁⲙ|m}}, {{t|cop|ⲙⲁⲥⲫⲟⲣⲕ|m}}
*[[{{cs}}]]<!--* Czech-->: {{t+|cs|mula|f}}
*[[{{cy}}]]<!--* Welsh-->: {{t+|cy|mul|m}}
*[[{{da}}]]<!--* Danish-->: {{t|da|muldyr|n}}
*[[{{de}}]]<!--* German-->: {{t+|de|Maultier|n}}, {{t+|de|Muli|n}}(ドイツ南部、オーストリア)
*[[{{dsb}}]]<!--*Lower Sorbian-->: {{t|dsb|mul|m}}, {{t|dsb|mula|f}}
*[[{{el}}]]<!--* Greek-->: {{t+|el|μουλάρι|n|sc=Grek}}, {{t+|el|ημίονος|m|sc=Grek}}
*:[[{{grc}}]]: {{t|grc|ἡμίονος|m|sc=Grek}}, {{t|grc|ὀρεύς|m|sc=Grek}}
*[[{{en}}]]: {{t+|en|mule}}
*:[[{{ang}}]]<!--* Old English-->: {{t|ang|mūl|m}}
*:[[{{enm}}]]<!--* Middle English-->: {{t|enm|mule}}
*[[{{eo}}]]<!--* Esperanto-->: {{t+|eo|mulo}}
*[[{{es}}]]<!--* Spanish-->: {{t+|es|mulo|m}}, {{t+|es|mula|f}}
*[[{{et}}]]<!--* Estonian-->: {{t+|et|muul}}
*[[{{eu}}]]<!--* Basque-->: {{t|eu|mando}}
*[[{{fa}}]]<!--* Persian-->: {{t+|fa|قاطر|tr=qâter}}
*[[{{fi}}]]<!--* Finnish-->: {{t+|fi|muuli}}
*[[{{fr}}]]<!--* French-->: {{t+|fr|mule|f}}, {{t+|fr|mulet|m}}
*[[{{ga}}]]<!--* Irish-->: {{t|ga|miúil|f}}
*[[{{gl}}]]<!--* Galician-->: {{t|gl|mulo|m}}, {{t|gl|mula|f}}, {{t+|gl|macho|m}}
*[[{{he}}]]<!--* Hebrew-->: {{t+|he|פֶּרֶד|m|tr=péred}}, {{t+|he|פִּרְדָּה|f|tr=pirdá}}
*[[{{hi}}]]<!--* Hindi-->: {{t+|hi|खच्चर|m}}
*[[{{hu}}]]<!--* Hungarian-->: {{t+|hu|öszvér}}
*[[{{hy}}]]<!--* Armenian-->: {{t+|hy|ջորի}}
*[[{{id}}]]<!--* Indonesian-->: {{t+|id|bagal}}
*[[{{io}}]]<!--* Ido-->: {{t+|io|mulo}}
*[[{{is}}]]<!--* Icelandic-->: {{t|is|múldýr|n}}, {{t+|is|múlasni|m}}
*[[{{it}}]]<!--* Italian-->: {{t+|it|mulo|m}}
*[[{{ka}}]]<!--* Georgian-->: {{t|ka|ჯორი}}
*[[{{kk}}]]<!--* Kazakh-->: {{t|kk|қашыр|sc=Cyrl}}
*[[{{km}}]]<!--* Khmer-->: {{t+|km|លា}}
*[[{{ko}}]]<!--* Korean-->: {{t+|ko|노새}}
*[[{{ku}}]]<!--* Kurdish-->:
*:{{ckb}}:{{t+|ckb|ھێستر}}
*:{{kmr}}:{{t+|kmr|hêstir|m|f}}, {{t+|kmr|qantir|m|f}}
*[[{{ky}}]]<!--* Kyrgyz-->: {{t|ky|качыр|sc=Cyrl}}
*[[{{la}}]]<!--* Latin-->: {{t+|la|mulus|alt=mūlus|m}}
*[[{{lo}}]]<!--* Lao-->: {{t|lo|ລໍ}}, {{t|lo|ລວາ}}
*[[{{lt}}]]<!--* Lithuanian-->: {{t|lt|mulas|m}}
*[[{{lv}}]]<!--* Latvian-->: {{t|lv|mūlis|m}}
*[[{{mk}}]]<!--* Macedonian-->: {{t|mk|му́ле|n|sc=Cyrl}}
*[[{{mi}}]]<!--* Maori-->: {{t|mi|miūru}}
*[[{{mn}}]]<!--* Mongolian-->: {{t+|mn|луус|sc=Cyrl}}
*[[{{mnc}}]]<!--* Manchu-->: {{t|mnc|ᠯᠣᡵᡳᠨ}}, {{t|mnc|ᠯᠣᠰᠠ}}
*[[{{ms}}]]<!--* Malay-->: {{t|ms|baghal}}
*[[{{my}}]]<!--* Burmese-->: {{t+|my|လား}}
*[[{{nl}}]]<!--* Dutch-->: {{t+|nl|muildier|n}}
*[[{{no}}]]<!--* Norwegian-->:
*:[[{{nb}}]]<!--*Bokmål-->: {{t|nb|muldyr|n}}
*:[[{{nn}}]]<!--*Nynorsk-->: {{t|nn|muldyr|n}}
*[[{{nv}}]]<!--* Navajo-->: {{t|nv|dzaanééz}}
*[[{{oc}}]]<!--* Occitan-->: {{t+|oc|mul|m}}
*[[{{oj}}]]<!--* Ojibwe-->: {{t|oj|memāngišens|sc=Cans}}
*[[{{om}}]]<!--* Oromo-->: {{t|om|gaangee}}
*[[{{ood}}]]<!--* O'odham-->: {{t|ood|muhla}}
*[[{{or}}]]<!--* Oriya-->: {{t+|or|ଖଚ୍ଚର}}
*[[{{pa}}]]<!--* Punjabi-->: {{t|pa|ਖੱਚਰ}}
*[[{{pl}}]]<!--* Polish-->: {{t+|pl|muł|m}}
*[[{{ps}}]]<!--* Pashto-->: {{t|ps|کچره|f|tr=kačǝ́ra}}
*[[{{pt}}]]<!--* Portuguese-->: {{t+|pt|mulo|m}}, {{t+|pt|mula|f}}
*[[{{ro}}]]<!--* Romanian-->: {{t+|ro|catâr|m}}, {{t+|ro|mul|m}}
*[[{{ru}}]]<!--* Russian-->: {{t+|ru|мул|m|sc=Cyrl}}
*[[{{scn}}]]<!--* Sicilian-->: {{t+|scn|mulu|?}}
*[[{{sei}}]]<!--* Seri-->: {{t|sei|moːrɑ}}, {{t|sei|ʔɑmóːrɑ}}
*[[{{sh}}]]<!--* Serbo-Croatian-->:{{t|sh|мазга|sc=Cyrl}}/{{t+|sh|mazga|f}}, {{t|sh|мула|sc=Cyrl}}/{{t+|sh|mula|f}},
*[[{{shn}}]]<!--* Shan-->: {{t+|shn|လႃး}}
*[[{{sk}}]]<!--* Slovak-->: {{t|sk|mul|m}}
*[[{{sl}}]]<!--* Slovene-->: {{t+|sl|mula|f}}
*[[{{sq}}]]<!--* Albanian-->: {{t+|sq|mushkë|f}}
*[[{{sv}}]]<!--* Swedish-->: {{t+|sv|mula|c}}, {{t+|sv|mulåsna|c}}
*[[{{sva}}]]<!--* Svan-->: {{t|sva|ჰუ̈ლ}}
*[[{{sw}}]]<!--* Swahili-->: {{t+|sw|nyumbu}}, {{t|sw|baghala}}
*[[{{te}}]]<!--* Telugu-->: {{t+|te|కంచరగాడిద}}
*[[{{tg}}]]<!--* Tajik-->: {{t|tg|хачир|sc=Cyrl}}
*[[{{th}}]]<!--* Thai-->: {{t+|th|ล่อ}}, {{t+|th|ฬ่อ}}
*[[{{tk}}]]<!--* Turkmen-->: {{t|tk|gatyr}}
*[[{{tl}}]]<!--* Tagalog-->: {{t|tl|mula}}
*[[{{tr}}]]<!--* Turkish-->: {{t+|tr|katır}}
*[[{{tt}}]]<!--* Tatar-->: {{t+|tt|качыр|sc=Cyrl}}
*[[{{twf}}]]<!--* Taos-->: {{t|twf|mùlo’óna}}
*[[{{ug}}]]<!--* Uyghur-->: {{t|ug|قېچىر}}
*[[{{uk}}]]<!--* Ukrainian-->: {{t|uk|мул|m|sc=Cyrl}}
*[[{{ur}}]]<!--* Urdu-->: {{t|ur|خچر|m|tr=xaccar}}
*[[{{uz}}]]<!--* Uzbek-->: {{t+|uz|xachir}}
*[[{{vec}}]]<!--* Venetian-->: {{t+|vec|mus}}
*[[{{vi}}]]<!--* Vietnamese-->: {{t+|vi|la}}
*[[{{vo}}]]<!--* Volapük-->: {{t+|vo|mulud}}
*[[{{wa}}]]<!--* Walloon-->: {{t+|wa|moulet|m}}, {{t+|wa|moule|f}}
*[[{{wo}}]]<!--* Wolof-->: {{t-|wo|berkelle bi}}
*[[{{zh}}]]<!--* Chinese-->:[[骡子]]/[[騾子]], [[马骡]]/[[馬騾]]
{{trans-bottom}}
==={{noun}}:地質学===
'''ラバ'''
#({{etyl|it|ja}}:[[lava]]の音写)[[溶岩]]、特に[[溶岩流]]。
==={{noun}}:俗語===
'''ラバ'''
#({{etyl|en|ja}}:[[lover]]の音写)「恋人」の戦前における俗語。
#*私の'''ラバ'''さん酋長の娘([[w:石田一松|石田一松]]作詞『[[w:酋長の娘|酋長の娘]]』)
==={{name}}===
[[Category:{{ja}}_{{name}}]]
'''ラバ'''
#(英:Rabbahなど)[[ヨルダン]]の首都[[アンマン]]の古名。聖書において登場する。ラバト。
#*春になって、王たちが戦いに出るに及んで、ダビデはヨアブおよび自分と共にいる家来たち、並びに[[イスラエル]]の全軍をつかわした。彼らはアンモンの人々を滅ぼし、'''ラバ'''を包囲した。しかしダビデは[[エルサレム]]にとどまっていた。(『旧約聖書・サムエル記下』第11章 - [[s:口語旧約聖書|口語旧約聖書]](1955年))
8c5kgmkqt68wscsomdy2epv6an1cb4o
八頭
0
237885
2313260
1929058
2026-08-08T23:59:54Z
鍼灸
112313
2313260
wikitext
text/x-wiki
{{kana-DEFAULTSORT|はちがしら}}
{{wikipedia|八部}}
=={{ja}}==
==={{noun}}===
{{ja-kanjitab|はち|かしら|k2=がしら|yomi=j}}
[[Category:漢字 部首]]
{{ja-noun|はちがしら|[[はっとう]]}}
# (はちがしら)[[漢字]]の[[部首]]「[[⼋]]」の[[呼称]]の一つ。
# (はっとう)([[動物]]が)八匹。
==={{wago}}===
{{ja-kanjitab|やつ|かしら|k2=がしら|yomi=k}}
{{ja-wagokanji|やつがしら}}
# {{wagokanji of|やつがしら}}
rgk2bz3xz8q4lu0wgyw3qypyye6ss3g
2313262
2313260
2026-08-09T00:02:13Z
鍼灸
112313
2313262
wikitext
text/x-wiki
{{kana-DEFAULTSORT|はちがしら}}
{{wikipedia|八部}}
=={{ja}}==
==={{noun}}===
{{ja-kanjitab|はち|かしら|k2=がしら|yomi=j}}
[[Category:漢字 部首]]
{{ja-noun|はちがしら|[[はっとう]]}}
# (はちがしら)[[漢字]]の[[部首]]「[[⼋]]」の[[呼称]]の一つ。
# (はっとう)([[動物]]が)八匹。
# (はっとう)八つの[[頭部]]。
# (はっとう)八人の[[頭首]]。
==={{wago}}===
{{ja-kanjitab|やつ|かしら|k2=がしら|yomi=k}}
{{ja-wagokanji|やつがしら}}
# {{wagokanji of|やつがしら}}
akr6yzs1p7r8ksfne6609i60syqfvwk
2313264
2313262
2026-08-09T00:03:19Z
鍼灸
112313
2313264
wikitext
text/x-wiki
{{kana-DEFAULTSORT|はちがしら}}
{{wikipedia|八部}}
=={{ja}}==
==={{noun}}===
{{ja-kanjitab|はち|かしら|k2=がしら|yomi=j}}
{{ja-kanjitab|はっ|とう|yomi=o,o}}
[[Category:漢字 部首]]
{{ja-noun|はちがしら|[[はっとう]]}}
# (はちがしら)[[漢字]]の[[部首]]「[[⼋]]」の[[呼称]]の一つ。
# (はっとう)([[動物]]が)八匹。
# (はっとう)八つの[[頭部]]。
# (はっとう)八人の[[頭首]]。
==={{wago}}===
{{ja-kanjitab|やつ|かしら|k2=がしら|yomi=k}}
{{ja-wagokanji|やつがしら}}
# {{wagokanji of|やつがしら}}
jkyepd20ayimqstnudn8ym2dmacoypf
들어오다
0
245181
2313342
1738373
2026-08-09T02:58:30Z
Jiba1219
100610
2313342
wikitext
text/x-wiki
=={{L|ko}}==
==={{etym}}===
+1449年、[[w:ko:월인천강지곡|月印千江之曲]]で{{etyl|okm|ko}} {{m|okm|드러오다}} (tulewota)として初出。
*{{m|ko|들다}} + {{m|ko|오다}}
==={{pron}}===
{{ko-IPA}}
==={{intrverb}}===
{{head|ko|自動詞}}
#{{おくりがな2|入|はい|る|はいる}}。入って来る。
#* {{ko-ex|어서 '''들어와'''.||どうぞ、入って。}}
#(団体・組織などに){{おくりがな2|加|くわ|わる|くわわる}}。
#[[敷設]]される。
psjippfnfami1bei2g15n6nc87mlnau
epo
0
251390
2313170
1078675
2026-08-08T22:48:33Z
Kuroco2k
84207
2313170
wikitext
text/x-wiki
==記号==
==={{code}}===
'''{{PAGENAME}}'''
#{{ISO 639|2&3|eo}}
b3yfst28o04fpktun2bn7o2io0ck0es
poder
0
251869
2313416
2286489
2026-08-09T09:33:07Z
Kuroco2k
84207
2313416
wikitext
text/x-wiki
{{also|põder}}
=={{L|ast}}==
==={{etym}}===
{{etyl|VL.|ast}} {{m|la|*potēre}} < {{etyl|la|ast}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{noun}}===
{{ast-noun|m|poderes}}
#{{ふりがな|力|ちから}}。
==={{verb}}===
{{ast-verb}}
#~[[できる]]。
{{ast-conj-poder}}
----
=={{L|an}}==
==={{etym}}===
{{etyl|VL.|an}} {{m|la|*potēre}} < {{etyl|la|an}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{verb}}===
{{head|an|verb}}
#~[[できる]]。
----
=={{L|oc}}==
==={{etym}}===
{{etyl|pro|oc}} ''poder'' < {{etyl|VL.|oc}} {{m|la|*potēre}} < {{etyl|la|oc}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{verb}}===
{{head|oc|verb}}
#~[[できる]]。
{{oc-conj-table
|poder
|poder
|podent
|pogut
|pòdi
|pòdes
|pòt
|podèm
|podètz
|pòdon
|podiái
|podiás
|podiá
|podiam
|podiatz
|podián
|poirai
|poiràs
|poirà
|poirem
|poiretz
|poiràn
|poguèri
|poguères
|poguèt
|poguèrem
|poguèretz
|poguèron
|poiriái
|poiriás
|poiriá
|poiriam
|poiriatz
|poirián
|pòsca
|pòscas
|pòsca
|poscam
|poscatz
|pòscan
|poguèsse
|poguèsses
|poguèsse
|poguèssem
|poguèssetz
|poguèsson
|pòsca
|poscam
|poscatz
}}
----
=={{L|ca}}==
==={{etym}}===
{{etyl|pro|ct}} ''poder'' < {{etyl|VL.|ca}} {{m|la|*potēre}} < {{etyl|la|ca}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{pron}}===
* {{ca-IPA|ê}}
==={{verb}}===
{{ca-verb|pres_1_sg=puc|past_part=pogut}}
#~[[できる]]。
#~してもよい。
===={{conjug}}====
{{ca-conj}}
==={{noun}}===
{{ca-noun|m}}
#{{ふりがな|力|ちから}}、[[能力]]。
----
=={{L|gl}}==
==={{etym}}===
{{etyl|VL.|gl}} {{m|la|*potēre}} < {{etyl|la|gl}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{verb}}===
{{gl-verb|pod|er|pret=puiden}}
#~[[できる]]。
===={{conjug}}====
{{gl-conj}}
----
=={{L|pro}}==
==={{alter}}===
* {{l|pro|poer}}
==={{etym}}===
{{etyl|VL.|pro}} {{m|la|*potēre}} < {{etyl|la|pro}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{noun}}===
{{pro-noun|m}}
#{{ふりがな|力|ちから}}、[[能力]]。
==={{verb}}===
{{head|pro|verb}}
#~[[できる]]。
===={{desc}}====
*{{desc|oc|poder}}
*{{desc|ca|poder}}
----
=={{L|es}}==
==={{etym}}===
{{etyl|VL.|es}} {{m|la|*potēre}} < {{etyl|la|es}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{pron}}===
* {{es-IPA}}
==={{noun}}===
{{es-noun|m|poderes}}
#{{ふりがな|力|ちから}}、[[権力]]。
#[[委任状]]。
==={{verb}}===
{{es-verb|pod|er|pres=puedo|pret=pude}}
#~[[できる]]。
#{{context|El Salvador|colloquial|reflexive|lang=es}}~に{{おくりがな2|詳|くわ|しい|くわしい}}。
===={{conjug}}====
{{es-conj}}
===={{rel}}====
* {{l|es|a más no poder}}
* {{l|es|apoderado}}
* {{l|es|poder con}}
* {{l|es|poderoso}}
* {{l|es|potencia}}
* {{l|es|potencial}}
* {{l|es|potentado}}
* {{l|es|potente}}
* {{l|es|pudiente}}
----
=={{L|pt}}==
==={{etym}}===
{{etyl|roa-opt|pt}} ''poder'' < {{etyl|VL.|pt}} {{b}} < {{etyl|la|pt}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{pron}}===
名詞:
* {{a|PT}} {{IPA|lang=pt|/pu.ˈdeɾ/|[pu.ˈðeɾ]}}
* {{a|Brazil}} {{IPA|lang=pt|po.ˈdeʁ}}
** {{a|Paulista}} {{IPA|lang=pt|[po.ˈdeɹ]|[po.ˈdeɾ]}}
動詞:
* {{a|PT}} {{IPA|lang=pt|/pu.ˈdeɾ/|[pu.ˈðeɾ]}}
* {{a|Brazil}} {{IPA|lang=pt|po.ˈde(ʁ)|pu.ˈde(ʁ)}}
** {{a|Paulista}} {{IPA|lang=pt|[po.ˈde(ɹ)]|[po.ˈde(ɾ)]|[pu-]|[-dɛ-]}}
==={{noun}}===
{{pt-noun|m|es}}
#{{ふりがな|力|ちから}}、[[権力]]、[[支配]]力。
#([[em poder de]]の形で)[[所有]]、[[所持]]。
===={{syn}}====
* {{l|pt|potência}}
* {{l|pt|posse}}
* {{l|pt|virtude}}
* {{l|pt|superpoder}}
==={{verb}}===
{{pt-verb||poder}}
#{{context|auxiliary|lang=pt}}~[[できる]]。
#{{context|auxiliary|lang=pt}}~してもよい。
#{{context|auxiliary|lang=pt}}{{おくりがな3|有|あ|り|得|う|る|ありうる}}。
===={{conjug}}====
{{pt-conj}}
===={{syn}}====
* {{l|pt|conseguir}}
cudz9h4znkfc9w4j304zx2gainuh1jh
2313423
2313416
2026-08-09T09:42:07Z
Kuroco2k
84207
/* {{conjug}} */
2313423
wikitext
text/x-wiki
{{also|põder}}
=={{L|ast}}==
==={{etym}}===
{{etyl|VL.|ast}} {{m|la|*potēre}} < {{etyl|la|ast}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{noun}}===
{{ast-noun|m|poderes}}
#{{ふりがな|力|ちから}}。
==={{verb}}===
{{ast-verb}}
#~[[できる]]。
{{ast-conj-poder}}
----
=={{L|an}}==
==={{etym}}===
{{etyl|VL.|an}} {{m|la|*potēre}} < {{etyl|la|an}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{verb}}===
{{head|an|verb}}
#~[[できる]]。
----
=={{L|oc}}==
==={{etym}}===
{{etyl|pro|oc}} ''poder'' < {{etyl|VL.|oc}} {{m|la|*potēre}} < {{etyl|la|oc}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{verb}}===
{{head|oc|verb}}
#~[[できる]]。
{{oc-conj-table
|poder
|poder
|podent
|pogut
|pòdi
|pòdes
|pòt
|podèm
|podètz
|pòdon
|podiái
|podiás
|podiá
|podiam
|podiatz
|podián
|poirai
|poiràs
|poirà
|poirem
|poiretz
|poiràn
|poguèri
|poguères
|poguèt
|poguèrem
|poguèretz
|poguèron
|poiriái
|poiriás
|poiriá
|poiriam
|poiriatz
|poirián
|pòsca
|pòscas
|pòsca
|poscam
|poscatz
|pòscan
|poguèsse
|poguèsses
|poguèsse
|poguèssem
|poguèssetz
|poguèsson
|pòsca
|poscam
|poscatz
}}
----
=={{L|ca}}==
==={{etym}}===
{{etyl|pro|ct}} ''poder'' < {{etyl|VL.|ca}} {{m|la|*potēre}} < {{etyl|la|ca}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{pron}}===
* {{ca-IPA|ê}}
==={{verb}}===
{{ca-verb|pres_1_sg=puc|past_part=pogut}}
#~[[できる]]。
#~してもよい。
===={{conjug}}====
{{ca-conjug}}
==={{noun}}===
{{ca-noun|m}}
#{{ふりがな|力|ちから}}、[[能力]]。
----
=={{L|gl}}==
==={{etym}}===
{{etyl|VL.|gl}} {{m|la|*potēre}} < {{etyl|la|gl}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{verb}}===
{{gl-verb|pod|er|pret=puiden}}
#~[[できる]]。
===={{conjug}}====
{{gl-conj}}
----
=={{L|pro}}==
==={{alter}}===
* {{l|pro|poer}}
==={{etym}}===
{{etyl|VL.|pro}} {{m|la|*potēre}} < {{etyl|la|pro}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{noun}}===
{{pro-noun|m}}
#{{ふりがな|力|ちから}}、[[能力]]。
==={{verb}}===
{{head|pro|verb}}
#~[[できる]]。
===={{desc}}====
*{{desc|oc|poder}}
*{{desc|ca|poder}}
----
=={{L|es}}==
==={{etym}}===
{{etyl|VL.|es}} {{m|la|*potēre}} < {{etyl|la|es}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{pron}}===
* {{es-IPA}}
==={{noun}}===
{{es-noun|m|poderes}}
#{{ふりがな|力|ちから}}、[[権力]]。
#[[委任状]]。
==={{verb}}===
{{es-verb|pod|er|pres=puedo|pret=pude}}
#~[[できる]]。
#{{context|El Salvador|colloquial|reflexive|lang=es}}~に{{おくりがな2|詳|くわ|しい|くわしい}}。
===={{conjug}}====
{{es-conj}}
===={{rel}}====
* {{l|es|a más no poder}}
* {{l|es|apoderado}}
* {{l|es|poder con}}
* {{l|es|poderoso}}
* {{l|es|potencia}}
* {{l|es|potencial}}
* {{l|es|potentado}}
* {{l|es|potente}}
* {{l|es|pudiente}}
----
=={{L|pt}}==
==={{etym}}===
{{etyl|roa-opt|pt}} ''poder'' < {{etyl|VL.|pt}} {{b}} < {{etyl|la|pt}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{pron}}===
名詞:
* {{a|PT}} {{IPA|lang=pt|/pu.ˈdeɾ/|[pu.ˈðeɾ]}}
* {{a|Brazil}} {{IPA|lang=pt|po.ˈdeʁ}}
** {{a|Paulista}} {{IPA|lang=pt|[po.ˈdeɹ]|[po.ˈdeɾ]}}
動詞:
* {{a|PT}} {{IPA|lang=pt|/pu.ˈdeɾ/|[pu.ˈðeɾ]}}
* {{a|Brazil}} {{IPA|lang=pt|po.ˈde(ʁ)|pu.ˈde(ʁ)}}
** {{a|Paulista}} {{IPA|lang=pt|[po.ˈde(ɹ)]|[po.ˈde(ɾ)]|[pu-]|[-dɛ-]}}
==={{noun}}===
{{pt-noun|m|es}}
#{{ふりがな|力|ちから}}、[[権力]]、[[支配]]力。
#([[em poder de]]の形で)[[所有]]、[[所持]]。
===={{syn}}====
* {{l|pt|potência}}
* {{l|pt|posse}}
* {{l|pt|virtude}}
* {{l|pt|superpoder}}
==={{verb}}===
{{pt-verb||poder}}
#{{context|auxiliary|lang=pt}}~[[できる]]。
#{{context|auxiliary|lang=pt}}~してもよい。
#{{context|auxiliary|lang=pt}}{{おくりがな3|有|あ|り|得|う|る|ありうる}}。
===={{conjug}}====
{{pt-conj}}
===={{syn}}====
* {{l|pt|conseguir}}
fuj1isml4t9h2fgmgpf26wsuw98g0dz
2313429
2313423
2026-08-09T09:48:51Z
Kuroco2k
84207
2313429
wikitext
text/x-wiki
{{also|põder}}
=={{L|ast}}==
==={{etym}}===
{{etyl|VL.|ast}} {{m|la|*potēre}} < {{etyl|la|ast}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{noun}}===
{{ast-noun|m|poderes}}
#{{ふりがな|力|ちから}}。
==={{verb}}===
{{ast-verb}}
#~[[できる]]。
{{ast-conj-poder}}
----
=={{L|an}}==
==={{etym}}===
{{etyl|VL.|an}} {{m|la|*potēre}} < {{etyl|la|an}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{verb}}===
{{head|an|verb}}
#~[[できる]]。
----
=={{L|oc}}==
==={{etym}}===
{{etyl|pro|oc}} ''poder'' < {{etyl|VL.|oc}} {{m|la|*potēre}} < {{etyl|la|oc}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{verb}}===
{{head|oc|verb}}
#~[[できる]]。
{{oc-conj-table
|poder
|poder
|podent
|pogut
|pòdi
|pòdes
|pòt
|podèm
|podètz
|pòdon
|podiái
|podiás
|podiá
|podiam
|podiatz
|podián
|poirai
|poiràs
|poirà
|poirem
|poiretz
|poiràn
|poguèri
|poguères
|poguèt
|poguèrem
|poguèretz
|poguèron
|poiriái
|poiriás
|poiriá
|poiriam
|poiriatz
|poirián
|pòsca
|pòscas
|pòsca
|poscam
|poscatz
|pòscan
|poguèsse
|poguèsses
|poguèsse
|poguèssem
|poguèssetz
|poguèsson
|pòsca
|poscam
|poscatz
}}
----
=={{L|ca}}==
==={{etym}}===
{{etyl|pro|ct}} ''poder'' < {{etyl|VL.|ca}} {{m|la|*potēre}} < {{etyl|la|ca}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{pron}}===
* {{ca-IPA|ê}}
==={{verb}}===
{{ca-verb|pres_1_sg=puc|past_part=pogut}}
#~[[できる]]。
#~してもよい。
{{ca-conj-re2|pod<!--
-->|infinitive=poder<!--
-->|past_part=pogut<!--
-->|past_part_f=poguda<!--
-->|past_part_mpl=poguts<!--
-->|past_part_fpl=pogudes<!--
-->|pres_ind_1_sg=puc<!--
-->|pres_ind_2_sg=pots<!--
-->|pres_ind_3_sg=pot<!--
-->|pret_ind_stem=pogu<!--
-->|pres_sub_stem=pugu<!--
-->|impf_sub_stem=pogu<!--
-->|impr_2_sg=pugues<!--
-->|impr_2_pl=pugueu<!--
-->}}
==={{noun}}===
{{ca-noun|m}}
#{{ふりがな|力|ちから}}、[[能力]]。
----
=={{L|gl}}==
==={{etym}}===
{{etyl|VL.|gl}} {{m|la|*potēre}} < {{etyl|la|gl}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{verb}}===
{{gl-verb|pod|er|pret=puiden}}
#~[[できる]]。
{{gl-conj (poder)}}
----
=={{L|pro}}==
==={{alter}}===
* {{l|pro|poer}}
==={{etym}}===
{{etyl|VL.|pro}} {{m|la|*potēre}} < {{etyl|la|pro}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{noun}}===
{{pro-noun|m}}
#{{ふりがな|力|ちから}}、[[能力]]。
==={{verb}}===
{{head|pro|verb}}
#~[[できる]]。
===={{desc}}====
*{{desc|oc|poder}}
*{{desc|ca|poder}}
----
=={{L|es}}==
==={{etym}}===
{{etyl|VL.|es}} {{m|la|*potēre}} < {{etyl|la|es}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{pron}}===
* {{es-IPA}}
==={{noun}}===
{{es-noun|m|poderes}}
#{{ふりがな|力|ちから}}、[[権力]]。
#[[委任状]]。
==={{verb}}===
{{es-verb|pod|er|pres=puedo|pret=pude}}
#~[[できる]]。
#{{context|El Salvador|colloquial|reflexive|lang=es}}~に{{おくりがな2|詳|くわ|しい|くわしい}}。
{{es-conj-er|p=poder|combined=1}}
===={{rel}}====
* {{l|es|a más no poder}}
* {{l|es|apoderado}}
* {{l|es|poder con}}
* {{l|es|poderoso}}
* {{l|es|potencia}}
* {{l|es|potencial}}
* {{l|es|potentado}}
* {{l|es|potente}}
* {{l|es|pudiente}}
----
=={{L|pt}}==
==={{etym}}===
{{etyl|roa-opt|pt}} ''poder'' < {{etyl|VL.|pt}} {{b}} < {{etyl|la|pt}} ''[[potens]]'' (''[[posse]]'' の現在分詞)
==={{pron}}===
名詞:
* {{a|PT}} {{IPA|lang=pt|/pu.ˈdeɾ/|[pu.ˈðeɾ]}}
* {{a|Brazil}} {{IPA|lang=pt|po.ˈdeʁ}}
** {{a|Paulista}} {{IPA|lang=pt|[po.ˈdeɹ]|[po.ˈdeɾ]}}
動詞:
* {{a|PT}} {{IPA|lang=pt|/pu.ˈdeɾ/|[pu.ˈðeɾ]}}
* {{a|Brazil}} {{IPA|lang=pt|po.ˈde(ʁ)|pu.ˈde(ʁ)}}
** {{a|Paulista}} {{IPA|lang=pt|[po.ˈde(ɹ)]|[po.ˈde(ɾ)]|[pu-]|[-dɛ-]}}
==={{noun}}===
{{pt-noun|m|es}}
#{{ふりがな|力|ちから}}、[[権力]]、[[支配]]力。
#([[em poder de]]の形で)[[所有]]、[[所持]]。
===={{syn}}====
* {{l|pt|potência}}
* {{l|pt|posse}}
* {{l|pt|virtude}}
* {{l|pt|superpoder}}
==={{verb}}===
{{pt-verb||poder}}
#{{context|auxiliary|lang=pt}}~[[できる]]。
#{{context|auxiliary|lang=pt}}~してもよい。
#{{context|auxiliary|lang=pt}}{{おくりがな3|有|あ|り|得|う|る|ありうる}}。
===={{conjug}}====
{{pt-conj}}
===={{syn}}====
* {{l|pt|conseguir}}
r2796fplyceh33wp7py1minrp1ejlp6
六道
0
252528
2313301
2207743
2026-08-09T00:45:24Z
うーむ
129171
/* 名詞 */
2313301
wikitext
text/x-wiki
{{kana-DEFAULTSORT|ろくどう}}
=={{L|ja}}==
{{wikipedia}}
==={{pron}}===
{{ja-pron|ろくどう|acc=2|acc_ref=NHK16}}
{{ja-pron|りくどう|acc=2}}
==={{noun}}===
{{ja-noun|[[ろくどう]]|[[りくどう]]}}
#{{context|Buddhism|lang=ja}}[[衆生]]がその[[業]]によって[[輪廻]][[転生]]する六種の[[世界]]。[[天道]]・[[人間道]]・[[修羅道]]・[[畜生道]]・[[餓鬼道]]・[[地獄道]]。
===={{syn}}====
*[[六趣]]
*[[六界]]
===脚注===
{{Reflist}}
=={{L|zh}}==
{{zh-cat|liu4dao4|noun|仏教}}
{{yue-cat|luk6dou6|noun|仏教}}
{{hak-cat|liuk5tho4|noun|仏教}}
==={{pron}}===
{{cmn-pron|liùdào}}
{{yue-pron|luk6 dou6}}
{{hak-pron|liuk-tho}}
==={{noun}}===
{{zhchars}}
#(日本語に同じ)六道。
=={{L|ko}}==
==={{noun}}===
{{ko-head|noun|육도|륙도|cat2=仏教}}
#(日本語に同じ)六道。
=={{L|vi}}==
==={{noun}}===
{{vi-head|noun|lục|đạo|cat2=仏教}}
#(日本語に同じ)六道。
cf5zko5hjdeq47p10gokjvlfy73lj1y
простата
0
255301
2313217
1540727
2026-08-08T23:23:31Z
Kuroco2k
84207
wikify
2313217
wikitext
text/x-wiki
=={{mk}}==
==={{noun}}===
{{mk-noun|f}}
#{{context|anatomy|lang=mk}}[[前立腺]]。
{{mk-decl-noun-f|простат}}
=={{ru}}==
==={{pron}}===
*{{ru-IPA|проста́та}}
==={{noun}}===
{{head|ru|noun|head=проста́та|tr=prostáta|g=f-in}}
#{{context|anatomy|lang=ru}}[[前立腺]]。
{{ru-decl-noun|простата|простаты|простаты|простат|простате|простатам|простату|простаты|простатой|造格単数2=простатою|простатами|простате|простатах}}
===={{syn}}====
*{{l|ru|предстательная железа}}, {{l|ru|второе сердце мужчины}}
csfsk99dlwpcyv68fxt48ze3uidpd8g
enema
0
255781
2313110
2230642
2026-08-08T13:45:39Z
M-30722
1202
2313110
wikitext
text/x-wiki
{{also|ènema|ę́nemą}}
=={{L|en}}==
==={{etym}}===
{{etyl|grc}} {{m|grc|ἔνεμα}} < {{m|grc|ἐνίημι}}
==={{pron}}===
* {{a|UK|US}} {{IPA|lang=en|ˈɛn.ə.mə}}
==={{noun}}===
{{en-noun|s|pl2=enemata|irr=y}}
#{{タグ|en|医療}}[[浣腸]]。
#浣腸剤。
===={{syn}}====
* (語義2) {{l|en|clyster}}
===={{drv}}====
* {{l|en|enema queen}}
* {{l|en|enematic}}
===アナグラム===
* {{anagrams|en|Ameen|Menae|Naeem|amene|meane}}
=={{L|es}}==
==={{etym}}===
{{etyl|LL.|es}} ''enema'' < {{etyl|grc|es}} {{m|grc|ἔνεμα}} < {{m|grc|ἐνίημι}} < {{m|grc|ἐν}} + {{m|grc|ἵημι}}
==={{pron}}===
* {{es-IPA}}
==={{noun}}===
{{es-noun|m}}
#{{タグ|es|医療}}[[浣腸]]。
#浣腸剤。
===={{syn}}====
* {{l|es|clister}}, {{l|es|lavado}}, {{l|es|lavativa}}
=={{L|pt}}==
==={{noun}}===
{{pt-noun|m|s}}
#{{タグ|pt|医療}}[[浣腸]]。
#浣腸剤。
===={{syn}}====
* {{l|pt|clister}}
j56fywu6uvsle5z5ryzv8g1t2jgkd0n
saber
0
262208
2313414
2287993
2026-08-09T09:33:07Z
Kuroco2k
84207
2313414
wikitext
text/x-wiki
{{also|Saber}}
=={{L|ast}}==
==={{etym}}===
{{etyl|VL.|ast}} {{m|la|*sapēre}} < {{etyl|la|ast}} ''[[sapere]]''
==={{verb}}===
{{ast-verb}}
#{{おくりがな2|知|し|っ|しる}}ている、{{おくりがな2|分|わ|かる|わかる}}。
===={{rel}}====
* {{l|ast|sabor}}
----
=={{L|en}}==
==={{pron}}===
* {{a|US|Canada}} {{IPA|lang=en|ˈseɪ.bɚ}}
* {{a|UK}} {{IPA|lang=en|ˈseɪ.bə(ɹ)}}
* {{rhymes|eɪbə(ɹ)}}
==={{noun}}===
{{en-noun}}
#[[sabre]]の異綴。
==={{verb}}===
{{en-verb}}
#[[sabre]]の異綴。
===アナグラム===
* {{anagrams|en|a=abers|BSAer|Bares|Brase|Breas|bares|barse|baser|bears|besra|braes|rabes|sabre}}
----
=={{L|oc}}==
==={{alter}}===
* {{l|oc|saupre}}
==={{etym}}===
{{etyl|pro|oc}} ''saber'' < {{etyl|VL.|oc}} {{m|la|*sapēre}} < {{etyl|la|oc}} ''[[sapere]]''
==={{verb}}===
{{oc-verb|sab|er}}
#{{おくりがな2|知|し|っ|しる}}ている、{{おくりがな2|分|わ|かる|わかる}}。
{{oc-conj-table
|saber
|saber
|[[sabent]]<!-- avoid line break which messes up formatting
-->|[[sauput]]<!-- avoid line break which messes up formatting
-->|[[sabi]], [[sai]]
|[[sabes]], [[sas]]
|[[sap]]
|[[sabèm]]
|[[sabètz]]
|[[sabon]]<!-- avoid line break which messes up formatting
-->|[[sabiái]]
|[[sabiás]]
|[[sabiá]]
|[[sabiam]]
|[[sabiatz]]
|[[sabián]]<!-- avoid line break which messes up formatting
-->|[[sauprai]]
|[[saupràs]]
|[[sauprà]]
|[[sauprem]]
|[[saupretz]]
|[[saupràn]]<!-- avoid line break which messes up formatting
-->|[[saupèri]]
|[[saupères]]
|[[saupèt]]
|[[saupèrem]]
|[[saupèretz]]
|[[saupèron]]<!-- avoid line break which messes up formatting
-->|[[saupriái]]
|[[saupriás]]
|[[saupriá]]
|[[saupriam]]
|[[saupriatz]]
|[[sauprián]]<!-- avoid line break which messes up formatting
-->|[[sàpia]]
|[[sàpias]]
|[[sàpia]]
|[[sapiam]]
|[[sapiatz]]
|[[sàpian]]<!-- avoid line break which messes up formatting
-->|[[saupèsse]]
|[[saupèsses]]
|[[saupèsse]]
|[[saupèssem]]
|[[saupèssetz]]
|[[saupèsson]]<!-- avoid line break which messes up formatting
-->|[[sap]]
|[[sapiam]]
|[[sabètz]]|bottom=}}
===={{rel}}====
* {{l|oc|sabor}}
----
=={{L|ca}}==
==={{etym}}===
{{etyl|pro|ca}} ''saber'' < {{etyl|VL.|ca}} {{m|la|*sapēre}} < {{etyl|la|ca}} ''[[sapere]]'' < {{etyl|ine-pro|ca}} {{m|ine-pro|*seh₁p-}}
==={{pron}}===
* {{ca-IPA|ê}}
==={{verb}}===
{{ca-verb|pres_1_sg=sé|past_part=sabut}}
#{{おくりがな2|知|し|っ|しる}}ている、{{おくりがな2|分|わ|かる|わかる}}。
===={{conjug}}====
{{ca-conj}}
===={{drv}}====
* {{l|ca|saber greu}}
===={{rel}}====
* {{l|ca|sabor}}
==={{noun}}===
{{ca-noun|m}}
#[[知識]]。
===={{seealso}}====
* {{l|ca|conèixer}}
----
=={{L|gl}}==
==={{etym}}===
{{etyl|roa-opt|gl}} ''saber'' < {{etyl|VL.|gl}} {{m|la|*sapēre}} < {{etyl|la|gl}} ''[[sapere]]''
==={{verb}}===
{{gl-verb|sab|er|pres=sei|pret=souben}}
#{{おくりがな2|知|し|っ|しる}}ている、{{おくりがな2|分|わ|かる|わかる}}。
===={{conjug}}====
{{gl-conj}}
===={{rel}}====
* {{l|gl|sabor}}
==={{seealso}}===
* {{l|gl|coñecer}}
----
=={{L|pro}}==
==={{etym}}===
{{etyl|VL.|pro}} {{m|la|*sapēre}} < {{etyl|la|pro}} ''[[sapere]]''
==={{verb}}===
{{head|pro|verb}}
#~の{{ふりがな|味|あじ}}がする。
#{{おくりがな2|知|し|っ|しる}}ている、{{おくりがな2|分|わ|かる|わかる}}。
==={{noun}}===
{{pro-noun|m}}
#[[知識]]。
===={{rel}}====
* {{l|pro|sabor}}
===={{desc}}====
*{{desc|oc|saber}}
*{{desc|ca|saber}}
----
=={{L|es}}==
==={{etym}}===
{{etyl|VL.|spa}} {{m|la|*sapēre}} < {{etyl|la|es}} ''[[sapere]]'' < {{etyl|ine-pro|es}} {{m|ine-pro|*seh₁p-}}
==={{pron}}===
* {{IPA|lang=es|/saˈbeɾ/|[saˈβeɾ]}}
==={{verb}}===
{{es-verb|sab|er|pres=sé|pret=supe}}
#{{おくりがな2|知|し|っ|しる}}ている、{{おくりがな2|分|わ|かる|わかる}}。
#~の{{ふりがな|味|あじ}}がする。
===={{conjug}}====
{{es-conj}}
===={{rel}}====
* {{l|es|sabio}}
* {{l|es|sabiondo}}
* {{l|es|sabor}}
==={{noun}}===
{{es-noun|m|es}}
#[[知識]]。
==={{seealso}}===
* {{l|es|conocer}}
* {{l|es|saborear}}
----
=={{L|pt}}==
==={{etym}}===
{{etyl|roa-opt|pt}} ''saber'' < {{etyl|VL.|pt}} {{m|la|*sapēre}} < {{etyl|la|pt}} {{m|la|sapere}} < {{etyl|ine-pro|pt}} {{m|ine-pro|*seh₁p-}}
==={{pron}}===
* {{a|Portugal}} {{IPA|lang=pt|/sɐ.ˈbeɾ/|[sɐ.ˈβeɾ]}}
* {{a|Brazil}} {{IPA|lang=pt|sa.ˈbe(ʁ)}}
** {{a|Paulista}} {{IPA|lang=pt|[sa.ˈbe(ɾ)]|[sa.ˈbe(ɹ)]}}
==={{verb}}===
{{pt-verb||saber}}
#{{おくりがな2|知|し|っ|しる}}ている、{{おくりがな2|分|わ|かる|わかる}}。
#{{context|Portugal|lang=por}}~の{{ふりがな|味|あじ}}がする。
===={{conjug}}====
{{pt-conj}}
===={{syn}}====
* {{l|pt|conhecer}}
* {{l|pt|conseguir}}
* [[ter]] [[gosto]] [[de]]
==={{noun}}===
{{pt-noun|m|es}}
#[[知識]]。
===={{syn}}====
* {{l|pt|conhecimento}}, {{l|pt|sabedoria}}
===={{drv}}====
* {{l|pt|dar a saber}}
* {{l|pt|sabe-tudo}}
===={{rel}}====
{{top}}
* {{l|pt|sabedor}}
* {{l|pt|sabedoria}}
* {{l|pt|sabença}}
* {{l|pt|sabichão}}
* {{l|pt|sabidão}}
* {{l|pt|sabido}}
* {{l|pt|sábio}}
* {{l|pt|sabir}}
* {{l|pt|sabível}}
* {{l|pt|sabor}}
* {{l|pt|sapiência}}
* {{l|pt|sapiente}}
{{bottom}}
eg1l2on7q4g01y6hz9lbk1htipz8fpg
2313424
2313414
2026-08-09T09:42:07Z
Kuroco2k
84207
/* {{L|ca}} */
2313424
wikitext
text/x-wiki
{{also|Saber}}
=={{L|ast}}==
==={{etym}}===
{{etyl|VL.|ast}} {{m|la|*sapēre}} < {{etyl|la|ast}} ''[[sapere]]''
==={{verb}}===
{{ast-verb}}
#{{おくりがな2|知|し|っ|しる}}ている、{{おくりがな2|分|わ|かる|わかる}}。
===={{rel}}====
* {{l|ast|sabor}}
----
=={{L|en}}==
==={{pron}}===
* {{a|US|Canada}} {{IPA|lang=en|ˈseɪ.bɚ}}
* {{a|UK}} {{IPA|lang=en|ˈseɪ.bə(ɹ)}}
* {{rhymes|eɪbə(ɹ)}}
==={{noun}}===
{{en-noun}}
#[[sabre]]の異綴。
==={{verb}}===
{{en-verb}}
#[[sabre]]の異綴。
===アナグラム===
* {{anagrams|en|a=abers|BSAer|Bares|Brase|Breas|bares|barse|baser|bears|besra|braes|rabes|sabre}}
----
=={{L|oc}}==
==={{alter}}===
* {{l|oc|saupre}}
==={{etym}}===
{{etyl|pro|oc}} ''saber'' < {{etyl|VL.|oc}} {{m|la|*sapēre}} < {{etyl|la|oc}} ''[[sapere]]''
==={{verb}}===
{{oc-verb|sab|er}}
#{{おくりがな2|知|し|っ|しる}}ている、{{おくりがな2|分|わ|かる|わかる}}。
{{oc-conj-table
|saber
|saber
|[[sabent]]<!-- avoid line break which messes up formatting
-->|[[sauput]]<!-- avoid line break which messes up formatting
-->|[[sabi]], [[sai]]
|[[sabes]], [[sas]]
|[[sap]]
|[[sabèm]]
|[[sabètz]]
|[[sabon]]<!-- avoid line break which messes up formatting
-->|[[sabiái]]
|[[sabiás]]
|[[sabiá]]
|[[sabiam]]
|[[sabiatz]]
|[[sabián]]<!-- avoid line break which messes up formatting
-->|[[sauprai]]
|[[saupràs]]
|[[sauprà]]
|[[sauprem]]
|[[saupretz]]
|[[saupràn]]<!-- avoid line break which messes up formatting
-->|[[saupèri]]
|[[saupères]]
|[[saupèt]]
|[[saupèrem]]
|[[saupèretz]]
|[[saupèron]]<!-- avoid line break which messes up formatting
-->|[[saupriái]]
|[[saupriás]]
|[[saupriá]]
|[[saupriam]]
|[[saupriatz]]
|[[sauprián]]<!-- avoid line break which messes up formatting
-->|[[sàpia]]
|[[sàpias]]
|[[sàpia]]
|[[sapiam]]
|[[sapiatz]]
|[[sàpian]]<!-- avoid line break which messes up formatting
-->|[[saupèsse]]
|[[saupèsses]]
|[[saupèsse]]
|[[saupèssem]]
|[[saupèssetz]]
|[[saupèsson]]<!-- avoid line break which messes up formatting
-->|[[sap]]
|[[sapiam]]
|[[sabètz]]|bottom=}}
===={{rel}}====
* {{l|oc|sabor}}
----
=={{L|ca}}==
==={{etym}}===
{{etyl|pro|ca}} ''saber'' < {{etyl|VL.|ca}} {{m|la|*sapēre}} < {{etyl|la|ca}} ''[[sapere]]'' < {{etyl|ine-pro|ca}} {{m|ine-pro|*seh₁p-}}
==={{pron}}===
* {{ca-IPA|ê}}
==={{verb}}===
{{ca-verb|pres_1_sg=sé|past_part=sabut}}
#{{おくりがな2|知|し|っ|しる}}ている、{{おくりがな2|分|わ|かる|わかる}}。
===={{conjug}}====
{{ca-conjug}}
===={{drv}}====
* {{l|ca|saber greu}}
===={{rel}}====
* {{l|ca|sabor}}
==={{noun}}===
{{ca-noun|m}}
#[[知識]]。
===={{seealso}}====
* {{l|ca|conèixer}}
----
=={{L|gl}}==
==={{etym}}===
{{etyl|roa-opt|gl}} ''saber'' < {{etyl|VL.|gl}} {{m|la|*sapēre}} < {{etyl|la|gl}} ''[[sapere]]''
==={{verb}}===
{{gl-verb|sab|er|pres=sei|pret=souben}}
#{{おくりがな2|知|し|っ|しる}}ている、{{おくりがな2|分|わ|かる|わかる}}。
===={{conjug}}====
{{gl-conj}}
===={{rel}}====
* {{l|gl|sabor}}
==={{seealso}}===
* {{l|gl|coñecer}}
----
=={{L|pro}}==
==={{etym}}===
{{etyl|VL.|pro}} {{m|la|*sapēre}} < {{etyl|la|pro}} ''[[sapere]]''
==={{verb}}===
{{head|pro|verb}}
#~の{{ふりがな|味|あじ}}がする。
#{{おくりがな2|知|し|っ|しる}}ている、{{おくりがな2|分|わ|かる|わかる}}。
==={{noun}}===
{{pro-noun|m}}
#[[知識]]。
===={{rel}}====
* {{l|pro|sabor}}
===={{desc}}====
*{{desc|oc|saber}}
*{{desc|ca|saber}}
----
=={{L|es}}==
==={{etym}}===
{{etyl|VL.|spa}} {{m|la|*sapēre}} < {{etyl|la|es}} ''[[sapere]]'' < {{etyl|ine-pro|es}} {{m|ine-pro|*seh₁p-}}
==={{pron}}===
* {{IPA|lang=es|/saˈbeɾ/|[saˈβeɾ]}}
==={{verb}}===
{{es-verb|sab|er|pres=sé|pret=supe}}
#{{おくりがな2|知|し|っ|しる}}ている、{{おくりがな2|分|わ|かる|わかる}}。
#~の{{ふりがな|味|あじ}}がする。
===={{conjug}}====
{{es-conj}}
===={{rel}}====
* {{l|es|sabio}}
* {{l|es|sabiondo}}
* {{l|es|sabor}}
==={{noun}}===
{{es-noun|m|es}}
#[[知識]]。
==={{seealso}}===
* {{l|es|conocer}}
* {{l|es|saborear}}
----
=={{L|pt}}==
==={{etym}}===
{{etyl|roa-opt|pt}} ''saber'' < {{etyl|VL.|pt}} {{m|la|*sapēre}} < {{etyl|la|pt}} {{m|la|sapere}} < {{etyl|ine-pro|pt}} {{m|ine-pro|*seh₁p-}}
==={{pron}}===
* {{a|Portugal}} {{IPA|lang=pt|/sɐ.ˈbeɾ/|[sɐ.ˈβeɾ]}}
* {{a|Brazil}} {{IPA|lang=pt|sa.ˈbe(ʁ)}}
** {{a|Paulista}} {{IPA|lang=pt|[sa.ˈbe(ɾ)]|[sa.ˈbe(ɹ)]}}
==={{verb}}===
{{pt-verb||saber}}
#{{おくりがな2|知|し|っ|しる}}ている、{{おくりがな2|分|わ|かる|わかる}}。
#{{context|Portugal|lang=por}}~の{{ふりがな|味|あじ}}がする。
===={{conjug}}====
{{pt-conj}}
===={{syn}}====
* {{l|pt|conhecer}}
* {{l|pt|conseguir}}
* [[ter]] [[gosto]] [[de]]
==={{noun}}===
{{pt-noun|m|es}}
#[[知識]]。
===={{syn}}====
* {{l|pt|conhecimento}}, {{l|pt|sabedoria}}
===={{drv}}====
* {{l|pt|dar a saber}}
* {{l|pt|sabe-tudo}}
===={{rel}}====
{{top}}
* {{l|pt|sabedor}}
* {{l|pt|sabedoria}}
* {{l|pt|sabença}}
* {{l|pt|sabichão}}
* {{l|pt|sabidão}}
* {{l|pt|sabido}}
* {{l|pt|sábio}}
* {{l|pt|sabir}}
* {{l|pt|sabível}}
* {{l|pt|sabor}}
* {{l|pt|sapiência}}
* {{l|pt|sapiente}}
{{bottom}}
5kpxlh0s1c9guwv13oc6k7uc1nob7au
2313428
2313424
2026-08-09T09:48:52Z
Kuroco2k
84207
2313428
wikitext
text/x-wiki
{{also|Saber}}
=={{L|ast}}==
==={{etym}}===
{{etyl|VL.|ast}} {{m|la|*sapēre}} < {{etyl|la|ast}} ''[[sapere]]''
==={{verb}}===
{{ast-verb}}
#{{おくりがな2|知|し|っ|しる}}ている、{{おくりがな2|分|わ|かる|わかる}}。
===={{rel}}====
* {{l|ast|sabor}}
----
=={{L|en}}==
==={{pron}}===
* {{a|US|Canada}} {{IPA|lang=en|ˈseɪ.bɚ}}
* {{a|UK}} {{IPA|lang=en|ˈseɪ.bə(ɹ)}}
* {{rhymes|eɪbə(ɹ)}}
==={{noun}}===
{{en-noun}}
#[[sabre]]の異綴。
==={{verb}}===
{{en-verb}}
#[[sabre]]の異綴。
===アナグラム===
* {{anagrams|en|a=abers|BSAer|Bares|Brase|Breas|bares|barse|baser|bears|besra|braes|rabes|sabre}}
----
=={{L|oc}}==
==={{alter}}===
* {{l|oc|saupre}}
==={{etym}}===
{{etyl|pro|oc}} ''saber'' < {{etyl|VL.|oc}} {{m|la|*sapēre}} < {{etyl|la|oc}} ''[[sapere]]''
==={{verb}}===
{{oc-verb|sab|er}}
#{{おくりがな2|知|し|っ|しる}}ている、{{おくりがな2|分|わ|かる|わかる}}。
{{oc-conj-table
|saber
|saber
|[[sabent]]<!-- avoid line break which messes up formatting
-->|[[sauput]]<!-- avoid line break which messes up formatting
-->|[[sabi]], [[sai]]
|[[sabes]], [[sas]]
|[[sap]]
|[[sabèm]]
|[[sabètz]]
|[[sabon]]<!-- avoid line break which messes up formatting
-->|[[sabiái]]
|[[sabiás]]
|[[sabiá]]
|[[sabiam]]
|[[sabiatz]]
|[[sabián]]<!-- avoid line break which messes up formatting
-->|[[sauprai]]
|[[saupràs]]
|[[sauprà]]
|[[sauprem]]
|[[saupretz]]
|[[saupràn]]<!-- avoid line break which messes up formatting
-->|[[saupèri]]
|[[saupères]]
|[[saupèt]]
|[[saupèrem]]
|[[saupèretz]]
|[[saupèron]]<!-- avoid line break which messes up formatting
-->|[[saupriái]]
|[[saupriás]]
|[[saupriá]]
|[[saupriam]]
|[[saupriatz]]
|[[sauprián]]<!-- avoid line break which messes up formatting
-->|[[sàpia]]
|[[sàpias]]
|[[sàpia]]
|[[sapiam]]
|[[sapiatz]]
|[[sàpian]]<!-- avoid line break which messes up formatting
-->|[[saupèsse]]
|[[saupèsses]]
|[[saupèsse]]
|[[saupèssem]]
|[[saupèssetz]]
|[[saupèsson]]<!-- avoid line break which messes up formatting
-->|[[sap]]
|[[sapiam]]
|[[sabètz]]|bottom=}}
===={{rel}}====
* {{l|oc|sabor}}
----
=={{L|ca}}==
==={{etym}}===
{{etyl|pro|ca}} ''saber'' < {{etyl|VL.|ca}} {{m|la|*sapēre}} < {{etyl|la|ca}} ''[[sapere]]'' < {{etyl|ine-pro|ca}} {{m|ine-pro|*seh₁p-}}
==={{pron}}===
* {{ca-IPA|ê}}
==={{verb}}===
{{ca-verb|pres_1_sg=sé|past_part=sabut}}
#{{おくりがな2|知|し|っ|しる}}ている、{{おくりがな2|分|わ|かる|わかる}}。
{{ca-conj-re2|sab<!--
-->|infinitive=saber<!--
-->|pres_ind_1_sg=sé<!--
-->|pres_ind_2_sg=saps<!--
-->|pres_ind_3_sg=sap<!--
-->|pres_sub_1_sg=sàpiga<!--
-->|pres_sub_2_sg=sàpigues<!--
-->|pres_sub_3_sg=sàpiga<!--
-->|pres_sub_1_pl=sapiguem<!--
-->|pres_sub_2_pl=sapigueu<!--
-->|pres_sub_3_pl=sàpiguen<!--
-->|impr_2_sg=sàpigues<!--
-->|impr_2_pl=sapigueu<!--
-->}}
===={{drv}}====
* {{l|ca|saber greu}}
===={{rel}}====
* {{l|ca|sabor}}
==={{noun}}===
{{ca-noun|m}}
#[[知識]]。
===={{seealso}}====
* {{l|ca|conèixer}}
----
=={{L|gl}}==
==={{etym}}===
{{etyl|roa-opt|gl}} ''saber'' < {{etyl|VL.|gl}} {{m|la|*sapēre}} < {{etyl|la|gl}} ''[[sapere]]''
==={{verb}}===
{{gl-verb|sab|er|pres=sei|pret=souben}}
#{{おくりがな2|知|し|っ|しる}}ている、{{おくりがな2|分|わ|かる|わかる}}。
{{gl-conj (saber)}}
===={{rel}}====
* {{l|gl|sabor}}
==={{seealso}}===
* {{l|gl|coñecer}}
----
=={{L|pro}}==
==={{etym}}===
{{etyl|VL.|pro}} {{m|la|*sapēre}} < {{etyl|la|pro}} ''[[sapere]]''
==={{verb}}===
{{head|pro|verb}}
#~の{{ふりがな|味|あじ}}がする。
#{{おくりがな2|知|し|っ|しる}}ている、{{おくりがな2|分|わ|かる|わかる}}。
==={{noun}}===
{{pro-noun|m}}
#[[知識]]。
===={{rel}}====
* {{l|pro|sabor}}
===={{desc}}====
*{{desc|oc|saber}}
*{{desc|ca|saber}}
----
=={{L|es}}==
==={{etym}}===
{{etyl|VL.|spa}} {{m|la|*sapēre}} < {{etyl|la|es}} ''[[sapere]]'' < {{etyl|ine-pro|es}} {{m|ine-pro|*seh₁p-}}
==={{pron}}===
* {{IPA|lang=es|/saˈbeɾ/|[saˈβeɾ]}}
==={{verb}}===
{{es-verb|sab|er|pres=sé|pret=supe}}
#{{おくりがな2|知|し|っ|しる}}ている、{{おくりがな2|分|わ|かる|わかる}}。
#~の{{ふりがな|味|あじ}}がする。
{{es-conj-er|p=saber||combined=1}}
===={{rel}}====
* {{l|es|sabio}}
* {{l|es|sabiondo}}
* {{l|es|sabor}}
==={{noun}}===
{{es-noun|m|es}}
#[[知識]]。
==={{seealso}}===
* {{l|es|conocer}}
* {{l|es|saborear}}
----
=={{L|pt}}==
==={{etym}}===
{{etyl|roa-opt|pt}} ''saber'' < {{etyl|VL.|pt}} {{m|la|*sapēre}} < {{etyl|la|pt}} {{m|la|sapere}} < {{etyl|ine-pro|pt}} {{m|ine-pro|*seh₁p-}}
==={{pron}}===
* {{a|Portugal}} {{IPA|lang=pt|/sɐ.ˈbeɾ/|[sɐ.ˈβeɾ]}}
* {{a|Brazil}} {{IPA|lang=pt|sa.ˈbe(ʁ)}}
** {{a|Paulista}} {{IPA|lang=pt|[sa.ˈbe(ɾ)]|[sa.ˈbe(ɹ)]}}
==={{verb}}===
{{pt-verb||saber}}
#{{おくりがな2|知|し|っ|しる}}ている、{{おくりがな2|分|わ|かる|わかる}}。
#{{context|Portugal|lang=por}}~の{{ふりがな|味|あじ}}がする。
===={{conjug}}====
{{pt-conj}}
===={{syn}}====
* {{l|pt|conhecer}}
* {{l|pt|conseguir}}
* [[ter]] [[gosto]] [[de]]
==={{noun}}===
{{pt-noun|m|es}}
#[[知識]]。
===={{syn}}====
* {{l|pt|conhecimento}}, {{l|pt|sabedoria}}
===={{drv}}====
* {{l|pt|dar a saber}}
* {{l|pt|sabe-tudo}}
===={{rel}}====
{{top}}
* {{l|pt|sabedor}}
* {{l|pt|sabedoria}}
* {{l|pt|sabença}}
* {{l|pt|sabichão}}
* {{l|pt|sabidão}}
* {{l|pt|sabido}}
* {{l|pt|sábio}}
* {{l|pt|sabir}}
* {{l|pt|sabível}}
* {{l|pt|sabor}}
* {{l|pt|sapiência}}
* {{l|pt|sapiente}}
{{bottom}}
1kkgbyeq67sgozuz43en2mp3tl39rtj
make love
0
277415
2313461
1614200
2026-08-09T11:46:57Z
M-30722
1202
2313461
wikitext
text/x-wiki
{{DEFAULTSORT:makelove}}
=={{L|en}}==
==={{idiom}}===
{{en-idiom|verb}}
#{{タグ|en|性行為}}[[セックス]]する。[[性行為]]をする。
===={{drv}}====
* {{l|en|make love to}}, {{l|en|make love with}}
k3jsoepu1389mhr86rskgye12619yq5
嫡妻
0
280318
2313379
1685680
2026-08-09T06:50:22Z
Jiba1219
100610
2313379
wikitext
text/x-wiki
{{kana-DEFAULTSORT|ちゃくさい}}
=={{L|ja}}==
[[Category:{{ja}}]]
==={{pron|jpn}}===
;ちゃ↗くさい
;て↗きさい
==={{noun}}===
[[Category:{{ja}}_{{noun}}]]
[[Category:{{ja}}_家族]]
[[Category:{{ja}}_和語の漢字表記|こなみ]]
[[Category:熟字訓|こなみ]]
{{jachars}}([[ちゃくさい]]、[[てきさい]] 熟字訓:[[こなみ]]、[[むかいめ]])
#[[正妻]]。[[本妻]]。[[嫡室]]。
=={{L|zh}}==
{{wikipedia|lang=zh}}
{{zh-cat|di2qi1|noun|家族}}
{{yue-cat|dik1chai1|noun|家族}}
{{nan-cat|tek4chhe1|noun|家族}}
==={{pron}}===
{{cmn-pron|díqī}}
{{yue-pron|dik1 cai1}}
{{nan-pron|xm,tw:tek-chhe}}
==={{noun}}===
{{zhchars}}
#嫡妻。[[正妻]]。
#(一夫多妻制の)[[第一]][[婦人]]。
=={{L|ko}}==
==={{noun}}===
{{ko-head|noun|적처|cat2=家族}}
#嫡妻。[[正妻]]。
ap7cfsf2r51vejlauxlw3ynk06mx62q
навек
0
287744
2313216
2233234
2026-08-08T23:23:31Z
Kuroco2k
84207
wikify
2313216
wikitext
text/x-wiki
=={{mk}}==
==={{adverb}}===
{{head|mk|adverb|head=навек|tr=navek}}
#{{context|rare|lang=mk}} [[永遠]]に。
===={{syn}}====
*{{l|mk|засекогаш}} (zasekogaš)
=={{ru}}==
{{also|навеки}}
==={{pron}}===
*{{IPA|nɐˈvʲek}}
==={{adverb}}===
{{head|ru|adverb|head=наве́к|tr=navék}}
#[[永遠]]に。
===={{syn}}====
*{{l|ru|навсегда|навсегда́}} (navsegdá)
bcoaf6p4ar9fq1sc5dfots31sg70u4g
совет
0
287805
2313215
2233243
2026-08-08T23:23:30Z
Kuroco2k
84207
wikify
2313215
wikitext
text/x-wiki
{{also|совѣтъ}}
=={{mk}}==
==={{etym}}===
{{etyl|sla-pro|mk}} {{recons|sъvětъ|lang=sla-pro}} < {{recons|větъ|lang=sla-pro}}
==={{pron}}===
*{{mk-IPA}}
*{{audio|mk|LL-Q9296 (mkd)-Bjankuloski06-{{PAGENAME}}.wav|音声}}
==={{noun}}===
{{head|mk|noun|head=совет|tr=sovet|g=m}}
#[[助言]]。[[アドバイス]]。
#[[会議]]。[[協議]]。[[審議]]。
=={{ru}}==
==={{etym}}===
*{{etyl|orv|ru}} {{l|orv|съвѣтъ}} (sŭvětŭ) < {{etyl|cu|orv}} {{l|cu|съвѣтъ}} (sŭvětŭ) < {{compound|со-|tr1=so-|вѣтъ|tr2=větŭ|lang=cu}} < {{etyl|sla-pro|cu}} {{recons|větъ|lang=sla-pro}}
*ポーランド語 {{l|pl|witać}} と同語源語。
==={{pron}}===
*{{IPA|sɐˈvʲet}}
*{{audio|ru|Ru-{{PAGENAME}}.ogg|音声}}
==={{noun}}===
{{head|ru|noun|head=сове́т|tr=sovét|g=m-in}}
#[[助言]]。[[アドバイス]]。
#[[協議会]]。[[委員会]]。
#{{context|ソ連|lang=ru}} [[w:ソビエト|ソビエト]]。
===={{drv}}====
*{{l|ru|советник|сове́тник}} (sovétnik)
*{{l|ru|советовать|сове́товать}} (sovétovatʹ)
*{{l|ru|советский|сове́тский}} (sovétskij)
*{{l|ru|советчик|сове́тчик}} (sovétčik)
===={{rel}}====
*{{l|ru|навет|наве́т}} (navét), {{l|ru|извет|изве́т}} (izvét), {{l|ru|ответ|отве́т}} (otvét), {{l|ru|привет|приве́т}} (privét), {{l|ru|обет|обе́т}} (obét), {{l|ru|вече|ве́че}} (véče), {{l|ru|отвечать|отвеча́ть}} (otvečátʹ), {{l|ru|ответить|отве́тить}} (otvétitʹ), {{l|ru|завещать|завеща́ть}} (zaveščátʹ), {{l|ru|совещаться|совеща́ться}} (soveščátʹsja)
fs5tkwkz1zuwhargwst57i9qu79pr2f
テンプレート:context/data
10
288560
2313125
2312966
2026-08-08T14:48:46Z
鍼灸
112313
2313125
wikitext
text/x-wiki
{{#switch:{{{1}}}<!--
-->|2ch|2ちゃんねる={{#switch:{{{2}}}|label=[[:w:2ちゃんねる (2ch.net)|2ちゃんねる]]|category=2ちゃんねるのスラング}}<!--
-->|and={{#switch:{{{2}}}|label=及び|category=}}<!--
-->|attributive={{#switch:{{{2}}}|label=形容詞的|category=}}<!--
-->|BDSM={{#switch:{{{2}}}|label=BDSM|category=性行為}}<!--
-->|by extension|par extension={{#switch:{{{2}}}|label=転じて|category=}}<!--
-->|Changchun Mandarin|Changchun={{#switch:{{{2}}}|label=長春|category=東北官話}}<!--
-->|Changtai Hokkien|Changtai={{#switch:{{{2}}}|label=長泰|category=方言}}<!--
-->|chiefly={{#switch:{{{2}}}|label=主に|category=}}<!--
-->|collectively={{#switch:{{{2}}}|label=集合的に|category=}}<!--
-->|comparable={{#switch:{{{2}}}|label=比較形有り|category=}}<!--
-->|Dalian Mandarin|Dalian={{#switch:{{{2}}}|label=大連|category=膠遼官話}}<!--
-->|definite={{#switch:{{{2}}}|label=限定|category=}}<!--
-->|disrespectful={{#switch:{{{2}}}|label=失礼|category=}}<!--
-->|especially|specifically|particularly={{#switch:{{{2}}}|label=特に|category=}}<!--
-->|exclamatory={{#switch:{{{2}}}|label=感嘆|category=}}<!--
-->|expressively={{#switch:{{{2}}}|label=意味ありげに|category=}}<!--
-->|extreme={{#switch:{{{2}}}|label=激しい|category=}}<!--
-->|extremely|exceedingly={{#switch:{{{2}}}|label=極めて|category=}}<!--
-->|familiar={{#switch:{{{2}}}|label=親しみを込めて|category=}}<!--
-->|figuratively={{#switch:{{{2}}}|label=比喩的に|category=}}<!--
-->|folksy={{#switch:{{{2}}}|label=気取らない表現|category=}}<!--
-->|form of address={{#switch:{{{2}}}|label=呼びかけ|category=}}<!--
-->|Guangxi Mandarin={{#switch:{{{2}}}|label=広西|category=西南官話}}<!--
-->|Guanzhong Mandarin|Guanzhong={{#switch:{{{2}}}|label=関中|category=中原官話}}<!--
-->|Guilin Mandarin={{#switch:{{{2}}}|label=桂林|category=西南官話}}<!--
-->|Guiliu Mandarin={{#switch:{{{2}}}|label=桂柳|category=西南官話}}<!--
-->|Guiyang Mandarin={{#switch:{{{2}}}|label=貴陽|category=西南官話}}<!--
-->|Harbin Mandarin|Harbin={{#switch:{{{2}}}|label=ハルビン|category=東北官話}}<!--
-->|Hefei Mandarin|Hefei={{#switch:{{{2}}}|label=合肥|category=江淮官話}}<!--
-->|Hsinchu Hokkien|Hsinchu={{#switch:{{{2}}}|label=新竹|category=台湾語}}<!--
-->|Hui'an Hokkien|Hui'an={{#switch:{{{2}}}|label=惠安|category=方言}}<!--
-->|hyperbolic|誇張|誇張表現={{#switch:{{{2}}}|label=誇張|category=誇張表現}}<!--
-->|in compounds={{#switch:{{{2}}}|label=複合語で|category=}}<!--
-->|Indonesian Hokkien|Indonesia Hokkien={{#switch:{{{2}}}|label=インドネシア|category=方言}}<!--
-->|in the plural|in plural={{#switch:{{{2}}}|label=[[複数形]]で|category=}}<!--
-->|in the singular|in singular={{#switch:{{{2}}}|label=[[単数形]]で|category=}}<!--
-->|Jinan Mandarin|Jinan={{#switch:{{{2}}}|label=済南|category=冀魯官話}}<!--
-->|Jinjiang Hokkien|Jinjiang={{#switch:{{{2}}}|label=晋江|category=方言}}<!--
-->|Kaohsiung Hokkien|Kaohsiung={{#switch:{{{2}}}|label=高雄|category=台湾語}}<!--
-->|Kinmenese Hokkien|Kinmen|Kinmen Hokkien|Kinmenese={{#switch:{{{2}}}|label=金門|category=台湾語}}<!--
-->|Kunming Mandarin|Kunming={{#switch:{{{2}}}|label=昆明|category=西南官話}}<!--
-->|Lanzhou Mandarin|Lanzhou={{#switch:{{{2}}}|label=蘭州|category=蘭銀官話}}<!--
-->|leet={{#switch:{{{2}}}|label=leet|category=leet}}<!--
-->|less formal={{#switch:{{{2}}}|label=くだけた表現|category=}}<!--
-->|LGBT={{#switch:{{{2}}}|label=[[LGBT]]|category=性的指向}}<!--
-->|Limba Sarda Comuna={{#switch:{{{2}}}|label=リンバ・サルダ・コムナ|category=}}<!--
-->|Liuzhou Mandarin={{#switch:{{{2}}}|label=柳州|category=西南官話}}<!--
-->|literally|literal={{#switch:{{{2}}}|label=逐語的に|category=}}<!--
-->|Loosely|loosely={{#switch:{{{2}}}|label=大まかに|category=}}<!--
-->|Lukang Hokkien|Lukang={{#switch:{{{2}}}|label=鹿港|category=台湾語}}<!--
-->|Luoyang Mandarin|Luoyang={{#switch:{{{2}}}|label=洛陽|category=中原官話}}<!--
-->|Magong Hokkien|Magong={{#switch:{{{2}}}|label=馬公|category=台湾語}}<!--
-->|middle|middle voice={{#switch:{{{2}}}|label=[[中動態]]|category=}}<!--
-->|mildly={{#switch:{{{2}}}|label=控えめに|category=}}<!--
-->|mostly={{#switch:{{{2}}}|label=概ね|category=}}<!--
-->|Muping Mandarin|Muping={{#switch:{{{2}}}|label=牟平|category=膠遼官話}}<!--
-->|Nanjing Mandarin|Nanjing|Nanjingese|Nanjingnese={{#switch:{{{2}}}|label=[[:w:南京官話|南京]]|category=江淮官話}}<!--
-->|North America={{#switch:{{{2}}}|label=[[北米]]|category=カナダ英語|category2=米語}}<!--
-->|North American={{#switch:{{{2}}}|label=[[北米]]|category=カナダ{{language|{{{lang}}}}}|category2=アメリカ{{language|{{{lang}}}}}}}<!--
-->|not comparable|uncomparable={{#switch:{{{2}}}|label=比較形無し|category=}}<!--
-->|now={{#switch:{{{2}}}|label=現在では|category=}}<!--
-->|often={{#switch:{{{2}}}|label=しばしば|category=}}<!--
-->|or={{#switch:{{{2}}}|label=または|category=}}<!--
-->|ORB|orb|orbl={{#switch:{{{2}}}|label=ORB|category=ORB}}<!--
-->|originally={{#switch:{{{2}}}|label=元々は|category=}}<!--
-->|otherwise={{#switch:{{{2}}}|label=あるいは|category=}}<!--
-->|Oxford British English={{#switch:{{{2}}}|label=[[:w:オクスフォード式綴り|オクスフォード式]]|category=オクスフォード式綴り}}<!--
-->|Penang Hokkien|Penang={{#switch:{{{2}}}|label=ペナン州|category=方言}}<!--
-->|perhaps|possibly={{#switch:{{{2}}}|label=恐らく|category=}}<!--
-->|predicative only={{#switch:{{{2}}}|label=叙述用法のみ|category=}}<!--
-->|Quanzhou Hokkien|Quanzhou={{#switch:{{{2}}}|label=泉州|category=方言}}<!--
-->|reciprocal={{#switch:{{{2}}}|label=お互いに|category=}}<!--
-->|restrictive only={{#switch:{{{2}}}|label=限定用法のみ|category=}}<!--
-->|Sanxia Hokkien|Sanxia={{#switch:{{{2}}}|label=三峽|category=方言}}<!--
-->|science fiction|scifi|SF|sf={{#switch:{{{2}}}|label=SF|category=SF}}<!--
-->|Shenyang Mandarin|Shenyang={{#switch:{{{2}}}|label=瀋陽|category=東北官話}}<!--
-->|slightly|somewhat={{#switch:{{{2}}}|label=やや|category=}}<!--
-->|sometimes={{#switch:{{{2}}}|label=時々|category=}}<!--
-->|southern Lakota={{#switch:{{{2}}}|label=[[:w:サウスダコタ州|サウスダコタ州]]|category=南部方言}}<!--
-->|strong={{#switch:{{{2}}}|label=強い|category=}}<!--
-->|Taichung Hokkien|Taichung={{#switch:{{{2}}}|label=台中|category=台湾語}}<!--
-->|Tainan Hokkien|Tainan={{#switch:{{{2}}}|label=台南|category=台湾語}}<!--
-->|Taipei Hokkien|Taipei={{#switch:{{{2}}}|label=台北|category=台湾語}}<!--
-->|Tianjin Mandarin|Tianjin|Tianjinese|Tianjinese Mandarin={{#switch:{{{2}}}|label=天津|category=冀魯官話}}<!--
-->|Tong'an Hokkien|Tong'an={{#switch:{{{2}}}|label=同安|category=方言}}<!--
-->|uncommon={{#switch:{{{2}}}|label=非標準|category=}}<!--
-->|Upper Silesia={{#switch:{{{2}}}|label=上シレジア|category=}}<!--
-->|used with se={{#switch:{{{2}}}|label=+ '''se''' で|category=}}<!--
-->|usually={{#switch:{{{2}}}|label=通常|category=}}<!--
-->|usually in plural|usually in the plural|usually plural={{#switch:{{{2}}}|label=通常複数形で|category=}}<!--
-->|very={{#switch:{{{2}}}|label=非常に|category=}}<!--
-->|western={{#switch:{{{2}}}|label=西部|category=}}<!--
-->|World Wide Web|world wide web|WWW|www={{#switch:{{{2}}}|label=[[ワールドワイドウェブ|World Wide Web]]|category=World Wide Web}}<!--
-->|Wuhan Mandarin|Hankou|Hankow|Wuhan={{#switch:{{{2}}}|label=武漢|category=西南官話}}<!--
-->|Xiamen Hokkien|Xiamen={{#switch:{{{2}}}|label=[[:w:廈門語|廈門]]|category=方言}}<!--
-->|Xichang Mandarin|Xichang={{#switch:{{{2}}}|label=西昌|category=西南官話}}<!--
-->|Xining Mandarin|Xining={{#switch:{{{2}}}|label=西寧|category=蘭銀官話}}<!--
-->|Xuzhou Mandarin|Xuzhou={{#switch:{{{2}}}|label=徐州|category=中原官話}}<!--
-->|Yangzhou Mandarin|Yangzhou={{#switch:{{{2}}}|label=揚州|category=江淮官話}}<!--
-->|Yilan Hokkien|Yilan={{#switch:{{{2}}}|label=宜蘭|category=台湾語}}<!--
-->|Yinchuan Mandarin|Yinchuan={{#switch:{{{2}}}|label=銀川|category=蘭銀官話}}<!--
-->|Yongchun Hokkien|Yongchun={{#switch:{{{2}}}|label=永春|category=台湾語}}<!--
-->|YouTube|Youtube|youtube={{#switch:{{{2}}}|label=[[:w:YouTube|YouTube]]|category=World Wide Web}}<!--
-->|Yunnan Mandarin={{#switch:{{{2}}}|label=雲南|category=西南官話}}<!--
-->|Zhangping Hokkien|Zhangping={{#switch:{{{2}}}|label=漳平|category=方言}}<!--
-->|Zhangzhou Hokkien|Zhangzhou|Changchew={{#switch:{{{2}}}|label=漳州|category=方言}}<!--
-->|Zhao'an Hokkien|Zhao'an={{#switch:{{{2}}}|label=詔安|category=方言}}<!--
-->|Ürümqi Mandarin|Urumqi|Urumqi Mandarin|Ürümqi={{#switch:{{{2}}}|label=ウルムチ|category=蘭銀官話}}<!--
-->|アーチェリー|archery={{#switch:{{{2}}}|label=アーチェリー|category=アーチェリー}}<!--
-->|アームレスリング|armwrestling={{#switch:{{{2}}}|label=アームレスリング|category=アームレスリング}}<!--
-->|アイオリス方言|アイオリス|Aeolic={{#switch:{{{2}}}|label=アイオリス方言|category=アイオリス方言}}<!--
-->|愛玩犬|toy dog={{#switch:{{{2}}}|label=愛玩犬|category=愛玩犬}}<!--
-->|合気道|aikido={{#switch:{{{2}}}|label=[[合気道]]|category=合気道}}<!--
-->|挨拶|greeting={{#switch:{{{2}}}|label=[[挨拶]]|category=挨拶}}<!--
-->|アイスクリーム|ice cream={{#switch:{{{2}}}|label=[[アイスクリーム]]|category=アイスクリーム}}<!--
-->|アイススケート|ice skating={{#switch:{{{2}}}|label=[[アイススケート]]|category=アイススケート}}<!--
-->|アイスホッケー|ice hockey={{#switch:{{{2}}}|label=[[アイスホッケー]]|category=アイスホッケー}}<!--
-->|アイルランド={{#switch:{{{2}}}|label=[[アイルランド]]|category=アイルランド}}<!--
-->|アイルランド英語|アイルランド変種|Ireland|Irish|IE={{#switch:{{{2}}}|label=アイルランド|category=アイルランド英語}}<!--
-->|アオイ科={{#switch:{{{2}}}|label=[[:w:アオイ科|アオイ科]]|category=アオイ科}}<!--
-->|アオイ目={{#switch:{{{2}}}|label=[[:w:アオイ目|アオイ目]]|category=アオイ目}}<!--
-->|アカクソチトラン|Acaxochitlán={{#switch:{{{2}}}|label=アカクソチトラン|category=アカクソチトラン方言}}<!--
-->|アカザ科={{#switch:{{{2}}}|label=[[:w:アカザ科|アカザ科]]|category=アカザ科}}<!--
-->|アカテツ科={{#switch:{{{2}}}|label=[[:w:アカテツ科|アカテツ科]]|category=アカテツ科}}<!--
-->|アカネ科={{#switch:{{{2}}}|label=[[:w:アカネ科|アカネ科]]|category=アカネ科}}<!--
-->|アカマンボウ目={{#switch:{{{2}}}|label=[[:w:アカマンボウ目|アカマンボウ目]]|category=アカマンボウ目}}<!--
-->|アカリア科={{#switch:{{{2}}}|label=[[:w:アカリア科|アカリア科]]|category=アカリア科}}<!--
-->|アサ科={{#switch:{{{2}}}|label=[[:w:アサ科|アサ科]]|category=アサ科}}<!--
-->|アジア|Asia={{#switch:{{{2}}}|label=[[アジア]]|category=アジア}}<!--
-->|アジア史={{#switch:{{{2}}}|label=[[:w:アジア史|アジア史]]|category=アジア史}}<!--
-->|アジアの国|アジアの国名={{#switch:{{{2}}}|label=アジアの国|category=アジアの国名}}<!--
-->|アステリズム={{#switch:{{{2}}}|label=[[アステリズム]]|category=アステリズム}}<!--
-->|アッティカ方言|アッティカ|Attic|att={{#switch:{{{2}}}|label=[[:w:アッティカ方言|アッティカ方言]]|category=アッティカ方言}}<!--
-->|アトリ科={{#switch:{{{2}}}|label=[[:w:アトリ科|アトリ科]]|category=アトリ科}}<!--
-->|アニメ|animation={{#switch:{{{2}}}|label=[[アニメ]]|category=アニメ}}<!--
-->|アブラナ科={{#switch:{{{2}}}|label=[[:w:アブラナ科|アブラナ科]]|category=アブラナ科}}<!--
-->|アブラナ目={{#switch:{{{2}}}|label=[[:w:アブラナ目|アブラナ目]]|category=アブラナ目}}<!--
-->|アフリカ|Africa={{#switch:{{{2}}}|label=[[アフリカ]]|category=アフリカ}}<!--
-->|アフリカ史={{#switch:{{{2}}}|label=[[:w:アフリカ史|アフリカ史]]|category=アフリカ史}}<!--
-->|アフリカの国|アフリカの国名={{#switch:{{{2}}}|label=アフリカの国|category=アフリカの国名}}<!--
-->|アフリカ変種={{#switch:{{{2}}}|label=アフリカ|category=アフリカ{{language|{{{lang}}}}}}}<!--
-->|アミノ酸|amino acid={{#switch:{{{2}}}|label=[[アミノ酸]]|category=アミノ酸}}<!--
-->|雨|rain={{#switch:{{{2}}}|label=[[あめ|雨]]|category=雨}}<!--
-->|アメカメカ|Amecameca={{#switch:{{{2}}}|label=アメカメカ|category=アメカメカ方言}}<!--
-->|アメリカ合衆国|United States|united states|United States of America|united states of America|USA|usania|US of A|U.S. of A.|usonia={{#switch:{{{2}}}|label=[[アメリカ合衆国]]|category=アメリカ合衆国}}<!--
-->|アメリカ合衆国の州={{#switch:{{{2}}}|label=アメリカ合衆国の州|category=アメリカ合衆国の州}}<!--
-->|アメリカ史={{#switch:{{{2}}}|label=[[:w:アメリカ史|アメリカ史]]|category=アメリカ史}}<!--
-->|アメリカ西部|米西部|Western US={{#switch:{{{2}}}|label=アメリカ西部|category=アメリカ西部方言}}<!--
-->|アメリカ南部|米南部|southern US|Southern US={{#switch:{{{2}}}|label=アメリカ南部|category=アメリカ南部}}<!--
-->|アメリカンフットボール|アメフト|American football={{#switch:{{{2}}}|label=[[アメリカンフットボール]]|category=アメリカンフットボール}}<!--
-->|アヤメ科={{#switch:{{{2}}}|label=[[:w:アヤメ科|アヤメ科]]|category=アヤメ科}}<!--
-->|アライグマ科|procyonid={{#switch:{{{2}}}|label=[[:w:アライグマ科|アライグマ科]]|category=アライグマ科}}<!--
-->|アラビア語|Arabic={{#switch:{{{2}}}|label=アラビア語関連|category=アラビア語に関連する語}}<!--
-->|アラビア神話|Arabian mythology={{#swtich:{{{2}}}|label=[[w:アラビア神話|アラビア神話]]|category=アラビア神話}}<!--
-->|蟻|ant={{#switch:{{{2}}}|label=[[あり|蟻]]|category=蟻}}<!--
-->|アルジェリア変種|Algeria={{#switch:{{{2}}}|label=アルジェリア|category=アルジェリア{{language|{{{lang}}}}}}}<!--
-->|アルスター|Ulster={{#switch:{{{2}}}|label=アルスター|category=アルスター方言}}<!--
-->|アルゼンチンスペイン語|アルゼンチン変種|Argentina={{#switch:{{{2}}}|label=アルゼンチン|category=アルゼンチンスペイン語}}<!--
-->|アルティメット|ultimate={{#switch:{{{2}}}|label=[[アルティメット]]|category=アルティメット}}<!--
-->|アングリア|Anglian={{#switch:{{{2}}}|label=アングリア|category=アングリア方言}}<!--
-->|アングロ・ノルマン|Anglo-Norman={{#switch:{{{2}}}|label=アングロ・ノルマン|category=アングロ・ノルマン語}}<!--
-->|安渓|Anxi Hokkien|Anxi={{#switch:{{{2}}}|label=安渓|category=方言}}<!--
-->|鮟鱇={{#switch:{{{2}}}|label=[[鮟鱇]]|category=鮟鱇}}<!--
-->|アンダルシア|Andalucía={{#switch:{{{2}}}|label=[[:w:アンダルシア方言|アンダルシア]]|category=アンダルシア方言}}<!--
-->|居合道|iaido={{#switch:{{{2}}}|label=[[居合道]]|category=居合道}}<!--
-->|イェ方言|Ijekavian={{#switch:{{{2}}}|label=イェ方言|category=イェ方言}}<!--
-->|イオニア方言|イオニア|Ionic|ion={{#switch:{{{2}}}|label=イオニア方言|category=イオニア方言}}<!--
-->|医学|medicine|Medical|medical={{#switch:{{{2}}}|label=[[医学]]|category=医学}}<!--
-->|怒り|anger={{#switch:{{{2}}}|label=怒り|category=怒り}}<!--
-->|イギリス|United Kingdom={{#switch:{{{2}}}|label=[[イギリス]]|category=イギリス}}<!--
-->|イギリス系パキスタン英語|イギリス系パキスタン|British Pakistani={{#switch:{{{2}}}|label=イギリス系パキスタン英語|category=イギリス系パキスタン{{language|{{{lang}}}}}}}<!--
-->|囲碁|go={{#switch:{{{2}}}|label=[[囲碁]]|category=囲碁}}<!--
-->|椅子|chair={{#switch:{{{2}}}|label=[[椅子]]|category=椅子}}<!--
-->|イスカテペク|Ixcatepec={{#switch:{{{2}}}|label=イスカテペク|category=イスカテペク方言}}<!--
-->|イスラエル変種|Israel={{#switch:{{{2}}}|label=イスラエル|category=イスラエル{{language|{{{lang}}}}}}}<!--
-->|イスラム教|Islam|islam={{#switch:{{{2}}}|label=[[イスラム教]]|category=イスラム教}}<!--
-->|位相空間論={{#switch:{{{2}}}|label=[[:w:位相空間論|位相空間論]]|category=位相空間論}}<!--
-->|イタチ科|mustelid={{#switch:{{{2}}}|label=[[:w:イタチ科|イタチ科]]|category=イタチ科}}<!--
-->|イタリア={{#switch:{{{2}}}|label=[[イタリア]]|category=イタリア}}<!--
-->|イタリア語={{#switch:{{{2}}}|label=イタリア語関連|category=イタリア語に関連する語}}<!--
-->|イタリア変種|Italian|Italy={{#switch:{{{2}}}|label=イタリア|category=イタリア{{language|{{{lang}}}}}}}<!--
-->|イデオロギー|ideology={{#switch:{{{2}}}|label=[[イデオロギー]]|category=イデオロギー}}<!--
-->|遺伝学|genetics|genetics+={{#switch:{{{2}}}|label=[[遺伝学]]|category=遺伝学}}<!--
-->|犬|dog={{#switch:{{{2}}}|label=[[いぬ|犬]]|category=犬}}<!--
-->|イヌ科|canid={{#switch:{{{2}}}|label=[[:w:イヌ科|イヌ科]]|category=イヌ科}}<!--
-->|イネ科={{#switch:{{{2}}}|label=[[:w:イネ科|イネ科]]|category=イネ科}}<!--
-->|イネ目={{#switch:{{{2}}}|label=[[:w:イネ目|イネ目]]|category=イネ目}}<!--
-->|イノシシ科={{#switch:{{{2}}}|label=[[:w:イノシシ科|イノシシ科]]|category=イノシシ科}}<!--
-->|イ方言|Ikavian={{#switch:{{{2}}}|label=イ方言|category=イ方言}}<!--
-->|イラン神話|Iranian mythology={{#switch:{{{2}}}|label=[[w:イラン神話|イラン神話]]|category:イラン神話}}<!--
-->|イラン方言|Iran={{#switch:{{{2}}}|label=イラン|category=イラン方言}}<!--
-->|医療|healthcare={{#switch:{{{2}}}|label=[[医療]]|category=医療}}<!--
-->|医療関連の職業|healthcare occupation={{#switch:{{{2}}}|label=医療関連の職業|category=医療関連の職業}}<!--
-->|医療機器|medical equipment={{#switch:{{{2}}}|label=医療機器|category=医療機器}}<!--
-->|衣類|clothing={{#switch:{{{2}}}|label=[[衣類]]|category=衣類}}<!--
-->|色|color={{#switch:{{{2}}}|label=[[いろ|色]]|category=色}}<!--
-->|イロン|Iron={{#switch:{{{2}}}|label=イロン方言|category=イロン方言}}<!--
-->|イングランド北部|英北部|North England|Northern England={{#switch:{{{2}}}|label=イングランド北部|category=イングランド北部方言}}<!--
-->|イングランド南部|英南部|South England|Southern England|Southern English={{#switch:{{{2}}}|label=イングランド南部|category=イングランド南部方言}}<!--
-->|隠語={{#switch:{{{2}}}|label=[[隠語]]|category=俗語}}<!--
-->|印刷|printing={{#switch:{{{2}}}|label=[[印刷]]|category=印刷}}<!--
-->|飲食|食事={{#switch:{{{2}}}|label=[[飲食]]|category=飲食}}<!--
-->|飲食店|restaurant={{#switch:{{{2}}}|label=[[飲食店]]|category=飲食店}}<!--
-->|インターネット|internet|Internet={{#switch:{{{2}}}|label=[[インターネット]]|category=インターネット}}<!--
-->|インターネットスラング|internet slang|Internet slang={{#switch:{{{2}}}|label=[[:w:インターネットスラング|インターネットスラング]]|category=インターネットスラング}}<!--
-->|インド|India={{#switch:{{{2}}}|label=[[インド]]|category=インド}}<!--
-->|インド英語|India={{#switch:{{{2}}}|label=[[:w:インド英語|印]]|category=インド英語}}<!--
-->|インド史={{#switch:{{{2}}}|label=[[:w:インド史|インド史]]|category=インド史}}<!--
-->|インド神話|インド神話|Hindu god|Hindu mythology={{#switch:{{{2}}}|label=[[:w:インド神話|インド神話]]|category=インド神話}}<!--
-->|インドタミル語|インドタミル語|Indian Tamil|Indian Tamil={{#switch:{{{2}}}|label=インド|category=インドタミル語}}<!--
-->|インド変種|Indian={{#switch:{{{2}}}|label=インド|category=インド{{language|{{{lang}}}}}}}<!--
-->|韻律|prosody={{#switch:{{{2}}}|label=[[韻律]]|category=韻律}}<!--
-->|飲料|beverage={{#switch:{{{2}}}|label=[[飲料]]|category=飲料}}<!--
-->|ヴァラダール|Vallader={{#switch:{{{2}}}|label=ヴァラダール|category=ヴァラダール}}<!--
-->|ウィーゼマン式綴り|ウィーゼマン式|ウィーゼマン|Wiesemann={{#switch:{{{2}}}|label=ウィーゼマン式綴り|category=ウィーゼマン式綴り}}<!--
-->|ヴィーディングハルデ|Wiedingharde={{#switch:{{{2}}}|label=ヴィーディングハルデ|category=ヴィーディングハルデ方言}}<!--
-->|ウィキ|wiki={{#switch:{{{2}}}|label=[[ウィキ]]|category=ウィキ}}<!--
-->|ウイルス|virus={{#switch:{{{2}}}|label=[[ウイルス]]|category=ウイルス}}<!--
-->|ウイルス学|virology={{#switch:{{{2}}}|label=[[ウイルス学]]|category=ウイルス学}}<!--
-->|ウイルス性疾患|viral disease|vital disease|vital diseases={{#switch:{{{2}}}|label=ウイルス性疾患|category=ウイルス性疾患}}<!--
-->|ウィンタースポーツ={{#switch:{{{2}}}|label=[[ウィンタースポーツ]]|category=ウィンタースポーツ}}<!--
-->|ウィンドサーフィン|windsurfing={{#switch:{{{2}}}|label=[[ウィンドサーフィン]]|category=ウィンドサーフィン}}<!--
-->|ウーリ語|ウーリ|Uri|Urseren={{#switch:{{{2}}}|label=ウーリ語|category=ウーリ語}}<!--
-->|ウェイクボード|wakeboarding={{#switch:{{{2}}}|label=[[ウェイクボード]]|category=ウェイクボード}}<!--
-->|ウェールズ北部|North Wales={{#switch:{{{2}}}|label=ウェールズ北部|category=ウェールズ北部方言}}<!--
-->|ウェールズ南部|South Wales={{#switch:{{{2}}}|label=ウェールズ南部|category=ウェールズ南部方言}}<!--
-->|ウェセックス|West Saxon={{#switch:{{{2}}}|label=ウェセックス方言|category=ウェセックス方言}}<!--
-->|ウォータースポーツ={{#switch:{{{2}}}|label=[[ウォータースポーツ]]|category=ウォータースポーツ}}<!--
-->|ウクライナ|Ukraine={{#switch:{{{2}}}|label=[[ウクライナ]]|category=ウクライナ}}<!--
-->|ウクライナ語|Ukranian={{#swithc:{{{2}}}|label=ウクライナ語関連|category=ウクライナ語に関連する語}}<!--
-->|ウクライナ変種={{#switch:{{{2}}}|label=ウクライナ|category=ウクライナ{{language|{{{lang}}}}}}}<!--
-->|ウクライナ史={{#switch:{{{2}}}|label=ウクライナ史|category=ウクライナ史}}<!--
-->|ウコギ科={{#switch:{{{2}}}|label=[[:w:ウコギ科|ウコギ科]]|category=ウコギ科}}<!--
-->|牛={{#switch:{{{2}}}|label=[[うし|牛]]|category=牛}}<!--
-->|ウシ科={{#switch:{{{2}}}|label=[[:w:ウシ科|ウシ科]]|category=ウシ科}}<!--
-->|宇宙船|spacecraft={{#switch:{{{2}}}|label=宇宙船|category=宇宙船}}<!--
-->|鰻|eel={{#switch:{{{2}}}|label=[[うなぎ|鰻]]|category=鰻}}<!--
-->|馬|horse={{#switch:{{{2}}}|label=[[うま|馬]]|category=馬}}<!--
-->|ウマ科={{#switch:{{{2}}}|label=[[:w:ウマ科|ウマ科]]|category=ウマ科}}<!--
-->|海鳥={{#switch:{{{2}}}|label=[[海鳥]]|category=海鳥}}<!--
-->|ウリ科={{#switch:{{{2}}}|label=[[:w:ウリ科|ウリ科]]|category=ウリ科}}<!--
-->|ウルグアイスペイン語|ウルグアイ変種|Uruguay={{#switch:{{{2}}}|label=ウルグアイ|category=ウルグアイスペイン語}}<!--
-->|ウルシ科={{#switch:{{{2}}}|label=[[:w:ウルシ科|ウルシ科]]|category=ウルシ科}}<!--
-->|運動|exercise={{#switch:{{{2}}}|label=[[運動]]|category=運動}}<!--
-->|運動選手|athlete={{#switch:{{{2}}}|label=運動選手|category=運動選手}}<!--
-->|映画|film={{#switch:{{{2}}}|label=[[映画]]|category=映画}}<!--
-->|英語|English={{#switch:{{{2}}}|label=英語関連|category=英語に関連する語}}<!--
-->|英国英語|British|British spelling|Britain|Commonwealth spelling|UK={{#switch:{{{2}}}|label=[[:w:イギリス英語|イギリス]]|category=英国英語}}<!--
-->|衛生|衛生学|hygiene|medical hygiene={{#switch:{{{2}}}|label=[[衛生]]|category=衛生}}<!--
-->|栄養|栄養学|nutrition={{#switch:{{{2}}}|label=[[栄養]]|category=栄養}}<!--
-->|英連邦|Commonwealth={{#switch:{{{2}}}|label=英連邦|category=英連邦英語}}<!--
-->|疫学|epidemiology={{#switch:{{{2}}}|label=[[疫学]]|category=疫学}}<!--
-->|エクアドルスペイン語|エクアドル変種|Ecuador={{#switch:{{{2}}}|label=エクアドル|category=エクアドルスペイン語}}<!--
-->|エジプト神話|エジプト神話|Egyptian god|Egyptian mythology={{#switch:{{{2}}}|label=[[:w:エジプト神話|エジプト神話]]|category=エジプト神話}}<!--
-->|エストニア南方言|South Estonian={{#switch:{{{2}}}|label=エストニア南方言|category=エストニア南方言}}<!--
-->|エネルギー|energy={{#switch:{{{2}}}|label=[[エネルギー]]|category=エネルギー}}<!--
-->|エピック方言|エピック|Epic|epi={{#switch:{{{2}}}|label=エピック方言|category=エピック方言}}<!--
-->|エ方言|Ekavian={{#switch:{{{2}}}|label=エ方言|category=エ方言}}<!--
-->|エマージェンシー・サービス={{#switch:{{{2}}}|label=エマージェンシー・サービス|category=エマージェンシー・サービス}}<!--
-->|エメギル|Emegir={{#switch:{{{2}}}|label=エメギル|category=エメギル}}<!--
-->|エメサル|Emesal={{#switch:{{{2}}}|label=エメサル|category=エメサル}}<!--
-->|エルサルバドルスペイン語|エルサルバドル変種|El Salvador={{#switch:{{{2}}}|label=エルサルバドル|category=エルサルバドルスペイン語}}<!--
-->|婉曲表現|婉曲|euphemism|euphemistic={{#switch:{{{2}}}|label=婉曲表現|category=婉曲表現}}<!--
-->|園芸|horticulture={{#switch:{{{2}}}|label=[[園芸]]|category=園芸}}<!--
-->|演劇|theater={{#switch:{{{2}}}|label=[[演劇]]|category=演劇}}<!--
-->|延辺方言|延辺|Yanbian={{#switch:{{{2}}}|label=延辺方言|category=延辺方言}}<!--
-->|オイペン|Eupen={{#switch:{{{2}}}|label=オイペン|category=オイペン方言}}<!--
-->|応用科学={{#switch:{{{2}}}|label=応用科学|category=応用科学}}<!--
-->|オーヴェルニュ|Auvergnat={{#switch:{{{2}}}|label=[[:w:オーヴェルニュ語|オーヴェルニュ]]|category=オーヴェルニュ語}}<!--
-->|狼|wolf={{#switch:{{{2}}}|label=[[おおかみ|狼]]|category=狼}}<!--
-->|オークニー|Orkney={{#switch:{{{2}}}|label=オークニー|category=オークニー方言}}<!--
-->|オーストラリア|Australia={{#switch:{{{2}}}|label=オーストラリア|category=オーストラリア}}<!--
-->|オーストラリア変種|AU|Australian={{#switch:{{{2}}}|label=オーストラリア|category=オーストラリア{{language|{{{lang}}}}}}}<!--
-->|オーストリア変種|Austria|Austrian={{#switch:{{{2}}}|label=オーストリア|category=オーストリア{{language|{{{lang}}}}}}}<!--
-->|オーストラリアンフットボール|Australian rules football={{#switch:{{{2}}}|label=[[:w:オーストラリアンフットボール|オーストラリアンフットボール]]|category=オーストラリアンフットボール}}<!--
-->|オートバイ|motorcycle={{#switch:{{{2}}}|label=[[オートバイ]]|category=オートバイ}}<!--
-->|オートバイ競技|motorcycle racing={{#switch:{{{2}}}|label=オートバイ競技|category=オートバイ競技}}<!--
-->|オカルト|occult={{#switch:{{{2}}}|label=[[オカルト]]|category=オカルト}}<!--
-->|オセロ={{#switch:{{{2}}}|label=[[オセロ]]|category=オセロ}}<!--
-->|オセアニア史={{#switch:{{{2}}}|label=オセアニア史|category=オセアニア史}}<!--
-->|オセアニアの国|オセアニアの国名={{#switch:{{{2}}}|label=オセアニアの国|category=オセアニアの国名}}<!--
-->|オタワ峡谷|Ottawa Valley={{#switch:{{{2}}}|label=オタワ峡谷|category=オタワ峡谷{{language|{{{lang}}}}}}}<!--
-->|オトギリソウ科={{#switch:{{{2}}}|label=[[:w:オトギリソウ科|オトギリソウ科]]|category=オトギリソウ科}}<!--
-->|斧道|onodo={{#switch:{{{2}}}|label=[[斧道]]|category=斧道}}<!--
-->|オノマトペ|onomatopée|onomatopoeia={{#switch:{{{2}}}|label=[[オノマトペ]]|category=オノマトペ}}<!--
-->|オランダ={{#switch:{{{2}}}|label=[[オランダ]]|category=オランダ}}<!--
-->|オランダ語|Dutch={{#switch:{{{2}}}|label=オランダ語関連|category=オランダ語に関連する語}}<!--
-->|オランダ変種|Netherland|Netherlands={{#switch:{{{2}}}|label=オランダ|category=オランダ{{language|{{{lang}}}}}}}<!--
-->|オルムルム|Ormulum={{#switch:{{{2}}}|label=[[:w:オルムルム|オルムルム]]|category=オルムルムの綴り}}<!--
-->|音韻論|phonology={{#switch:{{{2}}}|label=[[音韻論]]|category=音韻論}}<!--
-->|音楽|music={{#switch:{{{2}}}|label=[[音楽]]|category=音楽}}<!--
-->|音楽家|musician={{#switch:{{{2}}}|label=音楽家|category=音楽家}}<!--
-->|音声学|phonetics={{#switch:{{{2}}}|label=[[音声学]]|category=音声学}}<!--
-->|オンタリオ|Ontario={{#switch:{{{2}}}|label=オンタリオ|category=オンタリオ方言}}<!--
-->|陰陽道={{#switch:{{{2}}}|label=陰陽道|category=陰陽道}}<!--
-->|蛾|ガ={{#switch:{{{2}}}|label=ガ|category=ガ}}<!--
-->|カードゲーム|card game|card games|cards={{#switch:{{{2}}}|label=カードゲーム|category=カードゲーム}}<!--
-->|カーリング|curling={{#switch:{{{2}}}|label=カーリング|category=カーリング}}<!--
-->|ガーンジー|Guernsey={{#switch:{{{2}}}|label=ガーンジー|category=ガーンジー島語}}<!--
-->|海牛類={{#switch:{{{2}}}|label=海牛類|category=海牛類}}<!--
-->|会計|accounting={{#switch:{{{2}}}|label=会計|category=会計}}<!--
-->|外交={{#switch:{{{2}}}|label=外交|category=外交}}<!--
-->|外肛動物={{#switch:{{{2}}}|label=外肛動物|category=外肛動物}}<!--
-->|海事|nautical={{#switch:{{{2}}}|label=海事|category=海事}}<!--
-->|解析学|mathematical analysis={{#switch:{{{2}}}|label=解析学|category=解析学}}<!--
-->|解析力学|analytical mechanics={{#switch:{{{2}}}|label=解析力学|category=解析力学}}<!--
-->|カイピラ|Caipira={{#switch:{{{2}}}|label=カイピラ方言|category=方言}}<!--
-->|解剖学|anatomy={{#switch:{{{2}}}|label=解剖学|category=解剖学}}<!--
-->|カイ方言|Kajkavian={{#switch:{{{2}}}|label=カイ方言|category=カイ方言}}<!--
-->|海綿動物={{#switch:{{{2}}}|label=海綿動物|category=海綿動物}}<!--
-->|海洋学|oceanography={{#switch:{{{2}}}|label=海洋学|category=海洋学}}<!--
-->|海洋名|ocean|sea={{#switch:{{{2}}}|label=海洋名|category=海洋名}}<!--
-->|貝類学={{#switch:{{{2}}}|label=貝類学|category=貝類学}}<!--
-->|蛙|frog={{#switch:{{{2}}}|label=蛙|category=蛙}}<!--
-->|科学|science|sciences={{#switch:{{{2}}}|label=科学|category=科学}}<!--
-->|化学|chemistry={{#switch:{{{2}}}|label=化学|category=化学}}<!--
-->|雅楽={{#switch:{{{2}}}|label=雅楽|category=雅楽}}<!--
-->|科学技術={{#switch:{{{2}}}|label=科学技術|category=科学技術}}<!--
-->|科学者|scientist={{#switch:{{{2}}}|label=科学者|category=科学者}}<!--
-->|化学物質={{#switch:{{{2}}}|label=化学物質|category=化学物質}}<!--
-->|化学プロセス|chemical process|chemical processes={{#switch:{{{2}}}|label=化学プロセス|category=化学プロセス}}<!--
-->|火器|firearm|firearms={{#switch:{{{2}}}|label=火器|category=火器}}<!--
-->|カキノキ科={{#switch:{{{2}}}|label=カキノキ科|category=カキノキ科}}<!--
-->|蝸牛|snail={{#switch:{{{2}}}|label=蝸牛|category=蝸牛}}<!--
-->|格|case={{#switch:{{{2}}}|label=格|category=格}}<!--
-->|家具|furniture={{#switch:{{{2}}}|label=家具|category=家具}}<!--
-->|学位|academic degree|academic degrees={{#switch:{{{2}}}|label=学位|category=学位}}<!--
-->|格式ばった表現|格式|公式|formal={{#switch:{{{2}}}|label=格式ばった表現|category=格式ばった表現}}<!--
-->|格助詞={{#switch:{{{2}}}|label=格助詞|category=助詞 格助詞}}<!--
-->|革翅類={{#switch:{{{2}}}|label=革翅類|category=革翅類}}<!--
-->|格闘技={{#switch:{{{2}}}|label=格闘技|category=格闘技}}<!--
-->|核兵器|nuclear weapon|Nuclear weapon={{#switch:{{{2}}}|label=核兵器|category=核兵器}}<!--
-->|学名={{#switch:{{{2}}}|label=学名|category=学名}}<!--
-->|確率論={{#switch:{{{2}}}|label=確率論|category=確率論}}<!--
-->|蜉蝣={{#switch:{{{2}}}|label=蜉蝣|category=蜉蝣}}<!--
-->|カサレヴサ|katharevousa|Katharevousa={{#switch:{{{2}}}|label=カサレヴサ|category=カサレヴサ}}<!--
-->|火山学|volcanology|vulcanology={{#switch:{{{2}}}|label=火山学|category=火山学}}<!--
-->|可算名詞|可算|countable|countable+={{#switch:{{{2}}}|label=可算|category=可算名詞}}<!--
-->|菓子|sweets|dessert={{#switch:{{{2}}}|label=菓子|category=菓子}}<!--
-->|果実|fruit|fruits={{#switch:{{{2}}}|label=果実|category=果実}}<!--
-->|ガスコーニュ語|ガスコーニュ|Gascon|Gascony={{#switch:{{{2}}}|label=ガスコーニュ|category=ガスコーニュ語}}<!--
-->|風|wind={{#switch:{{{2}}}|label=風|category=風}}<!--
-->|河川名|河川|river={{#switch:{{{2}}}|label=河川名|category=河川名}}<!--
-->|家族|family={{#switch:{{{2}}}|label=家族|category=家族}}<!--
-->|カダヤシ目={{#switch:{{{2}}}|label=カダヤシ目|category=カダヤシ目}}<!--
-->|カタバミ科={{#switch:{{{2}}}|label=カタバミ科|category=カタバミ科}}<!--
-->|カタバミ目={{#switch:{{{2}}}|label=カタバミ目|category=カタバミ目}}<!--
-->|楽器|musical instrument={{#switch:{{{2}}}|label=楽器|category=楽器}}<!--
-->|学校|school={{#switch:{{{2}}}|label=学校|category=学校}}<!--
-->|活動体|animate={{#switch:{{{2}}}|label=活動体|category=活動体}}<!--
-->|活版印刷|typography={{#switch:{{{2}}}|label=活版印刷|category=活版印刷}}<!--
-->|ガッルーラ|Gallurese={{#switch:{{{2}}}|label=ガッルーラ|category=ガッルーラ・サルデーニャ語}}<!--
-->|カトリック|Catholicism|Catholic|katholiek|Roman Catholic={{#switch:{{{2}}}|label=カトリック|category=カトリック}}<!--
-->|カナダ|🇨🇦={{#switch:{{{2}}}|label=カナダ|category=カナダ}}<!--
-->|カナダ大西洋州|大西洋カナダ|Atlantic Canada={{#switch:{{{2}}}|label=カナダ大西洋州|category=大西洋カナダ{{language|{{{lang}}}}}}}<!--
-->|カナダ変種|Canada|Canadian|CA|CAN={{#switch:{{{2}}}|label=カナダ|category=カナダ{{language|{{{lang}}}}}}}<!--
-->|カナディアンフットボール|Canadian football={{#switch:{{{2}}}|label=カナディアンフットボール|category=カナディアンフットボール}}<!--
-->|カナリー諸島|Canarias={{#switch:{{{2}}}|label=カナリー諸島|category=カナリー諸島方言}}<!--
-->|蟹|crab={{#switch:{{{2}}}|label=蟹|category=蟹}}<!--
-->|カヌースポーツ|canoeing={{#switch:{{{2}}}|label=カヌースポーツ|category=カヌースポーツ}}<!--
-->|カバディ|kabaddi={{#switch:{{{2}}}|label=カバディ|category=カバディ}}<!--
-->|カバノキ科|kabaddi={{#switch:{{{2}}}|label=カバノキ科|category=カバノキ科}}<!--
-->|歌舞伎|kabuki={{#switch:{{{2}}}|label=歌舞伎|category=歌舞伎}}<!--
-->|被り物|帽子|headwear={{#switch:{{{2}}}|label=被り物|category=被り物}}<!--
-->|花粉学|palynology={{#switch:{{{2}}}|label=花粉学|category=花粉学}}<!--
-->|カポエイラ|capoeira={{#switch:{{{2}}}|label=カポエイラ|category=カポエイラ}}<!--
-->|紙|paper={{#switch:{{{2}}}|label=紙|category=紙}}<!--
-->|神|deity={{#switch:{{{2}}}|label=神|category=神}}<!--
-->|髪|hair={{#switch:{{{2}}}|label=髪|category=髪}}<!--
-->|亀|turtle={{#switch:{{{2}}}|label=亀|category=亀}}<!--
-->|カラス目={{#switch:{{{2}}}|label=カラス目|category=カラス目}}<!--
-->|空手道|空手|karate={{#switch:{{{2}}}|label=空手道|category=空手道}}<!--
-->|カランガ方言|カランガ|Karanga={{#switch:{{{2}}}|label=カランガ|category=カランガ方言}}<!--
-->|カルコーフォロ語|カルコーフォロ|Carcoforo={{#switch:{{{2}}}|label=カルコーフォロ語|category=カルコーフォロ語}}<!--
-->|カルボン酸|Carboxylic acid={{#switch:{{{2}}}|label=カルボン酸|category=カルボン酸}}<!--
-->|かわうそ={{#switch:{{{2}}}|label=かわうそ|category=かわうそ}}<!--
-->|眼科学|ophthalmology={{#switch:{{{2}}}|label=眼科学|category=眼科学}}<!--
-->|カンガルー|macropod|macropods={{#switch:{{{2}}}|label=カンガルー|category=カンガルー}}<!--
-->|環境|environment={{#switch:{{{2}}}|label=環境|category=環境}}<!--
-->|咸鏡|함경|Hamgyeong={{#switch:{{{2}}}|label=咸鏡|category=六鎮方言}}<!--
-->|玩具|おもちゃ|toy|toys={{#switch:{{{2}}}|label=玩具|category=玩具}}<!--
-->|環形動物={{#switch:{{{2}}}|label=環形動物|category=環形動物}}<!--
-->|看護学|nursing={{#switch:{{{2}}}|label=看護学|category=看護学}}<!--
-->|韓国={{#switch:{{{2}}}|label=韓国|category=韓国}}<!--
-->|韓国語|South Korea={{#switch:{{{2}}}|label=韓国語|category=韓国語}}<!--
-->|韓国の都市|city in South Korea={{#switch:{{{2}}}|label=韓国の都市|category=韓国の都市}}<!--
-->|関係詞|relative={{#switch:{{{2}}}|label=関係詞|category=関係詞}}<!--
-->|関数|function={{#switch:{{{2}}}|label=関数|category=関数}}|<!--
-->|関数解析学|関数解析|函数解析学|函数解析|位相解析学|位相解析|functional analysis={{#switch:{{{2}}}|label=関数解析学|category=関数解析学}}|<!--
-->|感情|emotion={{#switch:{{{2}}}|label=感情|category=感情}}<!--
-->|感情動詞={{#switch:{{{2}}}|label=感情動詞|category=感情動詞}}<!--
-->|岩石|rock={{#switch:{{{2}}}|label=岩石|category=岩石}}<!--
-->|岩石学|petrology={{#switch:{{{2}}}|label=岩石学|category=岩石学}}<!--
-->|間投詞句={{#switch:{{{2}}}|label=間投詞句|category=成句 間投詞句}}<!--
-->|咸南|咸鏡南道|함남|South Hamgyeong={{#switch:{{{2}}}|label=咸南|category=六鎮方言}}<!--
-->|カンピダーノ|Campidanese={{#switch:{{{2}}}|label=カンピダーノ|category=カンピダーノ・サルデーニャ語}}<!--
-->|漢文={{#switch:{{{2}}}|label=漢文|category=漢文}}<!--
-->|咸北|咸鏡北道|함북|North Hamgyeong={{#switch:{{{2}}}|label=咸北|category=六鎮方言}}<!--
-->|カンボジア変種|Cambodia={{#switch:{{{2}}}|label=カンボジア|category=カンボジア{{language|{{{lang}}}}}}}<!--
-->|換喩|metonymy|metonymic|metonymically={{#switch:{{{2}}}|label=[[換喩]]|category=換喩}}<!--
-->|慣用句={{#switch:{{{2}}}|label=慣用句|category=慣用句}}<!--
-->|慣用的表現|idiomatic={{#switch:{{{2}}}|label=慣用的表現|category=慣用的表現}}<!--
-->|カンラン科={{#switch:{{{2}}}|label=カンラン科|category=カンラン科}}<!--
-->|木|tree={{#switch:{{{2}}}|label=木|category=木}}<!--
-->|機械|machine={{#switch:{{{2}}}|label=機械|category=機械}}<!--
-->|機械工学|mechanical engineering={{#switch:{{{2}}}|label=機械工学|category=機械工学}}<!--
-->|幾何学|geometry={{#switch:{{{2}}}|label=幾何学|category=幾何学}}<!--
-->|器官|organ={{#switch:{{{2}}}|label=器官|category=器官}}<!--
-->|器官系|organ system={{#switch:{{{2}}}|label=器官系|category=器官系}}<!--
-->|鰭脚類={{#switch:{{{2}}}|label=鰭脚類|category=鰭脚類}}<!--
-->|キク科={{#switch:{{{2}}}|label=キク科|category=キク科}}<!--
-->|キク目={{#switch:{{{2}}}|label=キク目|category=キク目}}<!--
-->|季語|kigo={{#switch:{{{2}}}|label=季語|category=季語}}<!--
-->|季語 春|春={{#switch:{{{2}}}|label=春の季語|category=季語 春}}<!--
-->|季語 夏|夏={{#switch:{{{2}}}|label=夏の季語|category=季語 夏}}<!--
-->|季語 秋|秋={{#switch:{{{2}}}|label=秋の季語|category=季語 秋}}<!--
-->|季語 冬|冬={{#switch:{{{2}}}|label=冬の季語|category=季語 冬}}<!--
-->|季語 三春|三春={{#switch:{{{2}}}|label=三春の季語|category=季語 三春}}<!--
-->|季語 三夏|三夏={{#switch:{{{2}}}|label=三夏の季語|category=季語 三夏}}<!--
-->|季語 三秋|三秋={{#switch:{{{2}}}|label=三秋の季語|category=季語 三秋}}<!--
-->|季語 三冬|三冬={{#switch:{{{2}}}|label=三冬の季語|category=季語 三冬}}<!--
-->|季語 初春|初春={{#switch:{{{2}}}|label=初春の季語|category=季語 初春}}<!--
-->|季語 初夏|初夏={{#switch:{{{2}}}|label=初夏の季語|category=季語 初夏}}<!--
-->|季語 初秋|初秋={{#switch:{{{2}}}|label=初秋の季語|category=季語 初秋}}<!--
-->|季語 初冬|初冬={{#switch:{{{2}}}|label=初冬の季語|category=季語 初冬}}<!--
-->|季語 仲春|仲春={{#switch:{{{2}}}|label=仲春の季語|category=季語 仲春}}<!--
-->|季語 仲夏|仲夏={{#switch:{{{2}}}|label=仲夏の季語|category=季語 仲夏}}<!--
-->|季語 仲秋|仲秋={{#switch:{{{2}}}|label=仲秋の季語|category=季語 仲秋}}<!--
-->|季語 仲冬|仲冬={{#switch:{{{2}}}|label=仲冬の季語|category=季語 仲冬}}<!--
-->|季語 晩春|晩春={{#switch:{{{2}}}|label=晩春の季語|category=季語 晩春}}<!--
-->|季語 晩夏|晩夏={{#switch:{{{2}}}|label=晩夏の季語|category=季語 晩夏}}<!--
-->|季語 晩秋|晩秋={{#switch:{{{2}}}|label=晩秋の季語|category=季語 晩秋}}<!--
-->|季語 晩冬|晩冬={{#switch:{{{2}}}|label=晩冬の季語|category=季語 晩冬}}<!--
-->|季語 新年|新年|新春={{#switch:{{{2}}}|label=新年の季語|category=季語 新年}}<!--
-->|気候|気候学|climatology={{#switch:{{{2}}}|label=気候|category=気候}}<!--
-->|疑似科学|pseudoscience={{#switch:{{{2}}}|label=疑似科学|category=疑似科学}}<!--
-->|キジカクシ科={{#switch:{{{2}}}|label=キジカクシ科|category=キジカクシ科}}<!--
-->|キジカクシ目={{#switch:{{{2}}}|label=キジカクシ目|category=キジカクシ目}}<!--
-->|技術|technology={{#switch:{{{2}}}|label=技術|category=技術}}<!--
-->|気象|気象学|meteorology|weather={{#switch:{{{2}}}|label=気象|category=気象}}<!--
-->|基数|cardinal|cardinal number|cardinal numbers={{#switch:{{{2}}}|label=基数|category=基数}}<!--
-->|季節|season|seasons={{#switch:{{{2}}}|label=季節|category=季節}}<!--
-->|寄生虫学|parasitology={{#switch:{{{2}}}|label=寄生虫学|category=寄生虫学}}<!--
-->|北アイルランド|Northern Ireland={{#switch:{{{2}}}|label=北アイルランド|category=北アイルランド方言}}<!--
-->|北アゼルバイジャン|North Azerbaijani={{#switch:{{{2}}}|label=北アゼルバイジャン|category=北アゼルバイジャン語}}<!--
-->|北アメリカ={{#switch:{{{2}}}|label=北アメリカ|category=北アメリカ}}<!--
-->|北アメリカ史={{#switch:{{{2}}}|label=北アメリカ史|category=北アメリカ史}}<!--
-->|北ゲルマン|North Germanic={{#switch:{{{2}}}|label=北ゲルマン|category=北ゲルマン方言}}<!--
-->|北朝鮮={{#switch:{{{2}}}|label=北朝鮮|category=北朝鮮}}<!--
-->|北ベトナム|northern Vietnam|Northern Vietnam|North Vietnam ={{#switch:{{{2}}}|label=北ベトナム|category=北部方言}}<!--
-->|北ポタワトミ|northern Potawatomi={{#switch:{{{2}}}|label=北ポタワトミ|category=北ポタワトミ語}}<!--
-->|北ヨーロッパ史={{#switch:{{{2}}}|label=北ヨーロッパ史|category=北ヨーロッパ史}}<!--
-->|キックボクシング|kickboxing={{#switch:{{{2}}}|label=キックボクシング|category=キックボクシング}}<!--
-->|キッチン器具|kitchenware={{#switch:{{{2}}}|label=キッチン器具|category=キッチン器具}}<!--
-->|狐|fox={{#switch:{{{2}}}|label=狐|category=狐}}<!--
-->|奇蹄類|odd-toed ungulate={{#switch:{{{2}}}|label=奇蹄類|category=奇蹄類}}<!--
-->|記念日|observance={{#switch:{{{2}}}|label=記念日|category=記念日}}<!--
-->|疑問詞|interrogative={{#switch:{{{2}}}|label=疑問詞|category=疑問詞}}<!--
-->|逆成語|逆成|back form|back-form|backform={{#switch:{{{2}}}|label=逆成語|category=逆成語}}<!--
-->|球技|ball game={{#switch:{{{2}}}|label=球技|category=球技}}<!--
-->|救急医療={{#switch:{{{2}}}|label=救急医療|category=救急医療}}<!--
-->|旧国名={{#switch:{{{2}}}|label=旧国名|category=旧国名}}<!--
-->|弓術={{#switch:{{{2}}}|label=弓術|category=弓術}}<!--
-->|旧首都={{#switch:{{{2}}}|label=旧首都|category=旧首都}}<!--
-->|弓道|kyudo={{#switch:{{{2}}}|label=弓道|category=弓道}}<!--
-->|キューバスペイン語|キューバ変種|Cuba={{#switch:{{{2}}}|label=キューバ|category=キューバスペイン語}}<!--
-->|稀用|まれ|rare={{#switch:{{{2}}}|label=まれ|category=稀用}}<!--
-->|教育|education={{#switch:{{{2}}}|label=教育|category=教育}}<!--
-->|教会ラテン語|Ecclesiastical Latin|EL|EL.={{#switch:{{{2}}}|label=[[:w:教会ラテン語|教会ラテン語]]|category=教会ラテン語}}<!--
-->|鋏角類={{#switch:{{{2}}}|label=鋏角類|category=鋏角類}}<!--
-->|狂言|kyogen={{#switch:{{{2}}}|label=狂言|category=狂言}}<!--
-->|共産主義|communism={{#switch:{{{2}}}|label=共産主義|category=共産主義}}<!--
-->|行政|public administration={{#switch:{{{2}}}|label=行政|category=行政}}<!--
-->|キョウチクトウ科={{#switch:{{{2}}}|label=キョウチクトウ科|category=キョウチクトウ科}}<!--
-->|恐怖症|phobia={{#switch:{{{2}}}|label=恐怖症|category=恐怖症}}<!--
-->|恐竜={{#switch:{{{2}}}|label=恐竜|category=恐竜}}<!--
-->|棘皮動物|echinoderm={{#switch:{{{2}}}|label=棘皮動物|category=棘皮動物}}<!--
-->|極限|limit={{#switch:{{{2}}}|label=極限|category=極限}}<!--
-->|魚類学|ichthyology={{#switch:{{{2}}}|label=魚類学|category=魚類学}}<!--
-->|ギリシア|ギリシャ|Greece={{#switch:{{{2}}}|label=ギリシア|category=ギリシア}}<!--
-->|ギリシア語|ギリシャ語|Greek={{#switch:{{{2}}}|label=ギリシア語関連|category=ギリシア語に関連する語}}<!--
-->|ギリシア神話|ギリシャ神話|Greek god|Greek mythology={{#switch:{{{2}}}|label=ギリシア神話|category=ギリシア神話}}<!--
-->|ギリシア正教|ギリシャ正教|Greek Orthodoxy={{#switch:{{{2}}}|label=ギリシャ正教|category=キリスト教}}<!--
-->|キリスト教|Christ|Christian|Christianity={{#switch:{{{2}}}|label=キリスト教|category=キリスト教}}<!--
-->|冀魯官話|Jilu Mandarin|Ji-Lu|Ji-Lu Mandarin|Jilu={{#switch:{{{2}}}|label=冀魯官話|category=冀魯官話}}<!--
-->|禁忌語|禁忌表現|proscribed={{#switch:{{{2}}}|label=禁忌語|category=禁忌語}}<!--
-->|緊急自動車|emergency vehicle={{#switch:{{{2}}}|label=緊急自動車|category=緊急自動車}}<!--
-->|金魚={{#switch:{{{2}}}|label=金魚|category=金魚}}<!--
-->|銀行|bank={{#switch:{{{2}}}|label=銀行|category=銀行}}<!--
-->|近親相姦|incest={{#switch:{{{2}}}|label=近親相姦|category=近親相姦}}<!--
-->|金属|metal={{#switch:{{{2}}}|label=金属|category=金属}}<!--
-->|金属工学={{#switch:{{{2}}}|label=金属工学|category=金属工学}}<!--
-->|近代ラテン語|New Latin|lang:New Latin|NL|NL.={{#switch:{{{2}}}|label=近代ラテン語|category=近代ラテン語}}<!--
-->|キントラノオ目={{#switch:{{{2}}}|label=キントラノオ目|category=キントラノオ目}}<!--
-->|筋肉|muscle={{#switch:{{{2}}}|label=筋肉|category=筋肉}}<!--
-->|金融|finance={{#switch:{{{2}}}|label=金融|category=金融}}<!--
-->|菌類|fungi={{#switch:{{{2}}}|label=菌類|category=菌類}}<!--
-->|菌類学|mycology={{#switch:{{{2}}}|label=菌類学|category=菌類学}}<!--
-->|グアテマラスペイン語|グアテマラ変種|Guatemala={{#switch:{{{2}}}|label=グアテマラ|category=グアテマラスペイン語}}<!--
-->|空間|space={{#switch:{{{2}}}|label=空間|category=空間}}<!--
-->|草|grass={{#switch:{{{2}}}|label=草|category=草}}<!--
-->|クスノキ科={{#switch:{{{2}}}|label=クスノキ科|category=クスノキ科}}<!--
-->|クスノキ目={{#switch:{{{2}}}|label=クスノキ目|category=クスノキ目}}<!--
-->|句前置詞={{#switch:{{{2}}}|label=句前置詞|category=句前置詞}}<!--
-->|クマ科|ursid={{#switch:{{{2}}}|label=クマ科|category=クマ科}}<!--
-->|雲|cloud={{#switch:{{{2}}}|label=雲|category=雲}}<!--
-->|蜘蛛|spider={{#switch:{{{2}}}|label=蜘蛛|category=蜘蛛}}<!--
-->|蜘蛛形類={{#switch:{{{2}}}|label=蜘蛛形類|category=蜘蛛形類}}<!--
-->|クライミング|climbing={{#switch:{{{2}}}|label=クライミング|category=クライミング}}<!--
-->|グラフィカルユーザインタフェース|graphical user interface={{#switch:{{{2}}}|label=グラフィカルユーザインタフェース|category=グラフィカルユーザインタフェース}}<!--
-->|グラフ理論|graph theory={{#switch:{{{2}}}|label=グラフ理論|category=グラフ理論}}<!--
-->|クリケット|cricket={{#switch:{{{2}}}|label=クリケット|category=クリケット}}<!--
-->|クリスマス|christmas|Christmas|CHRISTMAS|xmas|Xmas={{#switch:{{{2}}}|label=クリスマス|category=クリスマス}}<!--
-->|クルミ科={{#switch:{{{2}}}|label=クルミ科|category=クルミ科}}<!--
-->|クレーフェルト|Krefeld={{#switch:{{{2}}}|label=クレーフェルト|category=クレーフェルト方言}}<!--
-->|グレッソネイ|Gressoney={{#switch:{{{2}}}|label=グレッソネイ語|category=グレッソネイ語}}<!--
-->|クロアチア語|Croatia|Croatian={{#switch:{{{2}}}|label=クロアチア|category=クロアチア語}}<!--
-->|クロウメモドキ科={{#switch:{{{2}}}|label=クロウメモドキ科|category=クロウメモドキ科}}<!--
-->|クロッケー|croquet={{#switch:{{{2}}}|label=クロッケー|category=クロッケー}}<!--
-->|クワ科={{#switch:{{{2}}}|label=クワ科|category=クワ科}}<!--
-->|軍艦={{#switch:{{{2}}}|label=軍艦|category=軍艦}}<!--
-->|軍事|military={{#switch:{{{2}}}|label=軍事|category=軍事}}<!--
-->|君主制|monarchy={{#switch:{{{2}}}|label=君主制|category=君主制}}<!--
-->|軍隊の階級|military rank={{#switch:{{{2}}}|label=軍隊の階級|category=軍隊の階級}}<!--
-->|軍用機={{#switch:{{{2}}}|label=軍用機|category=軍用機}}<!--
-->|軍用車両={{#switch:{{{2}}}|label=軍用車両|category=軍用車両}}<!--
-->|経営学|management={{#switch:{{{2}}}|label=経営学|category=経営学}}<!--
-->|京畿|京畿道|경기|Gyeonggi={{#switch:{{{2}}}|label=京畿|category=方言}}<!--
-->|鯨偶蹄類|鯨偶蹄目|even-toed ungulate={{#switch:{{{2}}}|label=鯨偶蹄類|category=鯨偶蹄類}}<!--
-->|敬語|honorific={{#switch:{{{2}}}|label=敬語|category=敬語}}<!--
-->|敬語 丁寧語|丁寧語={{#switch:{{{2}}}|label=丁寧語|category=敬語 丁寧語}}<!--
-->|敬語 尊敬語|尊敬語|reverential={{#switch:{{{2}}}|label=尊敬語|category=敬語 尊敬語}}<!--
-->|敬語 謙譲語|謙譲語|humble={{#switch:{{{2}}}|label=謙譲語|category=敬語 謙譲語}}<!--
-->|尊辞={{#switch:{{{2}}}|label=尊辞|category=敬語 尊辞}}<!--
-->|謙辞={{#switch:{{{2}}}|label=謙辞|category=敬語 謙辞}}<!--
-->|経済|経済学|economy|economics={{#switch:{{{2}}}|label=経済|category=経済}}<!--
-->|警察|police={{#switch:{{{2}}}|label=警察|category=警察}}<!--
-->|計算機科学|computer science={{#switch:{{{2}}}|label=計算機科学|category=計算機科学}}<!--
-->|計算言語学|computational linguistics={{#switch:{{{2}}}|label=計算言語学|category=計算言語学}}<!--
-->|計時|timekeeping={{#switch:{{{2}}}|label=計時|category=計時}}<!--
-->|形式科学|formal science={{#switch:{{{2}}}|label=形式科学|category=形式科学}}<!--
-->|芸術|art|arts={{#switch:{{{2}}}|label=芸術|category=芸術}}<!--
-->|芸術家|artist={{#switch:{{{2}}}|label=芸術家|category=芸術家}}<!--
-->|慶尚|Gyeongsang|경상={{#switch:{{{2}}}|label=慶尚|category=方言}}<!--
-->|計測機器|measuring instrument={{#switch:{{{2}}}|label=計測機器|category=計測機器}}<!--
-->|形態論={{#switch:{{{2}}}|label=形態論|category=形態論}}<!--
-->|慶南|경남={{#switch:{{{2}}}|label=慶南|category=方言}}<!--
-->|芸能={{#switch:{{{2}}}|label=芸能|category=芸能}}<!--
-->|競馬|horse racing={{#switch:{{{2}}}|label=競馬|category=競馬}}<!--
-->|ケイビング|caving={{#switch:{{{2}}}|label=ケイビング|category=ケイビング}}<!--
-->|軽侮語|pejorative={{#switch:{{{2}}}|label=軽侮語|category=軽侮語}}<!--
-->|慶北|경북={{#switch:{{{2}}}|label=慶北|category=方言}}<!--
-->|刑務所スラング|prison slang={{#switch:{{{2}}}|label=刑務所スラング|category=刑務所スラング}}<!--
-->|形容詞句={{#switch:{{{2}}}|label=形容詞句|category=成句 形容詞句}}<!--
-->|鯨類|cetacean={{#switch:{{{2}}}|label=鯨類|category=鯨類}}<!--
-->|ゲートボール|gateball={{#switch:{{{2}}}|label=ゲートボール|category=ゲートボール}}<!--
-->|ケープブレトン|ケープブレトン英語|Cape Breton={{#switch:{{{2}}}|label=ケープブレトン島|category=ケープブレトン{{language|{{{lang}}}}}}}<!--
-->|ゲーム|game={{#switch:{{{2}}}|label=ゲーム|category=ゲーム}}<!--
-->|ゲーム理論={{#switch:{{{2}}}|label=ゲーム理論|category=ゲーム理論}}<!--
-->|ゲーリックフットボール|Gaelic football={{#switch:{{{2}}}|label=ゲーリックフットボール|category=ゲーリックフットボール}}<!--
-->|外科学|surgery={{#switch:{{{2}}}|label=外科学|category=外科学}}<!--
-->|ゲグ方言|ゲグ|Gheg={{#switch:{{{2}}}|label=ゲグ方言|category=ゲグ方言}}<!--
-->|化粧品|cosmetic|cosmetics={{#switch:{{{2}}}|label=化粧品|category=化粧品}}<!--
-->|血液学|hematology={{#switch:{{{2}}}|label=血液学|category=血液学}}<!--
-->|結婚|marriage={{#switch:{{{2}}}|label=結婚|category=結婚}}<!--
-->|欠如動詞|defective={{#switch:{{{2}}}|label=欠如動詞|category=欠如動詞}}<!--
-->|齧歯類|rodent={{#switch:{{{2}}}|label=齧歯類|category=齧歯類}}<!--
-->|ケニア変種|Kenya|Kenyan={{#switch:{{{2}}}|label=ケニア|category=ケニア{{language|{{{lang}}}}}}}<!--
-->|ケベック|Quebec|Québec={{#switch:{{{2}}}|label=ケベック|category=ケベック{{language|{{{lang}}}}}}}<!--
-->|ケルクラーデ方言|ケルクラーデ|Kirchröadsj={{#switch:{{{2}}}|label=ケルクラーデ|category=ケルクラーデ方言}}<!--
-->|ケルト神話|ケルト神話|Celtic god|Celtic mythology={{#switch:{{{2}}}|label=ケルト神話|category=ケルト神話}}<!--
-->|ゲルマン神話|ゲルマン神話|Germanic god|Germanic mythology={{#switch:{{{2}}}|label=ゲルマン神話|category=ゲルマン神話}}<!--
-->|ケルン語|Kölsch={{#switch:{{{2}}}|label=ケルン語|category=ケルン語}}<!--
-->|言語学|linguistics|linguistique={{#switch:{{{2}}}|label=言語学|category=言語学}}<!--
-->|言語名|言語|langue|language|lang={{#switch:{{{2}}}|label=言語|category=言語名}}<!--
-->|元首|heads of state={{#switch:{{{2}}}|label=元首|category=元首}}<!--
-->|剣術={{#switch:{{{2}}}|label=剣術|category=剣術}}<!--
-->|原生生物|protist={{#switch:{{{2}}}|label=原生生物|category=原生生物}}<!--
-->|建設機械={{#switch:{{{2}}}|label=建設機械|category=建設機械}}<!--
-->|元素|chemical element={{#switch:{{{2}}}|label=元素|category=元素}}<!--
-->|元素記号={{#switch:{{{2}}}|label=元素記号|category=元素記号}}<!--
-->|建築|建築学|architecture={{#switch:{{{2}}}|label=建築|category=建築}}<!--
-->|ケント|Kentish={{#switch:{{{2}}}|label=ケント|category=ケント方言}}<!--
-->|剣道|kendo={{#switch:{{{2}}}|label=剣道|category=剣道}}<!--
-->|憲法|constitutional law={{#switch:{{{2}}}|label=憲法|category=憲法}}<!--
-->|コイ科={{#switch:{{{2}}}|label=コイ科|category=コイ科}}<!--
-->|コイ目={{#switch:{{{2}}}|label=コイ目|category=コイ目}}<!--
-->|コイネー|Koine|Koine Greek={{#switch:{{{2}}}|label=コイネー|category=コイネー}}<!--
-->|語彙論|lexicology={{#switch:{{{2}}}|label=語彙論|category=語彙論}}<!--
-->|黄海|黄海道|황해|Hwanghae={{#switch:{{{2}}}|label=黄海|category=方言}}<!--
-->|工学|engineering={{#switch:{{{2}}}|label=工学|category=工学}}<!--
-->|光学|optics|light source|light sources={{#switch:{{{2}}}|label=光学|category=光学}}<!--
-->|甲殻類|crustacean={{#switch:{{{2}}}|label=甲殻類|category=甲殻類}}<!--
-->|後期古典ラテン語|post-Classical Latin={{#switch:{{{2}}}|label=[[:w:古典ラテン語|後期古典ラテン語]]|category=後期古典ラテン語}}<!--
-->|後期中英語|late ME|Late ME|Late Middle English={{#switch:{{{2}}}|label=後期中英語|category=後期中英語}}<!--
-->|後期ラテン語|Late Latin|LL|LL.={{#switch:{{{2}}}|label=[[:w:ラテン語|後期ラテン語]]|category=後期ラテン語}}<!--
-->|高級語彙|改まった表現|higher register={{#switch:{{{2}}}|label=高級語彙|category=高級語彙}}<!--
-->|合金|alloy={{#switch:{{{2}}}|label=合金|category=合金}}<!--
-->|航空|aviation={{#switch:{{{2}}}|label=航空|category=航空}}<!--
-->|航空機|aircraft={{#switch:{{{2}}}|label=航空機|category=航空機}}<!--
-->|航空工学|aeronautics={{#switch:{{{2}}}|label=航空工学|category=航空工学}}<!--
-->|光源={{#switch:{{{2}}}|label=光源|category=光源}}<!--
-->|江原|Gangwon|강원={{#switch:{{{2}}}|label=江原|category=方言}}<!--
-->|口語|colloquial|informal={{#switch:{{{2}}}|label=口語|category=口語}}<!--
-->|考古学|archaeology={{#switch:{{{2}}}|label=考古学|category=考古学}}<!--
-->|江淮官話|Jianghuai Mandarin|Huai|Jiang-Huai|Jiang-Huai Mandarin|Jianghuai|Lower Yangtze Mandarin={{#switch:{{{2}}}|label=江淮官話|category=江淮官話}}<!--
-->|広翅類={{#switch:{{{2}}}|label=広翅類|category=広翅類}}<!--
-->|香辛料={{#switch:{{{2}}}|label=香辛料|category=香辛料}}<!--
-->|香水|perfume={{#switch:{{{2}}}|label=香水|category=香水}}<!--
-->|甲虫|beetle={{#switch:{{{2}}}|label=甲虫|category=甲虫}}<!--
-->|交通|transport={{#switch:{{{2}}}|label=交通|category=交通}}<!--
-->|肯定極性表現|肯定文で|positive polarity|in the positive={{#switch:{{{2}}}|label=[[付録:用語集#肯定極性|肯定極性]]表現で|category=肯定極性表現}}<!--
-->|鉱物学|鉱物|mineral|mineralogy={{#switch:{{{2}}}|label=鉱物学|category=鉱物学}}<!--
-->|膠遼官話|Jiaoliao Mandarin|Jiao-Liao|Jiao-Liao Mandarin|Jiaoliao={{#switch:{{{2}}}|label=膠遼官話|category=膠遼官話}}<!--
-->|コーヒー|coffee={{#switch:{{{2}}}|label=コーヒー|category=コーヒー}}<!--
-->|氷|ice={{#switch:{{{2}}}|label=氷|category=氷}}<!--
-->|コーンウォール|Cornwall={{#switch:{{{2}}}|label=コーンウォール|category=コーンウォール{{language|{{{lang}}}}}}}<!--
-->|語学={{#switch:{{{2}}}|label=語学|category=語学}}<!--
-->|誤記={{#switch:{{{2}}}|label=誤記|category=誤記}}<!--
-->|国際関係|International relation|international relation={{#switch:{{{2}}}|label=国際関係|category=国際関係}}<!--
-->|国際単位系|SI unit={{#switch:{{{2}}}|label=国際単位系|category=国際単位系}}<!--
-->|黒人英語|black en|AAVE|African-American Vernacular={{#switch:{{{2}}}|label=黒人英語|category=黒人英語}}<!--
-->|国民|国籍|nationality={{#switch:{{{2}}}|label=国民|category=国民}}<!--
-->|古語・廃語|古・廃|archaic={{#switch:{{{2}}}|label=古語・廃語|category=古語・廃語}}<!--
-->|呉語|Wu={{#switch:{{{2}}}|label=呉語関連|category=呉語に関連する語}}<!--
-->|心|mind={{#switch:{{{2}}}|label=心|Category=心}}<!--
-->|故事成語={{#switch:{{{2}}}|label=故事成語|category=故事成語}}<!--
-->|コスタリカスペイン語|コスタリカ変種|Costa Rica={{#switch:{{{2}}}|label=コスタリカ|category=コスタリカスペイン語}}<!--
-->|古生物学|paleontology={{#switch:{{{2}}}|label=古生物学|category=古生物学}}<!--
-->|骨格|skeleton={{#switch:{{{2}}}|label=骨格|category=骨格}}<!--
-->|コックニー押韻俗語|英押韻俗|Cockney rhyming slang={{#switch:{{{2}}}|label=コックニー押韻俗語|category=コックニー押韻俗語}}<!--
-->|滑稽|humorous|jocular={{#switch:{{{2}}}|label=滑稽|category=滑稽}}<!--
-->|古典力学={{#switch:{{{2}}}|label=古典力学|category=古典力学}}<!--
-->|古代エジプト|Ancient Egypt={{#switch:{{{2}}}|label=古代エジプト|category=地中海世界の歴史}}<!--
-->|古代ギリシア|古代ギリシャ|Ancient Greece={{#switch:{{{2}}}|label=古代ギリシア|category=地中海世界の歴史}}<!--
-->|古代ローマ|Ancient Rome={{#switch:{{{2}}}|label=古代ローマ|category=地中海世界の歴史}}<!--
-->|誇張表現|誇張|誇張的|誇張して|誇張した|exaggerated|Exaggerated={{#switch:{{{2}}}|label=誇張表現|category=誇張表現}}<!--
-->|古西ノルド語|Old West Norse={{#switch:{{{2}}}|label=古西ノルド語|category=古西ノルド語}}<!--
-->|古東ノルド語|Old East Norse={{#switch:{{{2}}}|label=古東ノルド語|category=古東ノルド語}}<!--
-->|誤読・誤用|誤読|誤用={{#switch:{{{2}}}|label=誤読・誤用|category=誤読・誤用}}<!--
-->|言葉遊び={{#switch:{{{2}}}|label=言葉遊び|category=言葉遊び}}<!--
-->|ことわざ|諺|proverb={{#switch:{{{2}}}|label=ことわざ|category=ことわざ}}<!--
-->|コノート|Connacht={{#switch:{{{2}}}|label=コノート|category=コノート方言}}<!--
-->|コピュラ|copula|copular={{#switch:{{{2}}}|label=コピュラ|category=コピュラ}}<!--
-->|古北部フランス語|Old Northern French={{#switch:{{{2}}}|label=古北部フランス語|category=古北部フランス語}}<!--
-->|コミカンソウ科={{#switch:{{{2}}}|label=コミカンソウ科|category=コミカンソウ科}}<!--
-->|古用法|古|dated={{#switch:{{{2}}}|label=古用法|category=古用法}}<!--
-->|語用論|pragmatics={{#switch:{{{2}}}|label=語用論|category=語用論}}<!--
-->|暦={{#switch:{{{2}}}|label=暦|category=暦}}<!--
-->|娯楽|entertainment={{#switch:{{{2}}}|label=娯楽|category=娯楽}}<!--
-->|ゴルフ|golf={{#switch:{{{2}}}|label=ゴルフ|category=ゴルフ}}<!--
-->|古ロンバルド語|古ロンバルド|Old Lombard={{#switch:{{{2}}}|label=古ロンバルド|category=古ロンバルド語}}<!--
-->|コロンビアスペイン語|コロンビア変種|Colombia={{#switch:{{{2}}}|label=コロンビア|category=コロンビアスペイン語}}<!--
-->|コンゴ変種|Congo|DRC={{#switch:{{{2}}}|label=コンゴ|category=コンゴ{{language|{{{lang}}}}}}}<!--
-->|昆虫|虫|insect={{#switch:{{{2}}}|label=昆虫|category=昆虫}}<!--
-->|昆虫学|entomology={{#switch:{{{2}}}|label=昆虫学|category=昆虫学}}<!--
-->|コンピューターゲーム|コンピュータゲーム|テレビゲーム|ビデオゲーム|computer game|video game|video games={{#switch:{{{2}}}|label=コンピューターゲーム|category=コンピューターゲーム}}<!--
-->|コンピュータグラフィックス|computer graphics={{#switch:{{{2}}}|label=コンピュータグラフィックス|category=コンピュータグラフィックス}}<!--
-->|サーク|Sark={{#switch:{{{2}}}|label=サーク|category=サーク島語}}<!--
-->|サーフィン|surfing={{#switch:{{{2}}}|label=サーフィン|category=サーフィン}}<!--
-->|サイード|Sahidic={{#switch:{{{2}}}|label=サイード|category=サイード方言}}<!--
-->|再帰代名詞się|reflexive-się={{#switch:{{{2}}}|label=再帰代名詞"się"を伴って|category=再帰動詞}}<!--
-->|再帰動詞|再帰|reflexive={{#switch:{{{2}}}|label=再帰動詞|category=再帰動詞}}<!--
-->|細菌学|bacteriology={{#switch:{{{2}}}|label=細菌学|category=細菌学}}<!--
-->|サイクリング|cycling={{#switch:{{{2}}}|label=サイクリング|category=サイクリング}}<!--
-->|在日朝鮮語|Japanese Korean={{#switch:{{{2}}}|label=在日|category=在日朝鮮語}}<!--
-->|細胞学|cytology={{#switch:{{{2}}}|label=細胞学|category=細胞学}}<!--
-->|材料科学|materials science={{#switch:{{{2}}}|label=材料科学|category=材料科学}}<!--
-->|サカティアングイス|Zacatianguis={{#switch:{{{2}}}|label=サカティアングイス|category=サカティアングイス方言}}<!--
-->|魚|fish={{#switch:{{{2}}}|label=魚|category=魚}}<!--
-->|サガリバナ科={{#switch:{{{2}}}|label=サガリバナ科|category=サガリバナ科}}<!--
-->|作品名|作品={{#switch:{{{2}}}|label=作品名|category=作品名}}<!--
-->|酒|beer={{#switch:{{{2}}}|label=酒|category=酒}}<!--
-->|鮭|salmon={{#switch:{{{2}}}|label=鮭|category=鮭}}<!--
-->|蠍={{#switch:{{{2}}}|label=蠍|category=蠍}}<!--
-->|作家={{#switch:{{{2}}}|label=作家|category=作家}}<!--
-->|サッカー|soccer|association football={{#switch:{{{2}}}|label=サッカー|category=サッカー}}<!--
-->|サッサリ|Sassarese={{#switch:{{{2}}}|label=サッサリ|category=サッサリ・サルデーニャ語}}<!--
-->|殺人|murder={{#switch:{{{2}}}|label=殺人|category=殺人}}<!--
-->|砂糖={{#switch:{{{2}}}|label=砂糖|category=砂糖}}<!--
-->|鮫|サメ|shark={{#switch:{{{2}}}|label=鮫|category=鮫}}<!--
-->|産科学|obstetrics|midwifery={{#switch:{{{2}}}|label=産科学|category=産科学}}<!--
-->|三角関数|三角比|trigonometric function={{#switch:{{{2}}}|label=三角関数|category=三角関数}}<!--
-->|産業機械={{#switch:{{{2}}}|label=産業機械|category=産業機械}}<!--
-->|サンスクリット|Sanskrit={{#switch:{{{2}}}|label=サンスクリット関連|category=サンスクリットに関連する語}}<!--
-->|サンドイッチ|sandwich={{#switch:{{{2}}}|label=サンドイッチ|category=サンドイッチ}}<!--
-->|ザンビア変種|Zambia={{#switch:{{{2}}}|label=ザンビア|category=ザンビア{{language|{{{lang}}}}}}}<!--
-->|サンボ|sambo={{#switch:{{{2}}}|label=サンボ|category=サンボ}}<!--
-->|詩|poetry={{#switch:{{{2}}}|label=詩|category=詩}}<!--
-->|ジェットスポーツ|jet sports={{#switch:{{{2}}}|label=ジェットスポーツ|category=ジェットスポーツ}}<!--
-->|シェットランド|Shetland={{#switch:{{{2}}}|label=シェットランド|category=シェットランド語}}<!--
-->|ジェンダー|gender={{#switch:{{{2}}}|label=ジェンダー|category=ジェンダー}}<!--
-->|シカ科|cervid={{#switch:{{{2}}}|label=シカ科|category=シカ科}}<!--
-->|歯学|dentistry={{#switch:{{{2}}}|label=歯学|category=歯学}}<!--
-->|視覚方言|eye dialect={{#switch:{{{2}}}|label=視覚方言|category=視覚方言}}<!--
-->|時間|time={{#switch:{{{2}}}|label=時間|category=時間}}<!--
-->|シク教|sikhism|Sikhism={{#switch:{{{2}}}|label=シク教|category=シク教}}<!--
-->|シクンシ科={{#switch:{{{2}}}|label=シクンシ科|category=シクンシ科}}<!--
-->|死刑|capital punishment={{#switch:{{{2}}}|label=死刑|category=死刑}}<!--
-->|死語|extinct language={{#switch:{{{2}}}|label=死語|category=死語名}}<!--
-->|四肢|limb={{#switch:{{{2}}}|label=四肢|category=四肢}}<!--
-->|辞書学|lexicography={{#switch:{{{2}}}|label=辞書学|category=辞書学}}<!--
-->|地震学|地震|seismology={{#switch:{{{2}}}|label=[[地震学]]|category=地震学}}<!--
-->|指数・対数|指数関数|対数関数|指数|対数|logarithm|exponent|exponential function={{#switch:{{{2}}}|label=[[指数]]・[[対数]]|category=指数・対数}}<!--
-->|自然|nature={{#switch:{{{2}}}|label=[[自然]]|category=自然}}<!--
-->|自然科学|natural science={{#switch:{{{2}}}|label=[[自然科学]]|category=自然科学}}<!--
-->|自然災害|災害={{#switch:{{{2}}}|label=[[自然災害]]|category=自然災害}}<!--
-->|シソ目={{#switch:{{{2}}}|label=シソ目|category=シソ目}}<!--
-->|シソ科={{#switch:{{{2}}}|label=シソ科|category=シソ科}}<!--
-->|下着|underwear={{#switch:{{{2}}}|label=下着|category=下着}}<!--
-->|自他動詞|ambitransitive={{#switch:{{{2}}}|label=[[付録:用語集#自他動詞|自他動詞]]|category=自他動詞}}<!--
-->|詩的表現|詩的|poetic={{#switch:{{{2}}}|label=詩的表現|category=詩的表現}}<!--
-->|自転車|bicycle|bike={{#switch:{{{2}}}|label=[[自転車]]|category=自転車}}<!--
-->|自転車競技|cycle racing|cycle sport|bicycle racing|bicycle sport={{#switch:{{{2}}}|label=[[自転車]][[競技]]|category=自転車競技}}<!--
-->|自動詞|intransitive|intransitive+={{#switch:{{{2}}}|label=[[付録:用語集#自動詞|自動詞]]|category=自動詞}}<!--
-->|自動車|automobile={{#switch:{{{2}}}|label=[[自動車]]|category=自動車}}<!--
-->|自動車機器|automotive={{#switch:{{{2}}}|label=[[自動車]][[機器]]|category=自動車機器}}<!--
-->|自動車技術|automotive technology={{#switch:{{{2}}}|label=[[自動車]][[技術]]|category=自動車技術}}<!--
-->|自動車工学|automotive engineering={{#switch:{{{2}}}|label=[[自動車]][[工学]]|category=自動車工学}}<!--
-->|自動車部品|auto part={{#switch:{{{2}}}|label=[[自動車]][[部品]]|category=自動車部品}}<!--
-->|自動車競技|auto racing|car racing|automobile racing={{#switch:{{{2}}}|label=[[自動車]][[競技]]|category=自動車競技}}<!--
-->|私年号={{#switch:{{{2}}}|label=私年号|category=私年号}}<!--
-->|耳鼻咽喉科学|otolaryngology|otorhinolaryngology={{#switch:{{{2}}}|label=[[耳鼻咽喉科学]]|category=耳鼻咽喉科学}}<!--
-->|司法={{#switch:{{{2}}}|label=[[司法]]|category=司法}}<!--
-->|脂肪酸|fatty acid={{#switch:{{{2}}}|label=[[脂肪酸]]|category=脂肪酸}}<!--
-->|刺胞動物|cnidarian={{#switch:{{{2}}}|label=刺胞動物|category=刺胞動物}}<!--
-->|資本主義|capitalism={{#switch:{{{2}}}|label=資本主義|category=資本主義}}<!--
-->|島|island={{#switch:{{{2}}}|label=島|category=島}}<!--
-->|事務用品={{#switch:{{{2}}}|label=事務用品|category=事務用品}}<!--
-->|ジャージー|Jersey={{#switch:{{{2}}}|label=ジャージー|category=ジャージー島語}}<!--
-->|ジャイナ教|jainism|Jainism={{#switch:{{{2}}}|label=ジャイナ教|category=ジャイナ教}}<!--
-->|社会|society={{#switch:{{{2}}}|label=社会|category=社会}}<!--
-->|社会科学|social science={{#switch:{{{2}}}|label=社会科学|category=社会科学}}<!--
-->|社会学|sociology={{#switch:{{{2}}}|label=社会学|category=社会学}}<!--
-->|社会言語学|sociolinguistics={{#switch:{{{2}}}|label=社会言語学|category=社会言語学}}<!--
-->|社会心理学|social psychology={{#switch:{{{2}}}|label=社会心理学|category=社会心理学}}<!--
-->|射撃競技={{#switch:{{{2}}}|label=射撃競技|category=射撃競技}}<!--
-->|写真|photography={{#switch:{{{2}}}|label=写真|category=写真}}<!--
-->|ジャマイカ変種|Jamaica={{#switch:{{{2}}}|label=ジャマイカ|category=ジャマイカ{{language|{{{lang}}}}}}}<!--
-->|車両={{#switch:{{{2}}}|label=車両|category=車両}}<!--
-->|シャンチー|象棋|xiangqi={{#switch:{{{2}}}|label=シャンチー|category=シャンチー}}<!--
-->|獣医学={{#switch:{{{2}}}|label=獣医学|category=獣医学}}<!--
-->|宗教|religion|religious={{#switch:{{{2}}}|label=宗教|category=宗教}}<!--
-->|銃剣道|jukendo={{#switch:{{{2}}}|label=銃剣道|category=銃剣道}}<!--
-->|集合名詞|collective={{#switch:{{{2}}}|label=集合名詞|category=集合名詞}}<!--
-->|集合論|set theory={{#switch:{{{2}}}|label=集合論|category=集合論}}<!--
-->|修辞学|rhetoric={{#switch:{{{2}}}|label=修辞学|category=修辞学}}<!--
-->|柔術|jujutsu={{#switch:{{{2}}}|label=柔術|category=柔術}}<!--
-->|終助詞={{#switch:{{{2}}}|label=終助詞|category=助詞 終助詞}}<!--
-->|柔道|judo={{#switch:{{{2}}}|label=柔道|category=柔道}}<!--
-->|重量挙げ|weightlifting={{#switch:{{{2}}}|label=重量挙げ|category=重量挙げ}}<!--
-->|儒教|Confucianism|confucianism={{#switch:{{{2}}}|label=儒教|category=儒教}}<!--
-->|祝日|holiday={{#switch:{{{2}}}|label=祝日|category=祝日}}<!--
-->|縮約形|縮約={{#switch:{{{2}}}|label=縮約形|category=縮約形}}<!--
-->|出版|publishing={{#switch:{{{2}}}|label=出版|category=出版}}<!--
-->|首都名|首都|capital={{#switch:{{{2}}}|label=首都|category=首都名}}<!--
-->|腫瘍学|oncology={{#switch:{{{2}}}|label=腫瘍学|category=腫瘍学}}<!--
-->|狩猟|狩り|hunting={{#switch:{{{2}}}|label=狩猟|category=狩猟}}<!--
-->|手話|sign language={{#switch:{{{2}}}|label=手話名|category=手話名}}<!--
-->|ショウガ科={{#switch:{{{2}}}|label=ショウガ科|category=ショウガ科}}<!--
-->|商学|commercial science={{#switch:{{{2}}}|label=商学|category=商学}}<!--
-->|正月={{#switch:{{{2}}}|label=正月|category=正月}}<!--
-->|ショウガ目={{#switch:{{{2}}}|label=ショウガ目|category=ショウガ目}}<!--
-->|将棋|shogi={{#switch:{{{2}}}|label=将棋|category=将棋}}<!--
-->|条鰭類={{#switch:{{{2}}}|label=条鰭類|category=条鰭類}}<!--
-->|渉禽類={{#switch:{{{2}}}|label=渉禽類|category=渉禽類}}<!--
-->|状態動詞|stative={{#switch:{{{2}}}|label=状態動詞|category=状態動詞}}<!--
-->|杖道|jodo={{#switch:{{{2}}}|label=杖道|category=杖道}}<!--
-->|情動|emotions={{#switch:{{{2}}}|label=情動|category=情動}}<!--
-->|商取引|trading={{#switch:{{{2}}}|label=商取引|category=商取引}}<!--
-->|商標の普通名称化|genericized trademark={{#switch:{{{2}}}|label=商標の普通名称化|category=商標の普通名称化}}<!--
-->|消防|firefighting={{#switch:{{{2}}}|label=消防|category=消防}}<!--
-->|情報科学={{#switch:{{{2}}}|label=情報科学|category=情報科学}}<!--
-->|情報学|information science={{#switch:{{{2}}}|label=情報学|category=情報学}}<!--
-->|情報技術|computing={{#switch:{{{2}}}|label=情報技術|category=情報技術}}<!--
-->|少林寺拳法|shourinjikempo={{#switch:{{{2}}}|label=少林寺拳法|category=少林寺拳法}}<!--
-->|初期中英語|Early ME|Early Middle English={{#switch:{{{2}}}|label=初期中英語|category=初期中英語}}<!--
-->|職業|occupation={{#switch:{{{2}}}|label=職業|category=職業}}<!--
-->|食肉類|carnivore={{#switch:{{{2}}}|label=食肉類|category=食肉類}}<!--
-->|職人|craftsman={{#switch:{{{2}}}|label=職人|category=職人}}<!--
-->|食品|飲食物|food={{#switch:{{{2}}}|label=食品|category=食品}}<!--
-->|植物|plant={{#switch:{{{2}}}|label=植物|category=植物}}<!--
-->|植物学|botany={{#switch:{{{2}}}|label=植物学|category=植物学}}<!--
-->|序数|ordinal|ordinal number|ordinal numbers={{#switch:{{{2}}}|label=序数|category=序数}}<!--
-->|助数詞={{#switch:{{{2}}}|label=助数詞|category=助数詞}}<!--
-->|初等関数|elementary function={{#switch:{{{2}}}|label=初等関数|category=初等関数}}<!--
-->|書物|book={{#switch:{{{2}}}|label=書物|category=書物}}<!--
-->|食器|cutlery={{#switch:{{{2}}}|label=食器|category=食器}}<!--
-->|書道={{#switch:{{{2}}}|label=書道|category=書道}}<!--
-->|助動詞|auxiliary={{#switch:{{{2}}}|label=[[付録:用語集#助動詞|助動詞]]|category=助動詞}}<!--
-->|叙法|modal={{#switch:{{{2}}}|label=叙法|category=叙法}}<!--
-->|神学|theology={{#switch:{{{2}}}|label=神学|category=神学}}<!--
-->|新顎類={{#switch:{{{2}}}|label=新顎類|category=新顎類}}<!--
-->|シンガポール英語|シンガポール変種|Singapore={{#switch:{{{2}}}|label=シンガポール|category=シンガポール英語}}<!--
-->|シンガポール華語|Singapore Mandarin|Singaporean Mandarin={{#switch:{{{2}}}|label=シンガポール|category=シンガポール華語}}<!--
-->|シンガポールタミル語|Singapore Tamil|Singapore Tamil={{#switch:{{{2}}}|label=シンガポール|category=シンガポールタミル語}}<!--
-->|シンガポール福建|シンガポール福建語|Singapore Hokkien|Singaporean Hokkien={{#switch:{{{2}}}|label=シンガポール|category=方言}}<!--
-->|新疆官話|Xinjiang Mandarin|Xinjiang={{#switch:{{{2}}}|label=新疆官話|category=新疆官話}}<!--
-->|神経解剖学|neuroanatomy={{#switch:{{{2}}}|label=神経解剖学|category=神経解剖学}}<!--
-->|神経科学|neuroscience={{#switch:{{{2}}}|label=神経科学|category=神経科学}}<!--
-->|神経学|neurology={{#switch:{{{2}}}|label=神経学|category=神経学}}<!--
-->|人口学|demography={{#switch:{{{2}}}|label=人口学|category=人口学}}<!--
-->|人工言語|artificial language|constructed language={{#switch:{{{2}}}|label=人工言語|category=人工言語名}}<!--
-->|信号処理|signal processing={{#switch:{{{2}}}|label=信号処理|category=信号処理}}<!--
-->|人工知能|artificial intelligence={{#switch:{{{2}}}|label=人工知能|category=人工知能}}<!--
-->|身体症状={{#switch:{{{2}}}|label=身体症状|category=身体症状}}<!--
-->|ジンチョウゲ科={{#switch:{{{2}}}|label=ジンチョウゲ科|category=ジンチョウゲ科}}<!--
-->|神道|shinto|Shinto={{#switch:{{{2}}}|label=神道|category=神道}}<!--
-->|ジンバブエ変種||Zimbabwe={{#switch:{{{2}}}|label=ジンバブエ|category=ジンバブエ{{language|{{{lang}}}}}}}<!--
-->|人物|of person={{#switch:{{{2}}}|label=人物|category=}}<!--
-->|新聞|newspaper={{#switch:{{{2}}}|label=新聞|category=新聞}}<!--
-->|人文科学|humanities={{#switch:{{{2}}}|label=人文科学|category=人文科学}}<!--
-->|人名={{#switch:{{{2}}}|label=人名|category=人名}}<!--
-->|心理学|psychology={{#switch:{{{2}}}|label=心理学|category=心理学}}<!--
-->|人類学={{#switch:{{{2}}}|label=人類学|category=人類学}}<!--
-->|神話|mythology={{#switch:{{{2}}}|label=神話|category=神話}}<!--
-->|神話・伝説の生物|mythological creature|mythological creatures={{#switch:{{{2}}}|label=神話・伝説の生物|category=神話・伝説の生物}}<!--
-->|水域|bodies of water={{#switch:{{{2}}}|label=水域|category=水域}}<!--
-->|水泳|swimming={{#switch:{{{2}}}|label=[[水泳]]|category=水泳}}<!--
-->|水球|water polo={{#switch:{{{2}}}|label=[[水球]]|category=水球}}<!--
-->|水上スキー|water skiing={{#switch:{{{2}}}|label=水上スキー|category=水上スキー}}<!--
-->|スイス変種|Swiss|Switzerland|Suisse={{#switch:{{{2}}}|label=スイス|category=スイス{{language|{{{lang}}}}}}}<!--
-->|睡眠|sleep={{#switch:{{{2}}}|label=睡眠|category=睡眠}}<!--
-->|睡眠生理学|sleep physiology={{#switch:{{{2}}}|label=睡眠生理学|category=睡眠生理学}}<!--
-->|水文学|hydrology={{#switch:{{{2}}}|label=水文学|category=水文学}}<!--
-->|数学|mathematics|math={{#switch:{{{2}}}|label=数学|category=数学}}<!--
-->|数学記号={{#switch:{{{2}}}|label=数学記号|category=数学記号}}<!--
-->|数値解析={{#switch:{{{2}}}|label=数値解析|category=数値解析}}<!--
-->|数列|numerical sequence={{#switch:{{{2}}}|label=[[数列]]|category=数列}}<!--
-->|数論|number theory={{#switch:{{{2}}}|label=[[数論]]|category=数論}}<!--
-->|スカイスポーツ|air sports|sky sports={{#switch:{{{2}}}|label=スカイスポーツ|category=スカイスポーツ}}<!--
-->|スカッシュ|squash={{#switch:{{{2}}}|label=スカッシュ|category=スカッシュ}}<!--
-->|スカンク科|mephitid={{#switch:{{{2}}}|label=スカンク科|category=スカンク科}}<!--
-->|スキー|skiing={{#switch:{{{2}}}|label=[[スキー]]|category=スキー}}<!--
-->|スキムボード|skimboarding={{#switch:{{{2}}}|label=[[スキムボード]]|category=スキムボード}}<!--
-->|図形|shape={{#switch:{{{2}}}|label=[[図形]]|category=図形}}<!--
-->|スケート|skating={{#switch:{{{2}}}|label=[[スケート]]|category=スケート}}<!--
-->|スケートボード|skateboarding={{#switch:{{{2}}}|label=スケートボード|category=スケートボード}}<!--
-->|スケルトン|スケルトン={{#switch:{{{2}}}|label=[[スケルトン]]|category=スケルトン}}<!--
-->|スコーネ|Scania={{#switch:{{{2}}}|label=スコーネ|category=スコーネ方言}}<!--
-->|スコットランド|Scot|Scotland|Scots={{#switch:{{{2}}}|label=スコットランド|category=スコットランド英語}}<!--
-->|スコットランド南部|South Scots={{#switch:{{{2}}}|label=スコットランド南部|category=スコットランド南部方言}}<!--
-->|寿司|sushi={{#switch:{{{2}}}|label=[[寿司]]|category=寿司}}<!--
-->|ストゥシルヴァン|Sutsilvan={{#switch:{{{2}}}|label=ストゥシルヴァン|category=ストゥシルヴァン}}<!--
-->|スヌーカー|snooker={{#switch:{{{2}}}|label=[[スヌーカー]]|category=スヌーカー}}<!--
-->|スノーボード|snowboarding={{#switch:{{{2}}}|label=[[スノーボード]]|category=スノーボード}}<!--
-->|スピードスケート|speed skating={{#switch:{{{2}}}|label=[[スピードスケート]]|category=スピードスケート}}<!--
-->|スペイン={{#switch:{{{2}}}|label=[[スペイン]]|category=スペイン}}<!--
-->|スペイン語|Spanish={{#switch:{{{2}}}|label=[[スペイン語]]関連|category=スペイン語に関連する語}}<!--
-->|スペイン変種|Spain={{#switch:{{{2}}}|label=[[:w:スペイン|スペイン]]|category=スペイン{{language|{{{lang}}}}}}}<!--
-->|スペキュレイティブ・フィクション={{#switch:{{{2}}}|labbel=スペキュレイティブ・フィクション|category=スペキュレイティブ・フィクション}}<!--
-->|スポーツ|sport|sports={{#switch:{{{2}}}|label=[[スポーツ]]|category=スポーツ}}<!--
-->|相撲|sumo={{#switch:{{{2}}}|label=[[相撲]]|category=相撲}}<!--
-->|スラヴ神話|スラヴ神話|Slavic god|Slavic mythology={{#switch:{{{2}}}|label=スラヴ神話|category=スラヴ神話}}<!--
-->|スリナム変種|Suriname={{#switch:{{{2}}}|label=[[スリナム]]|category=スリナム{{language|{{{lang}}}}}}}<!--
-->|スリランカタミル語|スリランカタミル語|Sri Lankan Tamil|Sri Lankan Tamil={{#switch:{{{2}}}|label=スリランカ|category=スリランカタミル語}}<!--
-->|スルシルヴァン|Sursilvan={{#switch:{{{2}}}|label=スルシルヴァン|category=スルシルヴァン}}<!--
-->|スルミラン|Surmiran={{#switch:{{{2}}}|label=スルミラン|category=スルミラン}}<!--
-->|性|sexuality={{#switch:{{{2}}}|label=[[性]]|category=性}}<!--
-->|姓|surname={{#switch:{{{2}}}|label=[[姓]]|category=姓}}<!--
-->|生化学|biochemistry={{#switch:{{{2}}}|label=[[生化学]]|category=生化学}}<!--
-->|性感染症={{#switch:{{{2}}}|label=[[性感染症]]|category=性感染症}}<!--
-->|制御理論|制御工学|control theory|control engineering={{#switch:{{{2}}}|label=[[制御理論]]|category=制御理論}}<!--
-->|性行為|sex={{#switch:{{{2}}}|label=[[性行為]]|category=性行為}}<!--
-->|星座|constellation={{#switch:{{{2}}}|label=[[星座]]|category=星座}}<!--
-->|政治|政治学|politics={{#switch:{{{2}}}|label=[[政治]]|category=政治}}<!--
-->|生殖器|genitalia={{#switch:{{{2}}}|label=[[生殖器]]|category=生殖器}}<!--
-->|聖書|Bible={{#switch:{{{2}}}|label=[[聖書]]|category=聖書}}<!--
-->|聖書ヘブライ語|hbo|HBO={{#switch:{{{2}}}|label=[[:w:聖書ヘブライ語|聖書ヘブライ語]]|category=聖書ヘブライ語}}<!--
-->|精神医学|psychiatry={{#switch:{{{2}}}|label=精神医学|category=精神医学}}<!--
-->|製造|manufacturing={{#switch:{{{2}}}|label=[[製造]]|category=製造}}<!--
-->|製造業={{#switch:{{{2}}}|label=[[製造業]]|category=製造業}}<!--
-->|政体|forms of government={{#switch:{{{2}}}|label=[[政体]]|category=政体}}<!--
-->|生態学|ecology={{#switch:{{{2}}}|label=[[生態学]]|category=生態学}}<!--
-->|生体物質|biomolecule={{#switch:{{{2}}}|label=[[生体物質]]|category=生体物質}}<!--
-->|性的指向|sexual orientation={{#switch:{{{2}}}|label=[[性的指向]]|category=性的指向}}<!--
-->|西南官話|Southwestern Mandarin|Southwest Mandarin|Upper Yangtze Mandarin|southwestern Mandarin={{#switch:{{{2}}}|label=[[:w:西南官話|西南官話]]|category=西南官話}}<!--
-->|政府|government={{#switch:{{{2}}}|label=[[政府]]|category=政府}}<!--
-->|生物学|biology={{#switch:{{{2}}}|label=[[生物学]]|category=生物学}}<!--
-->|生理学|physiology={{#switch:{{{2}}}|label=[[生理学]]|category=生理学}}<!--
-->|政令指定都市={{#switch:{{{2}}}|label=[[政令指定都市]]|category=政令指定都市}}<!--
-->|世界共通ロマ語アルファベット|International Standard={{#switch:{{{2}}}|label=世界共通ロマ語アルファベット|category=世界共通ロマ語アルファベット}}<!--
-->|脊索動物|chordate={{#switch:{{{2}}}|label=[[脊索動物]]|category=脊索動物}}<!--
-->|脊椎動物|vertebrate={{#switch:{{{2}}}|label=[[脊椎動物]]|category=脊椎動物}}<!--
-->|セキュリティ|security={{#switch:{{{2}}}|label=[[セキュリティ]]|category=セキュリティ}}<!--
-->|ゼズル方言|ゼズル|Zezuru={{#switch:{{{2}}}|label=ゼズル|category=ゼズル方言}}<!--
-->|接続詞句={{#switch:{{{2}}}|label=接続詞句|category=成句 接続詞句}}<!--
-->|接続助詞={{#switch:{{{2}}}|label=[[接続助詞]]|category=助詞 接続助詞}}<!--
-->|節足動物|arthropod={{#switch:{{{2}}}|label=[[節足動物]]|category=節足動物}}<!--
-->|絶対単数|singulare tantum|singularia tantum|singular only={{#switch:{{{2}}}|label=[[絶対単数]]|category=絶対単数}}<!--
-->|絶対複数|plurale tantum|pluralonly|plural only={{#switch:{{{2}}}|label=[[絶対複数]]|category=絶対複数}}<!--
-->|セッテ・コムーニ|Sette Comuni|7={{#switch:{{{2}}}|label=セッテ・コムーニ|category=セッテ・コムーニ方言}}<!--
-->|セパタクロー|sepak takraw={{#switch:{{{2}}}|label=[[セパタクロー]]|category=セパタクロー}}<!--
-->|セリ科={{#switch:{{{2}}}|label=[[:w:セリ科|セリ科]]|category=セリ科}}<!--
-->|セリ目={{#switch:{{{2}}}|label=[[:w:セリ目|セリ目]]|category=セリ目}}<!--
-->|セルビア={{#swithc:{{{2}}}|label=[[セルビア]]|category=セルビア}}<!--
-->|セルビア語|Serbia|Serbian={{#switch:{{{2}}}|label=[[セルビア語|セルビア]]|category=セルビア語}}<!--
-->|セルビア史={{#switch:{{{2}}}|label=セルビア史|category=セルビア史}}<!--
-->|セルリング|Sylt={{#switch:{{{2}}}|label=セルリング|category=セルリング方言}}<!--
-->|選挙|election={{#switch:{{{2}}}|label=[[選挙]]|category=選挙}}<!--
-->|線型代数学|線形代数学|線型代数|線形代数|linear algebra={{#switch:{{{2}}}|label=[[線型代数学]]|category=線型代数学}}<!--
-->|線形動物|nematode={{#switch:{{{2}}}|label=[[線形動物]]|category=線形動物}}<!--
-->|占星術|astrology={{#switch:{{{2}}}|label=[[占星術]]|category=占星術}}<!--
-->|戦争|war={{#switch:{{{2}}}|label=[[戦争]]|category=戦争}}<!--
-->|洗濯|laundry={{#switch:{{{2}}}|label=[[洗濯]]|category=洗濯}}<!--
-->|センダン科={{#switch:{{{2}}}|label=[[:w:センダン科|センダン科]]|category=センダン科}}<!--
-->|前置詞句={{#switch:{{{2}}}|label=前置詞句|category=成句 前置詞句}}<!--
-->|全南|全羅南道|전남|Jeonnam={{#switch:{{{2}}}|label=全南|category=方言}}<!--
-->|船舶|watercraft={{#switch:{{{2}}}|label=[[船舶]]|category=船舶}}<!--
-->|全北|전북|Jeonbuk={{#switch:{{{2}}}|label=全北|category=方言}}<!--
-->|全羅|전라|Jeolla={{#switch:{{{2}}}|label=全羅|category=方言}}<!--
-->|象|elephant={{#switch:{{{2}}}|label=[[象]]|category=象}}<!--
-->|双曲線関数|hyperbolic function={{#switch:{{{2}}}|label=[[双曲線関数]]|category=双曲線関数}}<!--
-->|走禽類={{#switch:{{{2}}}|label=[[走禽類]]|category=走禽類}}<!--
-->|造語|neologism={{#switch:{{{2}}}|label=[[造語]]|category=造語}}<!--
-->|槍術={{#switch:{{{2}}}|label=[[槍術]]|category=槍術}}<!--
-->|双翅類={{#switch:{{{2}}}|label=[[双翅類]]|category=双翅類}}<!--
-->|相対性理論|relativity={{#switch:{{{2}}}|label=[[相対性理論]]|category=相対性理論}}<!--
-->|槍道|soudo={{#switch:{{{2}}}|label=[[槍道]]|category=槍道}}<!--
-->|相場={{#switch:{{{2}}}|label=[[相場]]|category=相場}}<!--
-->|藻類|alga={{#switch:{{{2}}}|label=[[藻類]]|category=藻類}}<!--
-->|藻類学|phycology={{#switch:{{{2}}}|label=[[藻類学]]|category=藻類学}}<!--
-->|俗語|俗|slang={{#switch:{{{2}}}|label=[[俗語]]|category=俗語}}<!--
-->|俗ラテン語|Vulgar Latin|VL|VL.={{#switch:{{{2}}}|label=[[:w:俗ラテン語|俗ラテン語]]|category=俗ラテン語}}<!--
-->|ソビエト連邦|ソ連={{#switch:{{{2}}}|label=[[:w:ソビエト連邦|ソビエト連邦]]|category=ソビエト連邦}}<!--
-->|ソフトウェア|software={{#switch:{{{2}}}|label=[[ソフトウェア]]|category=ソフトウェア}}<!--
-->|ソフトボール|softball={{#switch:{{{2}}}|label=[[ソフトボール]]|category=ソフトボール}}<!--
-->|素粒子物理学|particle physics={{#switch:{{{2}}}|label=素粒子物理学|category=素粒子物理学}}<!--
-->|ゾロアスター教|zoroastrianism|Zoroastrianism={{#switch:{{{2}}}|label=[[ゾロアスター教]]|category=ゾロアスター教}}<!--
-->|ソーシャルメディア|social media={{#switch:{{{2}}}|label=[[ソーシャルメディア]]|category=ソーシャルメディア}}<!--
-->|ダーツ|darts={{#switch:{{{2}}}|label=[[ダーツ]]|category=ダーツ}}<!--
-->|第一次世界大戦|WW1|WWI={{#switch:{{{2}}}|label=[[:w:第一次世界大戦|第一次世界大戦]]|category=第一次世界大戦}}<!--
-->|第二次世界大戦|WW2|WWII={{#switch:{{{2}}}|label=[[:w:第二次世界大戦|第二次世界大戦]]|category=第二次世界大戦}}<!--
-->|タイ英語|Thai English|Thailand|TE={{#switch:{{{2}}}|label=タイ英語|category=タイ英語}}<!--
-->|タイ王国|Thailand={{#switch:{{{2}}}|label=タイ王国|category=タイ王国}}<!--
-->|タイ語|Thai={{#switch:{{{2}}}|label=タイ語関連|category=タイ語に関連する語}}<!--
-->|体液|bodily fluid={{#switch:{{{2}}}|label=[[体液]]|category=体液}}<!--
-->|大学|universities|university|college={{#switch:{{{2}}}|label=[[大学]]|category=大学}}<!--
-->|大工仕事|carpentry={{#switch:{{{2}}}|label=大工仕事|category=大工仕事}}<!--
-->|体系学={{#switch:{{{2}}}|label=[[体系学]]|category=体系学}}<!--
-->|大州={{#switch:{{{2}}}|label=大州|category=大州}}<!--
-->|代数学|algebra={{#switch:{{{2}}}|label=代数学|category=代数学}}<!--
-->|代数幾何学|algebraic geometry={{#switch:{{{2}}}|label=代数幾何学|category=代数幾何学}}<!--
-->|体操|体操競技|gymnastics={{#switch:{{{2}}}|label=体操|category=体操}}<!--
-->|躰道|taido={{#switch:{{{2}}}|label=躰道|category=躰道}}<!--
-->|大砲|artillery={{#switch:{{{2}}}|label=[[大砲]]|category=大砲}}<!--
-->|タイムトラベル|time travel={{#switch:{{{2}}}|label=[[タイムトラベル]]|category=タイムトラベル}}<!--
-->|代名詞的用法|代名詞的|pronominal={{#switch:{{{2}}}|label=代名詞的用法|category=代名詞的用法}}<!--
-->|大陸普通話|大陸|Mainland China={{#switch:{{{2}}}|label=大陸普通話|category=大陸普通話}}<!--
-->|台湾={{#switch:{{{2}}}|label=[[台湾]]|category=台湾}}<!--
-->|台湾語|Taiwanese Hokkien={{#switch:{{{2}}}|label=[[:w:台湾語|台湾語]]|category=台湾語}}<!--
-->|台湾国語={{#switch:{{{2}}}|label=[[台湾国語]]|category=台湾国語}}<!--
-->|台湾客家語|Taiwanese Hakka={{#switch:{{{2}}}|label=台湾客家語|category=台湾客家語}}<!--
-->|台湾史={{#switch:{{{2}}}|label=台湾史|category=台湾史}}<!--
-->|鷹狩|falconry={{#switch:{{{2}}}|label=[[たかがり|鷹狩]]|category=鷹狩}}<!--
-->|滝|waterfall={{#switch:{{{2}}}|label=[[たき|滝]]|category=滝}}<!--
-->|竹={{#switch:{{{2}}}|label=[[たけ|竹]]|category=竹}}<!--
-->|多足類|myriapod={{#switch:{{{2}}}|label=[[多足類]]|category=多足類}}<!--
-->|卓球|table tennis={{#switch:{{{2}}}|label=[[卓球]]|category=卓球}}<!--
-->|建物|建築物|building|buildings|buildings and structures={{#switch:{{{2}}}|label=[[たてもの|建物]]|category=建物}}<!--
-->|他動詞|transitive|transitive+={{#switch:{{{2}}}|label=[[付録:用語集#他動詞|他動詞]]|category=他動詞}}<!--
-->|だに|ダニ|壁蝨={{#switch:{{{2}}}|label=[[ダニ]]|category=壁蝨}}<!--
-->|多文化的ロンドン英語|MLE={{#switch:{{{2}}}|label=[[:en:Multicultural London English|多文化的ロンドン英語]]|category=多文化的ロンドン英語}}<!--
-->|タラシケヴィツァ|Taraškievica={{#switch:{{{2}}}|label=[[タラシケヴィツァ]]|category=タラシケヴィツァ}}<!--
-->|ダリー語|ダリー|Dari={{#switch:{{{2}}}|label=[[ダリー語]]|category=ダリー語}}<!--
-->|タロット|tarot={{#switch:{{{2}}}|label=[[タロット]]|category=タロット}}<!--
-->|単位|unit|units of measure={{#switch:{{{2}}}|label=[[単位]]|category=単位}}<!--
-->|短剣道|tankendo={{#switch:{{{2}}}|label=[[短剣道]]|category=短剣道}}<!--
-->|単孔類={{#switch:{{{2}}}|label=[[単孔類]]|category=単孔類}}<!--
-->|タンザニア変種|Tanzania={{#switch:{{{2}}}|label=[[タンザニア]]|category=タンザニア{{language|{{{lang}}}}}}}<!--
-->|ダンス|dance={{#switch:{{{2}}}|label=[[ダンス]]|category=ダンス}}<!--
-->|炭水化物|carbohydrate|carbohydrates={{#switch:{{{2}}}|label=[[炭水化物]]|category=炭水化物}}<!--
-->|タントユカ|Tantoyuca={{#switch:{{{2}}}|label=タントユカ|category=タントユカ方言}}<!--
-->|チアリーディング|cheerleading={{#switch:{{{2}}}|label=[[チアリーディング]]|category=チアリーディング}}<!--
-->|治安|public safety={{#switch:{{{2}}}|label=[[治安]]|category=治安}}<!--
-->|地域方言|地域|Regional|regional={{#switch:{{{2}}}|label=[[地域]]|category=地域方言}}<!--
-->|チーズ|cheese={{#switch:{{{2}}}|label=[[チーズ]]|category=チーズ}}<!--
-->|地衣類={{#switch:{{{2}}}|label=[[地衣類]]|category=地衣類}}<!--
-->|地衣類学|lichenology={{#switch:{{{2}}}|label=[[地衣類学]]|category=地衣類学}}<!--
-->|チェス|chess={{#switch:{{{2}}}|label=[[チェス]]|category=チェス}}<!--
-->|雉鴨類={{#switch:{{{2}}}|label=[[雉鴨類]]|category=雉鴨類}}<!--
-->|地球科学|Earth science|earth science={{#switch:{{{2}}}|label=[[地球科学]]|category=地球科学}}<!--
-->|逐次刊行物|periodical={{#switch:{{{2}}}|label=[[逐次刊行物]]|category=逐次刊行物}}<!--
-->|地形|landform={{#switch:{{{2}}}|label=[[地形]]|category=地形}}<!--
-->|チコナメル|Chiconamel={{#switch:{{{2}}}|label=チコナメル|category=チコナメル方言}}<!--
-->|チコンテペク|Chicontepec={{#switch:{{{2}}}|label=チコンテペク|category=チコンテペク方言}}<!--
-->|地質学|geology={{#switch:{{{2}}}|label=[[地質学]]|category=地質学}}<!--
-->|地図学|cartography={{#switch:{{{2}}}|label=[[地図学]]|category=地図学}}<!--
-->|地政学|geopolitics={{#switch:{{{2}}}|label=[[地政学]]|category=地政学}}<!--
-->|地中海世界|地中海世界の歴史={{#switch:{{{2}}}|label=地中海世界の歴史|category=地中海世界の歴史}}<!--
-->|地名|place|places|place name={{#switch:{{{2}}}|label=地名|category=地名}}<!--
-->|茶|tea={{#switch:{{{2}}}|label=[[茶]]|category=茶}}<!--
-->|チャ方言|Chakavian={{#switch:{{{2}}}|label=チャ方言|category=チャ方言}}<!--
-->|チャルマ|Chalma={{#switch:{{{2}}}|label=チャルマ|category=チャルマ方言}}<!--
-->|中央アジア史・北アジア史|中央アジア史|北アジア史={{#switch:{{{2}}}|label=中央アジア史・北アジア史|category=中央アジア史・北アジア史}}<!--
-->|中米の国|中米の国名|中央アメリカの国|中央アメリカの国名={{#switch:{{{2}}}|label=中米の国|category=中米の国名}}<!--
-->|中央アナトリア|中央アナトリア地方={{#switch:{{{2}}}|label=中央アナトリア方言|category=中央アナトリア方言}}<!--
-->|中央アメリカ史={{#switch:{{{2}}}|label=[[:w:中央アメリカ史|中央アメリカ史]]|category=中央アメリカ史}}<!--
-->|中原官話|Central Plains Mandarin|Central Plains|Zhongyuan Mandarin={{#switch:{{{2}}}|label=[[:w:中原官話|中原官話]]|category=中原官話}}<!--
-->|中国={{#switch:{{{2}}}|label=[[中国]]|category=中国}}<!--
-->|中国語|Chinese={{#switch:{{{2}}}|label=中国語関連|category=中国語に関連する語}}<!--
-->|中国史={{#switch:{{{2}}}|label=[[中国史]]|category=中国史}}<!--
-->|中国神話|Chinese mythology={{#switch:{{{2}}}|label=[[:w:中国神話|中国神話]]|category=中国神話}}<!--
-->|中国朝鮮語|Chinese Korean={{#switch:{{{2}}}|label=[[:w:中国朝鮮語|中国朝鮮語]]|category=中国朝鮮語}}<!--
-->|中世ポーランド語|Middle Polish={{#switch:{{{2}}}|label=[[:w:中世ポーランド語|中世ポーランド語]]|category=中世ポーランド語}}<!--
-->|中世ラテン語|Medieval Latin|ML|ML.={{#switch:{{{2}}}|label=[[:w:中世ラテン語|中世ラテン語]]|category=中世ラテン語}}<!--
-->|中部ベトナム|central Vietnam|Central Vietnam={{#switch:{{{2}}}|label=中部ベトナム|category=中部方言}}<!--
-->|中米|central America|Central America={{#switch:{{{2}}}|label=中米|category=中米スペイン語}}<!--
-->|忠南|Chungnam|충남={{#switch:{{{2}}}|label=[[:w:忠清南道|忠南]]|category=方言}}<!--
-->|忠清|Chungcheong|충청={{#switch:{{{2}}}|label=忠清|category=方言}}<!--
-->|忠北|Chungbuk|충북={{#switch:{{{2}}}|label=[[:w:忠清北道|忠北]]|category=方言}}<!--
-->|チュニジア変種|Tunisia={{#switch:{{{2}}}|label=チュニジア|category=チュニジア{{language|{{{lang}}}}}}}<!--
-->|超心理学|parapsychology={{#switch:{{{2}}}|label=超心理学|category=超心理学}}<!--
-->|朝鮮={{#switch:{{{2}}}|label=朝鮮|category=朝鮮}}<!--
-->|朝鮮語|Korean={{#switch:{{{2}}}|label=朝鮮語関連|category=朝鮮語に関連する語}}<!--
-->|朝鮮史={{#switch:{{{2}}}|label=朝鮮史|category=朝鮮史}}<!--
-->|朝鮮神話|Korean mythology={{#switch:{{{2}}}|label=[[:w:朝鮮神話|朝鮮神話]]|category=朝鮮神話}}<!--
-->|長鼻類={{#switch:{{{2}}}|label=長鼻類|category=長鼻類}}<!--
-->|調味料|seasoning={{#switch:{{{2}}}|label=調味料|category=調味料}}<!--
-->|調理|cooking={{#switch:{{{2}}}|label=調理|category=調理}}<!--
-->|鳥類学|ornithology={{#switch:{{{2}}}|label=鳥類学|category=鳥類学}}<!--
-->|直翅類={{#switch:{{{2}}}|label=直翅類|category=直翅類}}<!--
-->|直喩|simile={{#switch:{{{2}}}|label=直喩|category=直喩}}<!--
-->|チョコレート|chocolate={{#switch:{{{2}}}|label=チョコレート|category=チョコレート}}<!--
-->|著作権|copyright={{#switch:{{{2}}}|label=著作権|category=著作権}}<!--
-->|地理|地理学|geography={{#switch:{{{2}}}|label=地理|category=地理}}<!--
-->|チリスペイン語|チリ変種|Chile={{#switch:{{{2}}}|label=チリ|category=チリスペイン語}}<!--
-->|通貨|貨幣|currency|numismatics={{#switch:{{{2}}}|label=通貨|category=通貨}}<!--
-->|月名|month={{#switch:{{{2}}}|label=月名|category=月名}}<!--
-->|ツツジ科={{#switch:{{{2}}}|label=ツツジ科|category=ツツジ科}}<!--
-->|ツツジ目={{#switch:{{{2}}}|label=ツツジ目|category=ツツジ目}}<!--
-->|ツバキ科={{#switch:{{{2}}}|label=ツバキ科|category=ツバキ科}}<!--
-->|釣り|fishing={{#switch:{{{2}}}|label=釣り|category=釣り}}<!--
-->|ディゴル|Digor={{#switch:{{{2}}}|label=ディゴル方言|category=ディゴル方言}}<!--
-->|ディスクゴルフ|disc golf={{#switch:{{{2}}}|label=ディスクゴルフ|category=ディスクゴルフ}}<!--
-->|ティマウ|Timau={{#switch:{{{2}}}|label=ティマウ|category=ティマウ方言}}<!--
-->|テコンドー|taekwondo={{#switch:{{{2}}}|label=テコンドー|category=テコンドー}}<!--
-->|哲学|philosophy={{#switch:{{{2}}}|label=哲学|category=哲学}}<!--
-->|鉄道|railroad|rail transport={{#switch:{{{2}}}|label=鉄道|category=鉄道}}<!--
-->|テニス|tennis={{#switch:{{{2}}}|label=テニス|category=テニス}}<!--
-->|テペツィントラ|Tepetzintla={{#switch:{{{2}}}|label=テペツィントラ|category=テペツィントラ方言}}<!--
-->|テマパチェ|Temapache={{#switch:{{{2}}}|label=テマパチェ|category=テマパチェ方言}}<!--
-->|デモティキ|Demotic={{#switch:{{{2}}}|label=デモティキ|category=デモティキ}}<!--
-->|デモニム|demonym={{#switch:{{{2}}}|label=デモニム|category=デモニム}}<!--
-->|テレビ|television={{#switch:{{{2}}}|label=テレビ|category=テレビ}}<!--
-->|電化製品={{#switch:{{{2}}}|label=電化製品|category=電化製品}}<!--
-->|電気|electricity={{#switch:{{{2}}}|label=電気|category=電気}}<!--
-->|電気化学={{#switch:{{{2}}}|label=電気化学|category=電気化学}}<!--
-->|電気工学|電気回路|electrical engineering={{#switch:{{{2}}}|label=電気工学|category=電気工学}}<!--
-->|電磁気学|電気磁気学|electromagnetism={{#switch:{{{2}}}|label=電磁気学|category=電磁気学}}<!--
-->|電子工学|電子回路|electronics={{#switch:{{{2}}}|label=電子工学|category=電子工学}}<!--
-->|電子メール|Eメール|Email|E-MAIL|E-Mail|E-mail|email|e-Mail|e-mail={{#switch:{{{2}}}|label=電子メール|category=電子メール}}<!--
-->|伝統中国医学|traditional Chinese medicine={{#switch:{{{2}}}|label=伝統中国医学|category=伝統中国医学}}<!--
-->|天体|celestial body={{#switch:{{{2}}}|label=天体|category=天体}}<!--
-->|天体物理学|astrophysics={{#switch:{{{2}}}|label=天体物理学|category=天体物理学}}<!--
-->|天体力学|celestial mechanics={{#switch:{{{2}}}|label=天体力学|category=天体力学}}<!--
-->|天然素材={{#switch:{{{2}}}|label=天然素材|category=天然素材}}<!--
-->|店舗|店|shop={{#switch:{{{2}}}|label=店舗|category=店舗}}<!--
-->|天文学|astronomy={{#switch:{{{2}}}|label=天文学|category=天文学}}<!--
-->|電話|telephone={{#switch:{{{2}}}|label=電話|category=電話}}<!--
-->|ドイツ={{#switch:{{{2}}}|label=ドイツ|category=ドイツ}}<!--
-->|ドイツ語={{#switch:{{{2}}}|label=ドイツ語関連|category=ドイツ語に関連する語}}<!--
-->|ドイツ変種|German|Germany={{#switch:{{{2}}}|label=ドイツ|category=ドイツ{{language|{{{lang}}}}}}}<!--
-->|ドイツ南部|独南部|southern Germany|southern German|Southern Germany={{#switch:{{{2}}}|label=ドイツ南部|category=ドイツ南部方言}}<!--
-->|ドイツ北部|独北部|northern Germany|northern German|Northern Germany={{#switch:{{{2}}}|label=ドイツ北部|category=ドイツ北部方言}}<!--
-->|闘牛|bullfighting={{#switch:{{{2}}}|label=闘牛|category=闘牛}}<!--
-->|東京|Tokyo={{#switch:{{{2}}}|label=東京|category=東京}}<!--
-->|道教|taoism|Taoism={{#switch:{{{2}}}|label=道教|category=道教}}<!--
-->|道具|tool={{#switch:{{{2}}}|label=道具|category=道具}}<!--
-->|闘鶏|cockfighting={{#switch:{{{2}}}|label=闘鶏|category=闘鶏}}<!--
-->|統計学|statistics={{#switch:{{{2}}}|label=統計学|category=統計学}}<!--
-->|刀剣|sword={{#switch:{{{2}}}|label=刀剣|category=刀剣}}<!--
-->|倒語|back slang|back-slang|backslang={{#switch:{{{2}}}|label=倒語|category=倒語}}<!--
-->|動詞句={{#switch:{{{2}}}|label=動詞句|category=成句 動詞句}}<!--
-->|頭字語|頭文字|initialism={{#switch:{{{2}}}|label=頭字語|category=頭字語}}<!--
-->|等翅類={{#switch:{{{2}}}|label=等翅類|category=等翅類}}<!--
-->|同族目的語={{#switch:{{{2}}}|label=同族目的語|category=同族目的語}}<!--
-->|頭足類={{#switch:{{{2}}}|label=頭足類|category=頭足類}}<!--
-->|トウダイグサ科={{#switch:{{{2}}}|label=トウダイグサ科|category=トウダイグサ科}}<!--
-->|東北官話|Northeastern Mandarin|NE Mandarin|northeastern Mandarin={{#switch:{{{2}}}|label=[[:w:東北官話|東北官話]]|category=東北官話}}<!--
-->|東南アジア史={{#switch:{{{2}}}|label=東南アジア史|category=東南アジア史}}<!--
-->|動物|animal={{#switch:{{{2}}}|label=[[動物]]|category=動物}}<!--
-->|動物学|zoology={{#switch:{{{2}}}|label=[[動物学]]|category=動物学}}<!--
-->|動物競技={{#switch:{{{2}}}|label=動物競技|category=動物競技}}<!--
-->|糖類|sugar|sugars={{#switch:{{{2}}}|label=[[糖類]]|category=糖類}}<!--
-->|道路|road={{#switch:{{{2}}}|label=[[道路]]|category=道路}}<!--
-->|ドーリス方言|ドーリス|Doric={{#switch:{{{2}}}|label=ドーリス方言|category=ドーリス方言}}<!--
-->|蜥蜴|とかげ|トカゲ|lizard={{#switch:{{{2}}}|label=[[とかげ|蜥蜴]]|category=蜥蜴}}<!--
-->|尖鼠={{#switch:{{{2}}}|label=尖鼠|category=尖鼠}}<!--
-->|特殊関数|special functions={{#switch:{{{2}}}|label=特殊関数|category=特殊関数}}<!--
-->|毒物学|toxicology={{#switch:{{{2}}}|label=毒物学|category=毒物学}}<!--
-->|時計|clock={{#switch:{{{2}}}|label=時計|category=時計}}<!--
-->|トケイソウ科={{#switch:{{{2}}}|label=トケイソウ科|category=トケイソウ科}}<!--
-->|兎形類|lagomorph={{#switch:{{{2}}}|label=兎形類|category=兎形類}}<!--
-->|登山={{#switch:{{{2}}}|label=登山|category=登山}}<!--
-->|年|year={{#switch:{{{2}}}|label=年|category=年}}<!--
-->|都市名|都市|city={{#switch:{{{2}}}|label=都市|category=都市名}}<!--
-->|ドジョウ={{#switch:{{{2}}}|label=ドジョウ|category=ドジョウ}}<!--
-->|土壌学={{#switch:{{{2}}}|label=土壌学|category=土壌学}}<!--
-->|都道府県|prefectures of Japan={{#switch:{{{2}}}|label=[[都道府県]]|category=都道府県}}<!--
-->|トスカナ語|トスカナ|Tuscany|Tuscan={{#switch:{{{2}}}|label=トスカナ語|category=トスカナ語}}<!--
-->|トスク方言|トスク|Tosk={{#switch:{{{2}}}|label=トスク方言|category=トスク方言}}<!--
-->|ドッジボール|dodgeball={{#switch:{{{2}}}|label=ドッジボール|category=ドッジボール}}<!--
-->|ドミニカスペイン語|ドミニカ変種|Dominica|Dominican|Dominican Republic={{#switch:{{{2}}}|label=ドミニカ|category=ドミニカスペイン語}}<!--
-->|ドラマ|drama={{#switch:{{{2}}}|label=ドラマ|category=ドラマ}}<!--
-->|鳥|bird={{#switch:{{{2}}}|label=鳥|category=鳥}}<!--
-->|トレディチ・コムーニ|Tredici Comuni|Thirteen Communities|13={{#switch:{{{2}}}|label=トレディチ・コムーニ|category=トレディチ・コムーニ方言}}<!--
-->|トルコ|Turkey={{#switch:{{{2}}}|label=トルコ|category=トルコ}}<!--
-->|トルコ語|Turkish={{#switch:{{{2}}}|label=トルコ語関連|category=トルコ語に関連する語}}<!--
-->|蜻蛉={{#switch:{{{2}}}|label=蜻蛉|category=蜻蛉}}<!--
-->|内科学|internal medicine={{#switch:{{{2}}}|label=内科学|category=内科学}}<!--
-->|ナイジェリア変種|Nigeria={{#switch:{{{2}}}|label=ナイジェリア|category=ナイジェリア{{language|{{{lang}}}}}}}<!--
-->|ナイフ|knife={{#switch:{{{2}}}|label=ナイフ|category=ナイフ}}<!--
-->|ナウパン|Naupan={{#switch:{{{2}}}|label=ナウパン|category=ナウパン方言}}<!--
-->|長柄武器|polearm={{#switch:{{{2}}}|label=長柄武器|category=長柄武器}}<!--
-->|なぎなた|naginata={{#switch:{{{2}}}|label=なぎなた|category=なぎなた}}<!--
-->|ナス科={{#switch:{{{2}}}|label=ナス科|category=ナス科}}<!--
-->|ナチズム|Nazism={{#switch:{{{2}}}|label=ナチズム|category=ナチズム}}<!--
-->|ナッツ|nuts={{#switch:{{{2}}}|label=ナッツ|category=ナッツ}}<!--
-->|ナデシコ科={{#switch:{{{2}}}|label=ナデシコ科|category=ナデシコ科}}<!--
-->|ナデシコ目|Caryophyllales={{#switch:{{{2}}}|label=ナデシコ目|category=ナデシコ目}}<!--
-->|ナミビア変種|Namibia={{#switch:{{{2}}}|label=ナミビア|category=ナミビア{{language|{{{lang}}}}}}}<!--
-->|軟体動物|mollusc={{#switch:{{{2}}}|label=軟体動物|category=軟体動物}}<!--
-->|軟体動物学={{#switch:{{{2}}}|label=軟体動物学|category=軟体動物学}}<!--
-->|南中部ベトナム|South Central Vietnam={{#switch:{{{2}}}|label=南中部ベトナム|category=南中部方言}}<!--
-->|南部カレリア|South Karelian={{#switch:{{{2}}}|label=南部カレリア|category=南部カレリア方言}}<!--
-->|南米|South American Spanish={{#switch:{{{2}}}|label=南米|category=南米スペイン語}}<!--
-->|南米の国|南米の国名|南アメリカの国|南アメリカの国名={{#switch:{{{2}}}|label=南米の国|category=南米の国名}}<!--
-->|ニカラグアスペイン語|ニカラグア変種|Nicaragua={{#switch:{{{2}}}|label=ニカラグア|category=ニカラグアスペイン語}}<!--
-->|肉|meat={{#switch:{{{2}}}|label=肉|category=肉}}<!--
-->|ニクズク科={{#switch:{{{2}}}|label=ニクズク科|category=ニクズク科}}<!--
-->|西アジア史={{#switch:{{{2}}}|label=西アジア史|category=西アジア史}}<!--
-->|西アルメニア語|西アルメニア|Western Armenian|hy-W={{#switch:{{{2}}}|label=西アルメニア語|category=西アルメニア語}}<!--
-->|ニシキギ科={{#switch:{{{2}}}|label=ニシキギ科|category=ニシキギ科}}<!--
-->|西ゲルマン|West Germanic={{#switch:{{{2}}}|label=西ゲルマン|category=西ゲルマン方言}}<!--
-->|西チェロキー|Western Cherokee={{#switch:{{{2}}}|label=西チェロキー|category=西チェロキー語}}<!--
-->|西ヨーロッパ史={{#switch:{{{2}}}|label=西ヨーロッパ史|category=西ヨーロッパ史}}<!--
-->|西ロンバルド語|西ロンバルド|Western Lombard={{#switch:{{{2}}}|label=西ロンバルド|category=西ロンバルド語}}<!--
-->|ニシン目={{#switch:{{{2}}}|label=ニシン目|category=ニシン目}}<!--
-->|日本={{#switch:{{{2}}}|label=日本|category=日本}}<!--
-->|日本拳法|nipponkempo={{#switch:{{{2}}}|label=日本拳法|category=日本拳法}}<!--
-->|日本語|Japanese={{#switch:{{{2}}}|label=日本語関連|category=日本語に関連する語}}<!--
-->|日本語人名={{#switch:{{{2}}}|label=日本語人名|category=日本語人名}}<!--
-->|日本史={{#switch:{{{2}}}|label=日本史|category=日本史}}<!--
-->|日本史 官名|官名={{#switch:{{{2}}}|label=日本の官名|category=日本史 官名}}<!--
-->|日本史時代区分={{#switch:{{{2}}}|label=日本史時代区分|category=日本史時代区分}}<!--
-->|日本神話|Japanese mythology={{#switch:{{{2}}}|label=日本神話|category=日本神話}}<!--
-->|日本の旧国名={{#switch:{{{2}}}|label=日本の旧国名|category=日本の旧国名}}<!--
-->|日本の月名={{#switch:{{{2}}}|label=日本の月名|category=日本の月名}}<!--
-->|日本の都市|city in Japan|cities in Japan={{#switch:{{{2}}}|label=日本の都市|category=日本の都市}}<!--
-->|日本の歴史上の人物={{#switch:{{{2}}}|label=日本の歴史上の人物|category=日本の歴史上の人物}}<!--
-->|日本の歴史的地名={{#switch:{{{2}}}|label=日本の歴史的地名|category=日本の歴史的地名}}<!--
-->|二枚貝|bivalve={{#switch:{{{2}}}|label=二枚貝|category=二枚貝}}<!--
-->|ニューカッスル|Tyneside|Geordie={{#switch:{{{2}}}|label=ニューカッスル|category=ニューカッスル方言}}<!--
-->|ニューカレドニア変種|New Caledonia={{#switch:{{{2}}}|label=ニューカレドニア|category=ニューカレドニア{{language|{{{lang}}}}}}}<!--
-->|ニュージーランド変種|New Zealand|NewZealand|NZ={{#switch:{{{2}}}|label=ニュージーランド|category=ニュージーランド{{language|{{{lang}}}}}}}<!--
-->|ニューファンドランド|ニューファンドランド・ラブラドール州|ニューファンドランド変種|Newfoundland={{#switch:{{{2}}}|label=ニューファンドランド・ラブラドール州|category=ニューファンドランド{{language|{{{lang}}}}}}}<!--
-->|ニューブランズウィック|New Brunswick={{#switch:{{{2}}}|label=ニューブランズウィック|category=ニューブランズウィック方言}}<!--
-->|乳製品|dairy product={{#switch:{{{2}}}|label=乳製品|category=乳製品}}<!--
-->|女房詞|女房言葉={{#switch:{{{2}}}|label=女房詞|category=女房詞}}<!--
-->|人間|human={{#switch:{{{2}}}|label=人間|category=人間}}<!--
-->|人間の活動|human activity|human activities={{#switch:{{{2}}}|label=人間の活動|category=人間の活動}}<!--
-->|人間行動学|human behavior={{#switch:{{{2}}}|label=人間行動学|category=人間行動学}}<!--
-->|ヌーオロ|Nuorese={{#switch:{{{2}}}|label=ヌーオロ|category=ヌーオロ・サルデーニャ語}}<!--
-->|猫|cat={{#switch:{{{2}}}|label=猫|category=猫}}<!--
-->|ネコ科|felids={{#switch:{{{2}}}|label=ネコ科|category=ネコ科}}<!--
-->|熱化学|thermochemistry={{#switch:{{{2}}}|label=熱化学|category=熱化学}}<!--
-->|ネットボール|netball={{#switch:{{{2}}}|label=ネットボール|category=ネットボール}}<!--
-->|ネットワーク|network={{#switch:{{{2}}}|label=ネットワーク|category=ネットワーク}}<!--
-->|熱力学|thermodynamics={{#switch:{{{2}}}|label=熱力学|category=熱力学}}<!--
-->|燃焼|combustion={{#switch:{{{2}}}|label=燃焼|category=燃焼}}<!--
-->|年代学|chronology={{#switch:{{{2}}}|label=年代学|category=年代学}}<!--
-->|脳|brain={{#switch:{{{2}}}|label=脳|category=脳}}<!--
-->|能|noh={{#switch:{{{2}}}|label=能|category=能}}<!--
-->|農学|agricultural science|agriscience={{#switch:{{{2}}}|label=農学|category=農学}}<!--
-->|能楽={{#switch:{{{2}}}|label=能楽|category=能楽}}<!--
-->|能格動詞|ergative={{#switch:{{{2}}}|label=能格動詞|category=能格動詞}}<!--
-->|農業|agriculture={{#switch:{{{2}}}|label=農業|category=農業}}<!--
-->|農業機械={{#switch:{{{2}}}|label=農業機械|category=農業機械}}<!--
-->|ノーサンブリア|Northumbrian={{#switch:{{{2}}}|label=ノーサンブリア|category=ノーサンブリア方言}}<!--
-->|ノースダコタ|ノースダコタ州|northern Lakota={{#switch:{{{2}}}|label=ノースダコタ州|category=北部方言}}<!--
-->|ノウゼンカズラ科={{#switch:{{{2}}}|label=ノウゼンカズラ科|category=ノウゼンカズラ科}}<!--
-->|乗り物|vehicle={{#switch:{{{2}}}|label=乗り物|category=乗り物}}<!--
-->|ハードウェア|computer hardware|hardware={{#switch:{{{2}}}|label=ハードウェア|category=ハードウェア}}<!--
-->|バーミューダ|バーミューダ英語|Bermuda={{#switch:{{{2}}}|label=バーミューダ|category=バーミューダ{{language|{{{lang}}}}}}}<!--
-->|ハーリング|hurling={{#switch:{{{2}}}|label=ハーリング|category=ハーリング}}<!--
-->|バイアスロン|biathlon={{#switch:{{{2}}}|label=バイアスロン|category=バイアスロン}}<!--
-->|廃語|obsolete={{#switch:{{{2}}}|label=廃語|category=廃語}}<!--
-->|破格|nonstandard|non-standard={{#switch:{{{2}}}|label=破格|category=破格}}<!--
-->|パキスタン変種|Pakistan={{#switch:{{{2}}}|label=パキスタン|category=パキスタン{{language|{{{lang}}}}}}}<!--
-->|履物|footwear={{#switch:{{{2}}}|label=履物|category=履物}}<!--
-->|馬具|horse tack={{#switch:{{{2}}}|label=馬具|category=馬具}}<!--
-->|爆薬|explosive={{#switch:{{{2}}}|label=爆薬|category=爆薬}}<!--
-->|禿鷹|vulture={{#switch:{{{2}}}|label=禿鷹|category=禿鷹}}<!--
-->|橋={{#switch:{{{2}}}|label=橋|category=橋}}<!--
-->|バショウ科|equestrianism={{#switch:{{{2}}}|label=バショウ科|category=バショウ科}}<!--
-->|馬術|equestrianism={{#switch:{{{2}}}|label=馬術|category=馬術}}<!--
-->|バスク・ペロタ|Basque pelota={{#switch:{{{2}}}|label=バスク・ペロタ|category=バスク・ペロタ}}<!--
-->|バスケットボール|basketball={{#switch:{{{2}}}|label=バスケットボール|category=バスケットボール}}<!--
-->|旗|flag={{#switch:{{{2}}}|label=旗|category=旗}}<!--
-->|蜂|bee={{#switch:{{{2}}}|label=蜂|category=蜂}}<!--
-->|爬虫両生類学={{#switch:{{{2}}}|label=爬虫両生類学|category=爬虫両生類学}}<!--
-->|爬虫類|reptile={{#switch:{{{2}}}|label=爬虫類|category=爬虫類}}<!--
-->|バックギャモン|backgammon={{#switch:{{{2}}}|label=バックギャモン|category=バックギャモン}}<!--
-->|発生生物学|発生学|embryology={{#switch:{{{2}}}|label=発生生物学|category=発生生物学}}<!--
-->|バドミントン|badminton={{#switch:{{{2}}}|label=バドミントン|category=バドミントン}}<!--
-->|バトントワリング|baton twirling={{#switch:{{{2}}}|label=バトントワリング|category=バトントワリング}}<!--
-->|花|flower={{#switch:{{{2}}}|label=花|category=花}}<!--
-->|パナマスペイン語|パナマ変種|Panama={{#switch:{{{2}}}|label=パナマ|category=パナマスペイン語}}<!--
-->|隼|falconid={{#switch:{{{2}}}|label=隼|category=隼}}<!--
-->|バラ科={{#switch:{{{2}}}|label=バラ科|category=バラ科}}<!--
-->|バラ目={{#switch:{{{2}}}|label=バラ目|category=バラ目}}<!--
-->|バラモン教={{#switch:{{{2}}}|label=バラモン教|category=バラモン教}}<!--
-->|バレエ|ballet={{#switch:{{{2}}}|label=バレエ|category=バレエ}}<!--
-->|バレーボール|volleyball={{#switch:{{{2}}}|label=バレーボール|category=バレーボール}}<!--
-->|バレンシア|Valencia={{#switch:{{{2}}}|label=バレンシア|category=バレンシア方言}}<!--
-->|ハロウィン|Halloween={{#switch:{{{2}}}|label=ハロウィン|category=ハロウィン}}<!--
-->|パワーリフティング|powerlifting={{#switch:{{{2}}}|label=パワーリフティング|category=パワーリフティング}}<!--
-->|ハワイ神話|Hawaiian mythology={{#switch:{{{2}}}|label=[[w:ハワイ神話|ハワイ神話]]|category=ハワイ神話}}<!--
-->|パン|bread={{#switch:{{{2}}}|label=パン|category=パン}}<!--
-->|ハングル={{#switch:{{{2}}}|label=ハングル|category=ハングル}}<!--
-->|犯罪|crime={{#switch:{{{2}}}|label=犯罪|category=犯罪}}<!--
-->|犯罪学|criminology={{#switch:{{{2}}}|label=犯罪学|category=犯罪学}}<!--
-->|半翅類={{#switch:{{{2}}}|label=半翅類|category=半翅類}}<!--
-->|半島|peninsula={{#switch:{{{2}}}|label=半島|category=半島}}<!--
-->|ハンドボール|handball={{#switch:{{{2}}}|label=ハンドボール|category=ハンドボール}}<!--
-->|パン・ヴラックス法|Pan-Vlax={{#switch:{{{2}}}|label=パン・ヴラックス法|category=パン・ヴラックス法}}<!--
-->|火|fire={{#switch:{{{2}}}|label=火|category=火}}<!--
-->|東アジア史={{#switch:{{{2}}}|label=東アジア史|category=東アジア史}}<!--
-->|東アルメニア語|東アルメニア|Eastern Armenian|hy-E={{#switch:{{{2}}}|label=東アルメニア語|category=東アルメニア語}}<!--
-->|東ゲルマン|East Germanic={{#switch:{{{2}}}|label=東ゲルマン|category=東ゲルマン方言}}<!--
-->|東チェロキー|Eastern Cherokee={{#switch:{{{2}}}|label=東チェロキー|category=東チェロキー語}}<!--
-->|東バシキール|Eastern Bashkir={{#switch:{{{2}}}|label=東バシキール|category=東バシキール語}}<!--
-->|東ヨーロッパ史={{#switch:{{{2}}}|label=東ヨーロッパ史|category=東ヨーロッパ史}}<!--
-->|東ロンバルド語|東ロンバルド|Eastern Lombard={{#switch:{{{2}}}|label=東ロンバルド|category=東ロンバルド語}}<!--
-->|光|light={{#switch:{{{2}}}|label=光|category=光}}<!--
-->|卑語|vulgar={{#switch:{{{2}}}|label=卑語|category=卑語}}<!--
-->|ビザンツ|Byzantine={{#switch:{{{2}}}|label=ビザンツ|category=ビザンツ}}<!--
-->|ビジネス|business={{#switch:{{{2}}}|label=ビジネス|category=ビジネス}}<!--
-->|美術={{#switch:{{{2}}}|label=美術|category=美術}}<!--
-->|ヒジュラ暦|Hijra|hijra|Islamic months|islamic months|Islamic month={{#switch:{{{2}}}|label=ヒジュラ暦|category=ヒジュラ暦}}<!--
-->|微生物学|microbiology={{#switch:{{{2}}}|label=微生物学|category=微生物学}}<!--
-->|ヒタキ科|squirrel={{#switch:{{{2}}}|label=ヒタキ科|category=ヒタキ科}}<!--
-->|ビタミン|Vitamin|vitamin={{#switch:{{{2}}}|label=ビタミン|category=ビタミン}}<!--
-->|羊|sheep={{#switch:{{{2}}}|label=羊|category=羊}}<!--
-->|否定極性表現|否定形で|negative polarity|in the negative={{#switch:{{{2}}}|label=[[付録:用語集#否定極性|否定極性]]表現で|category=否定極性表現}}<!--
-->|ヒト科|hominid={{#switch:{{{2}}}|label=ヒト科|category=ヒト科}}<!--
-->|皮肉|sarcastic|sarcastically|ironic={{#switch:{{{2}}}|label=皮肉|category=皮肉}}<!--
-->|泌尿器科学|urology={{#switch:{{{2}}}|label=泌尿器科学|category=泌尿器科学}}<!--
-->|非人称|impersonal={{#switch:{{{2}}}|label=非人称|category=非人称動詞}}<!--
-->|ビバロ・アルピーネ語|ビバロ・アルピーネ|Vivaro-Alpine={{#switch:{{{2}}}|label=ビバロ・アルピーネ語|category=ビバロ・アルピーネ語}}<!--
-->|皮膚|skin={{#switch:{{{2}}}|label=[[皮膚]]|category=皮膚}}<!--
-->|皮膚科学|dermatology={{#switch:{{{2}}}|label=皮膚科学|category=皮膚科学}}<!--
-->|微分幾何学={{#switch:{{{2}}}|label=[[微分幾何学]]|category=微分幾何学}}<!--
-->|微分積分学|微積分学|微分積分|微積分|微分|積分|calculus|differentiation|integral={{#switch:{{{2}}}|label=[[微分積分学]]|category=微分積分学}}<!--
-->|ヒメハギ科={{#switch:{{{2}}}|label=ヒメハギ科|category=ヒメハギ科}}<!--
-->|ビャクダン科={{#switch:{{{2}}}|label=ビャクダン科|category=ビャクダン科}}<!--
-->|比喩|figurative={{#switch:{{{2}}}|label=[[比喩]]|category=比喩}}<!--
-->|ヒユ科|squirrel={{#switch:{{{2}}}|label=ヒユ科|category=ヒユ科}}<!--
-->|豹|ヒョウ属|panther={{#switch:{{{2}}}|label=ヒョウ属|category=豹}}<!--
-->|病気|disease={{#switch:{{{2}}}|label=[[病気]]|category=病気}}<!--
-->|標準アルバニア語|Standard Albanian={{#switch:{{{2}}}|label=標準アルバニア語|category=標準アルバニア語}}<!--
-->|標準バビロニア語|SBab|Standard Babylonian={{#switch:{{{2}}}|label=標準バビロニア語|category=標準バビロニア語}}<!--
-->|病理学|pathology={{#switch:{{{2}}}|label=[[病理学]]|category=病理学}}<!--
-->|平安道方言|平安道|Pyongan={{#switch:{{{2}}}|label=平安道方言|category=平安道方言}}<!--
-->|ビリヤード|billiards={{#switch:{{{2}}}|label=[[ビリヤード]]|category=ビリヤード}}<!--
-->|ヒルガオ科={{#switch:{{{2}}}|label=ヒルガオ科|category=ヒルガオ科}}<!--
-->|ビワモドキ科={{#switch:{{{2}}}|label=ビワモドキ科|category=ビワモドキ科}}<!--
-->|ビワモドキ目={{#switch:{{{2}}}|label=ビワモドキ目|category=ビワモドキ目}}<!--
-->|品詞|part of speech|parts of speech={{#switch:{{{2}}}|label=品詞|category=品詞}}<!--
-->|ヒンズー教|ヒンドゥー教|Hinduism={{#switch:{{{2}}}|label=ヒンズー教|category=ヒンズー教}}<!--
-->|ファイユーム|Fayyumic={{#switch:{{{2}}}|label=ファイユーム|category=ファイユーム方言}}<!--
-->|ファシズム|fascism={{#switch:{{{2}}}|label=ファシズム|category=ファシズム}}<!--
-->|ファッション|fashion={{#switch:{{{2}}}|label=ファッション|category=ファッション}}<!--
-->|フィールドホッケー|field hockey={{#switch:{{{2}}}|label=フィールドホッケー|category=フィールドホッケー}}<!--
-->|フィギュアスケート|figure skating={{#switch:{{{2}}}|label=フィギュアスケート|category=フィギュアスケート}}<!--
-->|ブードゥー教|voodoo={{#switch:{{{2}}}|label=ブードゥー教|category=ブードゥー教}}<!--
-->|プーター|Puter={{#switch:{{{2}}}|label=プーター|category=プーター}}<!--
-->|ファンタジー|fantasy={{#switch:{{{2}}}|label=ファンタジー|category=ファンタジー}}<!--
-->|フィクション|fiction={{#switch:{{{2}}}|label=フィクション|category=フィクション}}<!--
-->|フィリピン変種|Philippine|Philippines|フィリピン={{#switch:{{{2}}}|label=フィリピン|category=フィリピン{{language|{{{lang}}}}}}}<!--
-->|フウロソウ目={{#switch:{{{2}}}|label=フウロソウ目|category=フウロソウ目}}<!--
-->|フェミニズム|feminism={{#switch:{{{2}}}|label=フェミニズム|category=フェミニズム}}<!--
-->|フェリング・エームラング|Föhr-Amrum={{#switch:{{{2}}}|label=フェリング・エームラング|category=フェリング・エームラング方言}}<!--
-->|プエルトリコスペイン語|プエルトリコ変種|Puerto Rico={{#switch:{{{2}}}|label=プエルトリコ|category=プエルトリコスペイン語}}<!--
-->|フェンシング|fencing={{#switch:{{{2}}}|label=フェンシング|category=フェンシング}}<!--
-->|フォルマッツァ|Formazza={{#switch:{{{2}}}|label=フォルマッツァ語|category=フォルマッツァ語}}<!--
-->|フォント|font={{#switch:{{{2}}}|label=フォント|category=フォント}}<!--
-->|不可算名詞|不可算|uncountable|uncountable+={{#switch:{{{2}}}|label=不可算|category=不可算名詞}}<!--
-->|不活動体|inanimate={{#switch:{{{2}}}|label=不活動体|category=不活動体}}<!--
-->|武器|weapon={{#switch:{{{2}}}|label=武器|category=武器}}<!--
-->|フクギ科={{#switch:{{{2}}}|label=フクギ科|category=フクギ科}}<!--
-->|副詞句={{#switch:{{{2}}}|label=副詞句|category=成句 副詞句}}<!--
-->|複素解析|複素解析学|複素関数論|関数論|complex analysis={{#switch:{{{2}}}|label=複素解析学|category=複素解析}}<!--
-->|フグ目={{#switch:{{{2}}}|label=フグ目|category=フグ目}}<!--
-->|副助詞={{#switch:{{{2}}}|label=副助詞|category=助詞 副助詞}}<!--
-->|腹足類|gastropod={{#switch:{{{2}}}|label=腹足類|category=腹足類}}<!--
-->|袋|bag|bags={{#switch:{{{2}}}|label=袋|category=袋}}<!--
-->|梟|owl={{#switch:{{{2}}}|label=梟|category=梟}}<!--
-->|武術|martial art|martial arts={{#switch:{{{2}}}|label=武術|category=武術}}<!--
-->|武術家={{#switch:{{{2}}}|label=武術家|category=武術家}}<!--
-->|婦人科学|gynaecology={{#switch:{{{2}}}|label=婦人科学|category=婦人科学}}<!--
-->|豚|pig={{#switch:{{{2}}}|label=豚|category=豚}}<!--
-->|フタバガキ科={{#switch:{{{2}}}|label=フタバガキ科|category=フタバガキ科}}<!--
-->|復活祭|Easter={{#switch:{{{2}}}|label=復活祭|category=復活祭}}<!--
-->|仏教|Buddhism={{#switch:{{{2}}}|label=仏教|category=仏教}}<!--
-->|フットボール|football={{#switch:{{{2}}}|label=フットボール|category=フットボール}}<!--
-->|物理化学|physical chemistry={{#switch:{{{2}}}|label=物理化学|category=物理化学}}<!--
-->|物理学|物理|physics={{#switch:{{{2}}}|label=物理学|category=物理学}}<!--
-->|武道={{#switch:{{{2}}}|label=武道|category=武道}}<!--
-->|ブドウ科={{#switch:{{{2}}}|label=ブドウ科|category=ブドウ科}}<!--
-->|武道家={{#switch:{{{2}}}|label=武道家|category=武道家}}<!--
-->|不動産={{#switch:{{{2}}}|label=不動産|category=不動産}}<!--
-->|フトモモ科={{#switch:{{{2}}}|label=フトモモ科|category=フトモモ科}}<!--
-->|フトモモ目={{#switch:{{{2}}}|label=フトモモ目|category=フトモモ目}}<!--
-->|鮒={{#switch:{{{2}}}|label=鮒|category=鮒}}<!--
-->|ブナ科={{#switch:{{{2}}}|label=ブナ科|category=ブナ科}}<!--
-->|ブナ目={{#switch:{{{2}}}|label=ブナ目|category=ブナ目}}<!--
-->|プファルツ語|プファルツ|Palatine={{#switch:{{{2}}}|label=プファルツ語|category=プファルツ語}}<!--
-->|不変化名詞|不変化|indeclinable={{#switch:{{{2}}}|label=不変化名詞|category=不変化名詞}}<!--
-->|ブラジルポルトガル語|ブラジル変種|Brazil={{#switch:{{{2}}}|label=ブラジル|category=ブラジルポルトガル語}}<!--
-->|プラスチック|plastic={{#switch:{{{2}}}|label=プラスチック|category=プラスチック}}<!--
-->|フラマン語={{#switch:{{{2}}}||label=フラマン語|category=フラマン語}}<!--
-->|フラメンコ|flamenco={{#switch:{{{2}}}|label=フラメンコ|category=フラメンコ}}<!--
-->|フランス={{#switch:{{{2}}}|label=フランス|category=フランス}}<!--
-->|フランス語={{#switch:{{{2}}}||label=フランス語関連|category=フランス語に関連する語}}<!--
-->|フランス変種|France|French={{#switch:{{{2}}}|label=フランス|category=フランス{{language|{{{lang}}}}}}}<!--
-->|ブリッジ|bridge={{#switch:{{{2}}}|label=ブリッジ|category=ブリッジ}}<!--
-->|プロヴァンス語|プロヴァンス|Provençal={{#switch:{{{2}}}|label=プロヴァンス|category=プロヴァンス語}}<!--
-->|プログラミング|programming={{#switch:{{{2}}}|label=プログラミング|category=プログラミング}}<!--
-->|プロテスタント|Protestantism|Protestant={{#switch:{{{2}}}|label=プロテスタント|category=プロテスタント}}<!--
-->|文化|culture={{#switch:{{{2}}}|label=文化|category=文化}}<!--
-->|文化語|North Korea={{#switch:{{{2}}}|label=文化語|category=文化語}}<!--
-->|文学|literature={{#switch:{{{2}}}|label=文学|category=文学}}<!--
-->|文献={{#switch:{{{2}}}|label=文献|category=文献}}<!--
-->|文献学|philology={{#switch:{{{2}}}|label=文献学|category=文献学}}<!--
-->|文章語|文語|literary={{#switch:{{{2}}}|label=文章語|category=文章語}}<!--
-->|文法|grammar={{#switch:{{{2}}}|label=文法|category=文法}}<!--
-->|文房具|stationery={{#switch:{{{2}}}|label=文房具|category=文房具}}<!--
-->|分類学|taxonomy={{#switch:{{{2}}}|label=分類学|category=分類学}}<!--
-->|平安|평안|Pyeongan={{#switch:{{{2}}}|label=平安|category=平安道方言}}<!--
-->|米語|American spelling|US={{#switch:{{{2}}}|label=米語|category=米語}}<!--
-->|平南|平安南道|평남|South Pyeongan={{#switch:{{{2}}}|label=平南|category=平安道方言}}<!--
-->|平北|平安北道|평북|North Pyongan={{#switch:{{{2}}}|label=平北|category=平安道方言}}<!--
-->|ペイントボール|paitnball={{#switch:{{{2}}}|label=ペイントボール|category=ペイントボール}}<!--
-->|北京語|Beijing Mandarin|Beijing|Peking|Pekingese={{#switch:{{{2}}}|label=[[:w:北京語|北京語]]|category=北京語}}<!--
-->|ベクトル解析|ベクトル解析学|vector calculus={{#switch:{{{2}}}|label=[[:w:ベクトル解析|ベクトル解析]]|category=ベクトル解析}}<!--
-->|ペサパッロ|pesäpallo={{#switch:{{{2}}}|label=ペサパッロ|category=ペサパッロ}}<!--
-->|蔑称|derogatory|offensive={{#switch:{{{2}}}|label=[[蔑称]]|category=蔑称}}<!--
-->|ベトナム|Vietnam={{#switch:{{{2}}}|label=[[ベトナム]]|category=ベトナム}}<!--
-->|ベトナム語|Vietnamese={{#switch:{{{2}}}|label=ベトナム語関連|category=ベトナム語に関連する語}}<!--
-->|ベトナム史={{#switch:{{{2}}}|label=ベトナム史|category=ベトナム史}}<!--
-->|ベトナム変種={{#switch:{{{2}}}|label=ベトナム|category=ベトナム{{language|{{{lang}}}}}}}<!--
-->|ベナン変種|Benin={{#switch:{{{2}}}|label=ベナン|category=ベナン{{language|{{{lang}}}}}}}<!--
-->|ベネズエラスペイン語|ベネズエラ変種|Venezuela={{#switch:{{{2}}}|label=ベネズエラ|category=ベネズエラスペイン語}}<!--
-->|蛇|snake={{#switch:{{{2}}}|label=蛇|category=蛇}}<!--
-->|ヘブライ語={{#switch:{{{2}}}|label=ヘブライ語関連|category=ヘブライ語に関連する語}}<!--
-->|部屋|room={{#switch:{{{2}}}|label=部屋|category=部屋}}<!--
-->|ベラルーシ|Belarus={{#switch:{{{2}}}|label=ベラルーシ|category=ベラルーシ}}<!--
-->|ベラルーシ語|Belarusian={{#switch:{{{2}}}|label=ベラルーシ語関連|category=ベラルーシ語に関連する語}}<!--
-->|ベラルーシ史={{#switch:{{{2}}}|label=ベラルーシ史|category=ベラルーシ史}}<!--
-->|ベラルーシ変種={{#switch:{{{2}}}|label=ベラルーシ|category=ベラルーシ{{language|{{{lang}}}}}}}<!--
-->|ペルースペイン語|ペルー変種|Peru={{#switch:{{{2}}}|label=ペルー|category=ペルースペイン語}}<!--
-->|ベルギー変種|Belgian|België|Belgium|ベルギー={{#switch:{{{2}}}|label=ベルギー|category=ベルギー{{language|{{{lang}}}}}}}<!--
-->|ヘルゴラント|Helgoland={{#switch:{{{2}}}|label=ヘルゴラント|category=ヘルゴラント方言}}<!--
-->|ペルシア語|Persian={{#switch:{{{2}}}|label=ペルシア語関連|category=ペルシア語に関連する語}}<!--
-->|ペンギン|penguin={{#switch:{{{2}}}|label=ペンギン|category=ペンギン}}<!--
-->|ベンケイソウ科={{#switch:{{{2}}}|label=ベンケイソウ科|category=ベンケイソウ科}}<!--
-->|扁形動物|platyhelminth={{#switch:{{{2}}}|label=扁形動物|category=扁形動物}}<!--
-->|ペン回し|pen spinning={{#switch:{{{2}}}|label=ペン回し|category=ペン回し}}<!--
-->|方位|方角|compass point|direction={{#switch:{{{2}}}|label=方位|category=方位}}<!--
-->|貿易|trade={{#switch:{{{2}}}|label=貿易|category=貿易}}<!--
-->|法学|jurisprudence={{#switch:{{{2}}}|label=法学|category=法学}}<!--
-->|方言|dialect|dialectal={{#switch:{{{2}}}|label=方言|category=方言}}<!--
-->|法執行|law enforcement={{#switch:{{{2}}}|label=法執行|category=法執行}}<!--
-->|棒術={{#switch:{{{2}}}|label=棒術|category=棒術}}<!--
-->|宝飾|jewelry={{#switch:{{{2}}}|label=宝飾|category=宝飾}}<!--
-->|紡績|weaving={{#switch:{{{2}}}|label=紡績|category=紡績}}<!--
-->|放送={{#switch:{{{2}}}|label=放送|category=放送}}<!--
-->|法曹={{#switch:{{{2}}}|label=法曹|category=法曹}}<!--
-->|法律|law|legal={{#switch:{{{2}}}|label=法律|category=法律}}<!--
-->|ボウリング|bowling={{#switch:{{{2}}}|label=ボウリング|category=ボウリング}}<!--
-->|ポーカー|poker={{#switch:{{{2}}}|label=ポーカー|category=ポーカー}}<!--
-->|ボート競技|rowing={{#switch:{{{2}}}|label=ボート競技|category=ボート競技}}<!--
-->|ボードゲーム|board game|board games={{#switch:{{{2}}}|label=ボードゲーム|category=ボードゲーム}}<!--
-->|ポーランド={{#switch:{{{2}}}|label=ポーランド|category=ポーランド}}<!--
-->|ポーランド語|Polish={{#switch:{{{2}}}|label=ポーランド語関連|category=ポーランド語に関連する語}}<!--
-->|ポーランド変種|Poland={{#switch:{{{2}}}|label=ポーランド|category=ポーランド{{language|{{{lang}}}}}}}<!--
-->|簿記|bookkeeping={{#switch:{{{2}}}|label=簿記|category=簿記}}<!--
-->|北欧神話|Norse mythology={{#switch:{{{2}}}|label=北欧神話|category=北欧神話}}<!--
-->|ボクシング|boxing={{#switch:{{{2}}}|label=ボクシング|category=ボクシング}}<!--
-->|北西ゲルマン|Northwest Germanic={{#switch:{{{2}}}|label=北西ゲルマン|category=北西ゲルマン方言}}<!--
-->|北中部ベトナム|North Central Vietnam={{#switch:{{{2}}}|label=北中部ベトナム|category=北中部方言}}<!--
-->|北部カレリア|North Karelian={{#switch:{{{2}}}|label=北部カレリア|category=北部カレリア方言}}<!--
-->|北米の国|北米の国名|北アメリカの国|北アメリカの国名={{#switch:{{{2}}}|label=北米の国|category=北米の国名}}<!--
-->|保険|insurance={{#switch:{{{2}}}|label=保険|category=保険}}<!--
-->|補助動詞={{#switch:{{{2}}}|label=補助動詞|category=補助動詞}}<!--
-->|ボスニア語|Bosnia|Bosnian={{#switch:{{{2}}}|label=ボスニア|category=ボスニア語}}<!--
-->|北海道={{#switch:{{{2}}}|label=北海道|category=北海道}}<!--
-->|ホッケー|hockey={{#switch:{{{2}}}|label=ホッケー|category=ホッケー}}<!--
-->|ボディビル|bodybuilding={{#switch:{{{2}}}|label=ボディビル|category=ボディビル}}<!--
-->|哺乳類|mammal={{#switch:{{{2}}}|label=哺乳類|category=哺乳類}}<!--
-->|哺乳類学|mammalogy={{#switch:{{{2}}}|label=哺乳類学|category=哺乳類学}}<!--
-->|ボブスレー|bobsleigh={{#switch:{{{2}}}|label=ボブスレー|category=ボブスレー}}<!--
-->|ボハイラ|Bohairic={{#switch:{{{2}}}|label=ボハイラ|category=ボハイラ方言}}<!--
-->|ポリアモリー|polyamory={{#switch:{{{2}}}|label=ポリアモリー|category=ポリアモリー}}<!--
-->|ボリビアスペイン語|ボリビア変種|Bolivia={{#switch:{{{2}}}|label=ボリビア|category=ボリビアスペイン語}}<!--
-->|ポルトガル={{#switch:{{{2}}}|label=ポルトガル|category=ポルトガル}}<!--
-->|ポルトガル語|Portuguese={{#switch:{{{2}}}|label=ポルトガル語関連|category=ポルトガル語に関連する語}}<!--
-->|ポルトガル変種|イベリアポルトガル語|Portugal={{#switch:{{{2}}}|label=ポルトガル|category=イベリアポルトガル語}}<!--
-->|ホルトノキ科={{#switch:{{{2}}}|label=ホルトノキ科|category=ホルトノキ科}}<!--
-->|香港英語|Hong Kong={{#switch:{{{2}}}|label=香港|category=香港英語}}<!--
-->|香港語|Hong Kong Cantonese={{#switch:{{{2}}}|label=香港語|category=香港語}}<!--
-->|ホンジュラススペイン語|ホンジュラス変種|Honduras={{#switch:{{{2}}}|label=ホンジュラス|category=ホンジュラススペイン語}}<!--
-->|翻訳研究|translation studies={{#switch:{{{2}}}|label=翻訳研究|category=翻訳研究}}<!--
-->|マーケティング|marketing|Marketing={{#switch:{{{2}}}|label=マーケティング|category=マーケティング}}<!--
-->|マーシア|Mercian={{#switch:{{{2}}}|label=マーシア|category=マーシア方言}}<!--
-->|麻雀|mahjong={{#switch:{{{2}}}|label=麻雀|category=麻雀}}<!--
-->|埋葬={{#switch:{{{2}}}|label=埋葬|category=埋葬}}<!--
-->|膜翅類={{#switch:{{{2}}}|label=膜翅類|category=膜翅類}}<!--
-->|鮪|まぐろ|マグロ={{#switch:{{{2}}}|label=鮪|category=鮪}}<!--
-->|マスメディア|mass media={{#switch:{{{2}}}|label=マスメディア|category=マスメディア}}<!--
-->|マダガスカルマングース科={{#switch:{{{2}}}|label=マダガスカルマングース科|category=マダガスカルマングース科}}<!--
-->|マチン科={{#switch:{{{2}}}|label=マチン科|category=マチン科}}<!--
-->|マニカ|Manyika={{#switch:{{{2}}}|label=マニカ|category=マニカ方言}}<!--
-->|マメ科={{#switch:{{{2}}}|label=マメ科|category=マメ科}}<!--
-->|マメ目={{#switch:{{{2}}}|label=マメ目|category=マメ目}}<!--
-->|マレーシア華語|Malaysian Mandarin|Malaysia Mandarin={{#switch:{{{2}}}|label=[[:w:マレーシア華語|マレーシア]]|category=マレーシア華語}}<!--
-->|マレーシアタミル語|マレーシアタミル語|Malaysian Tamil={{#switch:{{{2}}}|label=マレーシア|category=マレーシアタミル語}}<!--
-->|マレーシア福建|マレーシア福建語|Malaysian Hokkien|Malaysia Hokkien={{#switch:{{{2}}}|label=マレーシア|category=方言}}<!--
-->|マレーシア変種|Malaysia|Malaysian={{#switch:{{{2}}}|label=マレーシア|category=マレーシア{{language|{{{lang}}}}}}}<!--
-->|マンスター|Munster={{#switch:{{{2}}}|label=マンスター|category=マンスター方言}}<!--
-->|マン島|マン島変種|Isle of Man|Manx={{#switch:{{{2}}}|label=マン島|category=マン島{{language|{{{lang}}}}}}}<!--
-->|ミカン科={{#switch:{{{2}}}|label=ミカン科|category=ミカン科}}<!--
-->|湖|lake={{#switch:{{{2}}}|label=湖|category=湖}}<!--
-->|ミストラル式綴り|ミストラル式|ミストラル|Mistralian={{#switch:{{{2}}}|label=ミストラル式綴り|category=ミストラル式綴り}}<!--
-->|ミソハギ科={{#switch:{{{2}}}|label=ミソハギ科|category=ミソハギ科}}<!--
-->|南アジア史={{#switch:{{{2}}}|label=南アジア史|category=南アジア史}}<!--
-->|南アゼルバイジャン|South Azerbaijani={{#switch:{{{2}}}|label=南アゼルバイジャン|category=南アゼルバイジャン語}}<!--
-->|南アフリカ英語|南アフリカ変種|South Africa|South African={{#switch:{{{2}}}|label=南アフリカ|category=南アフリカ英語}}<!--
-->|南アメリカ={{#switch:{{{2}}}|label=南アメリカ|category=南アメリカ}}<!--
-->|南アメリカ史={{#switch:{{{2}}}|label=南アメリカ史|category=南アメリカ史}}<!--
-->|南ベトナム|southern Vietnam|Southern Vietnam|South Vietnam={{#switch:{{{2}}}|label=南ベトナム|category=南部方言}}<!--
-->|南ヨーロッパ史={{#switch:{{{2}}}|label=南ヨーロッパ史|category=南ヨーロッパ史}}<!--
-->|脈翅類={{#switch:{{{2}}}|label=脈翅類|category=脈翅類}}<!--
-->|ミルパ・アルタ|Milpa Alta={{#switch:{{{2}}}|label=ミルパ・アルタ|category=ミルパ・アルタ方言}}<!--
-->|民主主義={{#switch:{{{2}}}|label=民主主義|category=民主主義}}<!--
-->|民族|ethnonym|ethnonyms={{#switch:{{{2}}}|label=民族|category=民族}}<!--
-->|民族差別|ethnic slur={{#switch:{{{2}}}|label=民族差別|category=民族差別}}<!--
-->|ムエタイ|Muay Thai={{#switch:{{{2}}}|label=ムエタイ|category=ムエタイ}}<!--
-->|無機化学|inorganic chemistry={{#switch:{{{2}}}|label=無機化学|category=無機化学}}<!--
-->|無機化合物|inorganic compound={{#switch:{{{2}}}|label=無機化合物|category=無機化合物}}<!--
-->|ムクロジ科={{#switch:{{{2}}}|label=ムクロジ科|category=ムクロジ科}}<!--
-->|ムクロジ目={{#switch:{{{2}}}|label=ムクロジ目|category=ムクロジ目}}<!--
-->|無脊椎動物|invertebrate={{#switch:{{{2}}}|label=無脊椎動物|category=無脊椎動物}}<!--
-->|ムラサキ科={{#switch:{{{2}}}|label=ムラサキ科|category=ムラサキ科}}<!--
-->|ムルシア方言|ムルシア|Murcia={{#switch:{{{2}}}|label=ムルシア|category=ムルシア方言}}<!--
-->|名詞句={{#switch:{{{2}}}|label=名詞句|category=成句 名詞句}}<!--
-->|メキシコスペイン語|メキシコ変種|Mexico={{#switch:{{{2}}}|label=メキシコ|category=メキシコスペイン語}}<!--
-->|メコンデルタ方言|メコンデルタ|Mekong Delta={{#switch:{{{2}}}|label=メコンデルタ|category=メコンデルタ方言}}<!--
-->|メディア={{#switch:{{{2}}}|label=メディア|category=メディア}}<!--
-->|メノルカ|Menorca={{#switch:{{{2}}}|label=メノルカ|category=メノルカ方言}}<!--
-->|免疫学|immunology={{#switch:{{{2}}}|label=免疫学|category=免疫学}}<!--
-->|棉蘭|Medan Hokkien|Medan={{#switch:{{{2}}}|label=棉蘭|category=方言}}<!--
-->|猛禽類={{#switch:{{{2}}}|label=猛禽類|category=猛禽類}}<!--
-->|網翅類={{#switch:{{{2}}}|label=網翅類|category=網翅類}}<!--
-->|モーゼル・フランケン|Moselle Franconian={{#switch:{{{2}}}|label=モーゼル・フランケン|category=モーゼル・フランケン方言}}<!--
-->|モータースポーツ|motor racing|motorsports={{#switch:{{{2}}}|label=モータースポーツ|category=モータースポーツ}}<!--
-->|モーターボート競走|motorboat racing={{#switch:{{{2}}}|label=モーターボート競走|category=モーターボート競走}}<!--
-->|モーリング|Mooring={{#switch:{{{2}}}|label=モーリング|category=モーリング方言}}<!--
-->|モクセイ科={{#switch:{{{2}}}|label=モクセイ科|category=モクセイ科}}<!--
-->|モクレン科={{#switch:{{{2}}}|label=モクレン科|category=モクレン科}}<!--
-->|モクレン目={{#switch:{{{2}}}|label=モクレン目|category=モクレン目}}<!--
-->|文字={{#switch:{{{2}}}|label=文字|category=文字}}<!--
-->|モトクロス|motocross={{#switch:{{{2}}}|label=モトクロス|category=モトクロス}}<!--
-->|モニミア科={{#switch:{{{2}}}|label=モニミア科|category=モニミア科}}<!--
-->|モルドヴァ語|モルドバ語|Moldova={{#switch:{{{2}}}|label=モルドバ|category=モルドヴァ語}}<!--
-->|モロッコ変種|Morocco={{#switch:{{{2}}}|label=モロッコ|category=モロッコ{{language|{{{lang}}}}}}}<!--
-->|モンゴル|Mongolia={{#switch:{{{2}}}|label=モンゴル|category=モンゴル}}<!--
-->|モンゴル語|Mongolian={{#switch:{{{2}}}|label=モンゴル語関連|category=モンゴル語に関連する語}}<!--
-->|モンゴル史={{#switch:{{{2}}}|label=モンゴル史|category=モンゴル史}}<!--
-->|紋章学|heraldry={{#switch:{{{2}}}|label=紋章学|category=紋章学}}<!--
-->|モンテネグロ={{#switch:{{{2}}}|label=モンテネグロ|category=モンテネグロ}}
-->|モンテネグロ語|Montenegro|Montenegrin={{#switch:{{{2}}}|label=モンテネグロ|category=モンテネグロ語}}<!--
-->|モンテネグロ史={{#switch:{{{2}}}|label=モンテネグロ史|category=モンテネグロ史}}<!--
-->|山羊|goat={{#switch:{{{2}}}|label=山羊|category=山羊}}<!--
-->|ヤギ亜科={{#switch:{{{2}}}|label=ヤギ亜科|category=ヤギ亜科}}<!--
-->|野球|baseball={{#switch:{{{2}}}|label=野球|category=野球}}<!--
-->|薬学|pharmacy={{#switch:{{{2}}}|label=薬学|category=薬学}}<!--
-->|約物の名称|約物={{#switch:{{{2}}}|label=約物の名称|category=約物の名称}}<!--
-->|薬理学|pharmacology={{#switch:{{{2}}}|label=薬理学|category=薬理学}}<!--
-->|野菜|vegetable={{#switch:{{{2}}}|label=野菜|category=野菜}}<!--
-->|ヤシ科={{#switch:{{{2}}}|label=ヤシ科|category=ヤシ科}}<!--
-->|ヤシ目={{#switch:{{{2}}}|label=ヤシ目|category=ヤシ目}}<!--
-->|ヤツメウナギ={{#switch:{{{2}}}|label=ヤツメウナギ|category=ヤツメウナギ}}<!--
-->|ヤナギ科={{#switch:{{{2}}}|label=ヤナギ科|category=ヤナギ科}}<!--
-->|槍={{#switch:{{{2}}}|label=槍|category=槍}}<!--
-->|有機化学|organic chemistry={{#switch:{{{2}}}|label=有機化学|category=有機化学}}<!--
-->|有機化合物|organic compound={{#switch:{{{2}}}|label=有機化合物|category=有機化合物}}<!--
-->|有袋類|marsupial={{#switch:{{{2}}}|label=有袋類|category=有袋類}}<!--
-->|有尾目={{#switch:{{{2}}}|label=有尾目|category=有尾目}}<!--
-->|郵便={{#switch:{{{2}}}|label=郵便|category=郵便}}<!--
-->|有毛類={{#switch:{{{2}}}|label=有毛類|category=有毛類}}<!--
-->|雪|snow={{#switch:{{{2}}}|label=雪|category=雪}}<!--
-->|ユキノシタ目={{#switch:{{{2}}}|label=ユキノシタ目|category=ユキノシタ目}}<!--
-->|ユダヤ教|Judaea|Judaism={{#switch:{{{2}}}|label=ユダヤ教|category=ユダヤ教}}<!--
-->|弓矢|bow and arrow={{#switch:{{{2}}}|label=弓矢|category=弓矢}}<!--
-->|容器|container={{#switch:{{{2}}}|label=容器|category=容器}}<!--
-->|幼児語|childish={{#switch:{{{2}}}|label=幼児語|category=幼児語}}<!--
-->|曜日={{#switch:{{{2}}}|label=曜日|category=曜日}}<!--
-->|養蜂={{#switch:{{{2}}}|label=養蜂|category=養蜂}}<!--
-->|ヨークシャー|ヨークシャー英語|Yorkshire={{#switch:{{{2}}}|label=ヨークシャー|category=ヨークシャー{{language|{{{lang}}}}}}}<!--
-->|ヨーロッパ|Europe={{#switch:{{{2}}}|label=ヨーロッパ|category=ヨーロッパ}}<!--
-->|ヨーロッパ史={{#switch:{{{2}}}|label=ヨーロッパ史|category=ヨーロッパ史}}<!--
-->|ヨーロッパの国|ヨーロッパの国名={{#switch:{{{2}}}|label=ヨーロッパの国|category=ヨーロッパの国名}}<!--
-->|四字熟語={{#switch:{{{2}}}|label=四字熟語|category=四字熟語}}<!--
-->|ヨシノボリ={{#switch:{{{2}}}|label=ヨシノボリ|category=ヨシノボリ}}<!--
-->|ラオス変種|Laos={{#switch:{{{2}}}|label=ラオス|category=ラオス{{language|{{{lang}}}}}}}<!--
-->|落語={{#switch:{{{2}}}|label=落語|category=落語}}<!--
-->|駱駝={{#switch:{{{2}}}|label=駱駝|category=駱駝}}<!--
-->|ラクダ科|camelid={{#switch:{{{2}}}|label=ラクダ科|category=ラクダ科}}<!--
-->|ラグビー|rugby={{#switch:{{{2}}}|label=ラグビー|category=ラグビー}}<!--
-->|ラクロス|lacrosse={{#switch:{{{2}}}|label=ラクロス|category=ラクロス}}<!--
-->|ラジオ|radio={{#switch:{{{2}}}|label=ラジオ|category=ラジオ}}<!--
-->|ラテンアメリカ|Latin America|Latin American Spanish={{#switch:{{{2}}}|label=ラテンアメリカ|category=ラテンアメリカ{{language|{{{lang}}}}}}}<!--
-->|ラテン語|Latin={{#switch:{{{2}}}|label=ラテン語関連|category=ラテン語に関連する語}}<!--
-->|ラ・マンチャ|Castilla La Mancha={{#switch:{{{2}}}|label=ラ・マンチャ|category=ラ・マンチャ方言}}<!--
-->|蘭銀官話|Lanyin Mandarin|Lan-Yin Mandarin|Lanyin={{#switch:{{{2}}}|label=[[:w:蘭銀官話|蘭銀官話]]|category=蘭銀官話}}<!--
-->|ラングドック語|ラングドック|Langedoc|Languedoc|Languedocien|ラングドック={{#switch:{{{2}}}|label=ラングドック|category=ラングドック語}}<!--
-->|リオグランデ・ド・スル|Rio Grande do Sul={{#switch:{{{2}}}|label=リオグランデ・ド・スル|category=リオグランデ・ド・スル方言}}<!--
-->|リオプラテンセ|Rioplatense={{#switch:{{{2}}}|label=リオプラテンセ|category=リオプラテンセ{{language|{{{lang}}}}}}}<!--
-->|力学|mechanics={{#switch:{{{2}}}|label=力学|category=力学}}<!--
-->|陸上競技|athletics={{#switch:{{{2}}}|label=陸上競技|category=陸上競技}}<!--
-->|六鎮方言|六鎮|Yukjin={{#switch:{{{2}}}|label=六鎮方言|category=六鎮方言}}<!--
-->|リス科|squirrel={{#switch:{{{2}}}|label=リス科|category=リス科}}<!--
-->|理容|理髪|hairdressing|Hairdressing={{#switch:{{{2}}}|label=理髪|category=理髪}}<!--
-->|リヒテンシュタイン変種|Liechtenstein={{#switch:{{{2}}}|label=リヒテンシュタイン|category=リヒテンシュタイン{{language|{{{lang}}}}}}}<!--
-->|リプアーリ語|リプアーリ|Ripuarian={{#switch:{{{2}}}|label=リプアーリ語|category=リプアーリ語}}<!--
-->|リムーザン|Limousin={{#switch:{{{2}}}|label=リムーザン|category=リムーザン語}}<!--
-->|リメッラ語|リメッラ|Rimella={{#switch:{{{2}}}|label=リメッラ語|category=リメッラ語}}<!--
-->|略語|abbr|abbreviation={{#switch:{{{2}}}|label=略語|category=略語}}<!--
-->|略語 地名複合語|地名複合語={{#switch:{{{2}}}|label=地名複合語|category=略語 地名複合語}}<!--
-->|竜|龍|dragon={{#switch:{{{2}}}|label=竜|category=竜}}<!--
-->|リュージュ|luge={{#switch:{{{2}}}|label=リュージュ|category=リュージュ}}<!--
-->|流体力学|fluid dynamics={{#switch:{{{2}}}|label=流体力学|category=流体力学}}<!--
-->|量子力学|quantum mechanics|particles={{#switch:{{{2}}}|label=量子力学|category=量子力学}}<!--
-->|両生類|amphibian={{#switch:{{{2}}}|label=両生類|category=両生類}}<!--
-->|料理|cuisine={{#switch:{{{2}}}|label=料理|category=料理}}<!--
-->|旅行|travel={{#switch:{{{2}}}|label=旅行|category=旅行}}<!--
-->|林業|forestry={{#switch:{{{2}}}|label=林業|category=林業}}<!--
-->|臨時語|nonce word={{#switch:{{{2}}}|label=臨時語|category=臨時語}}<!--
-->|鱗翅類={{#switch:{{{2}}}|label=鱗翅類|category=鱗翅類}}<!--
-->|リンドウ目={{#switch:{{{2}}}|label=リンドウ目|category=リンドウ目}}<!--
-->|倫理学|ethics={{#switch:{{{2}}}|label=倫理学|category=倫理学}}<!--
-->|ルイジアナ|Louisiana={{#switch:{{{2}}}|label=ルイジアナ|category=ルイジアナ{{language|{{{lang}}}}}}}<!--
-->|ルーマニア|Romania={{#switch:{{{2}}}|label=ルーマニア|category=ルーマニア}}<!--
-->|ルーマニア語|Romanian={{#switch:{{{2}}}|label=ルーマニア語関連|category=ルーマニア語に関連する語}}<!--
-->|ルゼルナ|Luserna={{#switch:{{{2}}}|label=ルゼルナ|category=ルゼルナ方言}}<!--
-->|霊長類|primate={{#switch:{{{2}}}|label=霊長類|category=霊長類}}<!--
-->|霊長類学={{#switch:{{{2}}}|label=霊長類学|category=霊長類学}}<!--
-->|羚羊={{#switch:{{{2}}}|label=羚羊|category=羚羊}}<!--
-->|歴史|history|historical|Hx|hx={{#switch:{{{2}}}|label=歴史|category=歴史}}<!--
-->|歴史学|historiography={{#switch:{{{2}}}|label=歴史学|category=歴史学}}<!--
-->|歴史 官名|官名={{#switch:{{{2}}}|label=官名|category=歴史 官名}}<!--
-->|歴史上の人物={{#switch:{{{2}}}|label=歴史上の人物|category=歴史上の人物}}<!--
-->|レスリング|wrestling={{#switch:{{{2}}}|label=レスリング|category=レスリング}}<!--
-->|レトロニム={{#switch:{{{2}}}|label=レトロニム|category=レトロニム}}<!--
-->|レユニオン|Réunion={{#switch:{{{2}}}|label=レユニオン|category=レユニオンフランス語}}<!--
-->|恋愛|romantic orientation={{#switch:{{{2}}}|label=恋愛|category=恋愛}}<!--
-->|錬金術|Alchemy|alchemy={{#switch:{{{2}}}|label=錬金術|category=錬金術}}<!--
-->|労働|work|working|labor|travay={{#switch:{{{2}}}|label=労働|category=労働}}<!--
-->|老年学|gerontology={{#switch:{{{2}}}|label=老年学|category=老年学}}<!--
-->|ローマ神話|Roman god|Roman mythology={{#switch:{{{2}}}|label=ローマ神話|category=ローマ神話}}<!--
-->|ローラーダービー|roller derby={{#switch:{{{2}}}|label=ローラーダービー|category=ローラーダービー}}<!--
-->|ログドーロ|Logudorese={{#switch:{{{2}}}|label=ログドーロ|category=ログドーロ・サルデーニャ語}}<!--
-->|ロシア|Russia={{#switch:{{{2}}}|label=ロシア|category=ロシア}}<!--
-->|ロシア語={{#switch:{{{2}}}|label=ロシア語関連|category=ロシア語に関連する語}}<!--
-->|ロシア史={{#switch:{{{2}}}|label=ロシア史|category=ロシア史}}<!--
-->|ロシア西部|Western Russian={{#switch:{{{2}}}|label=ロシア西部|category=ロシア西部方言}}<!--
-->|ロシア南部|South Russia|Southern Russian={{#switch:{{{2}}}|label=ロシア南部|category=ロシア南部方言}}<!--
-->|ロマンシュ・グリシュン|Rumantsch Grischun={{#switch:{{{2}}}|label=ロマンシュ・グリシュン|category=ロマンシュ・グリシュン}}<!--
-->|論理学|logic={{#switch:{{{2}}}|label=論理学|category=論理学}}<!--
-->|ワウチナンゴ|Huauchinango={{#switch:{{{2}}}|label=ワウチナンゴ|category=ワウチナンゴ方言}}<!--
-->|鷲|eagle={{#switch:{{{2}}}|label=鷲|category=鷲}}<!--
-->|和製英語={{#switch:{{{2}}}|label=和製英語|category=和製英語}}<!--
-->|和船={{#switch:{{{2}}}|label=和船|category=船舶}}<!--
-->|鰐|alligator|crocodile={{#switch:{{{2}}}|label=鰐|category=鰐}}<!--
-->|上代語|上代={{#switch:{{{2}}}|label=上代語|category=上代語}}<!--
-->|上代東国方言|上代東国={{#switch:{{{2}}}|label=上代東国方言|category=上代東国方言}}<!--
-->|近世上方語|近世上方={{#switch:{{{2}}}|label=近世上方語|category=近世上方語}}<!--
-->|近世語|近世={{#switch:{{{2}}}|label=近世語|category=近世語}}<!--
-->|西日本方言={{#switch:{{{2}}}|label=西日本方言|category=西日本方言}}<!--
-->|岐阜・愛知方言={{#switch:{{{2}}}|label=岐阜・愛知方言|category=岐阜・愛知方言}}<!--
-->|名古屋弁={{#switch:{{{2}}}|label=名古屋弁|category=名古屋弁}}<!--
-->|飛騨弁={{#switch:{{{2}}}|label=飛騨弁|category=飛騨弁}}<!--
-->|三河弁={{#switch:{{{2}}}|label=三河弁|category=三河弁}}<!--
-->|美濃弁={{#switch:{{{2}}}|label=三河弁|category=美濃弁}}<!--
-->|近畿方言|関西弁={{#switch:{{{2}}}|label=近畿方言|category=近畿方言}}<!--
-->|淡路弁={{#switch:{{{2}}}|label=淡路弁|category=淡路弁}}<!--
-->|伊勢弁={{#switch:{{{2}}}|label=伊勢弁|category=伊勢弁}}<!--
-->|近江弁={{#switch:{{{2}}}|label=近江弁|category=近江弁}}<!--
-->|大阪弁={{#switch:{{{2}}}|label=大阪弁|category=大阪弁}}<!--
-->|紀州弁={{#switch:{{{2}}}|label=紀州弁|category=紀州弁}}<!--
-->|京言葉|京都弁={{#switch:{{{2}}}|label=京言葉|category=京言葉}}<!--
-->|志摩弁={{#switch:{{{2}}}|label=志摩弁|category=志摩弁}}<!--
-->|丹波方言={{#switch:{{{2}}}|label=丹波方言|category=丹波方言}}<!--
-->|播州弁={{#switch:{{{2}}}|label=播州弁|category=播州弁}}<!--
-->|中国方言={{#switch:{{{2}}}|label=中国方言|category=中国方言}}<!--
-->|中部方言={{#switch:{{{2}}}|label=中部方言|category=中部方言}}<!--
-->|出雲弁={{#switch:{{{2}}}|label=出雲弁|category=出雲弁}}<!--
-->|因州弁={{#switch:{{{2}}}|label=因州弁|category=因州弁}}<!--
-->|岡山弁|岡山方言={{#switch:{{{2}}}|label=岡山弁|category=岡山弁}}<!--
-->|但馬弁={{#switch:{{{2}}}|label=但馬弁|category=但馬弁}}<!--
-->|丹後弁={{#switch:{{{2}}}|label=丹後弁|category=丹後弁}}<!--
-->|広島弁={{#switch:{{{2}}}|label=広島弁|category=広島弁}}<!--
-->|備後弁={{#switch:{{{2}}}|label=備後弁|category=備後弁}}<!--
-->|山口弁={{#switch:{{{2}}}|label=山口弁|category=山口弁}}<!--
-->|四国方言|四国弁={{#switch:{{{2}}}|label=四国方言|category=四国方言}}<!--
-->|阿波弁|徳島方言={{#switch:{{{2}}}|label=阿波弁|category=阿波弁}}<!--
-->|伊予弁|愛媛方言={{#switch:{{{2}}}|label=伊予弁|category=伊予弁}}<!--
-->|宇和島弁={{#switch:{{{2}}}|label=宇和島弁|category=宇和島弁}}<!--
-->|讃岐弁|香川方言={{#switch:{{{2}}}|label=讃岐弁|category=讃岐弁}}<!--
-->|土佐弁|高知方言={{#switch:{{{2}}}|label=土佐弁|category=土佐弁}}<!--
-->|北陸方言={{#switch:{{{2}}}|label=北陸方言|category=北陸方言}}<!--
-->|加賀弁={{#switch:{{{2}}}|label=加賀弁|category=加賀弁}}<!--
-->|金沢弁={{#switch:{{{2}}}|label=金沢弁|category=金沢弁}}<!--
-->|富山弁={{#switch:{{{2}}}|label=富山弁|category=富山弁}}<!--
-->|能登弁={{#switch:{{{2}}}|label=能登弁|category=能登弁}}<!--
-->|福井弁={{#switch:{{{2}}}|label=福井弁|category=福井弁}}<!--
-->|嶺南方言={{#switch:{{{2}}}|label=嶺南方言|category=嶺南方言}}<!--
-->|東日本方言={{#switch:{{{2}}}|label=東日本方言|category=東日本方言}}<!--
-->|越後方言={{#switch:{{{2}}}|label=越後方言|category=越後方言}}<!--
-->|関東方言|関東弁={{#switch:{{{2}}}|label=関東方言|category=関東方言}}<!--
-->|茨城弁={{#switch:{{{2}}}|label=茨城弁|category=茨城弁}}<!--
-->|神奈川県方言|神奈川方言={{#switch:{{{2}}}|label=神奈川県方言|category=神奈川県方言}}<!--
-->|群馬弁={{#switch:{{{2}}}|label=群馬弁|category=群馬弁}}<!--
-->|埼玉弁={{#switch:{{{2}}}|label=埼玉弁|category=埼玉弁}}<!--
-->|千葉弁={{#switch:{{{2}}}|label=千葉弁|category=千葉弁}}<!--
-->|栃木弁={{#switch:{{{2}}}|label=栃木弁|category=栃木弁}}<!--
-->|東北方言|東北弁={{#switch:{{{2}}}|label=東北方言|category=東北方言}}<!--
-->|秋田弁={{#switch:{{{2}}}|label=秋田弁|category=秋田弁}}<!--
-->|仙台弁={{#switch:{{{2}}}|label=仙台弁|category=仙台弁}}<!--
-->|津軽弁={{#switch:{{{2}}}|label=津軽弁|category=津軽弁}}<!--
-->|南部弁={{#switch:{{{2}}}|label=南部弁|category=南部弁}}<!--
-->|福島弁={{#switch:{{{2}}}|label=福島弁|category=福島弁}}<!--
-->|山形弁={{#switch:{{{2}}}|label=山形弁|category=山形弁}}<!--
-->|置賜弁={{#switch:{{{2}}}|label=置賜弁|category=置賜弁}}<!--
-->|庄内弁={{#switch:{{{2}}}|label=庄内弁|category=庄内弁}}<!--
-->|新庄弁={{#switch:{{{2}}}|label=新庄弁|category=新庄弁}}<!--
-->|村山弁={{#switch:{{{2}}}|label=村山弁|category=村山弁}}<!--
-->|長野・山梨・静岡方言={{#switch:{{{2}}}|label=長野・山梨・静岡方言|category=長野・山梨・静岡方言}}<!--
-->|伊豆弁={{#switch:{{{2}}}|label=伊豆弁|category=伊豆弁}}<!--
-->|遠州弁={{#switch:{{{2}}}|label=遠州弁|category=遠州弁}}<!--
-->|郡内弁={{#switch:{{{2}}}|label=郡内弁|category=郡内弁}}<!--
-->|甲州弁={{#switch:{{{2}}}|label=甲州弁|category=甲州弁}}<!--
-->|静岡弁={{#switch:{{{2}}}|label=静岡弁|category=静岡弁}}<!--
-->|長野県方言|長野弁={{#switch:{{{2}}}|label=長野県方言|category=長野県方言}}<!--
-->|北海道方言|北海道弁={{#switch:{{{2}}}|label=北海道方言|category=北海道方言}}<!--
-->|九州方言|九州弁={{#switch:{{{2}}}|label=九州方言|category=九州方言}}<!--
-->|薩隅方言={{#switch:{{{2}}}|label=薩隅方言|category=薩隅方言}}<!--
-->|肥筑方言={{#switch:{{{2}}}|label=肥筑方言|category=肥筑方言}}<!--
-->|北九州弁={{#switch:{{{2}}}|label=北九州弁|category=北九州弁}}<!--
-->|博多弁={{#switch:{{{2}}}|label=博多弁|category=博多弁}}<!--
-->|熊本弁={{#switch:{{{2}}}|label=熊本弁|category=熊本弁}}<!--
-->|五島列島方言={{#switch:{{{2}}}|label=五島列島方言|category=五島列島方言}}<!--
-->|佐賀弁={{#switch:{{{2}}}|label=佐賀弁|category=佐賀弁}}<!--
-->|対馬方言={{#switch:{{{2}}}|label=対馬方言|category=対馬方言}}<!--
-->|豊日方言={{#switch:{{{2}}}|label=豊日方言|category=豊日方言}}<!--
-->|南勢={{#switch:{{{2}}}|label=南勢|category=南勢アミ語}}<!--
-->|秀姑巒={{#switch:{{{2}}}|label=秀姑巒|category=秀姑巒アミ語}}<!--
-->|海岸={{#switch:{{{2}}}|label=海岸|category=海岸アミ語}}<!--
-->|馬蘭={{#switch:{{{2}}}|label=馬蘭|category=馬蘭アミ語}}<!--
-->|恒春|恆春={{#switch:{{{2}}}|label=恒春|category=恒春アミ語}}<!--
-->|賽考利克={{#switch:{{{2}}}|label=賽考利克|category=賽考利克タイヤル語}}<!--
-->|澤敖利={{#switch:{{{2}}}|label=澤敖利|category=澤敖利タイヤル語}}<!--
-->|汶水={{#switch:{{{2}}}|label=汶水|category=汶水タイヤル語}}<!--
-->|万大|萬大={{#switch:{{{2}}}|label=万大|category=万大タイヤル語}}<!--
-->|四季={{#switch:{{{2}}}|label=四季|category=四季タイヤル語}}<!--
-->|宜蘭澤敖利={{#switch:{{{2}}}|label=宜蘭澤敖利|category=宜蘭澤敖利タイヤル語}}<!--
-->|卓群={{#switch:{{{2}}}|label=卓群|category=卓群ブヌン語}}<!--
-->|卡群={{#switch:{{{2}}}|label=卡群|category=卡群ブヌン語}}<!--
-->|丹群={{#switch:{{{2}}}|label=丹群|category=丹群ブヌン語}}<!--
-->|巒群={{#switch:{{{2}}}|label=巒群|category=巒群ブヌン語}}<!--
-->|郡群={{#switch:{{{2}}}|label=卓群|category=郡群ブヌン語}}<!--
-->|東パイワン={{#switch:{{{2}}}|label=東パイワン|category=東パイワン語}}<!--
-->|北パイワン={{#switch:{{{2}}}|label=北パイワン|category=北パイワン語}}<!--
-->|中パイワン={{#switch:{{{2}}}|label=中パイワン|category=中パイワン語}}<!--
-->|南パイワン={{#switch:{{{2}}}|label=南パイワン|category=南パイワン語}}<!--
-->|東ルカイ={{#switch:{{{2}}}|label=東ルカイ|category=東ルカイ語}}<!--
-->|霧台={{#switch:{{{2}}}|label=霧台|category=霧台ルカイ語}}<!--
-->|大武={{#switch:{{{2}}}|label=大武|category=大武ルカイ語}}<!--
-->|多納={{#switch:{{{2}}}|label=多納|category=多納ルカイ語}}<!--
-->|茂林={{#switch:{{{2}}}|label=茂林|category=茂林ルカイ語}}<!--
-->|万山={{#switch:{{{2}}}|label=万山|category=万山ルカイ語}}<!--
-->|南王={{#switch:{{{2}}}|label=南王|category=南王プユマ語}}<!--
-->|知本={{#switch:{{{2}}}|label=知本|category=知本プユマ語}}<!--
-->|初鹿={{#switch:{{{2}}}|label=初鹿|category=初鹿プユマ語}}<!--
-->|建和={{#switch:{{{2}}}|label=建和|category=建和プユマ語}}<!--
-->|都達={{#switch:{{{2}}}|label=都達|category=都達セデック語}}<!--
-->|德固達雅={{#switch:{{{2}}}|label=德固達雅|category=德固達雅セデック語}}<!--
-->|德路固={{#switch:{{{2}}}|label=德路固|category=德路固セデック語}}<!--
-->|太魯閣|タロコ={{#switch:{{{2}}}|label=太魯閣|category=タロコ方言}}<!--
-->|길림성|지린성={{#switch:{{{2}}}|label=[[:w:中国朝鮮語|吉林省]]|category=中国朝鮮語}}<!--
-->|헤이룽장성|흑룡강성={{#switch:{{{2}}}|label=[[:w:中国朝鮮語|黒竜江省]]|category=中国朝鮮語}}<!--
-->|요령성={{#switch:{{{2}}}|label=[[:w:中国朝鮮語|遼寧省]]|category=中国朝鮮語}}<!--
-->|#default={{#switch:{{{2}}}|label={{{1}}}|category=}}<!--
-->}}<noinclude>[[カテゴリ:内部テンプレート]]</noinclude>
qpwr15hjkatfw0veui6gpy7derw6a8o
ученичка
0
288569
2313214
1387362
2026-08-08T23:23:30Z
Kuroco2k
84207
wikify
2313214
wikitext
text/x-wiki
=={{bg}}==
==={{pron}}===
*{{IPA|utʃɛˈnitʃkɤ}}
==={{noun}}===
{{head|bg|noun|head=учени́чка|tr=učeníčka|g=f}} (''男性'': {{l|bg|ученик|учени́к}})
#{{context|education|lang=bg}} [[生徒]]。[[学童]]。[[児童]]。
#{{おくりがな3|見|み||習|なら|い|みならい}}。
#[[弟子]]。[[支持者]]。
===={{syn}}====
*{{l|bg|последователка|tr=posledovatelka}}
=={{mk}}==
==={{noun}}===
{{head|mk|noun|head=ученичка|tr=učenička|g=f}}
#{{context|education|lang=mk}} [[生徒]]。[[学童]]。[[児童]]。
fkvjma6tdmtm1ohkd04kpdkzann7mz7
волја
0
290238
2313213
1540733
2026-08-08T23:23:30Z
Kuroco2k
84207
wikify
2313213
wikitext
text/x-wiki
=={{mk}}==
==={{etym}}===
{{etyl|sla-pro|mk}} ''{{recons|voľa|lang=sla-pro}}''
==={{noun}}===
{{head|mk|noun|head=волја|tr=volja|g=f}}
#[[意志]]。
{{mk-decl-noun-f-ј|вол}}
tp8bpxkvo1n652lhr6098ak5s4mbqbz
снима
0
290807
2313212
1540734
2026-08-08T23:23:29Z
Kuroco2k
84207
wikify
2313212
wikitext
text/x-wiki
=={{mk}}==
==={{etym}}===
{{etyl|sla-pro|mk}} ''{{recons|sъnęti|lang=sla-pro}}''
==={{verb}}===
{{head|mk|verb|tr=snima|不完了体}}
#{{context|transitive+|lang=mk}} [[記録]]する。
{{mk-conj-а|impf|сним}}
6krgwzvsagvldfnh6ihiqv4s2wncmqt
има
0
291270
2313207
2233470
2026-08-08T23:23:28Z
Kuroco2k
84207
wikify
2313207
wikitext
text/x-wiki
{{also|имя|имѧ|ім'я}}
=={{bg}}==
==={{pron}}===
*'''и́ма''': {{IPA|ˈimə}}
*'''има́''': {{IPA|iˈma}}
==={{verb}}===
{{head|bg|verb|head=и́ма|tr=íma}}
#"{{l|bg|имам|и́мам|tr=ímam}}" の現在三人称単数直説法活用形。
#[[ある|有る]]。
==={{verb}}===
{{head|bg|verb|head=и́ма か има́|tr=íma か imá}}
#"{{l|bg|имам|и́мам|tr=ímam}}" の二人称単数直説法活用形。
#"{{l|bg|имам|и́мам|tr=ímam}}" の三人称単数直説法活用形。
=={{mk}}==
==={{etym}}===
{{etyl|sla-pro|mk}} ''{{recons|jьmati|lang=sla-pro}}''
==={{verb}}===
{{head|mk|verb|tr=ima}} <small>不完了体</small>
#{{context|transitive+|lang=mk}} [[もつ|持つ]]。
#{{context|transitive+|lang=mk}} [[ある|有る]]。
{{mk-conj-а|impf|им}}
0vx3a0apd8fs1bi04zdl6aeu9q7sz0m
винарство
0
291371
2313211
1540737
2026-08-08T23:23:29Z
Kuroco2k
84207
wikify
2313211
wikitext
text/x-wiki
=={{mk}}==
==={{etym}}===
{{suffix+|винар|tr1=vinar|ство|tr2=stvo|lang=mk}}
==={{pron}}===
*{{IPA|ˈvinarstvɔ}}
==={{noun}}===
{{head|mk|noun|tr=vinarstvo|g=n}}
#[[ワイン]][[醸造]]。
{{mk-decl-noun-n|винарств|n=sg}}
hr0sykhpy9soc7pj3zdggrnpia82y2q
քառասուն
0
292374
2313434
2312491
2026-08-09T10:09:20Z
M-30722
1202
2313434
wikitext
text/x-wiki
=={{L|hy}}==
==={{etym}}===
{{etyl|xcl|hy}} քառասուն
==={{pron}}===
*{{a|hy-E}} {{IPA|lang=hy|kʰɑrɑˈsun}}
==={{numeral}}===
{{head|hy|numeral}}
#{{context|cardinal|lang=hy}}[[四十]]。
===={{drv}}====
*[[քառասուներորդ]]
=={{L|xcl}}==
==={{etym}}===
{{etyl|ine-pro|xcl}} ''*kʷetwr̥̄ḱomt'' < {{m|ine-pro|*kʷétwr̥dḱomt}}
==={{numeral}}===
{{head|xcl|numeral}}
#{{context|cardinal|lang=xcl}}[[四十]]。
{{xcl-noun-ի||քառասն|vow=on}}
===={{drv}}====
{{top3}}
*{{l|xcl|քառասնաթիւ}}
*{{l|xcl|քառասնահասկ}}
*{{l|xcl|քառասնաղի}}
*{{l|xcl|քառասնամեայ}}
*{{l|xcl|քառասնամեան}}
*{{l|xcl|քառասնամոլ}}
*{{l|xcl|քառասնամութիւն}}
*{{l|xcl|քառասնաշառաւեղ}}
*{{l|xcl|քառասնաշառաւիղ}}
*{{l|xcl|քառասնաշար}}
*{{l|xcl|քառասնապահ}}
*{{l|xcl|քառասնապսակ}}
*{{l|xcl|քառասնաջահ}}
*{{l|xcl|քառասնաջով}}
*{{l|xcl|քառասնեակ}}
*{{l|xcl|քառասնեայ}}
*{{l|xcl|քառասնեկի}}
*{{l|xcl|քառասնեկին}}
*{{l|xcl|քառասներ}}
*{{l|xcl|քառասներեակ}}
*{{l|xcl|քառասներորդ}}
*{{l|xcl|քառասնեքեան}}
*{{l|xcl|քառասնեքին}}
*{{l|xcl|քառասնոստ}}
*{{l|xcl|քառասնորդ}}
*{{l|xcl|քառասնօր}}
*{{l|xcl|քառասնօրեայ}}
*{{l|xcl|քառասունեւիննկանգնեան}}
{{bottom}}
===={{desc}}====
*現代アルメニア語: {{l|hy|քառասուն}}
frxv1wssamzop2yddcye0y5eb37exll
哀怨
0
297224
2313320
1520116
2026-08-09T01:48:42Z
Jiba1219
100610
2313320
wikitext
text/x-wiki
=={{L|zh}}==
{{zh-cat|ai1yuan4|adjective}}
{{yue-cat|oi1yun3|adjective}}
{{nan-cat|ai1oan3|adjective}}
{{nan-tws-cat|ai1ueng3|adjective}}
==={{pron}}===
{{cmn-pron|āiyuàn}}
{{yue-pron|oi1 jyun3}}
{{nan-pron|ml,tw,sg:ai-oàn|t=ai1 uêng3}}
==={{adjective}}===
{{zhchars}}
#{{おくりがな2|悲|かな|しみ|かなしむ}}{{おくりがな2|恨|うら|む|うらむ}}。
=={{L|ko}}==
==={{noun}}===
{{ko-head|noun|애원}}
#{{おくりがな2|悲|かな|しみ|かなしむ}}{{おくりがな2|恨|うら|む|うらむ}}こと。
=={{L|vi}}==
==={{verb}}===
{{vi-head|verb|ai|oán}}
#{{ふりがな|溜息|ためいき}}をつく。
mbclazd3v00x170fx5ktatzfu26kam4
се смее
0
299278
2313210
1540741
2026-08-08T23:23:29Z
Kuroco2k
84207
wikify
2313210
wikitext
text/x-wiki
=={{mk}}==
==={{pron}}===
*{{IPA|sɛ ˈsmɛ.ɛ}} (慣用読み: 「セ '''スメ'''エ」)
==={{verb}}===
{{head|mk|verb|head={{l|mk|се}} {{l|mk|смее}}|tr=se smee}}
#[[わらう|笑う]]。
#[[嘲笑]]する。
===={{conjugation}}====
{{mk-conj-е-1|impf|сме|noap=1|ref=1}}
===={{seealso}}====
*{{l|mk|смее|tr=smee}}
*{{l|mk|смеа|tr=smea}}
*{{l|mk|смешен|tr=smešen}}
*{{l|mk|засмева|tr=zasmeva}}
*{{l|mk|насмева|tr=nasmeva}}
*{{l|mk|се насмевнува|tr=se nasmevnuva}}
*{{l|mk|се потсмева|tr=se potsmeva}}
o2to5s7wvj6s6b0aevnvdfuhxdj8a4c
смее
0
299279
2313221
1540742
2026-08-08T23:23:44Z
Kuroco2k
84207
wikify
2313221
wikitext
text/x-wiki
=={{mk}}==
==={{verb}}===
{{head|mk|verb|tr=smee}} <small>不完了体</small>
#{{context|intransitive+|lang=mk}} [[許容]]される。
===={{conjugation}}====
{{mk-conj-е-1|impf|сме|noap=1}}
ow6jg1qlh9thn1nt8i2685q1olhl0g6
засмева
0
299281
2313209
1540743
2026-08-08T23:23:29Z
Kuroco2k
84207
wikify
2313209
wikitext
text/x-wiki
=={{mk}}==
==={{pron}}===
*{{IPA|ˈzasmɛva}} (慣用読み: 「'''ザ'''スメヴァ」)
==={{verb}}===
{{head|mk|verb|tr=zasmeva}} <small>不完了体</small> (''完了体'' {{l|mk|засмее}})
#{{context|transitive+|lang=mk}} [[わらわせる|笑わせる]]。
===={{conjugation}}====
{{mk-conj-а|impf|засмев}}
elr1v5m5f0uqjxc29iapvhh9nnk1bd5
литература
0
300542
2313208
1388223
2026-08-08T23:23:28Z
Kuroco2k
84207
wikify
2313208
wikitext
text/x-wiki
{{also|література}}
=={{sh}}==
==={{noun}}===
{{head|sh|noun|g=f|head=литерату́ра|ラテン文字|[[literatura|literatúra]]}}
[[Category:{{sh}}_文学|*]]
#[[文学]]。
{{sh-decl-noun|sc=Cyrl|литература|литературе|литературе|литература|литератури|литературама|литературу|литературе|литературо|литературе|литератури|литературама|литературом|литературама}}
=={{bg}}==
==={{etym}}===
{{etyl|la|bg}} ''[[litteratura]]''
==={{pron}}===
*{{IPA|[lʲitɛrɐˈturə]}}
==={{noun}}===
{{head|bg|noun|head=литерату́ра|tr=literatúra|g=f}}
[[Category:{{bg}}_文学|*]]
#[[文学]]。
{{bg-ndecl|литерату́ра<>}}
=={{mk}}==
==={{etym}}===
{{etyl|la|mk}} ''[[litteratura]]''
==={{pron}}===
*{{IPA|[litɛɾaˈtuɾa]}}
==={{noun}}===
{{head|mk|noun|head=литерату́ра|tr=literatúra|g=f}}
[[Category:{{mk}}_文学|*]]
#[[文学]]。
{{mk-decl-noun-f|литератур|n=sg}}
===={{syn}}====
*{{l|mk|книжевност}}
=={{ru}}==
==={{etym}}===
{{etyl|la|ru}} ''[[litteratura]]''
==={{pron}}===
*{{ru-IPA|литерату́ра}}
*音声: [[ファイル:Ru-{{PAGENAME}}.ogg]]
==={{noun}}===
{{head|ru|noun|head=литерату́ра|tr=literatúra|g=f-in}}
[[Category:{{ru}}_文学|*]]
#[[文学]]。
{{ru-noun-table|литерату́ра}}
{{ru-noun-table|литерату́ра|old=1}}
===={{rel}}====
*{{l|ru|литератор|литера́тор|g=m}}
*{{l|ru|литературный|литерату́рный}}
*{{l|ru|литературоведение|литературове́дение|g=n}}
*{{l|ru|литературщина|литерату́рщина|g=f}}
hg7vwxey25cp0tfk2830hzqg56lq1kj
клуч
0
307760
2313204
1540747
2026-08-08T23:22:57Z
Kuroco2k
84207
wikify
2313204
wikitext
text/x-wiki
{{also|ключ|кључ}}
=={{mk}}==
==={{etym}}===
{{etyl|sla-pro|mk}} {{recons|kľučь|lang=sla-pro}}
==={{pron}}===
*{{IPA|[kɫut͡ʃ]}}
==={{noun}}===
{{head|mk|noun|cat2=道具|tr=kluč|g=m}}
#{{ふりがな|鍵|かぎ}}。
#[[スパナ]]。[[レンチ]]。
{{mk-decl-noun-m||клучев}}
===={{syn}}====
*{{l|mk|одвртувач}}
o09qnexdo3lp0opms8db9yo2gtfina8
вчера
0
307774
2313203
1387491
2026-08-08T23:22:57Z
Kuroco2k
84207
wikify
2313203
wikitext
text/x-wiki
=={{bg}}==
==={{etym}}===
{{etyl|sla-pro|bg}} {{recons|vьčera|lang=sla-pro}}
==={{pron}}===
*{{IPA|[ˈft͡ʃerə]}}
==={{adverb}}===
{{head|bg|adverb|cat2=時間|head=вче́ра|tr=včéra|比較形なし}}
#{{ふりがな|昨日|きのう}}。
===={{drv}}====
*{{l|bg|вчерашен|вче́рашен}}
*{{l|bg|завчера|за́вчера}}
===={{rel}}====
*{{l|bg|вечер|ве́чер}}
*{{l|bg|вечерен|ве́черен}}
=={{mk}}==
==={{etym}}===
{{etyl|sla-pro|mk}} {{recons|vьčera|lang=sla-pro}}
==={{pron}}===
*{{IPA|[ˈft͡ʃɛɾa]}}
==={{adverb}}===
{{head|mk|adverb|cat2=時間|tr=včera|比較形なし}}
#{{ふりがな|昨日|きのう}}。
=={{ru}}==
==={{etym}}===
{{etyl|sla-pro|ru}} {{recons|vьčera|lang=sla-pro}}
==={{pron}}===
*{{ru-IPA|вчера́}}
*音声: [[ファイル:Ru-{{PAGENAME}}.ogg]]
==={{adverb}}===
{{head|ru|adverb|cat2=時間|head=вчера́|tr=včerá}}
#{{ふりがな|昨日|きのう}}。
==={{noun}}===
{{head|ru|noun|head=вчера́|tr=včerá|g=n-in}}
#昨日。
===={{rel}}====
*{{l|ru|вчерашний|вчера́шний}}
*{{l|ru|позавчера|позавчера́}}
==={{seealso}}===
*{{l|ru|завтра|за́втра}}
*{{l|ru|сегодня|сего́дня}}
9cdz5s7i85z4d8kp3nq1evnw07rugri
сфера
0
312551
2313205
2149339
2026-08-08T23:22:57Z
Kuroco2k
84207
wikify
2313205
wikitext
text/x-wiki
=={{L|uk}}==
==={{pron}}===
*{{uk-IPA|сфе́ра}}
*{{音声|uk|Uk-сфера.ogg}}
==={{noun}}===
{{head|uk|noun|head=сфе́ра|tr=sféra|g=f-in}}
#{{context|shape|lang=uk}}[[球]]。[[球体]]。
#[[範囲]]。[[領域]]。
{{uk-decl-noun|сфера|сфери|сфери|сфер|сфері|сферам|сферу|сфери|сферою|сферами|сфері|сферах|сферо|сфери}}
=={{L|mk}}==
==={{pron}}===
*{{mk-IPA}}
*{{音声|mk|LL-Q9296 (mkd)-Bjankuloski06-сфера.wav}}
*{{hyph|lang=mk|сфе|ра}}
*{{rhymes|lang=mk|ɛɾa|s=2}}
==={{noun}}===
{{head|mk|noun|tr=sfera|g=f}}
#{{context|shape|lang=mk}}[[球]]。[[球体]]。
#[[範囲]]。[[領域]]。
{{mk-decl-noun-f|сфер}}
=={{L|ru}}==
==={{pron}}===
*{{ru-IPA|сфе́ра}}
*{{音声|ru|Ru-сфера.ogg}}
==={{noun}}===
{{head|ru|noun|head=сфе́ра|tr=sféra|g=f-in}}
#{{context|shape|lang=ru}}[[球]]。[[球体]]。
#[[範囲]]。[[領域]]。
{{ru-noun-table|сфе́ра}}
===={{rel}}====
*{{l|ru|сферический|сфери́ческий}}
4xr0ucl6ls9bvzvgcb31tpgzw96jqm7
кашла
0
314740
2313202
1540755
2026-08-08T23:22:56Z
Kuroco2k
84207
wikify
2313202
wikitext
text/x-wiki
{{also|кашля}}
=={{mk}}==
==={{etym}}===
{{etyl|sla-pro|mk}} {{recons|kašьľati|lang=sla-pro}}
==={{verb}}===
{{head|mk|verb|g=impf}}
#{{context|ambitransitive|physiology|lang=mk}}[[咳]]をする。
{{mk-conj-а|impf|кашл}}
jnl2mxz4gwyejciqqdeumr8psa4nkz2
трактор
0
317106
2313206
1978792
2026-08-08T23:22:56Z
Kuroco2k
84207
wikify
2313206
wikitext
text/x-wiki
=={{uk}}==
{{wikipedia|lang=uk}}
==={{pron}}===
*{{uk-IPA|тра́ктор}}
*{{音声|uk|Uk-{{PAGENAME}}.ogg|音声}}
==={{noun}}===
{{uk-noun+|тра́ктор<c>}}
# {{context|農業機械|lang=uk}} [[トラクター]]。
===={{decl}}====
{{uk-ndecl|тра́ктор<c>}}
=={{L|sh}}==
{{wikipedia|Traktor|lang=sh}}
==={{noun}}===
{{sh-noun+|g=m|head=тра̏ктор}}
# {{context|農業機械|lang=sh}} [[トラクター]]。
===={{decl}}====
{{sh-decl-noun|sc=Cyrl|трактор|трактори|трактора|трактора|трактору|тракторима|трактор|тракторе|тракторе|трактори|трактору|тракторима|трактором|тракторима}}
=={{L|bg}}==
{{wikipedia|lang=bg}}
==={{pron}}===
*{{bg-IPA|тра́ктор}}
==={{noun}}===
{{bg-noun|тра́ктор|m|adj=тра́кторен}}
# {{context|農業機械|lang=bg}} [[トラクター]]。
===={{decl}}====
{{bg-ndecl|тра́ктор<>}}
=={{L|mk}}==
{{wikipedia|lang=mk}}
==={{pron}}===
*{{mk-IPA}}
==={{noun}}===
{{mk-noun|m}}
# {{context|農業機械|lang=mk}}[[トラクター]]。
===={{decl}}====
{{mk-decl-noun-m|||тракторе}}
=={{L|mn}}==
{{mn-variant|m=ᠲ᠋ᠷᠠᠻᠲ᠋ᠣᠷ|c=трактор}}
{{wikipedia|lang=mn}}
==={{etym}}===
{{bor|mn|ru|тра́ктор}}
==={{pron}}===
{{mn-IPA|трактәр}}
==={{noun}}===
{{mn-noun}}
# {{context|農業機械|lang=mn}} [[トラクター]]。
=={{ru}}==
{{wikipedia|lang=ru}}
==={{alter}}===
*{{alter+|ru|тра́кторъ||ru-PRO}}
==={{etym}}===
{{bor|ru|en|tractor}} < {{etyl|la|ru}} {{m|la|trahere}} < {{etyl|ine-pro|ru}} {{m|ine-pro|*tragh-}}
==={{pron}}===
*{{ru-IPA|тра́ктор}}
*{{X-SAMPA1|"trakt@r}}
*{{音声|ru|Ru-{{PAGENAME}}.ogg|音声}}
*カナ表記例: 「ト'''ラ'''クタル」
*{{hyphenation|трак|тор|lang=ru}}
==={{noun}}===
{{ru-noun+|тра́ктор|or|c||(1)|adj=тра́кторный}}
# {{context|農業機械|lang=ru}} [[トラクター]]。
===={{decl}}====
{{ru-noun-table|тра́ктор|or|c||(1)}}
===={{hyper}}====
*{{l|ru|маши́на||機械, 車|g=f}}
*{{l|ru|сельхозмаши́на||農業用の機械, 車|g=f}}
===={{hypo}}====
*{{l|ru|гу́сеничный тра́ктор||キャタピラトラクター}}
*{{l|ru|колёсный тра́ктор}}
===={{rel}}====
*{{l|ru|трактори́ст|g=m}}
===={{desc}}====
*{{desc|az|traktor|bor=1}}
*{{desc|hy|տրակտոր|bor=1}}
*{{desc|izh|traktora|bor=1}}
*{{desc|ug|تراكتور|bor=1}}
*{{desc|uz|traktor|bor=1}}
*{{desc|kk|трактор|bor=1}}
*{{desc|ky|трактор|bor=1}}
*{{desc|ka|ტრაქტორი|bor=1}}
*{{desc|tg|трактор|bor=1}}
*{{desc|zh|-|der=1}}
*: {{desc|yue|-}} {{zh-l|拖拉機|tr=to1 laai1 gei1}}
*: {{desc|dng|туәлаҗи}}
*: {{desc|cmn|-}} {{zh-l|拖拉機}}
*: {{desc|nan|-}} {{zh-l|拖拉機|tr=thoa-la-ki / tho-la-ki}}
** {{desc|bo|ཐོ་ལ་ཅི|bor=1}}
** {{desc|za|dohlahgih|bor=1}}
** {{desc|my|ထော် လာဂျီ|bor=1}}
** {{desc|pcc|toylayjiy|bor=1}}
*{{desc|ko|뜨락또르|bor=1}} {{i|北朝鮮}}
*{{desc|tk|traktor|bor=1}}
*{{desc|dng|трактор|bor=1}}
*{{desc|mn|-|bor=1}}
*: {{desc|mn|трактор|sclb=1}}
*: {{desc|mn|ᠲ᠋ᠷᠠᠻᠲ᠋ᠣᠷ|sclb=1}}
6fkw8facfsyaohdk8caflr3s4y4upx6
しゅうせい
0
318520
2313127
2105836
2026-08-08T14:59:25Z
鍼灸
112313
2313127
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|しゅうぜい|じゅうせい|じゅうぜい}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[習性]]】①[[習慣]]によって[[身に付く|身に付いた]][[性質]]。②ある[[種]]の[[動物]]の[[行動]]の[[特性]]。
*【[[修正]]】[[文章]]など[[不十分]]な[[箇所]]を[[なおす|直す]]こと。
*【[[修整]]】[[写真]]で、[[原板]]や[[印画]]に[[手を加える|手を加え]]て[[画像]]の[[みだれ|乱れ]]を直すこと。
*【[[修成]]】修正し[[完成]]させること。
*【[[終生]]、[[終世]]】[[一生]]。
*【[[集成]]】[[おおく|多く]]の物を[[あつめる|集め]]て[[まとめる]]こと。また、まとめた[[本]]の名。
*【[[秋晴]]】[[あきばれ]]。
*【[[秋声]]】[[おと|音]]から[[感]]じられる[[あき|秋]]の[[気配]]。
*【[[秋成]]】秋に実か熟れること。
*【[[醜声]]】[[不名誉]]な[[評判]]。
*【[[衆星]]】[[おおく|多く]]の[[ほし|星]]。
*【[[銹錆]]】[[金属]]が[[さびる|錆びる]]こと。
*【[[州政]]】[[州]]の[[行政]]。
*【[[宗制]]】[[宗教]]の[[制度]]。
*【[[収生]]】[[分娩]]させること。
*【[[輯製]]】[[編輯]]によって[[つくる|作る]]こと。
8ec0e5srl61x9oj6lxeuey405cjocqs
モジュール:ko-translit
828
319498
2313303
2312868
2026-08-09T00:50:17Z
Jiba1219
100610
マッキューン=ライシャワー式の特例(a および o の直後に e が隣接する場合の ë 表記)に対応。
2313303
Scribunto
text/plain
local export = {}
local gsub = mw.ustring.gsub
local match = mw.ustring.match
local jung_to_vowels = {
[0] = {"a"}, [1] = {"ae"}, [2] = {"ya"}, [3] = {"yae"},
[4] = {"ŏ"}, [5] = {"e"}, [6] = {"yŏ"}, [7] = {"ye"},
[8] = {"o"}, [9] = {"wa"}, [10] = {"wae"}, [11] = {"oe"},
[12] = {"yo"}, [13] = {"u"}, [14] = {"wŏ"}, [15] = {"we"},
[16] = {"wi"}, [17] = {"yu"}, [18] = {"ŭ"}, [19] = {"ŭi", "i", "e"},
[20] = {"i"}
}
local function ends_with_a_or_o(char)
local cp = mw.ustring.codepoint(char)
if not cp or cp < 0xAC00 or cp > 0xD7A3 then return false end
cp = cp - 0xAC00
local jong = cp % 28
local jung = math.floor(cp / 28) % 21
return jong == 0 and (jung == 0 or jung == 8)
end
local function starts_with_e(char)
local cp = mw.ustring.codepoint(char)
if not cp or cp < 0xAC00 or cp > 0xD7A3 then return false end
cp = cp - 0xAC00
local cho = math.floor(cp / (28 * 21))
local jung = math.floor(cp / 28) % 21
return cho == 11 and jung == 5
end
local function get_slices(clean_text, full_roman)
local hangul_chars = {}
for char in mw.ustring.gmatch(clean_text, "[가-힣]") do
table.insert(hangul_chars, char)
end
local hangul_count = #hangul_chars
if hangul_count == 0 then
return {}
end
if hangul_count == 1 then
return { gsub(full_roman, "[%s%-]", "") }
end
local v_starts = {}
local v_ends = {}
local pos = 1
local len = mw.ustring.len(full_roman)
for i = 1, hangul_count do
local char = hangul_chars[i]
local cp = mw.ustring.codepoint(char) - 0xAC00
local jung = math.floor(cp / 28) % 21
local expected_vowels = jung_to_vowels[jung]
local earliest_start, earliest_end = nil, nil
for _, v in ipairs(expected_vowels) do
local s, e = mw.ustring.find(full_roman, v, pos, true)
if s then
if not earliest_start or s < earliest_start or (s == earliest_start and e > earliest_end) then
earliest_start = s
earliest_end = e
end
end
end
if earliest_start then
table.insert(v_starts, earliest_start)
table.insert(v_ends, earliest_end)
pos = earliest_end + 1
else
break
end
end
if #v_starts < hangul_count then
return nil
end
local bounds = { 1 }
for k = 1, hangul_count - 1 do
local gap_start = v_ends[k] + 1
local gap_end = v_starts[k + 1] - 1
if gap_start > gap_end then
table.insert(bounds, gap_start)
else
local gap = mw.ustring.sub(full_roman, gap_start, gap_end)
if match(gap, "^ng") then
if gap == "ng" then
table.insert(bounds, gap_end + 1)
else
table.insert(bounds, gap_start + 2)
end
elseif match(gap, "%'$") then
local split_idx = gap_end - 1
if match(gap, "ch%'$") then split_idx = gap_end - 2 end
if split_idx < gap_start then split_idx = gap_start end
table.insert(bounds, split_idx)
elseif match(gap, "ch$") then
local split_idx = gap_end - 1
if split_idx < gap_start then split_idx = gap_start end
table.insert(bounds, split_idx)
elseif mw.ustring.len(gap) >= 2 then
table.insert(bounds, gap_start + 1)
else
table.insert(bounds, gap_start)
end
end
end
table.insert(bounds, len + 1)
local slices = {}
for k = 1, hangul_count do
local piece = mw.ustring.sub(full_roman, bounds[k], bounds[k + 1] - 1)
piece = gsub(piece, "[%s%-]", "")
table.insert(slices, piece)
end
return slices
end
function export.tr(word, lang, sc)
word = gsub(word, "%([一丁-龯㐀-䶵]+%)", "")
word = gsub(word, "—", "-")
word = gsub(word, "%[%[[^%]|]*|([^%]]+)%]%]", "[[%1]]")
if match(word, "^[ㅂㅈㄷㄱㅅㅁㄴㅇㄹㅎㅋㅌㅊㅍㄸㅃㅉㄲㅆㅛㅕㅑㅐㅔㅗㅓㅏㅣㅠㅜㅡㅖㅒ%-]+$") then
return (gsub(word,
"[ㅂㅈㄷㄱㅅㅁㄴㅇㄹㅎㅋㅌㅊㅍㄸㅃㅉㄲㅆㅛㅕㅑㅐㅔㅗㅓㅏㅣㅠㅜㅡㅖㅒ]", {
["ㅂ"] = "p", ["ㅈ"] = "ch", ["ㄷ"] = "t", ["ㄱ"] = "k", ["ㅅ"] = "s",
["ㅁ"] = "m", ["ㄴ"] = "n", ["ㅇ"] = "/", ["ㄹ"] = "l", ["ㅎ"] = "h",
["ㅋ"] = "k'", ["ㅌ"] = "t'", ["ㅊ"] = "ch'", ["ㅍ"] = "p'",
["ㄸ"] = "tt", ["ㅃ"] = "pp", ["ㅉ"] = "tch", ["ㄲ"] = "kk", ["ㅆ"] = "ss",
["ㅛ"] = "yo", ["ㅕ"] = "yŏ", ["ㅑ"] = "ya", ["ㅐ"] = "ae", ["ㅔ"] = "e",
["ㅗ"] = "o", ["ㅓ"] = "ŏ", ["ㅏ"] = "a", ["ㅣ"] = "i", ["ㅠ"] = "yu",
["ㅜ"] = "u", ["ㅡ"] = "ŭ", ["ㅖ"] = "ye", ["ㅒ"] = "yae" }
))
end
if not match(word, "[가-힣]") then
return nil
end
local clean = gsub(word, "[^가-힣%s%-]", "")
local m_pron = require("Module:ko-pron")
local full_roman = m_pron.romanise(clean, 4, {}, true)
if not full_roman then
return nil
end
local slices = get_slices(clean, full_roman)
local use_e_umlaut = {}
local hangul_idx = 0
local prev_hangul = nil
local prev_was_adjacent = false
for char in mw.ustring.gmatch(clean, ".") do
if match(char, "[가-힣]") then
hangul_idx = hangul_idx + 1
if prev_was_adjacent and prev_hangul then
if starts_with_e(char) and ends_with_a_or_o(prev_hangul) then
use_e_umlaut[hangul_idx] = true
end
end
prev_hangul = char
prev_was_adjacent = true
elseif match(char, "[%s%-]") then
prev_was_adjacent = false
end
end
local revised
if slices then
local idx = 0
revised = gsub(word, "[가-힣]", function(m)
idx = idx + 1
local slice = slices[idx] or m
if use_e_umlaut[idx] then
slice = gsub(slice, "^e", "ë")
end
return slice
end)
else
revised = full_roman
end
if match(revised, "[%.%?%!]") then
revised = mw.ustring.upper(mw.ustring.sub(revised, 1, 1)) .. mw.ustring.sub(revised, 2, -1)
revised = gsub(revised, "([%.%?%!]) ([a-z%'])", "%1 ^%2")
revised = gsub(revised, "^%'%'%'", "'''^")
end
revised = gsub(revised, "%^%'%'%'", "'''^")
revised = gsub(revised, "%^%l", mw.ustring.upper)
revised = gsub(revised, '%^', '')
revised = gsub(revised, "%-'''%-", "'''-")
revised = gsub(revised, "%-%-", "-")
return revised
end
export.tr_revised = export.tr
return export
luc2bfuqtpos3frze6iju3uaafd5b62
しとう
0
323967
2313269
2275277
2026-08-09T00:11:26Z
鍼灸
112313
2313269
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|しどう|じとう|じどう}}
=={{ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[市頭]]】:街の中。市中。
*【[[死闘]]】:[[命]]をかけた戦い。
*【[[指頭]]】:[[指]]の[[先]]。
*【[[至当]]】:[[至極]][[当然]]なこと。
*【[[私闘]]】:個人的な利害などによる闘い。
*【[[私党]]】:公認されていない党。
*【[[支撐]]】:支えること。
*【[[四島]]】:四つの島。
*【[[四等]]】:第四位。
*【[[四頭]]】:(動物が)四匹。
80qhuckpk7nsrk03egjdub5iy2j3oy5
たびだつ
0
326120
2313374
1932543
2026-08-09T06:24:55Z
ちょこれ゚いとみんと
129959
2313374
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
=={{L|ja}}==
==={{verb}}===
{{ja-verb|旅立つ}}
#[[たび|旅]]に[[でる|出る]]。
#{{context|figuratively|lang=ja|}}[[人生]]の新たな[[段階]]に[[むかう|向かう]]。
#{{context|euphemism|lang=ja|}}[[なくなる|亡くなる]]。[[しぬ|死ぬ]]。
===={{conjug}}====
{{日本語五段活用}}
===={{rel}}====
*[[たびだち]]
789sqmit2gjlpwl6tn1s00yssa1pyiw
かけい
0
327165
2313275
2301958
2026-08-09T00:13:02Z
うーむ
129171
/* */
2313275
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|かげい|がけい}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|筧|懸樋}}
#「[[かけひ]]」の表記ゆれ。
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[佳景]]】よい[[景色]]や眺め。
*【[[家兄]]】[[自分]]の兄。
*【[[家計]]】[[家庭]]の[[経済]]。
*【[[家系]]】家庭の[[系統]]。
*【[[火刑]]】火炙りの刑。
*【[[花兄]]】梅の異称。
*【[[花形]]】花のかたち。
*【[[花茎]]】花だけを支える茎。
*【[[科刑]]】刑罰を科す。
*【[[嘉慶]]】日本で使用された年号。
1d0ouxdb4tcxwrbg8yot11k6o0435kd
博识
0
331528
2313365
2156864
2026-08-09T05:26:47Z
Jiba1219
100610
2313365
wikitext
text/x-wiki
{{DEFAULTSORT:bo2shi2}}
=={{L|zh}}==
==={{pron}}===
{{cmn-pron|bóshí|bóshì|z=n}}
{{yue-pron|bok3 sik1|h=n}}
==={{adjective}}===
{{zhchars|t=博識}}
#[[博識]]な。
{{zh-cat|bo2shi2|形容詞}}
{{yue-cat|bok3sik1|形容詞}}
7pdxsgb7q3n0dlnt8m3f7ipi9rwh7ae
博識
0
331529
2313364
2156861
2026-08-09T05:23:53Z
Jiba1219
100610
/* {{L|zh}} */
2313364
wikitext
text/x-wiki
{{kana-DEFAULTSORT|はくしき}}
=={{L|ja}}==
{{ja-kanjitab|はく|しき|yomi=o,o}}
==={{pron}}===
{{ja-pron|はくしき|acc=0}}
{{ja-accent-common|region=京阪|h||はくしき}}
==={{noun}}・{{adjectivenoun}}===
{{ja-noun|はくしき}}
#[[知識]]の[[範囲]]が[[ひろい|広く]][[あらゆる]]物事に[[くわしい|詳しい]]こと。また、そのさま。[[ものしり|もの知り]]。
{{日本語ダ活用}}
=={{L|zh}}==
==={{pron}}===
{{cmn-pron|bóshí|bóshì}}
{{yue-pron|bok3 sik1}}
==={{adjective}}===
{{zhchars|s=博识}}
#博識な。
{{zh-cat|bo2shi2|形容詞}}
{{yue-cat|bok3sik1|形容詞}}
=={{L|ko}}==
==={{noun}}===
{{ko-head|noun|박식}}
#(日本語に同じ)博識。
nlaqknah3sdckpsvpmqzje1bj61g890
浣腸
0
342370
2313111
2094601
2026-08-08T13:54:18Z
M-30722
1202
2313111
wikitext
text/x-wiki
{{kana-DEFAULTSORT|かんちょう}}
{{Wikipedia}}
{{wikipedia|カンチョー}}
=={{L|ja}}==
{{ja-kanjitab|かん|ちょう|yomi=o}}
==={{alter}}===
*[[灌腸]]
==={{pron}}===
{{ja-pron|かんちょう|acc=h}}
{{ja-accent-common|region=京阪|h||かんちょー}}
==={{noun}}===
{{ja-noun-suru|[[かんちょう]]}}
#{{タグ|ja|医療}}[[便通]]の[[促進]]や[[栄養]][[補給]]のため、[[肛門]]から[[直腸]]、[[大腸]]に[[薬剤]]を[[注入]]すること。
#{{タグ|ja|俗語|性}}主に[[こども|子供]]が行う、[[肛門]]に両の人差し指を突き刺す[[悪戯]]。[[陰裂]]に[[貫手]]を当てることを指す場合もある。
===={{trans}}====
{{trans-top|名詞語義1}}
*{{T|ar}}: {{t|ar|حُقْنَة شَرَجِيَّة|f|tr=ḥuqna šarajiyya}}, {{t|ar|حُقْنَة|f}}
*{{T|hy}}: {{t|hy|հոգնա}}, {{t|hy|կլիզմա}} (口語)
*{{T|it}}: {{t|it|clistere|m}}, {{t|it|lavativo|m}}
*{{T|id}}: {{t|id|enema}}, {{t|id|lavemen}}, {{t|id|klisma}}, {{t|id|huknah}}
*{{T|cy}}: {{t|cy|enema|m|f}}, {{t|cy|rhefrolch|m}} (文章語)
*{{T|uk}}: {{t|uk|клі́зма|f}}, {{t|uk|клісти́р|m}} (古用法)
*{{T|uz}}: {{t|uz|klizma}}
*{{T|en}}: {{t|en|enema}}
*{{T|eo}}: {{t|eo|klistero}}
*{{T|nl}}: {{t|nl|klysma|n}}, {{t|nl|lavement|n}}
*{{T|kk}}: {{t|kk|клизма}}
*{{T|ca}}: {{t|ca|ènema|m}}
*{{T|el}}: {{t|el|κλύσμα|n}}, {{t|el|υποκλυσμός|m}}
*:{{T|grc}}: {{t|grc|κλύσμα|n}}, {{t|grc|ἔνεμα|n}}
*{{T|ky}}: {{t|ky|клизма}}
*{{T|ka}}: {{t|ka|ოყნა}}
*{{T|sv}}: {{t|sv|lavemang}}
*{{T|es}}: {{t|es|enema|m}}, {{t|es|lavativa|f}}, {{t|es|clister|m}}, {{t|es|clistel|m}}
*{{T|sk}}: {{t|sk|klystír|m}}
*{{T|sl}}: {{t|sl|klistir|m}}
*{{T|sh}}:
*:キリル文字: {{t|sh|клѝзма|f}}
*:ラテン文字: {{t|sh|klìzma|f}}
*{{T|tg}}: {{t|tg|ҳуқна}}
*{{T|cs}}: {{t|cs|klystýr|m}}
*{{T|zh}}: {{t|cmn|灌腸劑|tr=guànchángjì}}, {{t|cmn|灌腸|tr=guàncháng}}
*{{T|ko}}: {{t|ko|관장(灌腸)}}
*{{T|de}}: {{t|de|Einlauf|m}}, {{t|de|Klistier|n}}
*{{T|tr}}: {{t|tr|lavman}}
*{{T|nrf}}: {{t|nrf|lavement|m}} (ジャージー)
*{{T|hu}}: {{t|hu|beöntés}}
*{{T|fi}}: {{t|fi|peräruiske}}
*{{T|fr}}: {{t|fr|lavement|m}}
*{{T|bg}}: {{t|bg|кли́зма|f}}
*{{T|he}}: {{t|he|חוקן|m|tr=khóken|alt=חוקן \ חֹקֶן}}
*{{T|be}}: {{t|be|клі́зма|f}}
*{{T|fa}}: {{t|fa|اِنِما}}
*{{T|pl}}: {{t|pl|lewatywa|f}}, {{t|pl|enema|f}}, {{t|pl|klizma|f}}
*{{T|pt}}: {{t|pt|enema|m}}, {{t|pt|clister|m}}
*{{T|mk}}: {{t|mk|клизма|f}}
*{{T|ms}}: {{t|ms|enema}}
*{{T|ro}}: {{t|ro|clismă|f}}
*{{T|ru}}: {{t|ru|кли́зма|f}}, {{t|ru|клисти́р|m}} (古用法)
{{trans-bottom}}
==={{verb}}===
{{ja-verb-suru|かんちょう}}
{{日本語サ変活用}}
=={{L|zh}}==
==={{pron}}===
{{cmn-pron|huǎncháng,wǎncháng}}
==={{noun}}===
{{zh-cat|huan3chang2|noun|医療}}
{{zhchars|s=浣肠}}
#(日本語 語義1に同じ)浣腸。
6c17pdblecip9wi3un35vevuzdf6yin
аниматор
0
345136
2313201
1647156
2026-08-08T23:21:56Z
Kuroco2k
84207
wikify
2313201
wikitext
text/x-wiki
=={{L|sh}}==
==={{etym}}===
{{m|sh|sc=Cyrl|аними́рати}}
==={{pron}}===
*{{sh-IPA|анѝма̄тор}}
*{{hyph|sh|а|ни|ма|тор}}
==={{noun}}===
{{sh-noun+|g=m|head=анѝма̄тор}}
# {{context|occupation|lang=sh}} [[アニメーター]]。
===={{decl}}====
{{sh-decl-noun|sc=Cyrl
|анѝма̄тор|аниматори
|аниматора|аниматора
|аниматору|аниматорима
|аниматора|аниматоре
|аниматоре|аниматори
|аниматору|аниматорима
|аниматором|аниматорима
}}
===参考文献===
*{{R:sh:HJP|fV1mWg%3D%3D}}
=={{L|mk}}==
==={{pron}}===
*{{mk-IPA|анима/тор}}
==={{noun}}===
{{mk-noun|m|f=аниматорка}}
#{{context|occupation|lang=mk}} [[アニメーター]]。
===={{inflection}}====
{{mk-decl-noun-m|||аниматоре}}
=={{L|ru}}==
==={{etym}}===
{{bor|ru|en|animator|notext=y}} の翻字 < {{der|ru|la|animātor}} < {{m|la|animāre||吸い込む, 吹く; 復活させる}} < {{m|la|anima||空気, 魂}} < {{etyl|ine-pro|ru}} {{m|ine-pro||*ane-|吹く, 息をする}}
==={{pron}}===
*{{ru-IPA|анима́тор}}
*{{kanahyoki|ru|アニ'''マ'''タル}}
*{{hyph|ru|а|ни|ма|тор}}
==={{noun}}===
{{ru-noun+|анима́тор|a=an|adj=анима́торский}}
# {{context|lang=ru|neologism|occupation}} [[アニメーター]]。
===={{decl}}====
{{ru-noun-table|анима́тор|a=an}}
===={{syn}}====
*{{l|ru|мультиплика́тор|g=m}}
===={{hyper}}====
*{{l|ru|рабо́тник|g=m}}, {{l|ru|худо́жник|g=m}}
===={{rel}}====
*{{l|ru|анима́торский}}
*{{l|ru|анима́ция|g=f}}
bfxfvneefvm05v7jhxd1siziis0tj8s
きゅうとう
0
346319
2313249
2279632
2026-08-08T23:45:50Z
鍼灸
112313
2313249
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|きゅうどう|ぎゅうとう|ぎゅうどう}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[旧套]]】:古びたやり方。
*【[[急登]]】:急な[[斜面]]の[[道]]。
*【[[急騰]]】:[[急]]な[[高騰]]。
*【[[給湯]]】:[[湯]]を[[わかす|沸かし]]て[[屋内]]の[[部屋]]などへ[[配給]]すること。
*【[[九島]]】:九つの島。
*【[[九等]]】:第九位。
*【[[九頭]]】:(動物が)九匹。
k5bswcr09lsf47q5bjd5x2yre1n6lyt
包帯
0
346384
2313225
1935578
2026-08-08T23:26:00Z
Kuroco2k
84207
2313225
wikitext
text/x-wiki
=={{ja}}==
{{wikipedia}}
[[Category:{{ja}}]]
{{kana-DEFAULTSORT|ほうたい}}
==={{noun}}===
[[Category:{{ja}}_{{noun}}]]
{{jachar|包|帯}}([[ほうたい]] {{同音後|[[繃帯]]}})
#[[傷]]などを[[保護]]したり[[感染]][[防止]]のため、[[患部]]のうえから[[まく|巻く]]綿布や[[ガーゼ]]などでできた細長い[[布]]。
===={{trans}}====
{{top}}
*[[{{apw}}]]<!--* Apache-->: {{t|apw|bee bikʼídisdizí}}
*[[{{ar}}]]<!--* Arabic-->: {{t|ar|ضِمَادَة|f}}, {{t|ar|عِصَابَة|f}}
*[[{{az}}]]<!--* Azerbaijani-->: {{t+|az|bint}}, {{t|az|bandaj}}, {{t+|az|sarğı}}
*[[{{ba}}]]<!--* Bashkir-->: {{t|ba|бәйләүес|sc=Cyrl}}
*[[{{be}}]]<!--* Belarusian-->: {{t|be|бінт|m|sc=Cyrl}}, {{t|be|банда́ж|m|sc=Cyrl}}, {{t|be|павя́зка|f|sc=Cyrl}}
*[[{{bg}}]]<!--* Bulgarian-->: {{t|bg|бинт|m|sc=Cyrl}}, {{t+|bg|бандаж|m|sc=Cyrl}}
*[[{{bn}}]]<!--* Bengali-->: {{t|bn|পটি}}, {{t|bn|ব্যাণ্ডেজ}}
*[[{{bo}}]]<!--* Tibetan-->: {{t|bo|སྨན་རས}}, {{t|bo|རྨ་རས}}
*[[{{ca}}]]<!--* Catalan-->: {{t+|ca|bena|f}}, {{t|ca|embenat|m}}
*[[{{ceb}}]]<!--* Cebuano-->: {{t|ceb|haklop}}
*[[{{cop}}]]<!--* Coptic-->: {{t|cop|ⲥⲉⲃⲉⲛ|m}}
*[[{{crh}}]]<!--* Crimean Tatar-->: {{t|crh|bint}}
*[[{{cs}}]]<!--* Czech-->: {{t+|cs|obvaz|m}}, {{t+|cs|fáč|m}}, {{t+|cs|obinadlo|n}}
*[[{{cy}}]]<!--* Welsh-->: {{t+|cy|rhwymyn|m}}
*[[{{da}}]]<!--* Danish-->: {{t+|da|bandage|c}}
*[[{{de}}]]<!--* German-->: {{t+|de|Verband|m}}
*[[{{el}}]]<!--* Greek-->: {{t+|el|επίδεσμος|m|sc=Grek}}
**[[{{grc}}]]<!--* Ancient Greek-->: {{t|grc|ἐπίδεσμος|m|sc=Grek}}, {{t|grc|κειρία|f|sc=Grek}}, {{t|grc|τελαμών|m|sc=Grek}}
*{{en}}:[[bandage]]
*[[{{eo}}]]<!--* Esperanto-->: {{t+|eo|bandaĝo}}
*[[{{es}}]]<!--* Spanish-->: {{t+|es|venda|f}}, {{t+|es|vendaje|m}}
*[[{{et}}]]<!--* Estonian-->: {{t|et|haavaside}}, {{t+|et|side}}
*[[{{eu}}]]<!--* Basque-->: {{t|eu|lotura}}, {{t|eu|hesgailu}}
*[[{{fa}}]]<!--* Persian-->: {{t+|fa|بانداژ|tr=bândâž}}
*[[{{fi}}]]<!--* Finnish-->: {{t+|fi|side}}
*[[{{fj}}]]<!--* Fijian-->: {{t|fj|vadreti-taka}}
*[[{{fr}}]]<!--* French-->: {{t+|fr|bandage|m}}, {{t+|fr|pansement|m}}
*[[{{ga}}]]<!--* Irish-->: {{t|ga|bindealán}}
*[[{{gd}}]]<!--* Scottish Gaelic-->: {{t|gd|bann|m}}
*[[{{gl}}]]<!--* Galician-->: {{t|gl|venda|f}}
*[[{{got}}]]<!--* Gothic-->: {{t|got|𐍆𐌰𐍃𐌺𐌾𐌰|m}}
*[[{{he}}]]<!--* Hebrew-->: {{t|he|תחבושת|f|alt=תחבושת \ תַּחְבֹּשֶׁת|tr=tahboshet}}
*[[{{hi}}]]<!--* Hindi-->: {{t+|hi|पट्टी|f}}, {{t+|hi|पट्टा|m}}
*[[{{hu}}]]<!--* Hungarian-->: {{t+|hu|kötszer}}, {{t+|hu|kötés}}
*[[{{hy}}]]<!--* Armenian-->: {{t+|hy|վիրակապ|sc=Armn}}, {{t+|hy|բինտ|sc=Armn}}
*[[{{id}}]]<!--* Indonesian-->: {{t+|id|barut}}
*[[{{io}}]]<!--* Ido-->: {{t+|io|bandajo}}
*[[{{is}}]]<!--* Icelandic-->: {{t+|is|umbúðir|f-p}}, {{t+|is|plástur|m}}
*[[{{it}}]]<!--* Italian-->: {{t+|it|fasciatura|f}}, {{t|it|bendaggio|m}}, {{t+|it|benda|f}}, {{t|it|benderella|f}}, {{t+|it|fascia|f}}
*[[{{ka}}]]<!--* Georgian-->: {{t|ka|ბანდი|sc=Geor}}, {{t|ka|სახვევი|sc=Geor}}
*[[{{kk}}]]<!--* Kazakh-->: {{t|kk|жаратаңғыш|sc=Cyrl}}
*[[{{km}}]]<!--* Khmer-->: {{t|km|ប៉ង់សឺម៉ង់}}, {{t|km|វណវេឋន៍}}
*[[{{kn}}]]<!--* Kannada-->: {{t+|kn|ಕಟ್ಟುಪಟ್ಟಿ}}
*[[{{ko}}]]<!--* Korean-->: {{t|ko|붕대}}
*[[{{ky}}]]<!--* Kyrgyz-->: {{t+|ky|бинт|sc=Cyrl}}, {{t+|ky|бандаж|sc=Cyrl}}
*[[{{la}}]]<!--* Latin-->: {{t|la|fascia|f}}, {{t|la|infula|f}}
*[[{{lo}}]]<!--* Lao-->: {{t|lo|ພັນຜ້າ}}, {{t|lo|ຜ້າພັນແຜ}}, {{t|lo|ຜ້າພັນບາດ}}, {{t|lo|ວະນະບັດ}}, {{t|lo|ວະນະພັນ}}
*[[{{lt}}]]<!--* Lithuanian-->: {{t|lt|bintas|m}}
*[[{{lv}}]]<!--* Latvian-->: {{t|lv|pārsējs|m}}
*[[{{mk}}]]<!--* Macedonian-->: {{t|mk|завој|m|sc=Cyrl}}
*[[{{mi}}]]<!--* Maori-->: {{t|mi|takai}}, {{t|mi|tākaikai}}, {{t|mi|tāpi}}
*[[{{mr}}]]<!--* Marathi-->: {{t|mr|मलमपट्टी|f}}
*[[{{ms}}]]<!--* Malay-->: {{t|ms|bebat}}, {{t|ms|barut}}, {{t|ms|balut}}
*[[{{mt}}]]<!--* Maltese-->: {{t|mt|faxxa|f}}
*[[{{my}}]]<!--* Burmese-->: {{t+|my|ပတ်တီး}}
*[[{{nl}}]]<!--* Dutch-->: {{t+|nl|verband|n}}, {{t+|nl|bandage|f}}, {{t+|nl|zwachtel|m}}
*[[{{no}}]]<!--* Norwegian-->:
**[[{{nb}}]]<!--* Bokmål-->: {{t|nb|bandasje|m}}
**[[{{nn}}]]<!--* Nynorsk-->: {{t|nn|bandasje|m}}
*[[{{nrf}}]]<!--* Norman-->: {{t|nrf|bandage|m}}
*[[{{oc}}]]<!--* Occitan-->: {{t+|oc|pensament|m}}
*[[{{pl}}]]<!--* Polish-->: {{t+|pl|bandaż|m}}
*[[{{ps}}]]<!--* Pashto-->: {{t+|ps|پټۍ|f|tr=paṭəj}}
*[[{{pt}}]]<!--* Portuguese-->: {{t+|pt|bandagem|f}}, {{t+|pt|atadura|f}}, {{t+|pt|curativo|m}}, {{t+|pt|penso|m}}
*[[{{rhg}}]]<!--* Rohingya-->: {{t|rhg|faththi}}
*[[{{ro}}]]<!--* Romanian-->: {{t+|ro|bandaj|n}}, {{t+|ro|fașă|f}}, {{t+|ro|pansament|n}}
*[[{{ru}}]]<!--* Russian-->: {{t+|ru|бинт|m|sc=Cyrl}}, {{t+|ru|банда́ж|m|sc=Cyrl}}, {{t+|ru|повя́зка|f|sc=Cyrl}}
*[[{{rup}}]]<!--* Aromanian-->: {{t|rup|fashi|f}}, {{t|rup|fashe|f}}
*[[{{sa}}]]<!--* Sanskrit-->: {{t+|sa|पट्टिका|f}}, {{t+|sa|पट्टी|f}}
*[[{{sh}}]]<!--* Serbo-Croatian-->:{{t|sh|завој}}/{{t+|sh|zavoj|m}}
*[[{{sk}}]]<!--* Slovak-->: {{t|sk|obväz|m}}, {{t|sk|ovíjadlo|n}}, {{t|sk|ovínadlo|n}}
*[[{{sl}}]]<!--* Slovene-->: {{t|sl|obveza|f}}
*[[{{sq}}]]<!--* Albanian-->: {{t+|sq|fashë|f}}, {{t|sq|fashaturë|f}}
*[[{{stq}}]]<!--* Saterland Frisian-->: {{t|stq|Biende|f}}
*[[{{sv}}]]<!--* Swedish-->: {{t+|sv|plåster|n}}, {{t+|sv|bandage|n}}, {{t+|sv|förband|n}}
*[[{{sw}}]]<!--* Swahili-->: {{t+|sw|bendeji|c9|c10}}, {{t|sw|plasta}}
*[[{{te}}]]<!--* Telugu-->: {{t+|te|కట్టు}}
*[[{{tg}}]]<!--* Tajik-->: {{t|tg|дока|sc=Cyrl}}, {{t|tg|бандаж|sc=Cyrl}}, {{t|tg|бинт|sc=Cyrl}}
*[[{{th}}]]<!--* Thai-->: {{t|th|ผ้าพัน}}, {{t|th|ผ้าพันแผล}}
*[[{{tk}}]]<!--* Turkmen-->: {{t|tk|sarag}}
*[[{{tl}}]]<!--* Tagalog-->: {{t|tl|bendahan}}
*[[{{tr}}]]<!--* Turkish-->: {{t+|tr|bandaj}}, {{t+|tr|sargı}}
**[[{{ota}}]]<!--* Ottoman Turkish-->: {{t|ota|صارغی|tr=sargı}}
*[[{{tt}}]]<!--* Tatar-->: {{t+|tt|бәйләвеч|sc=Cyrl}}
*[[{{txb}}]]<!--* Tocharian B-->: {{t|txb|śwele}}
*[[{{ug}}]]<!--* Uyghur-->: {{t|ug|تېڭىق}}
*[[{{uk}}]]<!--* Ukrainian-->: {{t+|uk|бинт|m|sc=Cyrl}}, {{t+|uk|банда́ж|m|sc=Cyrl}}, {{t+|uk|пов'я́зка|f|sc=Cyrl}}
*[[{{ur}}]]<!--* Urdu-->: {{t|ur|پٹی|f|tr=paṭṭī}}
*[[{{uz}}]]<!--* Uzbek-->: {{t+|uz|bint}}, {{t+|uz|bandaj}}
*[[{{vep}}]]<!--* Veps-->: {{t|vep|sideg}}
*[[{{vi}}]]<!--* Vietnamese-->: {{t+|vi|băng}}, {{t|vi|băng giữ}}, {{t+|vi|băng bó}}
*[[{{vro}}]]<!--* Võro-->: {{t|vro|sidõ}}
*[[{{yi}}]]<!--* Yiddish-->: {{t|yi|באַנדאַזש|m}}
*{{zh}}:[[绷带]]/[[繃帶]](bēng dài), [[绑带]]/[[綁帶]](bǎngdài)
{{bottom}}
214cm478nx5se4ioq8r4x9ae0cesdx3
法堂
0
347395
2313250
1936260
2026-08-08T23:47:31Z
鍼灸
112313
2313250
wikitext
text/x-wiki
=={{ja}}==
{{kana-DEFAULTSORT|はっとう}}
==={{noun}}===
{{ja-noun|[[はっとう]]}}
#[[禅宗]][[寺院]]で[[法門]]を[[講義]]、[[講演]]するための堂舎。[[講堂]]。
=={{zh}}==
==={{pron}}===
{{cmn-pron|fǎtáng}}
==={{noun}}===
{{zh-cat|fa3tang2|noun}}
{{zhchars}}
#寺院で大勢の聴衆に説教をするのに用いる建物。
#「[[法廷]]」の旧称。
6qzn8xdpbolflzxlb5rzl271vyd5z26
さいせん
0
348880
2313106
1936840
2026-08-08T13:26:29Z
うーむ
129171
/* 日本語 */
2313106
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|さいぜん}}
=={{ja}}==
==={{homonym}}===
{{head|ja|同音異義}}
*【[[再選]]】選挙の[[結果]]、[[おなじ|同じ]]人が[[選出]]されること。
*【[[賽銭]]】[[祈願]]が[[成就]]した後に[[神仏]]に賽物として[[奉納]]する[[金銭]]。
*【[[最先]]】[[最前]]。
3fe71sk2dupu9onldmb4k0vojeaajb5
2313116
2313106
2026-08-08T14:01:09Z
M-30722
1202
2313116
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|さいぜん}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[再選]]】選挙の[[結果]]、[[おなじ|同じ]]人が[[選出]]されること。
*【[[賽銭]]】[[祈願]]が[[成就]]した後に[[神仏]]に賽物として[[奉納]]する[[金銭]]。
*【[[最先]]】[[最前]]。
di9i04kuufntdwl3ybfwm4egparxoib
2313159
2313116
2026-08-08T22:45:54Z
うーむ
129171
/* */
2313159
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|さいぜん|ざいせん}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[再選]]】選挙の[[結果]]、[[おなじ|同じ]]人が[[選出]]されること。
*【[[賽銭]]】[[祈願]]が[[成就]]した後に[[神仏]]に賽物として[[奉納]]する[[金銭]]。
*【[[最先]]】[[最前]]。
iasya7kumsmujyyrakq3hngajp5nefu
likken
0
348982
2313464
1645308
2026-08-09T11:51:54Z
Kuroco2k
84207
/* {{desc}} */
2313464
wikitext
text/x-wiki
=={{L|nl}}==
==={{etym}}===
{{etyl|dum|nl}} {{m|dum|lecken}}, {{m|dum|licken}} < {{etyl|odt|nl}} {{m|odt|leccon}} < {{etyl|gmw-pro|nl}} {{m|gmw-pro|*likkōn}} < {{etyl|gem-pro|nl}} {{m|gem-pro|*likkōną}}
==={{pron}}===
*音声: [[ファイル:Nl-likken.ogg]]
* {{IPA|lang=nl|ˈlɪ.kə(n)}}
* {{rhymes|ɪkən|s=2}}
* {{hyphenation|lik|ken}}
==={{verb}}===
{{nl-verb|wk-t}}
#{{context|transitive|intransitive|lang=nl}}{{おくりがな2|舐|な|める|なめる}}。
{{nl-conj-wk|lik|likke}}
===={{drv}}====
* {{l|nl|aflikken}}
* {{l|nl|belikken}}
* {{l|nl|oplikken}}
* {{l|nl|weglikken}}
===={{desc}}====
* {{desc|dcr|lek|lik}}
* {{desc|gmw-jdt|läkke}}
==={{anag}}===
* {{l|nl|klinke}}, {{l|nl|nikkel}}
ec3z6uav737la5mje678ee3ecpjxbmm
leer
0
352392
2313465
1651838
2026-08-09T11:52:35Z
Kuroco2k
84207
/* {{desc}} */
2313465
wikitext
text/x-wiki
{{also|Leer|lêer|leër}}
=={{L|af}}==
==={{pron}}===
* {{IPA|lang=af|lɪər}}
==={{etym}}1===
{{etyl|nl|af}} {{m|nl|leren}} < {{etyl|dum|af}} {{m|dum|lêren}} < {{etyl|odt|af}} {{m|odt|lēren}} < {{etyl|gem-pro|af}} {{m|gem-pro|*laizijaną}}
===={{verb}}====
{{af-verb|lerende}}
#{{おくりがな2|学|まな|ぶ|まなぶ}}。
==={{etym}}2===
{{etyl|nl|af}} {{m|nl|leer}} < {{etyl|dum|af}} {{m|dum|lêre}} < {{etyl|odt|af}} {{m|odt|lēra}} < {{etyl|gem-pro|af}} {{m|gem-pro|*laizō}}
===={{noun}}====
{{af-noun|-}}
#{{おくりがな2|教|おし|え|おしえ}}。
==={{etym}}3===
{{etyl|nl|af}} {{m|nl|leer}} < {{m|nl|leder}} < {{etyl|dum|af}} {{m|dum|lēder}} < {{etyl|odt|af}} {{m|odt|*lether}} < {{etyl|gem-pro|af}} {{m|gem-pro|*leþrą}}
===={{noun}}====
{{af-noun|-}}
#{{ふりがな|革|かわ}}、[[レザー]]。
==={{etym}}4===
{{etyl|nl|af}} {{m|nl|leer}} < {{etyl|dum|af}} {{m|dum|leer}}
===={{noun}}====
{{af-noun|lere}}
#{{ふりがな|梯子|はしご}}。
====={{desc}}=====
* {{desc|st|lere|bor=1}}
* {{desc|xh|ileli|bor=1}}
----
=={{L|en}}==
==={{pron}}===
* {{a|UK}} {{IPA|lang=en|lɪə(ɹ)}}
* {{a|US}} {{IPA|lɪɹ}}
*音声(英): [[ファイル:en-uk-leer.ogg]]
*音声(米): [[ファイル:en-us-leer.ogg]]
* {{rhymes|ɪə(ɹ)|s=1}}
==={{etym}}1===
不詳であるが、動詞 ''*leer'' (顔を作る) < 語義2 {{m|en|leer||顔}} と考えられる。
===={{verb}}====
{{en-verb}}
#{{context|intransitive|lang=en}}{{ふりがな|横目|よこめ}}で{{おくりがな2|見|み|る|みる}}。
#{{context|transitive|lang=en}}{{ふりがな|色目|いろめ}}を使い[[誘惑]]する。
===={{noun}}====
{{en-noun}}
#横目、{{おくりがな3|流|なが|し|目|め||ながしめ}}。
==={{etym}}2===
{{etyl|enm}} {{m|enm|ler}}, {{m|enm|leor}} < {{etyl|ang}} {{m|ang|hlēor}} < {{etyl|gem-pro}} {{m|gem-pro|*hleuzą}} < {{etyl|ine-pro}} {{m|ine-pro|*ḱlews-}} < {{m|ine-pro|*ḱlewe-}}, {{m|ine-pro|*ḱlew-}}
===={{alter}}====
* {{l|en|lyre}}, {{l|en|lire}}, {{l|en|lere}}
===={{noun}}====
{{en-noun}}
#{{context|obsolete|lang=en}}{{ふりがな|頬|ほお}}。
#{{context|obsolete|lang=en}}{{ふりがな|顔|かお}}。
#{{context|obsolete|lang=en}}[[外観]]、[[表情]]。
#{{context|obsolete|lang=en}}{{ふりがな|顔色|かおいろ}}。
#{{context|obsolete|lang=en}}{{ふりがな|身|み}}、{{ふりがな|肌|はだ}}。
#{{context|UK|dialectal|lang=en}}{{ふりがな|脇腹|わきばら}}。
==={{etym}}3===
{{etyl|enm}} {{m|enm|lere}} < {{etyl|ang}} {{m|ang|ġelǣr}}, {{m|ang|*lǣre}} < {{etyl|gem-pro}} {{m|gem-pro|*lēziz}}, {{m|gem-pro|*lēzijaz}} < {{etyl|ine-pro}} {{m|ine-pro|*les-}}
===={{alter}}====
* {{l|en|lear}}
===={{adjective}}====
{{en-adj}}
#{{context|obsolete|lang=en}}{{ふりがな|空|から}}の。
#{{context|obsolete|lang=en}}{{おくりがな2|足|た|り|たりる}}ない、[[不足]]した。
#{{context|obsolete|lang=en}}[[空腹]]の。
#{{context|UK|dialectal|obsolete|lang=en}}{{おくりがな2|薄|うす|い|うすい}}。{{おくりがな2|微|かす|か|かすか}}な。
#{{context|obsolete|lang=en}}{{おくりがな3|積|つ|み|荷|に||つみに}}のない。
#{{context|obsolete|lang=en}}[[些細]]な。
====={{drv}}=====
* {{l|en|leerness}}
==={{etym}}4===
{{etyl|enm}} {{m|enm|leren}} < {{etyl|ang}} {{m|ang|lǣran}} < {{etyl|gem-pro}} {{m|gem-pro|*laizijaną}} < {{etyl|ine-pro}} {{m|ine-pro|*leis-}}
===={{verb}}====
{{en-verb}}
#{{context|transitive|obsolete|lang=en}}{{おくりがな2|教|おし|える|おしえる}}。
#{{context|transitive|obsolete|lang=en}}{{おくりがな2|学|まな|ぶ|まなぶ}}。
==={{etym}}5===
{{m|en|lehr}} 参照。
===={{noun}}====
{{en-noun}}
#[[lehr]]の異形。
==={{anag}}===
* {{anagrams|en|a=eelr|Erle|LREE|Reel|reel}}
----
=={{L|et}}==
==={{etym}}1===
{{etyl|gml|et}} {{m|gml|leger}}, {{m|gml|lager}}
===={{noun}}====
{{et-noun|leeri|leeri}}
#[[陣営]]。
#{{ふりがな|側|がわ}}。
{{et-decl-riik|leer|leer|i}}
==={{etym}}2===
{{etyl|gml|et}} {{m|gml|lere}}
===={{noun}}====
{{et-noun|leeri|leeri}}
#{{context|Christianity|lang=et}}(プロテスタント)[[堅信]]。
{{et-decl-riik|leer|leer|i}}
----
=={{L|nl}}==
==={{pron}}===
* {{IPA|lang=nl|leːr}}
*音声: [[ファイル:Nl-leer.ogg]]
* {{hyphenation|leer}}
* {{rhymes|eːr|s=1}}
==={{etym}}1===
{{m|nl|leder}} の短縮 < {{etyl|dum|nl}} {{m|dum|leder}} < {{etyl|odt|nl}} {{m|odt|*lether}} < {{etyl|gem-pro|nl}} {{m|gem-pro|*leþrą}}
===={{noun}}====
{{nl-noun|g=n|-|-}}
#{{ふりがな|革|かわ}}、[[レザー]]。
===={{syn}}====
* {{l|nl|leder}}
====={{drv}}=====
* {{l|nl|kunstleer}}
* {{l|nl|leerdoek}}
* {{l|nl|leertje}}
* {{l|nl|leertouwen}}
====={{desc}}=====
* {{desc|af|leer}}
* {{desc|dcr|leër|leer}}
* {{desc|djk|leli|bor=1}}
* {{desc|srn|leri|bor=1}}
==={{etym}}2===
{{etyl|dum|nl}} {{m|dum|lêre}} < {{etyl|odt|nl}} {{m|odt|lēra}} < {{etyl|gem-pro|nl}} {{m|gem-pro|*laizō}}
===={{noun}}====
{{nl-noun|g=f|leren|leertje}}
#[[教義]]、{{おくりがな2|教|おし|え|おしえ}}。
#[[学説]]。
====={{drv}}=====
* {{l|nl|beleren}}
* {{l|nl|betekenisleer}}
* {{l|nl|dwaalleer}}
* {{l|nl|erfelijkheidsleerleer}}
* {{l|nl|evolutieleer}}
* {{l|nl|geloofsleer}}
* {{l|nl|getallenleer}}
* {{l|nl|leermeester}}
* {{l|nl|leerstelling}}
* {{l|nl|leervast}}
* {{l|nl|notenleer}}
* {{l|nl|rechtsleer}}
* {{l|nl|verzamelingenleer}}
* {{l|nl|vormleer}}
* {{l|nl|warmteleer}}
* {{l|nl|zedenleer}}
====={{desc}}=====
* {{desc|af|leer}}
* {{desc|dcr|leer}}
==={{etym}}3===
{{etyl|dum|nl}} {{m|dum|leer}}
===={{noun}}====
{{nl-noun|g=f|leren|-}}
#{{context|dialectal|dated|lang=nl}}[[ladder]]の異形。
====={{desc}}=====
* {{desc|af|leer}}
==={{etym}}4===
===={{verb}}====
{{nl-verb-form}}
#[[leren]]の直説法現在第一人称単数形。
#lerenの命令法。
==={{anag}}===
* {{l|nl|lere}}
----
=={{L|es}}==
==={{etym}}===
{{etyl|la|es}} {{m|la|legere}} < {{etyl|itc-pro|es}} {{m|itc-pro|*legō}} < {{etyl|ine-pro|es}} {{m|ine-pro|*leǵ-}}
==={{pron}}===
{{es-IPA}}
*音声(コロンビア): [[ファイル:LL-Q1321 (spa)-AdrianAbdulBaha-leer.wav]]
==={{verb}}===
{{es-verb}}
#{{おくりがな2|読|よ|む|よむ}}。
{{es-conj-er|le}}
===={{syn}}====
* {{l|es|ridear}} (ベリーズ)
===={{drv}}====
* {{l|es|entre gitanos no nos leemos las cartas}}
* {{l|es|leer entre líneas}}
* {{l|es|leer la cartilla}}
===={{rel}}====
{{top}}
* {{l|es|atril}}
* {{l|es|lección}}
* {{l|es|lector}}
* {{l|es|lectura}}
* {{l|es|legible}}
* {{l|es|leyenda}}
* {{l|es|esleír}}
{{bottom}}
===={{desc}}====
* {{desc|qu|liyiy}}
----
=={{L|da}}==
==={{pron}}===
* {{rhymes|eːˀər|s=2}}
==={{noun}}===
{{head|da|noun form|g=c}}
#[[le]]の非限定複数形。
----
=={{L|de}}==
==={{etym}}===
{{etyl|gmh|de}} {{m|gmh|lēr}}, {{m|gmh|lēre}}, {{m|gmh|lǣre}} < {{etyl|goh|de}} {{m|goh|lāri}} < {{etyl|gem-pro|de}} {{m|gem-pro|*lēziz}}
==={{pron}}===
* {{IPA|lang=de|leːɐ̯}}
*音声: [[ファイル:De-leer.ogg]]
* {{homophones|lang=de|lehr}}
* {{rhymes|eːɐ̯|s=1}}
==={{adjective}}===
{{de-adj|leerer|leersten}}
#{{ふりがな|空|から}}の。
{{de-decl-adj|leer|leerer|leerst}}
===={{ant}}====
* {{l|de|voll}}
* {{l|de|gefüllt}}
===={{drv}}====
* {{l|de|Leere}}
* {{l|de|leeren}}
* {{l|de|leerlaufen}}
* {{l|de|nichtleer}}
* {{l|de|halb leer}}
==={{verb}}===
{{head|de|verb form}}
#[[leeren]]の命令法単数形。
#{{context|colloquial|lang=de}}leerenの現在第一人称単数形。
----
=={{L|nb}}==
==={{verb}}===
{{nb-verb-form}}
#[[lee]]の現在形。
----
=={{L|pdc}}==
==={{etym}}===
{{etyl|gmh|pdc}} {{m|gmh|lǣre}} < {{etyl|goh|pdc}} {{m|goh|lāri}}
==={{adjective}}===
{{head|pdc|adjective}}
#{{ふりがな|空|から}}の。
----
=={{L|rm}}==
==={{etym}}===
{{etyl|la|rm}} {{m|la|aēr}}
==={{noun}}===
{{head|rm|noun|g=m}}
#{{context|Sutsilvan|lang=rm}}[[空気]]。
===={{syn}}====
* (ロマンシュ・グリシュン、スルシルヴァン、ストゥシルヴァン、スルミラン) {{l|rm|aria}}
* (プーター、ヴァラダール) {{l|rm|ajer}}
ex597l2r02gxvx80nahpl4btd8j68t3
水晶
0
359782
2313223
2192353
2026-08-08T23:25:59Z
Kuroco2k
84207
2313223
wikitext
text/x-wiki
=={{L|ja}}==
{{wikipedia}}
[[Category:{{ja}}]]
{{kana-DEFAULTSORT|すいしょう}}
==={{noun}}===
[[Category:{{ja}}_{{noun}}]]
{{jachars}}([[すいしょう]])
#ほぼ六角柱状で[[無色]][[透明]]の[[石英]]の[[結晶]]。[[成分]]は無水珪素。
===={{syn}}====
*[[クリスタル]]
===={{trans}}====
{{trans-top}}
*[[{{ar}}]]<!--* Arabic-->: {{t|ar|قَرِيس}}, {{t|ar|قَرِيت}}
*[[{{bg}}]]<!--* Bulgarian-->: {{t+|bg|криста́л|m|sc=Cyrl}}
*[[{{bo}}]]<!--* Tibetan-->: {{t|bo|ཆུ་ཤེལ}}
*[[{{crh}}]]<!--* Crimean Tatar-->: {{t|crh|büllür}}
*[[{{cs}}]]<!--* Czech-->: {{t+|cs|křišťál|m}}
*[[{{cy}}]]<!--* Welsh-->: {{t+|cy|crisial|m}}
*[[{{de}}]]<!--* German-->: {{t+|de|Kristall|m}}
*[[{{el}}]]<!--* Greek-->: {{t+|el|κρύσταλλο|n|sc=Grek}}
*[[{{en}}]]: {{t|en|crystal}}, {{t|en|rock crystal}}
*[[{{eo}}]]<!--* Esperanto-->: {{t|eo|kristalo}}
*[[{{es}}]]<!--* Spanish-->: {{t+|es|cristal|m}}
*[[{{eu}}]]<!--* Basque-->: {{t+|eu|kristal}}
*[[{{fa}}]]<!--* Persian-->: {{t+|fa|بلور|tr=bolur}}
*[[{{fi}}]]<!--* Finnish-->: {{t+|fi|kristalli}}
*[[{{fr}}]]<!--* French-->: {{t+|fr|cristal|m}}
*[[{{ga}}]]<!--* Irish-->: {{t|ga|criostal|m}}
*[[{{gl}}]]<!--* Galician-->: {{t+|gl|cristal|m}}
*[[{{haw}}]]<!--* Hawaiian-->: {{t|haw|pōhaku aʻiaʻi}}
*[[{{he}}]]<!--* Hebrew-->: {{t+|he|בְּדוֹלַח|m|tr=bdólaḥ}}
*[[{{hi}}]]<!--* Hindi-->: {{t+|hi|बिल्लौर|m}}, {{t+|hi|अमल|m}}, {{t+|hi|क्रिस्टल|m}}
*[[{{hu}}]]<!--* Hungarian-->: {{t+|hu|kristály}}
*[[{{hy}}]]<!--* Armenian-->: {{t+|hy|բյուրեղ}}
*[[{{it}}]]<!--* Italian-->: {{t+|it|cristallo|m}}
*[[{{ka}}]]<!--* Georgian-->: {{t|ka|კრისტალი}}
*[[{{km}}]]<!--* Khmer-->: {{t+|km|ផលិក}}, {{t+|km|ផ្លេក}}
*[[{{ko}}]]<!--* Korean-->: {{t+|ko|수정}}
*[[{{la}}]]<!--* Latin-->: {{t|la|cristallus|f}}
*[[{{lad}}]]<!--* Ladino-->: {{t|lad|kristal}}, {{t|lad|cristal}}
*[[{{lt}}]]<!--* Lithuanian-->: {{t|lt|kristalas|m}}
*[[{{lv}}]]<!--* Latvian-->: {{t|lv|kristāls|m}}
*[[{{mk}}]]<!--* Macedonian-->: {{t|mk|криста́л|m|sc=Cyrl}}
*[[{{mi}}]]<!--* Maori-->: {{t|mi|tioata}}
*[[{{mn}}]]<!--* Mongolian-->: (キリル文字){{t+|mn|болор|sc=Cyrl}}
*[[{{nl}}]]<!--* Dutch-->: {{t+|nl|kristal|n}}
*[[{{nv}}]]<!--* Navajo-->: {{t|nv|tséghádiʼnídínii}}
*[[{{pl}}]]<!--* Polish-->: {{t+|pl|kryształ|m}}
*[[{{pt}}]]<!--* Portuguese-->: {{t+|pt|cristal|m}}
*[[{{ro}}]]<!--* Romanian-->: {{t+|ro|cristal|n}}
*[[{{ru}}]]<!--* Russian-->: {{t+|ru|хруста́ль|m|sc=Cyrl}}, {{t+|ru|го́рный хруста́ль|m|sc=Cyrl}}
*[[{{sa}}]]<!--* Sanskrit-->: {{t+|sa|अमल|n}}
*[[{{sgs}}]]<!--* Samogitian-->: {{t|sgs|kristals|m}}
*[[{{sh}}]]<!--* Serbo-Croatian-->: {{t|sh|крѝста̄л|sc=Cyrl}}/{{t+|sh|krìstāl|m}}, {{t|sh|ле̏дац|sc=Cyrl}}/{{t+|sh|lȅdac|m}}
*[[{{sl}}]]<!--* Slovene-->: {{t+|sl|kristal|m}}
*[[{{sq}}]]<!--* Albanian-->: {{t+|sq|kristal|m}}
*[[{{sv}}]]<!--* Swedish-->: {{t+|sv|kristall|c}}
*[[{{sw}}]]<!--* Swahili-->: {{t|sw|fuwele}}
*[[{{te}}]]<!--* Telugu-->: {{t+|te|స్ఫటికం}}
*[[{{th}}]]<!--* Thai-->: {{t+|th|ผลึก}}
*[[{{tl}}]]<!--* Tagalog-->: {{t+|tl|kristal}}
*[[{{tr}}]]<!--* Turkish-->: {{t+|tr|kristal}}
*[[{{vi}}]]<!--* Vietnamese-->: {{t+|vi|pha lê}}
{{trans-bottom}}
=={{L|zh}}==
{{wikipedia|lang=zh}}
{{zh-cat|shui3jing1|noun}}
{{yue-cat|seui2jing1|noun}}
==={{pron}}===
{{cmn-pron|shuǐjīng}}
{{yue-pron|seoi2 zing1}}
==={{noun}}===
{{zhchars}}
#透明な[[石英]]。
l4u6cqjhhjitcgc3p3j8ioswz627725
不平等
0
370619
2313226
1943175
2026-08-08T23:25:59Z
Kuroco2k
84207
2313226
wikitext
text/x-wiki
=={{L|ja}}==
{{kana-DEFAULTSORT|ふびょうどう}}
{{ja-kanjitab|ふ|びょう|どう|yomi=o}}
==={{noun}}===
{{ja-noun|ふびょうどう}}
# [[平等]]でないこと。また、その[[様子]]。
{{-}}
===={{trans}}====
{{trans-top}}
*[[{{ar}}]]<!--* Arabic-->: {{t|ar|عَدَم مُسَاوَاة|m}}
*[[{{ast}}]]<!--* Asturian-->: {{t|ast|desigualdá|f}}
*[[{{az}}]]<!--* Azerbaijani-->: {{t|az|qeyri-bərabərlik}}
*[[{{be}}]]<!--* Belarusian-->: {{t|be|няро́ўнасць|f|sc=Cyrl}}
*[[{{bg}}]]<!--* Bulgarian-->: {{t+|bg|нера́венство|n|sc=Cyrl}}
*[[{{ca}}]]<!--* Catalan-->: {{t+|ca|desigualtat|f}}
*[[{{cs}}]]<!--* Czech-->: {{t|cs|nerovnost|f}}
*[[{{cy}}]]<!--* Welsh-->: {{t|cy|anghydraddoldeb|m}}
*[[{{da}}]]<!--* Danish-->: {{t|da|ulighed|c}}
*[[{{de}}]]<!--* German-->: {{t+|de|Ungleichheit|f}}
*[[{{en}}]]: {{t+|en|inequality}}
*[[{{el}}]]<!--* Greek-->: {{t+|el|ανισότητα|f|sc=Grek}}
**[[{{grc}}]]: {{t|grc|ἀνισότης|f|sc=Grek}}
*[[{{eo}}]]<!--* Esperanto-->: {{t|eo|malegaleco}}
*[[{{es}}]]<!--* Spanish-->: {{t+|es|desigualdad|f}}
*[[{{fa}}]]<!--* Persian-->: {{t+|fa|نابرابری|tr=nâbarâbari}}
*[[{{fi}}]]<!--* Finnish-->: {{t+|fi|epätasa-arvo}}, {{t+|fi|eriarvoisuus}}
*[[{{fr}}]]<!--* French-->: {{t+|fr|inégalité|f}}
*[[{{gl}}]]<!--* Galician-->: {{t+|gl|desigualdade|f}}
*[[{{ko}}]]<!--* Korean-->: {{t+|ko|불평등}}
*[[{{la}}]]<!--* Latin-->: {{t|la|iniquitas|f}}
*[[{{mk}}]]<!--* Macedonian-->: {{t|mk|нееднаквост|f|sc=Cyrl}}
*[[{{ms}}]]<!--* Malay-->: {{t|ms|ketidaksamaan}}
*[[{{nl}}]]<!--* Dutch-->: {{t+|nl|ongelijkheid|f}}
*[[{{oc}}]]<!--* Occitan-->: {{t+|oc|inegalitat|f}}
*[[{{pl}}]]<!--* Polish-->: {{t+|pl|nierówność|f}}
*[[{{pt}}]]<!--* Portuguese-->: {{t+|pt|desigualdade}}
*[[{{ro}}]]<!--* Romanian-->: {{t+|ro|inegalitate}}
*[[{{ru}}]]<!--* Russian-->: {{t+|ru|нера́венство|n|sc=Cyrl}}
*[[{{sh}}]]<!--* Serbo-Croatian-->:{{t|sh|неједна́ко̄ст|sc=Cyrl}}/{{t+|sh|nejednákōst|f}}
*[[{{sk}}]]<!--* Slovak-->: {{t|sk|nerovnosť|f}}
*[[{{sl}}]]<!--* Slovene-->: {{t|sl|neenakost|f}}
*[[{{sv}}]]<!--* Swedish-->: {{t+|sv|ojämlikhet|c}}
*[[{{uk}}]]<!--* Ukrainian-->: {{t|uk|нері́вність|f|sc=Cyrl}}
*[[{{ur}}]]<!--* Urdu-->: {{t|ur|غیر یکسانیت}}, {{t|ur|نابرابری}}
{{trans-bottom}}
==={{adjectivenoun}}===
{{日本語ダ活用}}
===={{trans}}====
{{trans-top}}
*[[{{bg}}]]<!--* Bulgarian-->: {{t+|bg|неравен|sc=Cyrl}}, {{t+|bg|нееднакъв|sc=Cyrl}}
*[[{{ca}}]]<!--* Catalan-->: {{t+|ca|desigual}}
*[[{{cs}}]]<!--* Czech-->: {{t|cs|nerovný|m}}
*[[{{de}}]]<!--* German-->: {{t+|de|ungleich}}
*[[{{en}}]]: {{t|en|unequal}}, {{t|en|inequal}}
*[[{{eo}}]]<!--* Esperanto-->: {{t|eo|malegala}}
*[[{{es}}]]<!--* Spanish-->: {{t+|es|desigual}}
*[[{{fi}}]]<!--* Finnish-->: {{t+|fi|eri}}, {{t+|fi|erilainen}}
*[[{{fr}}]]: {{t|fr|inégal}}
*[[{{grc}}]]<!--* Ancient Greek-->: {{t|grc|ἄνισος|sc=Grek}}
*[[{{it}}]]<!--* Italian-->: {{t+|it|ineguale}}, {{t+|it|diseguale}}
*[[{{la}}]]<!--* Latin-->: {{t|la|iniquus}}
*[[{{nl}}]]<!--* Dutch-->: {{t+|nl|ongelijk}}
*[[{{ro}}]]<!--* Romanian-->: {{t+|ro|inegal}}
*[[{{tl}}]]<!--* Tagalog-->: {{t|tl|ditumbas}}
{{trans-bottom}}
----
=={{zh}}==
[[category:{{zh}}|bu4ping2deng3]]
==={{adj}}===
[[category:{{zh}} {{adj}}|bu4ping2deng3]]
{{zhchars}} ({{unicode|bùpíngděng}})
#平等ではない、対等ではない。
n5ujrspg59k1r8ys0uawc2xscha7bpd
千枚
0
377423
2313314
1944949
2026-08-09T01:42:07Z
Maraschino Cherry
93381
/* 名詞 */ 食物も
2313314
wikitext
text/x-wiki
=={{ja}}==
{{kana-DEFAULTSORT|せんまい}}
==={{noun}}===
{{ja-noun|[[せんまい]]}}
#[[枚数]]が1000あること。
#厚さが[[うすい|薄い]]物や[[平面]]的な物が[[数]][[おおい|多い]]こと。
#*千枚田、[[千枚通し]]
#牛の消化器の中、3番目の胃。
b865fglq3o1phh99630g11gmhzxlca6
済済
0
386319
2313086
1948476
2026-08-08T12:23:11Z
うーむ
129171
/* 日本語 */
2313086
wikitext
text/x-wiki
{{also|濟濟|济济}}
=={{ja}}==
{{kana-DEFAULTSORT|せいせい}}
==={{noun}}===
{{ja-noun|[[せいせい]]|[[さいさい]]}}
#[[かず|数]]が[[おおい|多く]][[さかん|盛ん]]であること。また、そのようなさま。
===={{idiom}}====
*[[多士済済]]
==={{adjectivenoun}}===
[[Category:{{ja}} {{adjectivenoun}}]]
{{日本語タルト活用}}
ov446nawyxuklrdhb2b3fca0bjgoi7v
七道
0
388212
2313324
1949134
2026-08-09T02:29:05Z
うーむ
129171
/* 日本語 */
2313324
wikitext
text/x-wiki
=={{ja}}==
{{kana-DEFAULTSORT|しちどう}}
==={{noun}}===
{{ja-noun|[[しちどう]]}}
#東海道、東山道、北陸道、山陰道、山陽道、南海道、西海道の[[総称]]。
===={{rel}}====
*[[五畿七道]]
*[[八道]]
jcpyjq7i5w8h43fjt4izij05gk9uub8
かんちゅう
0
391572
2313076
1950405
2026-08-08T12:15:00Z
うーむ
129171
/* */
2313076
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|がんちゅう}}
=={{ja}}==
==={{homonym}}===
{{head|ja|同音異義}}
*【[[寒中]]】:冬の寒い期間。
*【[[閑中]]】:ひまな間。
*【[[灌注]]】:注ぎ、かけること。
8kpyi0gcr8vtvg5nw8vds9vhwp3ddwg
しょしょ
0
397197
2313102
1952247
2026-08-08T13:11:00Z
うーむ
129171
/* 日本語 */
2313102
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
=={{ja}}==
==={{homonym}}===
{{head|ja|同音異義}}
*【[[諸処]]・[[諸所]]・[[所所]]】:あちこち。
*【[[処暑]]】:二十四節気の一つ。
dcbw74p1fsfbsumi07frvzpyjmsuww9
所所
0
402010
2313103
1953823
2026-08-08T13:12:34Z
うーむ
129171
/* 日本語 */
2313103
wikitext
text/x-wiki
=={{ja}}==
{{kana-DEFAULTSORT|しょしょ}}
==={{noun}}・{{adv}}===
[[カテゴリ:日本語 副詞]]
{{ja-noun|[[しょしょ]]}}
#[[あちら]][[こちら]]。[[あちこち]]。
==={{wagokanji}}===
{{ja-wagokanji|ところどころ}}
#{{wagokanji of|ところどころ}}
354qy3z9qdsyr0atmr5l5z82ha0nrkz
発根
0
410424
2313366
1956825
2026-08-09T05:46:33Z
ちょこれ゚いとみんと
129959
2313366
wikitext
text/x-wiki
{{kana-DEFAULTSORT|はっこん}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun-suru|[[はっこん]]}}
#[[植物]]が[[ね|根]]を[[だす|出す]]こと。根が[[でる|出る]]こと。
==={{verb}}===
{{日本語サ変活用}}
kxua0yay679wr0njcmn6an73zt4kecg
2313367
2313366
2026-08-09T05:48:52Z
ちょこれ゚いとみんと
129959
2313367
wikitext
text/x-wiki
{{kana-DEFAULTSORT|はっこん}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun-suru|[[はっこん]]}}
#{{タグ|ja|植物学}}[[植物]]が[[ね|根]]を[[だす|出す]]こと。根が[[でる|出る]]こと。
==={{verb}}===
{{日本語サ変活用}}
nmp58yylqqgrrjb850as5qkluauljjf
ろくじ
0
412334
2313289
1957380
2026-08-09T00:29:10Z
うーむ
129171
/* 日本語 */
2313289
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
=={{ja}}==
==={{homonym}}===
{{head|ja|同音異義}}
*【[[六字]]】六つの文字。
*【[[六時]]】零時から六時間後の時刻。
*【[[陸地]]】陸。
*【[[禄次]]】禄位。
1lvh0i8kg218kuu5x2b4wkqo3orfdoa
モジュール:parse utilities
828
421299
2313438
2193006
2026-08-09T10:25:14Z
Kuroco2k
84207
2313438
Scribunto
text/plain
local export = {}
local m_string_utilities = require("Module:string utilities")
local string_utilities_module = "Module:string utilities"
local rfind = mw.ustring.find
local rsplit = mw.text.split
local u = mw.ustring.char
local rsubn = mw.ustring.gsub
-- version of rsubn() that discards all but the first return value
local function rsub(term, foo, bar)
local retval = rsubn(term, foo, bar)
return retval
end
local function split(...)
split = require(string_utilities_module).split
return split(...)
end
local function umatch(...)
umatch = require(string_utilities_module).match
return umatch(...)
end
--[=[split_alternating_runs_and_frob_raw_text
In order to understand the following parsing code, you need to understand how inflected text specs work. They are
intended to work with inflected text where individual words to be inflected may be followed by inflection specs in
angle brackets. The format of the text inside of the angle brackets is up to the individual language and part-of-speech
specific implementation. A real-world example is as follows: "[[медичний|меди́чна]]<+> [[сестра́]]<*,*#.pr>". This is the
inflection of a multiword expression "меди́чна сестра́", which means "nurse" in Ukrainian (literally "medical sister"),
consisting of two words: the adjective меди́чна ("medical" in the feminine singular) and the noun сестра́ ("sister"). The
specs in angle brackets follow each word to be inflected; for example, <+> means that the preceding word should be
declined as an adjective.
The code below works in terms of balanced expressions, which are bounded by delimiters such as < > or [ ]. The
intention is to allow separators such as spaces to be embedded inside of delimiters; such embedded separators will not
be parsed as separators. For example, Ukrainian noun specs allow footnotes in brackets to be inserted inside of angle
brackets; something like "меди́чна<+> сестра́<pr.[this is a footnote]>" is legal, as is
"[[медичний|меди́чна]]<+> [[сестра́]]<pr.[this is an <i>italicized footnote</i>]>", and the parsing code should not be
confused by the embedded brackets, spaces or angle brackets.
The parsing is done by two functions, which work in close concert: parse_balanced_segment_run() and
split_alternating_runs(). To illustrate, consider the following:
parse_balanced_segment_run("foo<M.proper noun> bar<F>", "<", ">") =
{"foo", "<M.proper noun>", " bar", "<F>", ""}
then
split_alternating_runs({"foo", "<M.proper noun>", " bar", "<F>", ""}, " ") =
{{"foo", "<M.proper noun>", ""}, {"bar", "<F>", ""}}
Here, we start out with a typical inflected text spec "foo<M.proper noun> bar<F>", call parse_balanced_segment_run() on
it, and call split_alternating_runs() on the result. The output of parse_balanced_segment_run() is a list where
even-numbered segments are bounded by the bracket-like characters passed into the function, and odd-numbered segments
consist of the surrounding text. split_alternating_runs() is called on this, and splits *only* the odd-numbered
segments, grouping all segments between the specified character. Note that the inner lists output by
split_alternating_runs() are themselves in the same format as the output of parse_balanced_segment_run(), with
bracket-bounded text in the even-numbered segments. Hence, such lists can be passed again to split_alternating_runs().
]=]
-- Parse a string containing matched instances of parens, brackets or the like. Return a list of strings, alternating
-- between textual runs not containing the open/close characters and runs beginning and ending with the open/close
-- characters. For example,
--
-- parse_balanced_segment_run("foo(x(1)), bar(2)", "(", ")") = {"foo", "(x(1))", ", bar", "(2)", ""}.
function export.parse_balanced_segment_run(segment_run, open, close)
return m_string_utilities.capturing_split(segment_run, "(%b" .. open .. close .. ")")
end
-- The following is an equivalent, older implementation that does not use %b (written before I was aware of %b).
--[=[
function export.parse_balanced_segment_run(segment_run, open, close)
local break_on_open_close = m_string_utilities.capturing_split(segment_run, "([%" .. open .. "%" .. close .. "])")
local text_and_specs = {}
local level = 0
local seg_group = {}
for i, seg in ipairs(break_on_open_close) do
if i % 2 == 0 then
if seg == open then
table.insert(seg_group, seg)
level = level + 1
else
assert(seg == close)
table.insert(seg_group, seg)
level = level - 1
if level < 0 then
error("Unmatched " .. close .. " sign: '" .. segment_run .. "'")
elseif level == 0 then
table.insert(text_and_specs, table.concat(seg_group))
seg_group = {}
end
end
elseif level > 0 then
table.insert(seg_group, seg)
else
table.insert(text_and_specs, seg)
end
end
if level > 0 then
error("Unmatched " .. open .. " sign: '" .. segment_run .. "'")
end
return text_and_specs
end
]=]
--[=[
Like parse_balanced_segment_run() but accepts multiple sets of delimiters. For example,
parse_multi_delimiter_balanced_segment_run("foo[bar(baz[bat])], quux<glorp>", {{"[", "]"}, {"(", ")"}, {"<", ">"}}) =
{"foo", "[bar(baz[bat])]", ", quux", "<glorp>", ""}.
Each element in the list of delimiter pairs is a string specifying an equivalence class of possible delimiter
characters. You can use this, for example, to allow either "[" or "[" to be treated equivalently, with either one
closed by either "]" or "]". To do this, first replace "[" and "]" with single Unicode characters such as
U+FFF0 and U+FFF1, and then specify a two-character string containing "[" and U+FFF0 as the opening delimiter, and a
two-character string containing "]" and U+FFF1 as the corresponding closing delimiter.
If `no_error_on_unmatched` is given and an error is found during parsing, a string is returned containing the error
message instead of throwing an error.
]=]
function export.parse_multi_delimiter_balanced_segment_run(segment_run, delimiter_pairs, no_error_on_unmatched)
local escaped_delimiter_pairs = {}
local open_to_close_map = {}
local open_close_items = {}
local open_items = {}
for _, open_close in ipairs(delimiter_pairs) do
local open, close = unpack(open_close)
open = rsub(open, "([%[%]%%%%-])", "%%%1")
close = rsub(close, "([%[%]%%%%-])", "%%%1")
table.insert(open_close_items, open)
table.insert(open_close_items, close)
table.insert(open_items, open)
open = "[" .. open .. "]"
close = "[" .. close .. "]"
open_to_close_map[open] = close
table.insert(escaped_delimiter_pairs, {open, close})
end
local open_close_pattern = "([" .. table.concat(open_close_items) .. "])"
local open_pattern = "([" .. table.concat(open_items) .. "])"
local break_on_open_close = m_string_utilities.capturing_split(segment_run, open_close_pattern)
local text_and_specs = {}
local level = 0
local seg_group = {}
local open_at_level_zero
for i, seg in ipairs(break_on_open_close) do
if i % 2 == 0 then
table.insert(seg_group, seg)
if level == 0 then
if not rfind(seg, open_pattern) then
local errmsg = "Unmatched close sign " .. seg .. ": '" .. segment_run .. "'"
if no_error_on_unmatched then
return errmsg
else
error(errmsg)
end
end
assert(open_at_level_zero == nil)
for _, open_close in ipairs(escaped_delimiter_pairs) do
local open, close = unpack(open_close)
if rfind(seg, open) then
open_at_level_zero = open
break
end
end
if open_at_level_zero == nil then
error(("Internal error: Segment %s didn't match any open regex"):format(seg))
end
level = level + 1
elseif rfind(seg, open_at_level_zero) then
level = level + 1
elseif rfind(seg, open_to_close_map[open_at_level_zero]) then
level = level - 1
assert(level >= 0)
if level == 0 then
table.insert(text_and_specs, table.concat(seg_group))
seg_group = {}
open_at_level_zero = nil
end
end
elseif level > 0 then
table.insert(seg_group, seg)
else
table.insert(text_and_specs, seg)
end
end
if level > 0 then
local errmsg = "Unmatched open sign " .. open_at_level_zero .. ": '" .. segment_run .. "'"
if no_error_on_unmatched then
return errmsg
else
error(errmsg)
end
end
return text_and_specs
end
--[=[
Split a list of alternating textual runs of the format returned by `parse_balanced_segment_run` on `splitchar`. This
only splits the odd-numbered textual runs (the portions between the balanced open/close characters). The return value
is a list of lists, where each list contains an odd number of elements, where the even-numbered elements of the sublists
are the original balanced textual run portions. For example, if we do
parse_balanced_segment_run("foo<M.proper noun> bar<F>", "<", ">") =
{"foo", "<M.proper noun>", " bar", "<F>", ""}
then
split_alternating_runs({"foo", "<M.proper noun>", " bar", "<F>", ""}, " ") =
{{"foo", "<M.proper noun>", ""}, {"bar", "<F>", ""}}
Note that we did not touch the text "<M.proper noun>" even though it contains a space in it, because it is an
even-numbered element of the input list. This is intentional and allows for embedded separators inside of
brackets/parens/etc. Note also that the inner lists in the return value are of the same form as the input list (i.e.
they consist of alternating textual runs where the even-numbered segments are balanced runs), and can in turn be passed
to split_alternating_runs().
If `preserve_splitchar` is passed in, the split character is included in the output, as follows:
split_alternating_runs({"foo", "<M.proper noun>", " bar", "<F>", ""}, " ", true) =
{{"foo", "<M.proper noun>", ""}, {" "}, {"bar", "<F>", ""}}
Consider what happens if the original string has multiple spaces between brackets, and multiple sets of brackets
without spaces between them.
parse_balanced_segment_run("foo[dated][low colloquial] baz-bat quux xyzzy[archaic]", "[", "]") =
{"foo", "[dated]", "", "[low colloquial]", " baz-bat quux xyzzy", "[archaic]", ""}
then
split_alternating_runs({"foo", "[dated]", "", "[low colloquial]", " baz-bat quux xyzzy", "[archaic]", ""}, "[ %-]") =
{{"foo", "[dated]", "", "[low colloquial]", ""}, {"baz"}, {"bat"}, {"quux"}, {"xyzzy", "[archaic]", ""}}
If `preserve_splitchar` is passed in, the split character is included in the output,
as follows:
split_alternating_runs({"foo", "[dated]", "", "[low colloquial]", " baz bat quux xyzzy", "[archaic]", ""}, "[ %-]", true) =
{{"foo", "[dated]", "", "[low colloquial]", ""}, {" "}, {"baz"}, {"-"}, {"bat"}, {" "}, {"quux"}, {" "}, {"xyzzy", "[archaic]", ""}}
As can be seen, the even-numbered elements in the outer list are one-element lists consisting of the separator text.
]=]
function export.split_alternating_runs(segment_runs, splitchar, preserve_splitchar)
local grouped_runs = {}
local run = {}
for i, seg in ipairs(segment_runs) do
if i % 2 == 0 then
table.insert(run, seg)
else
local parts =
preserve_splitchar and m_string_utilities.capturing_split(seg, "(" .. splitchar .. ")") or
rsplit(seg, splitchar)
table.insert(run, parts[1])
for j=2,#parts do
table.insert(grouped_runs, run)
run = {parts[j]}
end
end
end
if #run > 0 then
table.insert(grouped_runs, run)
end
return grouped_runs
end
function export.strip_spaces(text)
return rsub(text, "^%s*(.-)%s*$", "%1")
end
-- Apply an arbitrary function `frob` to the "raw-text" segments in a split run set (the output of
-- split_alternating_runs()). We leave alone stuff within balanced delimiters (footnotes, inflection specs and the
-- like), as well as splitchars themselves if present. `preserve_splitchar` indicates whether splitchars are present
-- in the split run set. `frob` is a function of one argument (the string to frob) and should return one argument (the
-- frobbed string). We operate by only frobbing odd-numbered segments, and only in odd-numbered runs if
-- preserve_splitchar is given.
function export.frob_raw_text_alternating_runs(split_run_set, frob, preserve_splitchar)
for i, run in ipairs(split_run_set) do
if not preserve_splitchar or i % 2 == 1 then
for j, segment in ipairs(run) do
if j % 2 == 1 then
run[j] = frob(segment)
end
end
end
end
end
-- Like split_alternating_runs() but applies an arbitrary function `frob` to "raw-text" segments in the result (i.e.
-- not stuff within balanced delimiters such as footnotes and inflection specs, and not splitchars if present). `frob`
-- is a function of one argument (the string to frob) and should return one argument (the frobbed string).
function export.split_alternating_runs_and_frob_raw_text(run, splitchar, frob, preserve_splitchar)
local split_runs = export.split_alternating_runs(run, splitchar, preserve_splitchar)
export.frob_raw_text_alternating_runs(split_runs, frob, preserve_splitchar)
return split_runs
end
--[==[
FIXME: Older entry point. Call `split_alternating_runs_and_frob_raw_text()` in [[Module:parse utilities]] directly.
Like `split_alternating_runs()` but strips spaces from both ends of the odd-numbered elements (only in odd-numbered runs
if `preserve_splitchar` is given). Effectively we leave alone the footnotes and splitchars themselves, but otherwise
strip extraneous spaces. Spaces in the middle of an element are also left alone.
]==]
function export.split_alternating_runs_and_strip_spaces(segment_runs, splitchar, preserve_splitchar)
return export.split_alternating_runs_and_frob_raw_text(segment_runs, splitchar, export.strip_spaces, preserve_splitchar)
end
-- Split the non-modifier parts of an alternating run (after parse_balanced_segment_run() is called) on a Lua pattern,
-- but not on certain sequences involving characters in that pattern (e.g. comma+whitespace). `splitchar` is the pattern
-- to split on; `preserve_splitchar` indicates whether to preserve the delimiter and is the same as in
-- split_alternating_runs(). `escape_fun` is called beforehand on each run of raw text and should return two values:
-- the escaped run and whether unescaping is needed. If any call to `escape_fun` indicates that unescaping is needed,
-- `unescape_fun` will be called on each run of raw text after splitting on `splitchar`. The return value of this
-- function is as in split_alternating_runs().
function export.split_alternating_runs_escaping(run, splitchar, preserve_splitchar, escape_fun, unescape_fun)
-- First replace comma with a temporary character in comma+whitespace sequences.
local need_unescape = false
for i, seg in ipairs(run) do
if i % 2 == 1 then
local this_need_unescape
run[i], this_need_unescape = escape_fun(run[i])
need_unescape = need_unescape or this_need_unescape
end
end
if need_unescape then
return export.split_alternating_runs_and_frob_raw_text(run, splitchar, unescape_fun, preserve_splitchar)
else
return export.split_alternating_runs(run, splitchar, preserve_splitchar)
end
end
-- Replace comma with a temporary char in comma + whitespace.
function export.escape_comma_whitespace(run, tempcomma)
tempcomma = tempcomma or u(0xFFF0)
if run:find(",%s") then
run = run:gsub(",(%s)", tempcomma .. "%1") -- assign to temp to discard second return value
return run, true
else
return run, false
end
end
-- Undo the replacement of comma with a temporary char.
function export.unescape_comma_whitespace(run, tempcomma)
tempcomma = tempcomma or u(0xFFF0)
run = run:gsub(tempcomma, ",") -- assign to temp to discard second return value
return run
end
-- Split the non-modifier parts of an alternating run (after parse_balanced_segment_run() is called) on comma, but not
-- on comma+whitespace. See `split_on_comma()` above for more information and the meaning of `tempcomma`.
function export.split_alternating_runs_on_comma(run, tempcomma)
tempcomma = tempcomma or u(0xFFF0)
-- Replace comma with a temporary char in comma + whitespace.
local function escape_comma_whitespace(seg)
return export.escape_comma_whitespace(seg, tempcomma)
end
-- Undo replacement of comma with a temporary char in comma + whitespace.
local function unescape_comma_whitespace(seg)
return export.unescape_comma_whitespace(seg, tempcomma)
end
return export.split_alternating_runs_escaping(run, ",", false, escape_comma_whitespace, unescape_comma_whitespace)
end
-- Split text on a Lua pattern, but not on certain sequences involving characters in that pattern (e.g.
-- comma+whitespace). `splitchar` is the pattern to split on; `preserve_splitchar` indicates whether to preserve the
-- delimiter between split segments. `escape_fun` is called beforehand on the text and should return two values: the
-- escaped run and whether unescaping is needed. If the call to `escape_fun` indicates that unescaping is needed,
-- `unescape_fun` will be called on each run of text after splitting on `splitchar`. The return value of this a list
-- of runs, interspersed with delimiters if `preserve_splitchar` is specified.
function export.split_escaping(text, splitchar, preserve_splitchar, escape_fun, unescape_fun)
if not umatch(text, splitchar) then
return {text}
end
-- If there are square or angle brackets, we don't want to split on delimiters inside of them. To effect this, we
-- use parse_multi_delimiter_balanced_segment_run() to parse balanced brackets, then do delimiter splitting on the
-- non-bracketed portions of text using split_alternating_runs_escaping(), and concatenate back to a list of
-- strings. When calling parse_multi_delimiter_balanced_segment_run(), we make sure not to throw an error on
-- unbalanced brackets; in that case, we fall through to the code below that handles the case without brackets.
if text:find("[%[<]") then
local runs = export.parse_multi_delimiter_balanced_segment_run(text, {{"[", "]"}, {"<", ">"}},
"no error on unmatched")
if type(runs) ~= "string" then
local split_runs = export.split_alternating_runs_escaping(runs, splitchar, preserve_splitchar, escape_fun,
unescape_fun)
for i = 1, #split_runs do
split_runs[i] = concat(split_runs[i])
end
return split_runs
end
end
-- First escape sequences we don't want to count for splitting.
local need_unescape
if escape_fun then
text, need_unescape = escape_fun(text)
end
local parts = split(text, preserve_splitchar and "(" .. splitchar .. ")" or splitchar)
if need_unescape then
for i = 1, #parts, (preserve_splitchar and 2 or 1) do
parts[i] = unescape_fun(parts[i])
end
end
return parts
end
-- Split text on comma, but not on comma+whitespace. This is similar to `mw.text.split(text, ",")` but will not split
-- on commas directly followed by whitespace, to handle embedded commas in terms (which are almost always followed by
-- a space). `tempcomma` is the Unicode character to temporarily use when doing the splitting; normally U+FFF0, but
-- you can specify a different character if you use U+FFF0 for some internal purpose.
function export.split_on_comma(text, tempcomma)
tempcomma = tempcomma or u(0xFFF0)
-- Replace comma with a temporary char in comma + whitespace.
local function escape_comma_whitespace(run)
return export.escape_comma_whitespace(run, tempcomma)
end
-- Undo replacement of comma with a temporary char in comma + whitespace.
local function unescape_comma_whitespace(run)
return export.unescape_comma_whitespace(run, tempcomma)
end
return export.split_escaping(text, ",", false, escape_comma_whitespace, unescape_comma_whitespace)
end
-- Ensure that Wikicode (bracketed links, HTML, bold/italics, etc.) displays literally in error messages by inserting
-- a Unicode word-joiner symbol after all characters that may trigger Wikicode interpr. Replacing with equivalent
-- HTML escapes doesn't work because they are displayed literally. I could not get this to work using
-- <nowiki>...</nowiki> (those tags display literally) and using using {{#tag:nowiki|...}} (same thing).
-- FIXME: This is a massive hack; there must be a better way.
function export.escape_wikicode(term)
term = term:gsub("([%[<'])", "%1" .. u(0x2060))
return term
end
function export.make_parse_err(arg_gloss)
return function(msg, stack_frames_to_ignore)
error(export.escape_wikicode(("%s: %s"):format(msg, arg_gloss)), stack_frames_to_ignore)
end
end
-- Parse a term that may have a language code preceding it (e.g. 'la:minūtia' or 'grc:[[σκῶρ|σκατός]]'). Return
-- two arguments, the term minus the language code and the language object corresponding to the language code.
-- Etymology-only languages are allowed. This function also correctly handles Wikipedia prefixes (e.g. 'w:Abatemarco'
-- or 'w:it:Colle Val d'Elsa') and converts them into two-part links, with the display form not including the Wikipedia
-- prefix. `parse_err` should be a function of one or two arguments to display an error (the second argument is the
-- number of stack frames to ignore when calling error(); if you declare your error function with only one argument,
-- things will still work fine).
function export.parse_term_with_lang(term, parse_err_or_paramname)
parse_err = type(parse_err_or_paramname) == "function" and parse_err_or_paramname or
parse_err_or_paramname and export.make_parse_err(("%s=%s"):format(parse_err_or_paramname, term)) or
export.make_parse_err(term)
-- Parse off an initial language code (e.g. 'la:minūtia' or 'grc:[[σκῶρ|σκατός]]'). First check for Wikipedia
-- prefixes ('w:Abatemarco' or 'w:it:Colle Val d'Elsa' or 'lw:zh:邹衡'). Wikipedia language codes follow a similar
-- format to Wiktionary language codes (see below).
local termlang, foreign_wikipedia, actual_term = term:match("^(l?w):([a-z][a-z][a-z-]*):([^ ].*)$")
if not termlang then
termlang, actual_term = term:match("^(w):([^ ].*)$")
end
if termlang then
local wikipedia_prefix = foreign_wikipedia and "w:" .. foreign_wikipedia or "w"
if actual_term:find("[%[%]]") then
parse_err("Cannot have brackets following a Wikipedia (w:...) link; place the Wikipedia link inside the brackets")
end
term = ("[[%s:%s|%s]]"):format(wikipedia_prefix, actual_term, actual_term)
if termlang == "lw" then
return term, require("Module:languages").getByCode(foreign_wikipedia, parse_err, "allow etym")
else
return term, nil
end
end
-- Wiktionary language codes have at least two lowercase letters followed possibly by lowercase letters and/or
-- hyphens (there are more restrictions but this is close enough). Also check for nonstandard Latin etymology
-- language codes (e.g. VL. or LL.). (There used to be more nonstandard codes but they have all been eliminated.)
termlang, actual_term = term:match("^([a-z][a-z][a-z-]*):([^ ].*)$")
if not termlang then
-- Special hack for Latin variants, which can have nonstandard etym codes, e.g. VL., LL.
termlang, actual_term = term:match("^([A-Z]L%.):([^ ].*)$")
end
if termlang then
termlang = require("Module:languages").getByCode(termlang, parse_err, "allow etym")
term = actual_term
end
return term, termlang
end
--[=[
Parse a term that may have inline modifiers attached (e.g. 'rifiuti<q:plural-only>' or
'rinfusa<t:bulk cargo><lit:resupplying><qq:more common in the plural {{m|it|rinfuse}}>').
* `arg` is the term to parse.
* `props` is an object holding further properties controlling how to parse the term:
* `paramname` is the name of the parameter where `arg` comes from, or nil if this isn't available (it is used only
in error messages).
* `param_mods` is a table describing the allowed inline modifiers (see below).
* `generate_obj` is a function of one or two arguments that should parse the argument minus the inline modifiers
and return a corresponding parsed object (into which the inline modifiers will be rewritten). If declared with
one argument, that will be the raw value to parse; if declared with two arguments, the second argument will be
the `parse_err` function (see below).
* `parse_err` is an optional function of one argument (an error message) and should display the error message,
along with any desired contextual text (e.g. the argument name and value that triggered the error). If omitted,
a default function will be generated which displays the error along with the original value of `arg` (passed
through escape_wikicode() above to ensure that Wikicode (such as links) is displayed literally).
* `splitchar` is a Lua pattern. If specified, `arg` can consist of multiple delimiter-separated terms, each of
which may be followed by inline modifiers, and the return value will be a list of parsed objects instead of a
single object. Note that splitting on delimiters will not happen in certain protected sequences (by default
comma+whitespace; see below). The algorithm to split on delimiters is sensitive to inline modifier syntax and
will not be confused by delimiters inside of inline modifiers, which do not trigger splitting (whether or not
contained within protected sequences).
* `preserve_splitchar`, if specified, causes the actual delimiter matched by `splitchar` to be returned in the
parsed object describing the element that comes after the delimiter. The delimiter is stored in a key whose
name is controlled by `separator_key`, which defaults to "separator".
* `separator_key` controls the key into which the actual delimiter is written when `preserve_splitchar` is used.
See above.
* `escape_fun` and `unescape_fun` are as in split_escaping() and split_alternating_runs_escaping() above and
control the protected sequences that won't be split. By default, `escape_comma_whitespace` and
`unescape_comma_whitespace` are used, so that comma+whitespace sequences won't be split.
`param_mods` is a table describing allowed modifiers. The keys of the table are modifier prefixes and the values are
tables describing how to parse and store the associated modifier values. Here is a typical example:
local param_mods = {
t = {
item_dest = "gloss",
},
gloss = {},
pos = {},
alt = {},
lit = {},
id = {},
g = {
item_dest = "genders",
convert = function(arg)
return rsplit(arg, ",")
end,
},
}
In the table values:
* `item_dest` specifies the destination key to store the object into (if not the same as the modifier key itself).
* `convert` is a function of one or two arguments (the modifier value and optionally the `parse_err` function as passed
in or generated), and should parse and convert the value into the appropriate object. If omitted, the string value is
stored unchanged.
* `store` describes how to store the converted modifier value into the parsed object. If omitted, the converted value
is simply written into the parsed object under the appropriate key (but an error is generated if the key already has
a value). If `store` == "insert", the converted value is appended to the key's value using table.insert();
if the key has no value, it is first converted to an empty list. `store` == "insertIfNot" is similar but appends the
value using insertIfNot() in [[Module:table]]. If `store == "insert-flattened", the converted value is assumed to be
a list and the objects are appended one-by-one into the key's existing value using table.insert(). `store` ==
"insertIfNot-flattened" is similar but appends using insertIfNot() in [[Module:table]]. WARNING: When using
"insert-flattened" and "insertIfNot-flattened", if there is no existing value for the key, the converted value is
just stored directly. This means that future appends will side-effect that value, so make sure that the return
value of the conversion function for this key generates a fresh list each time.
]=]
function export.parse_inline_modifiers(arg, props)
local segments = export.parse_balanced_segment_run(arg, "<", ">")
if not props.splitchar then
return export.parse_inline_modifiers_from_segments(segments, arg, props)
else
local retval = {}
local separated_groups = export.split_alternating_runs_escaping(segments, props.splitchar,
props.preserve_splitchar, props.escape_fun or export.escape_comma_whitespace,
props.unescape_fun or export.unescape_comma_whitespace)
for j = 1, #separated_groups, (props.preserve_splitchar and 2 or 1) do
local parsed = export.parse_inline_modifiers_from_segments(separated_groups[j], arg, props)
if props.preserve_splitchar and j > 1 then
parsed[props.separator_key or "separator"] = separated_groups[j - 1][1]
end
table.insert(retval, parsed)
end
return retval
end
end
function export.parse_inline_modifiers_from_segments(group, arg, props)
local function get_valid_prefixes()
local valid_prefixes = {}
for param_mod, _ in pairs(props.param_mods) do
table.insert(valid_prefixes, param_mod)
end
table.sort(valid_prefixes)
return valid_prefixes
end
local function get_arg_gloss()
if props.paramname then
return ("%s=%s"):format(props.paramname, arg)
else
return arg
end
end
local parse_err = props.parse_err or export.make_parse_err(get_arg_gloss())
local dest_obj = props.generate_obj(group[1], parse_err)
for k = 2, #group - 1, 2 do
if group[k + 1] ~= "" then
parse_err("Extraneous text '" .. group[k + 1] .. "' after modifier")
end
local modtext = group[k]:match("^<(.*)>$")
if not modtext then
parse_err("Internal error: Modifier '" .. group[k] .. "' isn't surrounded by angle brackets")
end
local prefix, val = modtext:match("^([a-zA-Z0-9+_-]+):(.*)$")
if not prefix then
local valid_prefixes = get_valid_prefixes()
for i, valid_prefix in ipairs(valid_prefixes) do
valid_prefixes[i] = "'" .. valid_prefix .. ":'"
end
parse_err("Modifier " .. group[k] .. " lacks a prefix, should begin with one of " ..
require("Module:table").serialCommaJoin(valid_prefixes, {dontTag = true}))
end
local prefix_parse_err =
export.make_parse_err(("modifier prefix '%s' in %s in %s"):format(prefix, group[k], get_arg_gloss()))
if props.param_mods[prefix] then
local key = props.param_mods[prefix].item_dest or prefix
local convert = props.param_mods[prefix].convert
local converted
if convert then
converted = convert(val, prefix_parse_err)
else
converted = val
end
local store = props.param_mods[prefix].store
if not store then
if dest_obj[key] then
prefix_parse_err("Prefix occurs twice")
end
dest_obj[key] = converted
elseif store == "insert" then
if not dest_obj[key] then
dest_obj[key] = {converted}
else
table.insert(dest_obj[key], converted)
end
elseif store == "insertIfNot" then
if not dest_obj[key] then
dest_obj[key] = {converted}
else
require("Module:table").insertIfNot(dest_obj[key], converted)
end
elseif store == "insert-flattened" then
if not dest_obj[key] then
dest_obj[key] = obj
else
for _, obj in ipairs(converted) do
table.insert(dest_obj[key], obj)
end
end
elseif store == "insertIfNot-flattened" then
if not dest_obj[key] then
dest_obj[key] = obj
else
for _, obj in ipairs(converted) do
require("Module:table").insertIfNot(dest_obj[key], obj)
end
end
else
store(dest_obj, key, converted, prefix_parse_err)
end
else
local valid_prefixes = get_valid_prefixes()
for i, valid_prefix in ipairs(valid_prefixes) do
valid_prefixes[i] = "'" .. valid_prefix .. "'"
end
prefix_parse_err("Unrecognized prefix, should be one of " ..
require("Module:table").serialCommaJoin(valid_prefixes, {dontTag = true}))
end
end
return dest_obj
end
return export
8jk01msiawp1taxqpquhvnv3whq9fir
2313468
2313438
2026-08-09T11:55:09Z
Kuroco2k
84207
2313468
Scribunto
text/plain
local export = {}
local m_string_utilities = require("Module:string utilities")
local string_utilities_module = "Module:string utilities"
local rfind = mw.ustring.find
local rsplit = mw.text.split
local u = mw.ustring.char
local rsubn = mw.ustring.gsub
local concat = table.concat
-- version of rsubn() that discards all but the first return value
local function rsub(term, foo, bar)
local retval = rsubn(term, foo, bar)
return retval
end
local function split(...)
split = require(string_utilities_module).split
return split(...)
end
local function umatch(...)
umatch = require(string_utilities_module).match
return umatch(...)
end
--[=[split_alternating_runs_and_frob_raw_text
In order to understand the following parsing code, you need to understand how inflected text specs work. They are
intended to work with inflected text where individual words to be inflected may be followed by inflection specs in
angle brackets. The format of the text inside of the angle brackets is up to the individual language and part-of-speech
specific implementation. A real-world example is as follows: "[[медичний|меди́чна]]<+> [[сестра́]]<*,*#.pr>". This is the
inflection of a multiword expression "меди́чна сестра́", which means "nurse" in Ukrainian (literally "medical sister"),
consisting of two words: the adjective меди́чна ("medical" in the feminine singular) and the noun сестра́ ("sister"). The
specs in angle brackets follow each word to be inflected; for example, <+> means that the preceding word should be
declined as an adjective.
The code below works in terms of balanced expressions, which are bounded by delimiters such as < > or [ ]. The
intention is to allow separators such as spaces to be embedded inside of delimiters; such embedded separators will not
be parsed as separators. For example, Ukrainian noun specs allow footnotes in brackets to be inserted inside of angle
brackets; something like "меди́чна<+> сестра́<pr.[this is a footnote]>" is legal, as is
"[[медичний|меди́чна]]<+> [[сестра́]]<pr.[this is an <i>italicized footnote</i>]>", and the parsing code should not be
confused by the embedded brackets, spaces or angle brackets.
The parsing is done by two functions, which work in close concert: parse_balanced_segment_run() and
split_alternating_runs(). To illustrate, consider the following:
parse_balanced_segment_run("foo<M.proper noun> bar<F>", "<", ">") =
{"foo", "<M.proper noun>", " bar", "<F>", ""}
then
split_alternating_runs({"foo", "<M.proper noun>", " bar", "<F>", ""}, " ") =
{{"foo", "<M.proper noun>", ""}, {"bar", "<F>", ""}}
Here, we start out with a typical inflected text spec "foo<M.proper noun> bar<F>", call parse_balanced_segment_run() on
it, and call split_alternating_runs() on the result. The output of parse_balanced_segment_run() is a list where
even-numbered segments are bounded by the bracket-like characters passed into the function, and odd-numbered segments
consist of the surrounding text. split_alternating_runs() is called on this, and splits *only* the odd-numbered
segments, grouping all segments between the specified character. Note that the inner lists output by
split_alternating_runs() are themselves in the same format as the output of parse_balanced_segment_run(), with
bracket-bounded text in the even-numbered segments. Hence, such lists can be passed again to split_alternating_runs().
]=]
-- Parse a string containing matched instances of parens, brackets or the like. Return a list of strings, alternating
-- between textual runs not containing the open/close characters and runs beginning and ending with the open/close
-- characters. For example,
--
-- parse_balanced_segment_run("foo(x(1)), bar(2)", "(", ")") = {"foo", "(x(1))", ", bar", "(2)", ""}.
function export.parse_balanced_segment_run(segment_run, open, close)
return m_string_utilities.capturing_split(segment_run, "(%b" .. open .. close .. ")")
end
-- The following is an equivalent, older implementation that does not use %b (written before I was aware of %b).
--[=[
function export.parse_balanced_segment_run(segment_run, open, close)
local break_on_open_close = m_string_utilities.capturing_split(segment_run, "([%" .. open .. "%" .. close .. "])")
local text_and_specs = {}
local level = 0
local seg_group = {}
for i, seg in ipairs(break_on_open_close) do
if i % 2 == 0 then
if seg == open then
table.insert(seg_group, seg)
level = level + 1
else
assert(seg == close)
table.insert(seg_group, seg)
level = level - 1
if level < 0 then
error("Unmatched " .. close .. " sign: '" .. segment_run .. "'")
elseif level == 0 then
table.insert(text_and_specs, table.concat(seg_group))
seg_group = {}
end
end
elseif level > 0 then
table.insert(seg_group, seg)
else
table.insert(text_and_specs, seg)
end
end
if level > 0 then
error("Unmatched " .. open .. " sign: '" .. segment_run .. "'")
end
return text_and_specs
end
]=]
--[=[
Like parse_balanced_segment_run() but accepts multiple sets of delimiters. For example,
parse_multi_delimiter_balanced_segment_run("foo[bar(baz[bat])], quux<glorp>", {{"[", "]"}, {"(", ")"}, {"<", ">"}}) =
{"foo", "[bar(baz[bat])]", ", quux", "<glorp>", ""}.
Each element in the list of delimiter pairs is a string specifying an equivalence class of possible delimiter
characters. You can use this, for example, to allow either "[" or "[" to be treated equivalently, with either one
closed by either "]" or "]". To do this, first replace "[" and "]" with single Unicode characters such as
U+FFF0 and U+FFF1, and then specify a two-character string containing "[" and U+FFF0 as the opening delimiter, and a
two-character string containing "]" and U+FFF1 as the corresponding closing delimiter.
If `no_error_on_unmatched` is given and an error is found during parsing, a string is returned containing the error
message instead of throwing an error.
]=]
function export.parse_multi_delimiter_balanced_segment_run(segment_run, delimiter_pairs, no_error_on_unmatched)
local escaped_delimiter_pairs = {}
local open_to_close_map = {}
local open_close_items = {}
local open_items = {}
for _, open_close in ipairs(delimiter_pairs) do
local open, close = unpack(open_close)
open = rsub(open, "([%[%]%%%%-])", "%%%1")
close = rsub(close, "([%[%]%%%%-])", "%%%1")
table.insert(open_close_items, open)
table.insert(open_close_items, close)
table.insert(open_items, open)
open = "[" .. open .. "]"
close = "[" .. close .. "]"
open_to_close_map[open] = close
table.insert(escaped_delimiter_pairs, {open, close})
end
local open_close_pattern = "([" .. table.concat(open_close_items) .. "])"
local open_pattern = "([" .. table.concat(open_items) .. "])"
local break_on_open_close = m_string_utilities.capturing_split(segment_run, open_close_pattern)
local text_and_specs = {}
local level = 0
local seg_group = {}
local open_at_level_zero
for i, seg in ipairs(break_on_open_close) do
if i % 2 == 0 then
table.insert(seg_group, seg)
if level == 0 then
if not rfind(seg, open_pattern) then
local errmsg = "Unmatched close sign " .. seg .. ": '" .. segment_run .. "'"
if no_error_on_unmatched then
return errmsg
else
error(errmsg)
end
end
assert(open_at_level_zero == nil)
for _, open_close in ipairs(escaped_delimiter_pairs) do
local open, close = unpack(open_close)
if rfind(seg, open) then
open_at_level_zero = open
break
end
end
if open_at_level_zero == nil then
error(("Internal error: Segment %s didn't match any open regex"):format(seg))
end
level = level + 1
elseif rfind(seg, open_at_level_zero) then
level = level + 1
elseif rfind(seg, open_to_close_map[open_at_level_zero]) then
level = level - 1
assert(level >= 0)
if level == 0 then
table.insert(text_and_specs, table.concat(seg_group))
seg_group = {}
open_at_level_zero = nil
end
end
elseif level > 0 then
table.insert(seg_group, seg)
else
table.insert(text_and_specs, seg)
end
end
if level > 0 then
local errmsg = "Unmatched open sign " .. open_at_level_zero .. ": '" .. segment_run .. "'"
if no_error_on_unmatched then
return errmsg
else
error(errmsg)
end
end
return text_and_specs
end
--[=[
Split a list of alternating textual runs of the format returned by `parse_balanced_segment_run` on `splitchar`. This
only splits the odd-numbered textual runs (the portions between the balanced open/close characters). The return value
is a list of lists, where each list contains an odd number of elements, where the even-numbered elements of the sublists
are the original balanced textual run portions. For example, if we do
parse_balanced_segment_run("foo<M.proper noun> bar<F>", "<", ">") =
{"foo", "<M.proper noun>", " bar", "<F>", ""}
then
split_alternating_runs({"foo", "<M.proper noun>", " bar", "<F>", ""}, " ") =
{{"foo", "<M.proper noun>", ""}, {"bar", "<F>", ""}}
Note that we did not touch the text "<M.proper noun>" even though it contains a space in it, because it is an
even-numbered element of the input list. This is intentional and allows for embedded separators inside of
brackets/parens/etc. Note also that the inner lists in the return value are of the same form as the input list (i.e.
they consist of alternating textual runs where the even-numbered segments are balanced runs), and can in turn be passed
to split_alternating_runs().
If `preserve_splitchar` is passed in, the split character is included in the output, as follows:
split_alternating_runs({"foo", "<M.proper noun>", " bar", "<F>", ""}, " ", true) =
{{"foo", "<M.proper noun>", ""}, {" "}, {"bar", "<F>", ""}}
Consider what happens if the original string has multiple spaces between brackets, and multiple sets of brackets
without spaces between them.
parse_balanced_segment_run("foo[dated][low colloquial] baz-bat quux xyzzy[archaic]", "[", "]") =
{"foo", "[dated]", "", "[low colloquial]", " baz-bat quux xyzzy", "[archaic]", ""}
then
split_alternating_runs({"foo", "[dated]", "", "[low colloquial]", " baz-bat quux xyzzy", "[archaic]", ""}, "[ %-]") =
{{"foo", "[dated]", "", "[low colloquial]", ""}, {"baz"}, {"bat"}, {"quux"}, {"xyzzy", "[archaic]", ""}}
If `preserve_splitchar` is passed in, the split character is included in the output,
as follows:
split_alternating_runs({"foo", "[dated]", "", "[low colloquial]", " baz bat quux xyzzy", "[archaic]", ""}, "[ %-]", true) =
{{"foo", "[dated]", "", "[low colloquial]", ""}, {" "}, {"baz"}, {"-"}, {"bat"}, {" "}, {"quux"}, {" "}, {"xyzzy", "[archaic]", ""}}
As can be seen, the even-numbered elements in the outer list are one-element lists consisting of the separator text.
]=]
function export.split_alternating_runs(segment_runs, splitchar, preserve_splitchar)
local grouped_runs = {}
local run = {}
for i, seg in ipairs(segment_runs) do
if i % 2 == 0 then
table.insert(run, seg)
else
local parts =
preserve_splitchar and m_string_utilities.capturing_split(seg, "(" .. splitchar .. ")") or
rsplit(seg, splitchar)
table.insert(run, parts[1])
for j=2,#parts do
table.insert(grouped_runs, run)
run = {parts[j]}
end
end
end
if #run > 0 then
table.insert(grouped_runs, run)
end
return grouped_runs
end
function export.strip_spaces(text)
return rsub(text, "^%s*(.-)%s*$", "%1")
end
-- Apply an arbitrary function `frob` to the "raw-text" segments in a split run set (the output of
-- split_alternating_runs()). We leave alone stuff within balanced delimiters (footnotes, inflection specs and the
-- like), as well as splitchars themselves if present. `preserve_splitchar` indicates whether splitchars are present
-- in the split run set. `frob` is a function of one argument (the string to frob) and should return one argument (the
-- frobbed string). We operate by only frobbing odd-numbered segments, and only in odd-numbered runs if
-- preserve_splitchar is given.
function export.frob_raw_text_alternating_runs(split_run_set, frob, preserve_splitchar)
for i, run in ipairs(split_run_set) do
if not preserve_splitchar or i % 2 == 1 then
for j, segment in ipairs(run) do
if j % 2 == 1 then
run[j] = frob(segment)
end
end
end
end
end
-- Like split_alternating_runs() but applies an arbitrary function `frob` to "raw-text" segments in the result (i.e.
-- not stuff within balanced delimiters such as footnotes and inflection specs, and not splitchars if present). `frob`
-- is a function of one argument (the string to frob) and should return one argument (the frobbed string).
function export.split_alternating_runs_and_frob_raw_text(run, splitchar, frob, preserve_splitchar)
local split_runs = export.split_alternating_runs(run, splitchar, preserve_splitchar)
export.frob_raw_text_alternating_runs(split_runs, frob, preserve_splitchar)
return split_runs
end
--[==[
FIXME: Older entry point. Call `split_alternating_runs_and_frob_raw_text()` in [[Module:parse utilities]] directly.
Like `split_alternating_runs()` but strips spaces from both ends of the odd-numbered elements (only in odd-numbered runs
if `preserve_splitchar` is given). Effectively we leave alone the footnotes and splitchars themselves, but otherwise
strip extraneous spaces. Spaces in the middle of an element are also left alone.
]==]
function export.split_alternating_runs_and_strip_spaces(segment_runs, splitchar, preserve_splitchar)
return export.split_alternating_runs_and_frob_raw_text(segment_runs, splitchar, export.strip_spaces, preserve_splitchar)
end
-- Split the non-modifier parts of an alternating run (after parse_balanced_segment_run() is called) on a Lua pattern,
-- but not on certain sequences involving characters in that pattern (e.g. comma+whitespace). `splitchar` is the pattern
-- to split on; `preserve_splitchar` indicates whether to preserve the delimiter and is the same as in
-- split_alternating_runs(). `escape_fun` is called beforehand on each run of raw text and should return two values:
-- the escaped run and whether unescaping is needed. If any call to `escape_fun` indicates that unescaping is needed,
-- `unescape_fun` will be called on each run of raw text after splitting on `splitchar`. The return value of this
-- function is as in split_alternating_runs().
function export.split_alternating_runs_escaping(run, splitchar, preserve_splitchar, escape_fun, unescape_fun)
-- First replace comma with a temporary character in comma+whitespace sequences.
local need_unescape = false
for i, seg in ipairs(run) do
if i % 2 == 1 then
local this_need_unescape
run[i], this_need_unescape = escape_fun(run[i])
need_unescape = need_unescape or this_need_unescape
end
end
if need_unescape then
return export.split_alternating_runs_and_frob_raw_text(run, splitchar, unescape_fun, preserve_splitchar)
else
return export.split_alternating_runs(run, splitchar, preserve_splitchar)
end
end
-- Replace comma with a temporary char in comma + whitespace.
function export.escape_comma_whitespace(run, tempcomma)
tempcomma = tempcomma or u(0xFFF0)
if run:find(",%s") then
run = run:gsub(",(%s)", tempcomma .. "%1") -- assign to temp to discard second return value
return run, true
else
return run, false
end
end
-- Undo the replacement of comma with a temporary char.
function export.unescape_comma_whitespace(run, tempcomma)
tempcomma = tempcomma or u(0xFFF0)
run = run:gsub(tempcomma, ",") -- assign to temp to discard second return value
return run
end
-- Split the non-modifier parts of an alternating run (after parse_balanced_segment_run() is called) on comma, but not
-- on comma+whitespace. See `split_on_comma()` above for more information and the meaning of `tempcomma`.
function export.split_alternating_runs_on_comma(run, tempcomma)
tempcomma = tempcomma or u(0xFFF0)
-- Replace comma with a temporary char in comma + whitespace.
local function escape_comma_whitespace(seg)
return export.escape_comma_whitespace(seg, tempcomma)
end
-- Undo replacement of comma with a temporary char in comma + whitespace.
local function unescape_comma_whitespace(seg)
return export.unescape_comma_whitespace(seg, tempcomma)
end
return export.split_alternating_runs_escaping(run, ",", false, escape_comma_whitespace, unescape_comma_whitespace)
end
-- Split text on a Lua pattern, but not on certain sequences involving characters in that pattern (e.g.
-- comma+whitespace). `splitchar` is the pattern to split on; `preserve_splitchar` indicates whether to preserve the
-- delimiter between split segments. `escape_fun` is called beforehand on the text and should return two values: the
-- escaped run and whether unescaping is needed. If the call to `escape_fun` indicates that unescaping is needed,
-- `unescape_fun` will be called on each run of text after splitting on `splitchar`. The return value of this a list
-- of runs, interspersed with delimiters if `preserve_splitchar` is specified.
function export.split_escaping(text, splitchar, preserve_splitchar, escape_fun, unescape_fun)
if not umatch(text, splitchar) then
return {text}
end
-- If there are square or angle brackets, we don't want to split on delimiters inside of them. To effect this, we
-- use parse_multi_delimiter_balanced_segment_run() to parse balanced brackets, then do delimiter splitting on the
-- non-bracketed portions of text using split_alternating_runs_escaping(), and concatenate back to a list of
-- strings. When calling parse_multi_delimiter_balanced_segment_run(), we make sure not to throw an error on
-- unbalanced brackets; in that case, we fall through to the code below that handles the case without brackets.
if text:find("[%[<]") then
local runs = export.parse_multi_delimiter_balanced_segment_run(text, {{"[", "]"}, {"<", ">"}},
"no error on unmatched")
if type(runs) ~= "string" then
local split_runs = export.split_alternating_runs_escaping(runs, splitchar, preserve_splitchar, escape_fun,
unescape_fun)
for i = 1, #split_runs do
split_runs[i] = concat(split_runs[i])
end
return split_runs
end
end
-- First escape sequences we don't want to count for splitting.
local need_unescape
if escape_fun then
text, need_unescape = escape_fun(text)
end
local parts = split(text, preserve_splitchar and "(" .. splitchar .. ")" or splitchar)
if need_unescape then
for i = 1, #parts, (preserve_splitchar and 2 or 1) do
parts[i] = unescape_fun(parts[i])
end
end
return parts
end
-- Split text on comma, but not on comma+whitespace. This is similar to `mw.text.split(text, ",")` but will not split
-- on commas directly followed by whitespace, to handle embedded commas in terms (which are almost always followed by
-- a space). `tempcomma` is the Unicode character to temporarily use when doing the splitting; normally U+FFF0, but
-- you can specify a different character if you use U+FFF0 for some internal purpose.
function export.split_on_comma(text, tempcomma)
tempcomma = tempcomma or u(0xFFF0)
-- Replace comma with a temporary char in comma + whitespace.
local function escape_comma_whitespace(run)
return export.escape_comma_whitespace(run, tempcomma)
end
-- Undo replacement of comma with a temporary char in comma + whitespace.
local function unescape_comma_whitespace(run)
return export.unescape_comma_whitespace(run, tempcomma)
end
return export.split_escaping(text, ",", false, escape_comma_whitespace, unescape_comma_whitespace)
end
-- Ensure that Wikicode (bracketed links, HTML, bold/italics, etc.) displays literally in error messages by inserting
-- a Unicode word-joiner symbol after all characters that may trigger Wikicode interpr. Replacing with equivalent
-- HTML escapes doesn't work because they are displayed literally. I could not get this to work using
-- <nowiki>...</nowiki> (those tags display literally) and using using {{#tag:nowiki|...}} (same thing).
-- FIXME: This is a massive hack; there must be a better way.
function export.escape_wikicode(term)
term = term:gsub("([%[<'])", "%1" .. u(0x2060))
return term
end
function export.make_parse_err(arg_gloss)
return function(msg, stack_frames_to_ignore)
error(export.escape_wikicode(("%s: %s"):format(msg, arg_gloss)), stack_frames_to_ignore)
end
end
-- Parse a term that may have a language code preceding it (e.g. 'la:minūtia' or 'grc:[[σκῶρ|σκατός]]'). Return
-- two arguments, the term minus the language code and the language object corresponding to the language code.
-- Etymology-only languages are allowed. This function also correctly handles Wikipedia prefixes (e.g. 'w:Abatemarco'
-- or 'w:it:Colle Val d'Elsa') and converts them into two-part links, with the display form not including the Wikipedia
-- prefix. `parse_err` should be a function of one or two arguments to display an error (the second argument is the
-- number of stack frames to ignore when calling error(); if you declare your error function with only one argument,
-- things will still work fine).
function export.parse_term_with_lang(term, parse_err_or_paramname)
parse_err = type(parse_err_or_paramname) == "function" and parse_err_or_paramname or
parse_err_or_paramname and export.make_parse_err(("%s=%s"):format(parse_err_or_paramname, term)) or
export.make_parse_err(term)
-- Parse off an initial language code (e.g. 'la:minūtia' or 'grc:[[σκῶρ|σκατός]]'). First check for Wikipedia
-- prefixes ('w:Abatemarco' or 'w:it:Colle Val d'Elsa' or 'lw:zh:邹衡'). Wikipedia language codes follow a similar
-- format to Wiktionary language codes (see below).
local termlang, foreign_wikipedia, actual_term = term:match("^(l?w):([a-z][a-z][a-z-]*):([^ ].*)$")
if not termlang then
termlang, actual_term = term:match("^(w):([^ ].*)$")
end
if termlang then
local wikipedia_prefix = foreign_wikipedia and "w:" .. foreign_wikipedia or "w"
if actual_term:find("[%[%]]") then
parse_err("Cannot have brackets following a Wikipedia (w:...) link; place the Wikipedia link inside the brackets")
end
term = ("[[%s:%s|%s]]"):format(wikipedia_prefix, actual_term, actual_term)
if termlang == "lw" then
return term, require("Module:languages").getByCode(foreign_wikipedia, parse_err, "allow etym")
else
return term, nil
end
end
-- Wiktionary language codes have at least two lowercase letters followed possibly by lowercase letters and/or
-- hyphens (there are more restrictions but this is close enough). Also check for nonstandard Latin etymology
-- language codes (e.g. VL. or LL.). (There used to be more nonstandard codes but they have all been eliminated.)
termlang, actual_term = term:match("^([a-z][a-z][a-z-]*):([^ ].*)$")
if not termlang then
-- Special hack for Latin variants, which can have nonstandard etym codes, e.g. VL., LL.
termlang, actual_term = term:match("^([A-Z]L%.):([^ ].*)$")
end
if termlang then
termlang = require("Module:languages").getByCode(termlang, parse_err, "allow etym")
term = actual_term
end
return term, termlang
end
--[=[
Parse a term that may have inline modifiers attached (e.g. 'rifiuti<q:plural-only>' or
'rinfusa<t:bulk cargo><lit:resupplying><qq:more common in the plural {{m|it|rinfuse}}>').
* `arg` is the term to parse.
* `props` is an object holding further properties controlling how to parse the term:
* `paramname` is the name of the parameter where `arg` comes from, or nil if this isn't available (it is used only
in error messages).
* `param_mods` is a table describing the allowed inline modifiers (see below).
* `generate_obj` is a function of one or two arguments that should parse the argument minus the inline modifiers
and return a corresponding parsed object (into which the inline modifiers will be rewritten). If declared with
one argument, that will be the raw value to parse; if declared with two arguments, the second argument will be
the `parse_err` function (see below).
* `parse_err` is an optional function of one argument (an error message) and should display the error message,
along with any desired contextual text (e.g. the argument name and value that triggered the error). If omitted,
a default function will be generated which displays the error along with the original value of `arg` (passed
through escape_wikicode() above to ensure that Wikicode (such as links) is displayed literally).
* `splitchar` is a Lua pattern. If specified, `arg` can consist of multiple delimiter-separated terms, each of
which may be followed by inline modifiers, and the return value will be a list of parsed objects instead of a
single object. Note that splitting on delimiters will not happen in certain protected sequences (by default
comma+whitespace; see below). The algorithm to split on delimiters is sensitive to inline modifier syntax and
will not be confused by delimiters inside of inline modifiers, which do not trigger splitting (whether or not
contained within protected sequences).
* `preserve_splitchar`, if specified, causes the actual delimiter matched by `splitchar` to be returned in the
parsed object describing the element that comes after the delimiter. The delimiter is stored in a key whose
name is controlled by `separator_key`, which defaults to "separator".
* `separator_key` controls the key into which the actual delimiter is written when `preserve_splitchar` is used.
See above.
* `escape_fun` and `unescape_fun` are as in split_escaping() and split_alternating_runs_escaping() above and
control the protected sequences that won't be split. By default, `escape_comma_whitespace` and
`unescape_comma_whitespace` are used, so that comma+whitespace sequences won't be split.
`param_mods` is a table describing allowed modifiers. The keys of the table are modifier prefixes and the values are
tables describing how to parse and store the associated modifier values. Here is a typical example:
local param_mods = {
t = {
item_dest = "gloss",
},
gloss = {},
pos = {},
alt = {},
lit = {},
id = {},
g = {
item_dest = "genders",
convert = function(arg)
return rsplit(arg, ",")
end,
},
}
In the table values:
* `item_dest` specifies the destination key to store the object into (if not the same as the modifier key itself).
* `convert` is a function of one or two arguments (the modifier value and optionally the `parse_err` function as passed
in or generated), and should parse and convert the value into the appropriate object. If omitted, the string value is
stored unchanged.
* `store` describes how to store the converted modifier value into the parsed object. If omitted, the converted value
is simply written into the parsed object under the appropriate key (but an error is generated if the key already has
a value). If `store` == "insert", the converted value is appended to the key's value using table.insert();
if the key has no value, it is first converted to an empty list. `store` == "insertIfNot" is similar but appends the
value using insertIfNot() in [[Module:table]]. If `store == "insert-flattened", the converted value is assumed to be
a list and the objects are appended one-by-one into the key's existing value using table.insert(). `store` ==
"insertIfNot-flattened" is similar but appends using insertIfNot() in [[Module:table]]. WARNING: When using
"insert-flattened" and "insertIfNot-flattened", if there is no existing value for the key, the converted value is
just stored directly. This means that future appends will side-effect that value, so make sure that the return
value of the conversion function for this key generates a fresh list each time.
]=]
function export.parse_inline_modifiers(arg, props)
local segments = export.parse_balanced_segment_run(arg, "<", ">")
if not props.splitchar then
return export.parse_inline_modifiers_from_segments(segments, arg, props)
else
local retval = {}
local separated_groups = export.split_alternating_runs_escaping(segments, props.splitchar,
props.preserve_splitchar, props.escape_fun or export.escape_comma_whitespace,
props.unescape_fun or export.unescape_comma_whitespace)
for j = 1, #separated_groups, (props.preserve_splitchar and 2 or 1) do
local parsed = export.parse_inline_modifiers_from_segments(separated_groups[j], arg, props)
if props.preserve_splitchar and j > 1 then
parsed[props.separator_key or "separator"] = separated_groups[j - 1][1]
end
table.insert(retval, parsed)
end
return retval
end
end
function export.parse_inline_modifiers_from_segments(group, arg, props)
local function get_valid_prefixes()
local valid_prefixes = {}
for param_mod, _ in pairs(props.param_mods) do
table.insert(valid_prefixes, param_mod)
end
table.sort(valid_prefixes)
return valid_prefixes
end
local function get_arg_gloss()
if props.paramname then
return ("%s=%s"):format(props.paramname, arg)
else
return arg
end
end
local parse_err = props.parse_err or export.make_parse_err(get_arg_gloss())
local dest_obj = props.generate_obj(group[1], parse_err)
for k = 2, #group - 1, 2 do
if group[k + 1] ~= "" then
parse_err("Extraneous text '" .. group[k + 1] .. "' after modifier")
end
local modtext = group[k]:match("^<(.*)>$")
if not modtext then
parse_err("Internal error: Modifier '" .. group[k] .. "' isn't surrounded by angle brackets")
end
local prefix, val = modtext:match("^([a-zA-Z0-9+_-]+):(.*)$")
if not prefix then
local valid_prefixes = get_valid_prefixes()
for i, valid_prefix in ipairs(valid_prefixes) do
valid_prefixes[i] = "'" .. valid_prefix .. ":'"
end
parse_err("Modifier " .. group[k] .. " lacks a prefix, should begin with one of " ..
require("Module:table").serialCommaJoin(valid_prefixes, {dontTag = true}))
end
local prefix_parse_err =
export.make_parse_err(("modifier prefix '%s' in %s in %s"):format(prefix, group[k], get_arg_gloss()))
if props.param_mods[prefix] then
local key = props.param_mods[prefix].item_dest or prefix
local convert = props.param_mods[prefix].convert
local converted
if convert then
converted = convert(val, prefix_parse_err)
else
converted = val
end
local store = props.param_mods[prefix].store
if not store then
if dest_obj[key] then
prefix_parse_err("Prefix occurs twice")
end
dest_obj[key] = converted
elseif store == "insert" then
if not dest_obj[key] then
dest_obj[key] = {converted}
else
table.insert(dest_obj[key], converted)
end
elseif store == "insertIfNot" then
if not dest_obj[key] then
dest_obj[key] = {converted}
else
require("Module:table").insertIfNot(dest_obj[key], converted)
end
elseif store == "insert-flattened" then
if not dest_obj[key] then
dest_obj[key] = obj
else
for _, obj in ipairs(converted) do
table.insert(dest_obj[key], obj)
end
end
elseif store == "insertIfNot-flattened" then
if not dest_obj[key] then
dest_obj[key] = obj
else
for _, obj in ipairs(converted) do
require("Module:table").insertIfNot(dest_obj[key], obj)
end
end
else
store(dest_obj, key, converted, prefix_parse_err)
end
else
local valid_prefixes = get_valid_prefixes()
for i, valid_prefix in ipairs(valid_prefixes) do
valid_prefixes[i] = "'" .. valid_prefix .. "'"
end
prefix_parse_err("Unrecognized prefix, should be one of " ..
require("Module:table").serialCommaJoin(valid_prefixes, {dontTag = true}))
end
end
return dest_obj
end
return export
icrw7pofwnp7pw44oi4hded7kxt8p1x
旅立つ
0
425417
2313375
1960513
2026-08-09T06:25:32Z
ちょこれ゚いとみんと
129959
2313375
wikitext
text/x-wiki
{{kana-DEFAULTSORT|たびだつ}}
=={{L|ja}}==
==={{wago}}===
{{ja-wagokanji|たびだつ}}
#{{wagokanji of|たびだつ}}
e4gxhjfqlmpf1v8pa22a7hn2vi8n7dy
さいぜん
0
426813
2313117
1960989
2026-08-08T14:01:26Z
M-30722
1202
2313117
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|さいせん}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[最前]]】一番前または先。
*【[[最善]]】最良。
joahacd7dneho7kcei36gc8ejqkfjx1
2313160
2313117
2026-08-08T22:46:47Z
うーむ
129171
/* */
2313160
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|さいせん|ざいせん}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[最前]]】一番前または先。
*【[[最善]]】最良。
2mhttsan4ws6s0fmbwd36x2bd3dwphu
친
0
438289
2313453
1843201
2026-08-09T11:21:40Z
M-30722
1202
2313453
wikitext
text/x-wiki
==ハングル==
{{ハングル|ㅊ|ㅣ|ㄴ}}
=={{L|ko}}==
==={{pron}}===
{{ko-IPA}}
==={{prefix}}===
{{head|ko|prefix}}
{{ko-h|親}}
#[[直系]]の、[[実]]の。
#{{ふりがな|父方|ちちかた}}の。
#「[[したしい|親しい]]」「[[支持]]する」等の意を表す。
===漢字音===
[[カテゴリ:{{ko}} 漢字音]]
[[親]]
=={{コード}}==
{{ハングルコード|C4A3}}
7ad4fgayfqp2hfucvpyr6rc7uocahvk
칙
0
438307
2313452
1843225
2026-08-09T11:17:44Z
M-30722
1202
2313452
wikitext
text/x-wiki
==ハングル==
{{ハングル|ㅊ|ㅣ|ㄱ}}
=={{L|ko}}==
[[カテゴリ:{{ko}}]]
==={{pron}}===
{{ko-IPA}}
===漢字音===
[[カテゴリ:{{ko}} 漢字音]]
[[則]][[勅]][[飭]]
=={{コード}}==
{{ハングルコード|C4A2}}
c1e02zs1x7rmdcu4or1istxx4nuevnj
眼中
0
441842
2313078
1964686
2026-08-08T12:15:45Z
うーむ
129171
/* 日本語 */
2313078
wikitext
text/x-wiki
=={{ja}}==
{{kana-DEFAULTSORT|がんちゅう}}
==={{noun}}===
{{ja-noun|[[がんちゅう]]}}
#[[め|眼]]の[[うち|内]]。
#[[視界]]。
#[[意識]]や[[関心]]の[[範囲]]の内。
#*眼中にない
b0pg07gz4sd177cz1cyvn1i39a9qb7v
利用者・トーク:Kuroco2k
3
446787
2313088
2292502
2026-08-08T12:32:46Z
Keikei kanji
129888
/* 異体字セレクタ字の項 */ 新しい節
2313088
wikitext
text/x-wiki
== 𤮃のソートキーに関する質問 ==
いつも漢字項目の作成有難うございます。[[𤮃]]のソートキーに関する質問ですが、「ang1 ang」→「3ang1 ang」とソートキーの最初に「3」を付けられておりますが、この3の意味はどのようなものでしょうか。これまで編集していても見た事のないソート方法なのでご教示いただければと思います。--[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2023年12月30日 (土) 12:27 (UTC)
:[[:カテゴリ:漢字]]、および[[:カテゴリ:Unicode CJK Unified Ideographs Extension B]]を見ていると、この漢字がaの箇所にあったため修正しようと考えたのですが、その際デフォルトソートに「ang1 ang」と「U+24B83」のどちらを当て振るべきか迷っており、最終的にデフォルトソートをそのままにその2つのカテゴリをU+24B83としてソートしたのですが、24B83の部分を切り取る際に誤って3だけ残ってしまったものだと思います。先ほど修正しました。--[[利用者:Kuroco2k|Kuroco2k]] ([[利用者・トーク:Kuroco2k|トーク]]) 2023年12月30日 (土) 12:45 (UTC)
== 鯐のイェール式表記について ==
[[鯐]]のイェール式が「zau2」とのことですが、イェール式にzは使われていなかったように思うのですが間違いないでしょうか?「zau2」は粤拼で、イェール式では「jau2」となるかと思いますがいかがでしょうか? --[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2024年1月23日 (火) 16:42 (UTC)
:すっかり失念していました。先ほど修正しました。--[[利用者:Kuroco2k|Kuroco2k]] ([[利用者・トーク:Kuroco2k|トーク]]) 2024年1月23日 (火) 16:47 (UTC)
::早速の対応ありがとうございます。--[[利用者:M-30722|M-30722]] ([[利用者・トーク:Kuroco2k|トーク]]) 2024年1月23日 (火) 16:52 (UTC)
::: Kuroco2kさん、確認しました。有難うございました。ところで上のコメント(16:52分)は私のものではないのですが60.88.85.56さん、私になりすましてのコメントはやめていただけますでしょうか。 --[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2024年1月23日 (火) 17:02 (UTC)
== 類推簡化字→簡体字?? ==
「類推簡化字」はあくまで「類推」であって、偏旁冠脚の簡略化を[[類推]]して適用するとこうなる、という字形です。あなたは、私Charidriが類推簡化字であるとして明確に定義づけた文字を、幾つか「簡体字」に変更しています。たとえば[[𫐅]]の項目ですが、私は[[軕]]に対する類推簡化字であると初版で定義づけました。あなたはこれを簡体字に変更しました。中国語の「簡体字」の項目として、どう説明できますか。ほかも全部同じことがいえますが。それと[[𬬷]]などは『[[w:中華字海|中華字海]]』に「类推」简化字であると書いてあるのですよ。
拼音の追記についてはありがとうございます。初版でそこまではやってられないので。そして類推簡化字の項目を猛烈に投稿してもらってることについてはたすかります。--[[利用者:Charidri|Charidri]] ([[利用者・トーク:Charidri|トーク]]) 2024年1月27日 (土) 13:56 (UTC)
== 情報減▲ ==
異体字の項目は、音訓のフォーマットを省略しているだけであって、[[𧥞]]での[https://ja.wiktionary.org/w/index.php?title=%F0%A7%A5%9E&diff=prev&oldid=1860124 編集]のように、わざわざ書いてある情報を削る必要は、ありませんよ。--[[利用者:Charidri|Charidri]] ([[利用者・トーク:Charidri|トーク]]) 2024年1月27日 (土) 13:56 (UTC)
[[𧥞]]の発音を戻しておいてくださいよ。--[[利用者:Charidri|Charidri]] ([[利用者・トーク:Charidri|トーク]]) 2025年6月21日 (土) 12:50 (UTC)
==漢字項目のソートキーなどについて==
漢字項目については基本的にソートキーは、日本語の読みです。それ以外をソートキーとすると日本語カテゴリに不具合が生じます。日本語のソートキーに対応できないチュノムや朝鮮の国字、近代中国における造字は各々の言語のソートキーになります。ユニコードがソートキーになっているものは修正途中と考えてください。--[[利用者:Mtodo|Mtodo]] ([[利用者・トーク:Mtodo|トーク]]) 2024年2月2日 (金) 23:36 (UTC)
== 込の訓読み ==
込のページで「すまいのこのみち」という読みを追加しましたが、それはどの資料に記載されている訓読みでしょうか?--[[利用者:醤油はせうゆ|醤油はせうゆ]] ([[利用者・トーク:醤油はせうゆ|トーク]]) 2024年8月3日 (土) 08:29 (UTC)
:米沢蔵書の倭玉篇を参考としています。[https://www.library.yonezawa.yamagata.jp/dg/AA180.html 米沢図書館デジタルライブラリー本]の46ページをご参照ください。--[[利用者:Kuroco2k|Kuroco2k]] ([[利用者・トーク:Kuroco2k|トーク]]) 2024年8月3日 (土) 10:19 (UTC)
==言語の並び順==
[[比]]での言語見出しの並び順が現行の合意(一番上が日本語でそれ以降は五十音順、[[Wiktionary:編集室/2018年Q1#言語の排列について]]、[[Wiktionary:編集室/2024年Q1#訳語の並び順]]も参照)とは異なる並びになっておりますが、どのようなルールで並べられておりますか? --[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2024年9月26日 (木) 16:31 (UTC)
:日本語→中国語→古壮字使用言語(ブイ語→チワン語)→朝鮮語→ベトナム語→タイー語の順で並ばせていたのですが、五十音順であることは存じていませんでした。修正しましたが、[[Special:Permalink/2007617|こちら]]のようでよろしいでしょうか。--[[利用者:Kuroco2k|Kuroco2k]] ([[利用者・トーク:Kuroco2k|トーク]]) 2024年9月27日 (金) 07:22 (UTC)
::はい、これで合意通りです。もし五十音順よりも上記の並びの方が適当であると思われる場合は[[Wiktionary:編集室]]等で提案していただければ例外規定についての検討も可能かもしれません。 --[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2024年9月29日 (日) 13:22 (UTC)
==タイー語のソートキーに関する相談==
タイー語等の編集ありがとうございます。ただいま[[カテゴリ・トーク:タイー語]]にてタイー語のソートキーの案を募集しておりますので何か良い案があれば提案していただければ幸いです。 --[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2024年11月6日 (水) 14:57 (UTC)
==漢字項目に関する議論の紹介==
いつも編集ありがとうございます。現在、[[Wiktionary:編集室/2025年Q2#「カテゴリ:漢字」のソートキーのルール]]にて漢字項目のソートキーに関する議論を行っております。漢字項目をよく編集されておりますKuroco2kさんのご意見もうかがえますと幸いです。 --[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2025年5月6日 (火) 08:35 (UTC)
== 英語の成句の動詞句 ==
お疲れ様です。先ほど{{l|en|play for time}}を作成されましたが日本語版ウィクショナリーでは動詞句の定形は作成しません({{l|en|reads the room}}、{{l|en|reading the room}}を作成した際に指摘を受けました)。ですので作成されたものは即時削除にし「動詞」ではなく「成句 動詞句」にしてください。--[[利用者:Praqimu|Praqimu]] ([[利用者・トーク:Praqimu|トーク]]) 2025年5月18日 (日) 03:00 (UTC)
:それは存じませんでした。現在対応しています。--[[利用者:Kuroco2k|Kuroco2k]] ([[利用者・トーク:Kuroco2k|トーク]]) 2025年5月18日 (日) 03:03 (UTC)
::ご対応ありがとうございます。--[[利用者:Praqimu|Praqimu]] ([[利用者・トーク:Praqimu|トーク]]) 2025年5月18日 (日) 03:10 (UTC)
== 漢字 > ベトナム語 or タイー語 ==
あなた 単漢字項目である字喃(チュノム)とか岱喃(タイノム)の項目の大見出しを、ベトナム語とかタイー語で大見出しを書いていますが、 テンプレート:標準の内容/漢字 に準じた体裁に全部書き直してください。単一の文字の項目は、文字そのものを上位の大見出しに書いて、各言語の節はその下位にぶらさがるようにしてください。この原則は、チュノム等を含む漢字項目のみならず、欧文のアルファベットなどもこうなっています。
そして、これも重要なことですが、単漢字項目は熟語項目とは異なるので、[[テンプレート:vi-DEFAULTSORT]] を使ってしまうと、ページ情報の「既定のソートキー」がクォックグーになってしまい、[[:カテゴリ:漢字]]などで混乱のもとになるので、使わないでください。[[テンプレート:vi-DEFAULTSORT]] に書き換えないでください。--[[利用者:Charidri|Charidri]] ([[利用者・トーク:Charidri|トーク]]) 2025年6月21日 (土) 12:50 (UTC)
:横から失礼します。まず前半部分については確かに文字情報と言語情報は分けて書いた方が良いと思います(同意します)。次に後半部分についてですが、「カテゴリ:漢字」については{{temp|kanji header}}や{{temp|漢字}}といったテンプレートを用いるとデフォルトソートの影響を受けず正しい形でソートされますので、テンプレートを使用した場合に限りデフォルトソートを使ったとしても「カテゴリ:漢字」のソートには影響を及ぼさないので、仕様を理解した上でなら{{temp|vi-DEFAULTSORT}}を使用しても問題ないのではと個人的には思います。また、'''{{temp|vi-DEFAULTSORT}}を使用することを禁止する合意は現時点でなされていないので現状デフォルトソートの禁止を強制は出来ない'''と認識しております。 --[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2025年7月8日 (火) 15:46 (UTC)
== 菩提薩埵のページについて ==
[[菩提薩埵]]のページにベトナム語の項目を追加していただいたようですが、テンプレートが明らかにエラーを起こしているので対処の方をお願いします。自分では対応できず申し訳ありませんが確認していただけると助かります。--[[利用者:Jiba1219|Jiba1219]] ([[利用者・トーク:Jiba1219|トーク]]) 2025年8月22日 (金) 12:13 (UTC)
:{{対処}} 私(「テンプレート:vi-head」の作成者です)が代わりに対処しました。なお、普段登録状況を[[:カテゴリ:テンプレート:vi-sort1にソートキーのデータ未登録]]で追っておりますが現在不具合により登録してもリストから消えなくなっております。その為もしかするとまだ登録漏れのものがある可能性がありますので見つけ次第教えていただけますと対処します。 --[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2025年8月22日 (金) 16:14 (UTC)
== 上位カテゴリに関する質問 ==
[[:カテゴリ:四川語 月名]]や[[:カテゴリ:ドンガン語 月名]]の上位カテゴリをナビゲーターでは「〇〇語 名詞」としておりますが、実際に付けられた上位カテゴリの「〇〇語 暦」を辿っていっても「〇〇語 名詞」に辿り着かないのですが「〇〇語 名詞」は本当に「〇〇語 月名」の上位カテゴリなのでしょうか? --[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2025年9月25日 (木) 16:25 (UTC)
:(これ時代は日本語の同意カテゴリーからコピーしたものですが)たしかにこうせざるとも良いかもしれません。一旦消しておきます。--[[利用者:Kuroco2k|Kuroco2k]] ([[利用者・トーク:Kuroco2k|トーク]]) 2025年9月25日 (木) 22:09 (UTC)
::日本語のカテゴリの構造が問題ありそうですね。昔は名詞を上位カテゴリとする分野カテゴリが複数あったのでその名残が更新されずにきたものと考えられますので更新しておきます。 --[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2025年9月26日 (金) 13:35 (UTC)
== テンプレート:字典での異体字字典について ==
先日{{temp|字典}}に追加された引数vt異体字字典掲載番号について、一つ提案をさせていただきます。異体字字典の中には掲載があり、Unicodeに文字が存在するがこれらの紐付けがされておらず検索してもヒットしない文字があります([[蜗]]に対する[https://dict.variants.moe.edu.tw/dictView.jsp?educode=A03661-002]など)。つきましては、このテンプレートの異体字字典の情報をWikidataの該当文字のP11475(教育部異体字字典識別子)から移入することはできますでしょうか。--[[利用者:TAKA647|TAKA647]] ([[利用者・トーク:TAKA647|トーク]]) 2025年11月13日 (木) 05:33 (UTC)
:少し試してみましたが、厳しいように思えます。Wiktionaryというプロジェクトの理念の性質上、Wikidataにつながっていないので、テンプレート単体では難しいと思います(モジュールに書き出せばできるかもしれませんが、その余力があいにくないです)。--[[利用者:Kuroco2k|Kuroco2k]] ([[利用者・トーク:Kuroco2k|トーク]]) 2025年11月13日 (木) 08:15 (UTC)
::返信ありがとうございます。なるほど、厳しいのですね。異体字字典は一つの字形に複数の識別子を結びつけていることもありますが、現在このテンプレートは複数のリンクに対応していないほか、上記の通り検索しても出てこない字形もありますし、一度この引数は導入を見送るのも手だと考えます。--[[利用者:TAKA647|TAKA647]] ([[利用者・トーク:TAKA647|トーク]]) 2025年11月13日 (木) 16:32 (UTC)
== テンプレート:vi-hanについて ==
[[匿]]を編集していただいたようですが、<code><nowiki>{{vi-han}}</nowiki></code>の表示に不具合が生じているようです。私では対応できないため、お手数ですが、ご確認をお願いいたします。--[[利用者:Jpnbcl|Jpnbcl]] ([[利用者・トーク:Jpnbcl|トーク]]) 2025年12月16日 (火) 11:46 (UTC)
:前も[[#菩提薩埵のページについて|同じこと]]を言われたので返答はこちらに代えさせていただきますが、ひとまず対処のみ。--[[利用者:Kuroco2k|Kuroco2k]] ([[利用者・トーク:Kuroco2k|トーク]]) 2025年12月16日 (火) 12:04 (UTC)
::ひとまずの対応ありがとうございました。--[[利用者:Jpnbcl|Jpnbcl]] ([[利用者・トーク:Jpnbcl|トーク]]) 2025年12月16日 (火) 12:16 (UTC)
== コードについて ==
いつも加筆および訂正ありがとうございます。編集の参考にさせていただきたいのですが、コード等の情報はどこから入手しているのでしょうか。少し気になったので差し支えなければ出来る範囲でご教示いただけると助かります。[[利用者:なきは|なきは]] ([[利用者・トーク:なきは|トーク]]) 2026年3月15日 (日) 07:35 (UTC)
:実に単純な話で、だいたいはUnihanのページ(単字なら{{temp|文字コード}}が自動で出してくれるのでアクセスは容易なはずです)から拾えますし、GB18030は[http://ccamc.org/ 古今文字集成]で拾えます。あとは拾ったソースをフォーマットに沿うように([[利用者:Jpnbcl#メモ|有志の方が一部メモしてある物]]を貼っておきます)書くだけです。--[[利用者:Kuroco2k|<span style="color:#000000">'''雛宮黒狐'''</span>]]([[利用者‐会話:Kuroco2k|<span style="color:#5a00cc">Talk</span>]]) 2026年3月15日 (日) 08:09 (UTC)
::ありがとうございます。[[利用者:なきは|なきは]] ([[利用者・トーク:なきは|トーク]]) 2026年3月15日 (日) 09:26 (UTC)
==ベトナム語の漢字語について==
いつも編集お疲れ様です。[[giữa trời]]や[[dưa hấu]]で「[[:カテゴリ:ベトナム語 漢字語]]」の付与を見送られているかと思いますが、当カテゴリは現在チュノムも付与の対象に含まれております。従いまして付与を見送った理由を教えていただけますと幸いです。 --[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2026年3月16日 (月) 13:03 (UTC)
:おっと、失礼しました。単純に見落としです。--[[利用者:Kuroco2k|<span style="color:#000000">'''雛宮黒狐'''</span>]]([[利用者‐会話:Kuroco2k|<span style="color:#5a00cc">Talk</span>]]) 2026年3月16日 (月) 13:08 (UTC)
::承知しました。ちなみに、先日朝鮮語用のテンプレートで漢字表記の出力をしながら漢字語カテゴリの付与を自動で行える{{temp|ko-h}}を作成したのですが、これのベトナム語バージョンを作ろうかどうか検討しております。自動出力にすれば漢字語カテゴリ付与の手間も減らせて便利になるかと思いますがいかがでしょうか?--[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2026年3月16日 (月) 13:12 (UTC)
:::アイデアそのものは悪くないでしょうが、漢語由来の熟語はともかくとして、それ以外の二字熟語に複数表記がある場合が多く、作っても相当やりづらいものになることが予想されます。朝鮮語ですら「並/竝」の二通りがある場合悩みどころですが、ベトナム語はそれ以上です。--[[利用者:Kuroco2k|<span style="color:#000000">'''雛宮黒狐'''</span>]]([[利用者‐会話:Kuroco2k|<span style="color:#5a00cc">Talk</span>]]) 2026年3月16日 (月) 13:16 (UTC)
::::他の方からも意見がありましたので一応朝鮮語とほぼ同仕様の{{temp|vi-h}}を作成してみましたが、ベトナム語に合わせた仕様にできればと考えております。なお、朝鮮語の場合は例えば[[정화]]では<nowiki>{{ko-h|精|華}}{{ko-h|菁|華|alt=y}}</nowiki>とすることで「精華」「菁華」両方の表記を表示できる仕様となっております。--[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2026年3月16日 (月) 13:22 (UTC)
== [[特別:携帯機器差分/2217397]] ==
お疲れ様です。こちらの要約欄が気になりまして、アルメニア語の発音テンプレートであるテンプレート:hy-IPAですが新たにモジュール:hy-IPAを作成して使えるようにしましたのでお使いください。--[[利用者:Praqimu|Praqimu]] ([[利用者・トーク:Praqimu|トーク]]) 2026年4月15日 (水) 17:25 (UTC)
:助かりました。下手にあれこれ変えてエラーを起こすわけにもいきませんので...--[[利用者:Kuroco2k|<span style="color:#000000">'''雛宮黒狐'''</span>]]([[利用者‐会話:Kuroco2k|<span style="color:#5a00cc">Talk</span>]]) 2026年4月16日 (木) 08:15 (UTC)
== 漢字ページ作りについて ==
テンプレート:kanjiを入れたときの部首や総画の表示やテンプレートja-kanji(表外漢字の場合)の下の読みの表示などの方法を教えてほしいです--[[利用者:R914|R914]] ([[利用者・トーク:R914|トーク]]) 2026年5月24日 (日) 07:57 (UTC)
== 訂正について。 ==
色々欠けているところをフォローしてくれてありがとうございます m(_ _)m。
自分はウィクショナリーでまだまだ未熟なので訂正はありがたいです。--[[利用者:Shishinó Mígami|Shishinó Mígami]] ([[利用者・トーク:Shishinó Mígami|トーク]]) 2026年7月3日 (金) 10:13 (UTC)
== 異体字セレクタ字の項 ==
「[[冉󠄁]]」「[[僊󠄁]]」の二字の内容を変更してくれたみたいなので質問なのですが、このような異体字に関しては字源や日本語その他言語などの項目は必要ないのですか?また「「僊」に異体字セレクタのU+E0101を指定した字形。」と意義欄に書かれていますがこれはどちらかと言うと字源欄に書くべきではないでしょうか。(「[[冉󠄁]]」も同様)--[[利用者:Keikei kanji|Keikei kanji]] ([[利用者・トーク:Keikei kanji|トーク]]) 2026年8月8日 (土) 12:32 (UTC)
0jdqttytwigo4dho9gajsw067g5jfsx
2313093
2313088
2026-08-08T12:51:02Z
Kuroco2k
84207
/* 異体字セレクタ字の項 */ 返信
2313093
wikitext
text/x-wiki
== 𤮃のソートキーに関する質問 ==
いつも漢字項目の作成有難うございます。[[𤮃]]のソートキーに関する質問ですが、「ang1 ang」→「3ang1 ang」とソートキーの最初に「3」を付けられておりますが、この3の意味はどのようなものでしょうか。これまで編集していても見た事のないソート方法なのでご教示いただければと思います。--[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2023年12月30日 (土) 12:27 (UTC)
:[[:カテゴリ:漢字]]、および[[:カテゴリ:Unicode CJK Unified Ideographs Extension B]]を見ていると、この漢字がaの箇所にあったため修正しようと考えたのですが、その際デフォルトソートに「ang1 ang」と「U+24B83」のどちらを当て振るべきか迷っており、最終的にデフォルトソートをそのままにその2つのカテゴリをU+24B83としてソートしたのですが、24B83の部分を切り取る際に誤って3だけ残ってしまったものだと思います。先ほど修正しました。--[[利用者:Kuroco2k|Kuroco2k]] ([[利用者・トーク:Kuroco2k|トーク]]) 2023年12月30日 (土) 12:45 (UTC)
== 鯐のイェール式表記について ==
[[鯐]]のイェール式が「zau2」とのことですが、イェール式にzは使われていなかったように思うのですが間違いないでしょうか?「zau2」は粤拼で、イェール式では「jau2」となるかと思いますがいかがでしょうか? --[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2024年1月23日 (火) 16:42 (UTC)
:すっかり失念していました。先ほど修正しました。--[[利用者:Kuroco2k|Kuroco2k]] ([[利用者・トーク:Kuroco2k|トーク]]) 2024年1月23日 (火) 16:47 (UTC)
::早速の対応ありがとうございます。--[[利用者:M-30722|M-30722]] ([[利用者・トーク:Kuroco2k|トーク]]) 2024年1月23日 (火) 16:52 (UTC)
::: Kuroco2kさん、確認しました。有難うございました。ところで上のコメント(16:52分)は私のものではないのですが60.88.85.56さん、私になりすましてのコメントはやめていただけますでしょうか。 --[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2024年1月23日 (火) 17:02 (UTC)
== 類推簡化字→簡体字?? ==
「類推簡化字」はあくまで「類推」であって、偏旁冠脚の簡略化を[[類推]]して適用するとこうなる、という字形です。あなたは、私Charidriが類推簡化字であるとして明確に定義づけた文字を、幾つか「簡体字」に変更しています。たとえば[[𫐅]]の項目ですが、私は[[軕]]に対する類推簡化字であると初版で定義づけました。あなたはこれを簡体字に変更しました。中国語の「簡体字」の項目として、どう説明できますか。ほかも全部同じことがいえますが。それと[[𬬷]]などは『[[w:中華字海|中華字海]]』に「类推」简化字であると書いてあるのですよ。
拼音の追記についてはありがとうございます。初版でそこまではやってられないので。そして類推簡化字の項目を猛烈に投稿してもらってることについてはたすかります。--[[利用者:Charidri|Charidri]] ([[利用者・トーク:Charidri|トーク]]) 2024年1月27日 (土) 13:56 (UTC)
== 情報減▲ ==
異体字の項目は、音訓のフォーマットを省略しているだけであって、[[𧥞]]での[https://ja.wiktionary.org/w/index.php?title=%F0%A7%A5%9E&diff=prev&oldid=1860124 編集]のように、わざわざ書いてある情報を削る必要は、ありませんよ。--[[利用者:Charidri|Charidri]] ([[利用者・トーク:Charidri|トーク]]) 2024年1月27日 (土) 13:56 (UTC)
[[𧥞]]の発音を戻しておいてくださいよ。--[[利用者:Charidri|Charidri]] ([[利用者・トーク:Charidri|トーク]]) 2025年6月21日 (土) 12:50 (UTC)
==漢字項目のソートキーなどについて==
漢字項目については基本的にソートキーは、日本語の読みです。それ以外をソートキーとすると日本語カテゴリに不具合が生じます。日本語のソートキーに対応できないチュノムや朝鮮の国字、近代中国における造字は各々の言語のソートキーになります。ユニコードがソートキーになっているものは修正途中と考えてください。--[[利用者:Mtodo|Mtodo]] ([[利用者・トーク:Mtodo|トーク]]) 2024年2月2日 (金) 23:36 (UTC)
== 込の訓読み ==
込のページで「すまいのこのみち」という読みを追加しましたが、それはどの資料に記載されている訓読みでしょうか?--[[利用者:醤油はせうゆ|醤油はせうゆ]] ([[利用者・トーク:醤油はせうゆ|トーク]]) 2024年8月3日 (土) 08:29 (UTC)
:米沢蔵書の倭玉篇を参考としています。[https://www.library.yonezawa.yamagata.jp/dg/AA180.html 米沢図書館デジタルライブラリー本]の46ページをご参照ください。--[[利用者:Kuroco2k|Kuroco2k]] ([[利用者・トーク:Kuroco2k|トーク]]) 2024年8月3日 (土) 10:19 (UTC)
==言語の並び順==
[[比]]での言語見出しの並び順が現行の合意(一番上が日本語でそれ以降は五十音順、[[Wiktionary:編集室/2018年Q1#言語の排列について]]、[[Wiktionary:編集室/2024年Q1#訳語の並び順]]も参照)とは異なる並びになっておりますが、どのようなルールで並べられておりますか? --[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2024年9月26日 (木) 16:31 (UTC)
:日本語→中国語→古壮字使用言語(ブイ語→チワン語)→朝鮮語→ベトナム語→タイー語の順で並ばせていたのですが、五十音順であることは存じていませんでした。修正しましたが、[[Special:Permalink/2007617|こちら]]のようでよろしいでしょうか。--[[利用者:Kuroco2k|Kuroco2k]] ([[利用者・トーク:Kuroco2k|トーク]]) 2024年9月27日 (金) 07:22 (UTC)
::はい、これで合意通りです。もし五十音順よりも上記の並びの方が適当であると思われる場合は[[Wiktionary:編集室]]等で提案していただければ例外規定についての検討も可能かもしれません。 --[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2024年9月29日 (日) 13:22 (UTC)
==タイー語のソートキーに関する相談==
タイー語等の編集ありがとうございます。ただいま[[カテゴリ・トーク:タイー語]]にてタイー語のソートキーの案を募集しておりますので何か良い案があれば提案していただければ幸いです。 --[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2024年11月6日 (水) 14:57 (UTC)
==漢字項目に関する議論の紹介==
いつも編集ありがとうございます。現在、[[Wiktionary:編集室/2025年Q2#「カテゴリ:漢字」のソートキーのルール]]にて漢字項目のソートキーに関する議論を行っております。漢字項目をよく編集されておりますKuroco2kさんのご意見もうかがえますと幸いです。 --[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2025年5月6日 (火) 08:35 (UTC)
== 英語の成句の動詞句 ==
お疲れ様です。先ほど{{l|en|play for time}}を作成されましたが日本語版ウィクショナリーでは動詞句の定形は作成しません({{l|en|reads the room}}、{{l|en|reading the room}}を作成した際に指摘を受けました)。ですので作成されたものは即時削除にし「動詞」ではなく「成句 動詞句」にしてください。--[[利用者:Praqimu|Praqimu]] ([[利用者・トーク:Praqimu|トーク]]) 2025年5月18日 (日) 03:00 (UTC)
:それは存じませんでした。現在対応しています。--[[利用者:Kuroco2k|Kuroco2k]] ([[利用者・トーク:Kuroco2k|トーク]]) 2025年5月18日 (日) 03:03 (UTC)
::ご対応ありがとうございます。--[[利用者:Praqimu|Praqimu]] ([[利用者・トーク:Praqimu|トーク]]) 2025年5月18日 (日) 03:10 (UTC)
== 漢字 > ベトナム語 or タイー語 ==
あなた 単漢字項目である字喃(チュノム)とか岱喃(タイノム)の項目の大見出しを、ベトナム語とかタイー語で大見出しを書いていますが、 テンプレート:標準の内容/漢字 に準じた体裁に全部書き直してください。単一の文字の項目は、文字そのものを上位の大見出しに書いて、各言語の節はその下位にぶらさがるようにしてください。この原則は、チュノム等を含む漢字項目のみならず、欧文のアルファベットなどもこうなっています。
そして、これも重要なことですが、単漢字項目は熟語項目とは異なるので、[[テンプレート:vi-DEFAULTSORT]] を使ってしまうと、ページ情報の「既定のソートキー」がクォックグーになってしまい、[[:カテゴリ:漢字]]などで混乱のもとになるので、使わないでください。[[テンプレート:vi-DEFAULTSORT]] に書き換えないでください。--[[利用者:Charidri|Charidri]] ([[利用者・トーク:Charidri|トーク]]) 2025年6月21日 (土) 12:50 (UTC)
:横から失礼します。まず前半部分については確かに文字情報と言語情報は分けて書いた方が良いと思います(同意します)。次に後半部分についてですが、「カテゴリ:漢字」については{{temp|kanji header}}や{{temp|漢字}}といったテンプレートを用いるとデフォルトソートの影響を受けず正しい形でソートされますので、テンプレートを使用した場合に限りデフォルトソートを使ったとしても「カテゴリ:漢字」のソートには影響を及ぼさないので、仕様を理解した上でなら{{temp|vi-DEFAULTSORT}}を使用しても問題ないのではと個人的には思います。また、'''{{temp|vi-DEFAULTSORT}}を使用することを禁止する合意は現時点でなされていないので現状デフォルトソートの禁止を強制は出来ない'''と認識しております。 --[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2025年7月8日 (火) 15:46 (UTC)
== 菩提薩埵のページについて ==
[[菩提薩埵]]のページにベトナム語の項目を追加していただいたようですが、テンプレートが明らかにエラーを起こしているので対処の方をお願いします。自分では対応できず申し訳ありませんが確認していただけると助かります。--[[利用者:Jiba1219|Jiba1219]] ([[利用者・トーク:Jiba1219|トーク]]) 2025年8月22日 (金) 12:13 (UTC)
:{{対処}} 私(「テンプレート:vi-head」の作成者です)が代わりに対処しました。なお、普段登録状況を[[:カテゴリ:テンプレート:vi-sort1にソートキーのデータ未登録]]で追っておりますが現在不具合により登録してもリストから消えなくなっております。その為もしかするとまだ登録漏れのものがある可能性がありますので見つけ次第教えていただけますと対処します。 --[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2025年8月22日 (金) 16:14 (UTC)
== 上位カテゴリに関する質問 ==
[[:カテゴリ:四川語 月名]]や[[:カテゴリ:ドンガン語 月名]]の上位カテゴリをナビゲーターでは「〇〇語 名詞」としておりますが、実際に付けられた上位カテゴリの「〇〇語 暦」を辿っていっても「〇〇語 名詞」に辿り着かないのですが「〇〇語 名詞」は本当に「〇〇語 月名」の上位カテゴリなのでしょうか? --[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2025年9月25日 (木) 16:25 (UTC)
:(これ時代は日本語の同意カテゴリーからコピーしたものですが)たしかにこうせざるとも良いかもしれません。一旦消しておきます。--[[利用者:Kuroco2k|Kuroco2k]] ([[利用者・トーク:Kuroco2k|トーク]]) 2025年9月25日 (木) 22:09 (UTC)
::日本語のカテゴリの構造が問題ありそうですね。昔は名詞を上位カテゴリとする分野カテゴリが複数あったのでその名残が更新されずにきたものと考えられますので更新しておきます。 --[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2025年9月26日 (金) 13:35 (UTC)
== テンプレート:字典での異体字字典について ==
先日{{temp|字典}}に追加された引数vt異体字字典掲載番号について、一つ提案をさせていただきます。異体字字典の中には掲載があり、Unicodeに文字が存在するがこれらの紐付けがされておらず検索してもヒットしない文字があります([[蜗]]に対する[https://dict.variants.moe.edu.tw/dictView.jsp?educode=A03661-002]など)。つきましては、このテンプレートの異体字字典の情報をWikidataの該当文字のP11475(教育部異体字字典識別子)から移入することはできますでしょうか。--[[利用者:TAKA647|TAKA647]] ([[利用者・トーク:TAKA647|トーク]]) 2025年11月13日 (木) 05:33 (UTC)
:少し試してみましたが、厳しいように思えます。Wiktionaryというプロジェクトの理念の性質上、Wikidataにつながっていないので、テンプレート単体では難しいと思います(モジュールに書き出せばできるかもしれませんが、その余力があいにくないです)。--[[利用者:Kuroco2k|Kuroco2k]] ([[利用者・トーク:Kuroco2k|トーク]]) 2025年11月13日 (木) 08:15 (UTC)
::返信ありがとうございます。なるほど、厳しいのですね。異体字字典は一つの字形に複数の識別子を結びつけていることもありますが、現在このテンプレートは複数のリンクに対応していないほか、上記の通り検索しても出てこない字形もありますし、一度この引数は導入を見送るのも手だと考えます。--[[利用者:TAKA647|TAKA647]] ([[利用者・トーク:TAKA647|トーク]]) 2025年11月13日 (木) 16:32 (UTC)
== テンプレート:vi-hanについて ==
[[匿]]を編集していただいたようですが、<code><nowiki>{{vi-han}}</nowiki></code>の表示に不具合が生じているようです。私では対応できないため、お手数ですが、ご確認をお願いいたします。--[[利用者:Jpnbcl|Jpnbcl]] ([[利用者・トーク:Jpnbcl|トーク]]) 2025年12月16日 (火) 11:46 (UTC)
:前も[[#菩提薩埵のページについて|同じこと]]を言われたので返答はこちらに代えさせていただきますが、ひとまず対処のみ。--[[利用者:Kuroco2k|Kuroco2k]] ([[利用者・トーク:Kuroco2k|トーク]]) 2025年12月16日 (火) 12:04 (UTC)
::ひとまずの対応ありがとうございました。--[[利用者:Jpnbcl|Jpnbcl]] ([[利用者・トーク:Jpnbcl|トーク]]) 2025年12月16日 (火) 12:16 (UTC)
== コードについて ==
いつも加筆および訂正ありがとうございます。編集の参考にさせていただきたいのですが、コード等の情報はどこから入手しているのでしょうか。少し気になったので差し支えなければ出来る範囲でご教示いただけると助かります。[[利用者:なきは|なきは]] ([[利用者・トーク:なきは|トーク]]) 2026年3月15日 (日) 07:35 (UTC)
:実に単純な話で、だいたいはUnihanのページ(単字なら{{temp|文字コード}}が自動で出してくれるのでアクセスは容易なはずです)から拾えますし、GB18030は[http://ccamc.org/ 古今文字集成]で拾えます。あとは拾ったソースをフォーマットに沿うように([[利用者:Jpnbcl#メモ|有志の方が一部メモしてある物]]を貼っておきます)書くだけです。--[[利用者:Kuroco2k|<span style="color:#000000">'''雛宮黒狐'''</span>]]([[利用者‐会話:Kuroco2k|<span style="color:#5a00cc">Talk</span>]]) 2026年3月15日 (日) 08:09 (UTC)
::ありがとうございます。[[利用者:なきは|なきは]] ([[利用者・トーク:なきは|トーク]]) 2026年3月15日 (日) 09:26 (UTC)
==ベトナム語の漢字語について==
いつも編集お疲れ様です。[[giữa trời]]や[[dưa hấu]]で「[[:カテゴリ:ベトナム語 漢字語]]」の付与を見送られているかと思いますが、当カテゴリは現在チュノムも付与の対象に含まれております。従いまして付与を見送った理由を教えていただけますと幸いです。 --[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2026年3月16日 (月) 13:03 (UTC)
:おっと、失礼しました。単純に見落としです。--[[利用者:Kuroco2k|<span style="color:#000000">'''雛宮黒狐'''</span>]]([[利用者‐会話:Kuroco2k|<span style="color:#5a00cc">Talk</span>]]) 2026年3月16日 (月) 13:08 (UTC)
::承知しました。ちなみに、先日朝鮮語用のテンプレートで漢字表記の出力をしながら漢字語カテゴリの付与を自動で行える{{temp|ko-h}}を作成したのですが、これのベトナム語バージョンを作ろうかどうか検討しております。自動出力にすれば漢字語カテゴリ付与の手間も減らせて便利になるかと思いますがいかがでしょうか?--[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2026年3月16日 (月) 13:12 (UTC)
:::アイデアそのものは悪くないでしょうが、漢語由来の熟語はともかくとして、それ以外の二字熟語に複数表記がある場合が多く、作っても相当やりづらいものになることが予想されます。朝鮮語ですら「並/竝」の二通りがある場合悩みどころですが、ベトナム語はそれ以上です。--[[利用者:Kuroco2k|<span style="color:#000000">'''雛宮黒狐'''</span>]]([[利用者‐会話:Kuroco2k|<span style="color:#5a00cc">Talk</span>]]) 2026年3月16日 (月) 13:16 (UTC)
::::他の方からも意見がありましたので一応朝鮮語とほぼ同仕様の{{temp|vi-h}}を作成してみましたが、ベトナム語に合わせた仕様にできればと考えております。なお、朝鮮語の場合は例えば[[정화]]では<nowiki>{{ko-h|精|華}}{{ko-h|菁|華|alt=y}}</nowiki>とすることで「精華」「菁華」両方の表記を表示できる仕様となっております。--[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2026年3月16日 (月) 13:22 (UTC)
== [[特別:携帯機器差分/2217397]] ==
お疲れ様です。こちらの要約欄が気になりまして、アルメニア語の発音テンプレートであるテンプレート:hy-IPAですが新たにモジュール:hy-IPAを作成して使えるようにしましたのでお使いください。--[[利用者:Praqimu|Praqimu]] ([[利用者・トーク:Praqimu|トーク]]) 2026年4月15日 (水) 17:25 (UTC)
:助かりました。下手にあれこれ変えてエラーを起こすわけにもいきませんので...--[[利用者:Kuroco2k|<span style="color:#000000">'''雛宮黒狐'''</span>]]([[利用者‐会話:Kuroco2k|<span style="color:#5a00cc">Talk</span>]]) 2026年4月16日 (木) 08:15 (UTC)
== 漢字ページ作りについて ==
テンプレート:kanjiを入れたときの部首や総画の表示やテンプレートja-kanji(表外漢字の場合)の下の読みの表示などの方法を教えてほしいです--[[利用者:R914|R914]] ([[利用者・トーク:R914|トーク]]) 2026年5月24日 (日) 07:57 (UTC)
== 訂正について。 ==
色々欠けているところをフォローしてくれてありがとうございます m(_ _)m。
自分はウィクショナリーでまだまだ未熟なので訂正はありがたいです。--[[利用者:Shishinó Mígami|Shishinó Mígami]] ([[利用者・トーク:Shishinó Mígami|トーク]]) 2026年7月3日 (金) 10:13 (UTC)
== 異体字セレクタ字の項 ==
「[[冉󠄁]]」「[[僊󠄁]]」の二字の内容を変更してくれたみたいなので質問なのですが、このような異体字に関しては字源や日本語その他言語などの項目は必要ないのですか?また「「僊」に異体字セレクタのU+E0101を指定した字形。」と意義欄に書かれていますがこれはどちらかと言うと字源欄に書くべきではないでしょうか。(「[[冉󠄁]]」も同様)--[[利用者:Keikei kanji|Keikei kanji]] ([[利用者・トーク:Keikei kanji|トーク]]) 2026年8月8日 (土) 12:32 (UTC)
:*異体字に詳細な字源・言語情報はいらない?
:**>あってもなくても...です。「親項目見ればわかるでしょ?」という人は略します。字源はちょっと話が違いますが(明らかに当用のものとは異とするとか、ある字の原字なら書かざるを得ないでしょう)。
:*「『○』の...」はそこに書く必要ある?
:**>異体字関係を意義に書いてるようなことです。やむなく意義を充足させてるにすぎません。なによりそれを字源に書くのは情報技術の外では本質的じゃないです。
:--[[利用者:Kuroco2k|<span style="color:#000000">'''雛宮黒狐'''</span>]]([[利用者‐会話:Kuroco2k|<span style="color:#5a00cc">Talk</span>]]) 2026年8月8日 (土) 12:51 (UTC)
kxec1qypuq3hxsxw0e1zwzecpr5y7pz
テンプレート:cmn-pron
10
486426
2313355
2159535
2026-08-09T04:20:41Z
Jiba1219
100610
引数2とzが同時に指定された場合は台湾国語のセクションを非表示にし、大陸普通話のみ表示するように改修
2313355
wikitext
text/x-wiki
<includeonly>
*官話:<!--
-->{{#if:{{{1|}}}|**{{#if:{{{2|}}}|大陸普通話|標準中国語}}:
*:[[w:拼音|拼音]]: {{#ifeq:{{{h|}}}|y|[[{{{1}}}]]|{{{1}}}}}<!--
-->{{#if:{{{2|}}}||{{#ifeq:{{{z|}}}|n||*:[[w:注音符号|注音符号]]: {{#invoke:cmn-pron|py_zhuyin|{{{1}}}}}}}}}
*:[[w:ウェード式|ウェード式]]: {{#invoke:cmn-pron|py_wg|{{{1|}}}}}
*:{{IPA|lang=zh|{{#invoke:cmn-pron|py_ipa|{{{1}}}}}|sort={{#invoke:cmn-pron|py_sort|{{{1}}}}}}}<!--
-->{{#if:{{{a|}}}|*:{{音声|zh|{{#ifeq:{{{a|}}}|y|Zh-{{{1}}}.ogg|{{{a}}}}}}}}}<!--
-->{{#if:{{{a2|}}}|*:{{音声|zh|{{{a2}}}}}}}<!--
-->{{#ifeq:{{{er|}}}|y|<!--
-->**大陸普通話([[w:児化|児化]]):
*:[[児化詞]]: {{#ifeq:{{{z|}}}|n|[[{{PAGENAME}}儿]]|[[{{PAGENAME}}兒]]}}
*:[[w:拼音|拼音]]: {{{1}}}r<!--
-->{{#if:{{{2|}}}||{{#ifeq:{{{z|}}}|n||*:[[w:注音符号|注音符号]]: {{#invoke:cmn-pron|py_zhuyin|{{{1}}}r}}}}}}
*:[[w:ウェード式|ウェード式]]: {{#invoke:cmn-pron|py_wg|{{{1}}}r}}
*:{{IPA|lang=zh|{{#invoke:cmn-pron|py_ipa|{{{1}}}r}}|sort={{#invoke:cmn-pron|py_sort|{{{1}}}}}}}<!--
-->[[カテゴリ:{{zh}} 児化|{{#invoke:cmn-pron|py_sort|{{{1}}}}}]]|}}<!--
-->{{#if:{{{2|}}}|{{#if:{{{z|}}}||<!--
-->**[[w:台湾国語|台湾国語]]:
*:[[w:拼音|拼音]]: {{{2|}}}
*:[[w:注音符号|注音符号]]: {{#invoke:cmn-pron|py_zhuyin|{{{2|}}}}}
*:[[w:ウェード式|ウェード式]]: {{#invoke:cmn-pron|py_wg|{{{2|}}}}}
*:[[w:国語ローマ字|国語ローマ字]]: {{#invoke:cmn-pron|py_gwoyeu|{{{2|}}}}}
*:[[w:通用拼音|通用拼音]]: {{#invoke:cmn-pron|py_tongyong|{{{2|}}}}}
*:{{IPA|lang=zh|{{#invoke:cmn-pron|py_ipa|{{{2|}}}}}|sort={{#invoke:cmn-pron|py_sort|{{{1}}}}}}}<!--
-->[[カテゴリ:{{zh}}_両岸で発音の異なる語|{{#invoke:cmn-pron|py_sort|{{{1}}}}}]]}}}}}}<!--
-->{{#if:{{{s|}}}|<!--
-->**{{zhx-sic}}:
*:[[w:zh:四川話拼音|四川拼音]]: {{#invoke:zhx-sic-pron|rom|{{{s}}}}}<!--
-->{{#if:{{#invoke:zhx-sic-pron|convert2|{{{s}}}}}|
*:[[w:zh:四川话拉丁化新文字|ラテン化新文字]]: {{#invoke:zhx-sic-pron|convert2|{{{s}}}}}}}
*:{{IPA|{{#invoke:zhx-sic-pron|convert|{{{s}}}|IPA}}|lang=zhx-sic|sort={{#invoke:zhx-sic-pron|sort|{{{s}}}}}}}}}<!--
-->{{#if:{{{1|}}}|{{#if:{{{x|}}}|<!--
-->**関中語:
*:[[:en:Wiktionary:About Chinese/Xi'an|関中拼音]]: {{{x}}}
*:{{IPA|{{#invoke:cmn-pron-xian|ipa|{{{x}}}}}|lang=zh|sort={{#invoke:cmn-pron|py_sort|{{{1}}}}}}}}}<!--
-->{{#if:{{{nj|}}}|<!--
-->**南京語:
*:[[:en:Wiktionary:About Chinese/Nanjing|南京拼音]]: {{{nj}}}
*:{{IPA|{{#invoke:cmn-pron-nanjing|ipa|{{{nj}}}}}|lang=zh|sort={{#invoke:cmn-pron|py_sort|{{{1}}}}}}}}}}}<!--
-->{{#if:{{{dg|}}}|
**{{dng}}:
*:[[w:キリル文字|キリル文字]]: {{#invoke:dng-pron|process|{{{dg}}}}}
*:{{IPA|{{#invoke:dng-pron|convert|{{{dg}}}|IPA}}|lang=dng|sort={{#invoke:dng-pron|sort|{{{dg}}}}}}}}}<!--
--></includeonly><!--
--><noinclude>[[カテゴリ:{{zh}}_発音テンプレート|cmnpron]]{{documentation}}</noinclude>
j2i7ywo9kp8nkfgf1xa3xvih8inanos
利用者:Kuroco2k
2
489345
2313401
2307220
2026-08-09T08:05:58Z
Kuroco2k
84207
/* テスト */
2313401
wikitext
text/x-wiki
'''Kuroco2k'''(雛宮黒狐ともいう)といいます。基本中立。議論が下手だから。
==最近思うこと==
#新規項目よりも既存項目の充実が大事であり、それが一段落するまで濫造に走ってはいけない。
==配下ページ==
*[[/二簡字]](未完)
*[[/朝鮮語基本語彙表]](今作ってある分の赤リンクを作り終えたら続編も作る)
==Todo==
#(進行中)漢検範囲内の訓立項
#(進行中)漢字項目のメンテナンス、異体字整理
#(進行中)漢字項目の立項
#(進行中)西夏文字項目の立項
==独り言==
#閩東語、閩北語にある「ṳ」などの文字たち。
#*ソート順に迷います。暫定的にはṳにy、e̤にoeを割り振ってます。将来的に提案できたらと思いますが、まだ実用的な段階に踏めてません。例えば、「[[用]]」の閩東語のソートはこれなら「oeyng6」になります。
#[[Template:kanji variants]]を使用してみたけど、ちょっとこの辺に困るなというところ:
#*Unicode順に整列されてしまうので、意図した並びが崩れてしまう
#*同じ文字を複数入れると反映されない(語義の違いとかで入れることがあるので...)
#シソーラスの名前空間
#*多分現状だと記事にカウントされているので、別の名前空間として扱いたい。
==リンク集(メモ)==
*[https://hongkongvision.com/tool/cc_py_conv_zh 漢字→廣東話/粵語拼音轉換工具]
**広東語のイェール式に変換してくれる。'''zi.toolsは粤拼'''。
*[https://www.wugniu.com/ 吳語學堂]
**いわゆる呉拼というやつ。上海語は下記のでいいですが、方言とかを記述するときにない時が多いので使っている。英語版の標準表記。
*[https://wu-chinese.com/minidict/ 吴音小字典]
**日本語版で、呉語の標準表記に使用される(主に上海語で)。
*[https://www.ydict.net/ 榕典]
**閩東語方言に使っている。
*[[特別:特別ページ一覧]]
**メモ用
*[[利用者:Naggy Nagumo/他言語版にあって日本語版にない項目]]
**タスクリスト
==テスト==
{{number box|hu|0}}
==リスト一覧==
{{rel-top|中国語}}
{| class="wikitable" style="text-align: center"
|-
! 声調番号 !! 声調名 !! 白話字(aを例として) !! 声調値(台北) !! 声調値(台南)
|-
| 1 || 陰平 || a || 55 || 44
|-
| 2 (6) || 陰上 || á || 51 || 53
|-
| 3 || 陰去 || à || 31 || 11
|-
| 4 || 陰入 || ap/at/ak/ah || 32 || 21
|-
| 5 || 陽平 || â || 14 || 25
|-
| 7 || 陽去 || ā || 33 || 22
|-
| 8 || 陽入 || a̍p/a̍t/a̍k/a̍h || 4 || 5
|}
{|class=wikitable border=1 style="text-align: left;"
! 声調名
! 白話字(aを例として)
! 声調値(苗栗腔)
! 声調値(新竹腔)
|-
|陰平
|â
|24
|53
|-
|陽平
|à
|11
|55
|-
|上声
|á
|31
|24
|-
|陰去
|a
|rowspan="2"|55
|11
|-
|陽去
|å
|33
|-
|陰入
|ap/at/ak
|2
|5
|-
|陽入
|a̍p/a̍t/a̍k
|5
|2
|-
|}
([[:w:白話字]]より、要所だけ)
{| class="wikitable" style="text-align:center;"
| bgcolor="#ABCDEF" |'''名称'''
| bgcolor="#ABCDEF" |'''声調番号'''
| bgcolor="#ABCDEF" |'''符号'''
| bgcolor="#ABCDEF" |'''例'''
|-
| 上平
| 55
| ◌̆
| 君 '''Gŭng'''
|-
| 上聲
| 33
| ◌̄
| 滾 '''Gūng'''
|-
| 上去
| 213
| ◌́
| 貢 '''Góng'''
|-
| 上入
| <u>24</u>
| ◌́
| 谷 '''Gók'''
|-
| 下平
| 53
| ◌̀
| 群 '''Gùng'''
|-
| 下去
| 242
| ◌̂
| 郡 '''Gông'''
|-
| 下入
| 5
| ◌̆
| 掘 '''Gŭk'''
|}
([[:w:en:Bàng-uâ-cê]]より、要所だけ)
{| class="wikitable"
|+ KCRにおける声調符号
|-
!番号
|1
|2
|3
|4
|5
|6
|7
|-
!声調タイプ
|陰平
|陽平
|上聲
|陰去
|陽去
|陰入
|陽入
|-
!KCRにおける符号
| <span style="font-size:190%;">ˊ</span> ({{lang|mnp|á}})
| <span style="font-size:190%;">ˆ</span> ({{lang|mnp|â}})
| <span style="font-size:190%;">ˇ</span> ({{lang|mnp|ǎ}})
| <span style="font-size:190%;"> ̿</span> ({{lang|mnp|a̿}})
| <span style="font-size:190%;">ˉ</span> ({{lang|mnp|ā}})
| <span style="font-size:190%;">˘</span> ({{lang|mnp|ă}})
| <span style="font-size:190%;">ˋ</span> ({{lang|mnp|à}})
|-
|}
([[:w:en:Kienning Colloquial Romanized]]より、要所だけ)
{{rel-bottom}}
:{| class="wikitable" style="width:80%; text-align:center"
|-
!呉拼!!声調番号 (Wikt)!!声調名!!調値!!方言大詞典調値
|-
!1!!1!!陰平
|{{IPAfont|˥˧}} 53|| 陰平 ({{IPAfont|˥˧}} 53)
|-
!5!!2!!陰去
|{{IPAfont|˧˦}} 34|| 陰去 ({{IPAfont|˧˥}} 35)<br>陰上 ({{IPAfont|˥}} 55)
|-
!6!!3!!陽去
|{{IPAfont|˨˧}} 23|| 陽舒 ({{IPAfont|˩˧}} 13)
|-
!7!!4!!陰入
|{{IPAfont|˥ʔ}} <u>55</u>||陰入 ({{IPAfont|˥ʔ}} <u>55</u>)
|-
!8!!5!!陽入
|{{IPAfont|˩˨ʔ}} <u>12</u>|| 陽入 ({{IPAfont|˩˧ʔ}} <u>13</u>)
|}
{|class="wikitable" style="text-align:center;"
|-
|声調||陰平||陽平||上聲||陰去||陽去||陰入||陽入||長入
|-
|声調番号||1||2||3||4||5||6||7||8
|-
|調値||˨˦ (24)||˨˩ (21)||˨˩˩ (211)||˧˥ (35)||˧ (33)||˥ (5)||˧ (3)||˥ (55)
|-
|方言大詞典調値||24||21||213||35||33||5||3||55
|}
なお、ここでいう長入とは、入声であるが、白読によって、第6声とみなされないものをいう。
9unftln9p0dk3myyzlqyy7x524kqizj
2313405
2313401
2026-08-09T08:56:54Z
Kuroco2k
84207
/* テスト */
2313405
wikitext
text/x-wiki
'''Kuroco2k'''(雛宮黒狐ともいう)といいます。基本中立。議論が下手だから。
==最近思うこと==
#新規項目よりも既存項目の充実が大事であり、それが一段落するまで濫造に走ってはいけない。
==配下ページ==
*[[/二簡字]](未完)
*[[/朝鮮語基本語彙表]](今作ってある分の赤リンクを作り終えたら続編も作る)
==Todo==
#(進行中)漢検範囲内の訓立項
#(進行中)漢字項目のメンテナンス、異体字整理
#(進行中)漢字項目の立項
#(進行中)西夏文字項目の立項
==独り言==
#閩東語、閩北語にある「ṳ」などの文字たち。
#*ソート順に迷います。暫定的にはṳにy、e̤にoeを割り振ってます。将来的に提案できたらと思いますが、まだ実用的な段階に踏めてません。例えば、「[[用]]」の閩東語のソートはこれなら「oeyng6」になります。
#[[Template:kanji variants]]を使用してみたけど、ちょっとこの辺に困るなというところ:
#*Unicode順に整列されてしまうので、意図した並びが崩れてしまう
#*同じ文字を複数入れると反映されない(語義の違いとかで入れることがあるので...)
#シソーラスの名前空間
#*多分現状だと記事にカウントされているので、別の名前空間として扱いたい。
==リンク集(メモ)==
*[https://hongkongvision.com/tool/cc_py_conv_zh 漢字→廣東話/粵語拼音轉換工具]
**広東語のイェール式に変換してくれる。'''zi.toolsは粤拼'''。
*[https://www.wugniu.com/ 吳語學堂]
**いわゆる呉拼というやつ。上海語は下記のでいいですが、方言とかを記述するときにない時が多いので使っている。英語版の標準表記。
*[https://wu-chinese.com/minidict/ 吴音小字典]
**日本語版で、呉語の標準表記に使用される(主に上海語で)。
*[https://www.ydict.net/ 榕典]
**閩東語方言に使っている。
*[[特別:特別ページ一覧]]
**メモ用
*[[利用者:Naggy Nagumo/他言語版にあって日本語版にない項目]]
**タスクリスト
==テスト==
{{ca-conj|cantar}}
{{ca-conj|pagar}}
{{ca-conj|distribuir}}
==リスト一覧==
{{rel-top|中国語}}
{| class="wikitable" style="text-align: center"
|-
! 声調番号 !! 声調名 !! 白話字(aを例として) !! 声調値(台北) !! 声調値(台南)
|-
| 1 || 陰平 || a || 55 || 44
|-
| 2 (6) || 陰上 || á || 51 || 53
|-
| 3 || 陰去 || à || 31 || 11
|-
| 4 || 陰入 || ap/at/ak/ah || 32 || 21
|-
| 5 || 陽平 || â || 14 || 25
|-
| 7 || 陽去 || ā || 33 || 22
|-
| 8 || 陽入 || a̍p/a̍t/a̍k/a̍h || 4 || 5
|}
{|class=wikitable border=1 style="text-align: left;"
! 声調名
! 白話字(aを例として)
! 声調値(苗栗腔)
! 声調値(新竹腔)
|-
|陰平
|â
|24
|53
|-
|陽平
|à
|11
|55
|-
|上声
|á
|31
|24
|-
|陰去
|a
|rowspan="2"|55
|11
|-
|陽去
|å
|33
|-
|陰入
|ap/at/ak
|2
|5
|-
|陽入
|a̍p/a̍t/a̍k
|5
|2
|-
|}
([[:w:白話字]]より、要所だけ)
{| class="wikitable" style="text-align:center;"
| bgcolor="#ABCDEF" |'''名称'''
| bgcolor="#ABCDEF" |'''声調番号'''
| bgcolor="#ABCDEF" |'''符号'''
| bgcolor="#ABCDEF" |'''例'''
|-
| 上平
| 55
| ◌̆
| 君 '''Gŭng'''
|-
| 上聲
| 33
| ◌̄
| 滾 '''Gūng'''
|-
| 上去
| 213
| ◌́
| 貢 '''Góng'''
|-
| 上入
| <u>24</u>
| ◌́
| 谷 '''Gók'''
|-
| 下平
| 53
| ◌̀
| 群 '''Gùng'''
|-
| 下去
| 242
| ◌̂
| 郡 '''Gông'''
|-
| 下入
| 5
| ◌̆
| 掘 '''Gŭk'''
|}
([[:w:en:Bàng-uâ-cê]]より、要所だけ)
{| class="wikitable"
|+ KCRにおける声調符号
|-
!番号
|1
|2
|3
|4
|5
|6
|7
|-
!声調タイプ
|陰平
|陽平
|上聲
|陰去
|陽去
|陰入
|陽入
|-
!KCRにおける符号
| <span style="font-size:190%;">ˊ</span> ({{lang|mnp|á}})
| <span style="font-size:190%;">ˆ</span> ({{lang|mnp|â}})
| <span style="font-size:190%;">ˇ</span> ({{lang|mnp|ǎ}})
| <span style="font-size:190%;"> ̿</span> ({{lang|mnp|a̿}})
| <span style="font-size:190%;">ˉ</span> ({{lang|mnp|ā}})
| <span style="font-size:190%;">˘</span> ({{lang|mnp|ă}})
| <span style="font-size:190%;">ˋ</span> ({{lang|mnp|à}})
|-
|}
([[:w:en:Kienning Colloquial Romanized]]より、要所だけ)
{{rel-bottom}}
:{| class="wikitable" style="width:80%; text-align:center"
|-
!呉拼!!声調番号 (Wikt)!!声調名!!調値!!方言大詞典調値
|-
!1!!1!!陰平
|{{IPAfont|˥˧}} 53|| 陰平 ({{IPAfont|˥˧}} 53)
|-
!5!!2!!陰去
|{{IPAfont|˧˦}} 34|| 陰去 ({{IPAfont|˧˥}} 35)<br>陰上 ({{IPAfont|˥}} 55)
|-
!6!!3!!陽去
|{{IPAfont|˨˧}} 23|| 陽舒 ({{IPAfont|˩˧}} 13)
|-
!7!!4!!陰入
|{{IPAfont|˥ʔ}} <u>55</u>||陰入 ({{IPAfont|˥ʔ}} <u>55</u>)
|-
!8!!5!!陽入
|{{IPAfont|˩˨ʔ}} <u>12</u>|| 陽入 ({{IPAfont|˩˧ʔ}} <u>13</u>)
|}
{|class="wikitable" style="text-align:center;"
|-
|声調||陰平||陽平||上聲||陰去||陽去||陰入||陽入||長入
|-
|声調番号||1||2||3||4||5||6||7||8
|-
|調値||˨˦ (24)||˨˩ (21)||˨˩˩ (211)||˧˥ (35)||˧ (33)||˥ (5)||˧ (3)||˥ (55)
|-
|方言大詞典調値||24||21||213||35||33||5||3||55
|}
なお、ここでいう長入とは、入声であるが、白読によって、第6声とみなされないものをいう。
chwp8lk1abh4pawkxx6yo2bb8lt8e1z
2313406
2313405
2026-08-09T08:57:35Z
Kuroco2k
84207
/* テスト */
2313406
wikitext
text/x-wiki
'''Kuroco2k'''(雛宮黒狐ともいう)といいます。基本中立。議論が下手だから。
==最近思うこと==
#新規項目よりも既存項目の充実が大事であり、それが一段落するまで濫造に走ってはいけない。
==配下ページ==
*[[/二簡字]](未完)
*[[/朝鮮語基本語彙表]](今作ってある分の赤リンクを作り終えたら続編も作る)
==Todo==
#(進行中)漢検範囲内の訓立項
#(進行中)漢字項目のメンテナンス、異体字整理
#(進行中)漢字項目の立項
#(進行中)西夏文字項目の立項
==独り言==
#閩東語、閩北語にある「ṳ」などの文字たち。
#*ソート順に迷います。暫定的にはṳにy、e̤にoeを割り振ってます。将来的に提案できたらと思いますが、まだ実用的な段階に踏めてません。例えば、「[[用]]」の閩東語のソートはこれなら「oeyng6」になります。
#[[Template:kanji variants]]を使用してみたけど、ちょっとこの辺に困るなというところ:
#*Unicode順に整列されてしまうので、意図した並びが崩れてしまう
#*同じ文字を複数入れると反映されない(語義の違いとかで入れることがあるので...)
#シソーラスの名前空間
#*多分現状だと記事にカウントされているので、別の名前空間として扱いたい。
==リンク集(メモ)==
*[https://hongkongvision.com/tool/cc_py_conv_zh 漢字→廣東話/粵語拼音轉換工具]
**広東語のイェール式に変換してくれる。'''zi.toolsは粤拼'''。
*[https://www.wugniu.com/ 吳語學堂]
**いわゆる呉拼というやつ。上海語は下記のでいいですが、方言とかを記述するときにない時が多いので使っている。英語版の標準表記。
*[https://wu-chinese.com/minidict/ 吴音小字典]
**日本語版で、呉語の標準表記に使用される(主に上海語で)。
*[https://www.ydict.net/ 榕典]
**閩東語方言に使っている。
*[[特別:特別ページ一覧]]
**メモ用
*[[利用者:Naggy Nagumo/他言語版にあって日本語版にない項目]]
**タスクリスト
==テスト==
{{利用者:Kuroco2k/テンプレート:ca-conj|cantar}}
{{利用者:Kuroco2k/テンプレート:ca-conj|pagar}}
{{利用者:Kuroco2k/テンプレート:ca-conj|distribuir}}
==リスト一覧==
{{rel-top|中国語}}
{| class="wikitable" style="text-align: center"
|-
! 声調番号 !! 声調名 !! 白話字(aを例として) !! 声調値(台北) !! 声調値(台南)
|-
| 1 || 陰平 || a || 55 || 44
|-
| 2 (6) || 陰上 || á || 51 || 53
|-
| 3 || 陰去 || à || 31 || 11
|-
| 4 || 陰入 || ap/at/ak/ah || 32 || 21
|-
| 5 || 陽平 || â || 14 || 25
|-
| 7 || 陽去 || ā || 33 || 22
|-
| 8 || 陽入 || a̍p/a̍t/a̍k/a̍h || 4 || 5
|}
{|class=wikitable border=1 style="text-align: left;"
! 声調名
! 白話字(aを例として)
! 声調値(苗栗腔)
! 声調値(新竹腔)
|-
|陰平
|â
|24
|53
|-
|陽平
|à
|11
|55
|-
|上声
|á
|31
|24
|-
|陰去
|a
|rowspan="2"|55
|11
|-
|陽去
|å
|33
|-
|陰入
|ap/at/ak
|2
|5
|-
|陽入
|a̍p/a̍t/a̍k
|5
|2
|-
|}
([[:w:白話字]]より、要所だけ)
{| class="wikitable" style="text-align:center;"
| bgcolor="#ABCDEF" |'''名称'''
| bgcolor="#ABCDEF" |'''声調番号'''
| bgcolor="#ABCDEF" |'''符号'''
| bgcolor="#ABCDEF" |'''例'''
|-
| 上平
| 55
| ◌̆
| 君 '''Gŭng'''
|-
| 上聲
| 33
| ◌̄
| 滾 '''Gūng'''
|-
| 上去
| 213
| ◌́
| 貢 '''Góng'''
|-
| 上入
| <u>24</u>
| ◌́
| 谷 '''Gók'''
|-
| 下平
| 53
| ◌̀
| 群 '''Gùng'''
|-
| 下去
| 242
| ◌̂
| 郡 '''Gông'''
|-
| 下入
| 5
| ◌̆
| 掘 '''Gŭk'''
|}
([[:w:en:Bàng-uâ-cê]]より、要所だけ)
{| class="wikitable"
|+ KCRにおける声調符号
|-
!番号
|1
|2
|3
|4
|5
|6
|7
|-
!声調タイプ
|陰平
|陽平
|上聲
|陰去
|陽去
|陰入
|陽入
|-
!KCRにおける符号
| <span style="font-size:190%;">ˊ</span> ({{lang|mnp|á}})
| <span style="font-size:190%;">ˆ</span> ({{lang|mnp|â}})
| <span style="font-size:190%;">ˇ</span> ({{lang|mnp|ǎ}})
| <span style="font-size:190%;"> ̿</span> ({{lang|mnp|a̿}})
| <span style="font-size:190%;">ˉ</span> ({{lang|mnp|ā}})
| <span style="font-size:190%;">˘</span> ({{lang|mnp|ă}})
| <span style="font-size:190%;">ˋ</span> ({{lang|mnp|à}})
|-
|}
([[:w:en:Kienning Colloquial Romanized]]より、要所だけ)
{{rel-bottom}}
:{| class="wikitable" style="width:80%; text-align:center"
|-
!呉拼!!声調番号 (Wikt)!!声調名!!調値!!方言大詞典調値
|-
!1!!1!!陰平
|{{IPAfont|˥˧}} 53|| 陰平 ({{IPAfont|˥˧}} 53)
|-
!5!!2!!陰去
|{{IPAfont|˧˦}} 34|| 陰去 ({{IPAfont|˧˥}} 35)<br>陰上 ({{IPAfont|˥}} 55)
|-
!6!!3!!陽去
|{{IPAfont|˨˧}} 23|| 陽舒 ({{IPAfont|˩˧}} 13)
|-
!7!!4!!陰入
|{{IPAfont|˥ʔ}} <u>55</u>||陰入 ({{IPAfont|˥ʔ}} <u>55</u>)
|-
!8!!5!!陽入
|{{IPAfont|˩˨ʔ}} <u>12</u>|| 陽入 ({{IPAfont|˩˧ʔ}} <u>13</u>)
|}
{|class="wikitable" style="text-align:center;"
|-
|声調||陰平||陽平||上聲||陰去||陽去||陰入||陽入||長入
|-
|声調番号||1||2||3||4||5||6||7||8
|-
|調値||˨˦ (24)||˨˩ (21)||˨˩˩ (211)||˧˥ (35)||˧ (33)||˥ (5)||˧ (3)||˥ (55)
|-
|方言大詞典調値||24||21||213||35||33||5||3||55
|}
なお、ここでいう長入とは、入声であるが、白読によって、第6声とみなされないものをいう。
0v08t9fmm7cz5cfomldn1yx4xvuehy5
2313437
2313406
2026-08-09T10:22:02Z
Kuroco2k
84207
/* テスト */
2313437
wikitext
text/x-wiki
'''Kuroco2k'''(雛宮黒狐ともいう)といいます。基本中立。議論が下手だから。
==最近思うこと==
#新規項目よりも既存項目の充実が大事であり、それが一段落するまで濫造に走ってはいけない。
==配下ページ==
*[[/二簡字]](未完)
*[[/朝鮮語基本語彙表]](今作ってある分の赤リンクを作り終えたら続編も作る)
==Todo==
#(進行中)漢検範囲内の訓立項
#(進行中)漢字項目のメンテナンス、異体字整理
#(進行中)漢字項目の立項
#(進行中)西夏文字項目の立項
==独り言==
#閩東語、閩北語にある「ṳ」などの文字たち。
#*ソート順に迷います。暫定的にはṳにy、e̤にoeを割り振ってます。将来的に提案できたらと思いますが、まだ実用的な段階に踏めてません。例えば、「[[用]]」の閩東語のソートはこれなら「oeyng6」になります。
#[[Template:kanji variants]]を使用してみたけど、ちょっとこの辺に困るなというところ:
#*Unicode順に整列されてしまうので、意図した並びが崩れてしまう
#*同じ文字を複数入れると反映されない(語義の違いとかで入れることがあるので...)
#シソーラスの名前空間
#*多分現状だと記事にカウントされているので、別の名前空間として扱いたい。
==リンク集(メモ)==
*[https://hongkongvision.com/tool/cc_py_conv_zh 漢字→廣東話/粵語拼音轉換工具]
**広東語のイェール式に変換してくれる。'''zi.toolsは粤拼'''。
*[https://www.wugniu.com/ 吳語學堂]
**いわゆる呉拼というやつ。上海語は下記のでいいですが、方言とかを記述するときにない時が多いので使っている。英語版の標準表記。
*[https://wu-chinese.com/minidict/ 吴音小字典]
**日本語版で、呉語の標準表記に使用される(主に上海語で)。
*[https://www.ydict.net/ 榕典]
**閩東語方言に使っている。
*[[特別:特別ページ一覧]]
**メモ用
*[[利用者:Naggy Nagumo/他言語版にあって日本語版にない項目]]
**タスクリスト
==テスト==
{{lt-pr|nãmas}}
==リスト一覧==
{{rel-top|中国語}}
{| class="wikitable" style="text-align: center"
|-
! 声調番号 !! 声調名 !! 白話字(aを例として) !! 声調値(台北) !! 声調値(台南)
|-
| 1 || 陰平 || a || 55 || 44
|-
| 2 (6) || 陰上 || á || 51 || 53
|-
| 3 || 陰去 || à || 31 || 11
|-
| 4 || 陰入 || ap/at/ak/ah || 32 || 21
|-
| 5 || 陽平 || â || 14 || 25
|-
| 7 || 陽去 || ā || 33 || 22
|-
| 8 || 陽入 || a̍p/a̍t/a̍k/a̍h || 4 || 5
|}
{|class=wikitable border=1 style="text-align: left;"
! 声調名
! 白話字(aを例として)
! 声調値(苗栗腔)
! 声調値(新竹腔)
|-
|陰平
|â
|24
|53
|-
|陽平
|à
|11
|55
|-
|上声
|á
|31
|24
|-
|陰去
|a
|rowspan="2"|55
|11
|-
|陽去
|å
|33
|-
|陰入
|ap/at/ak
|2
|5
|-
|陽入
|a̍p/a̍t/a̍k
|5
|2
|-
|}
([[:w:白話字]]より、要所だけ)
{| class="wikitable" style="text-align:center;"
| bgcolor="#ABCDEF" |'''名称'''
| bgcolor="#ABCDEF" |'''声調番号'''
| bgcolor="#ABCDEF" |'''符号'''
| bgcolor="#ABCDEF" |'''例'''
|-
| 上平
| 55
| ◌̆
| 君 '''Gŭng'''
|-
| 上聲
| 33
| ◌̄
| 滾 '''Gūng'''
|-
| 上去
| 213
| ◌́
| 貢 '''Góng'''
|-
| 上入
| <u>24</u>
| ◌́
| 谷 '''Gók'''
|-
| 下平
| 53
| ◌̀
| 群 '''Gùng'''
|-
| 下去
| 242
| ◌̂
| 郡 '''Gông'''
|-
| 下入
| 5
| ◌̆
| 掘 '''Gŭk'''
|}
([[:w:en:Bàng-uâ-cê]]より、要所だけ)
{| class="wikitable"
|+ KCRにおける声調符号
|-
!番号
|1
|2
|3
|4
|5
|6
|7
|-
!声調タイプ
|陰平
|陽平
|上聲
|陰去
|陽去
|陰入
|陽入
|-
!KCRにおける符号
| <span style="font-size:190%;">ˊ</span> ({{lang|mnp|á}})
| <span style="font-size:190%;">ˆ</span> ({{lang|mnp|â}})
| <span style="font-size:190%;">ˇ</span> ({{lang|mnp|ǎ}})
| <span style="font-size:190%;"> ̿</span> ({{lang|mnp|a̿}})
| <span style="font-size:190%;">ˉ</span> ({{lang|mnp|ā}})
| <span style="font-size:190%;">˘</span> ({{lang|mnp|ă}})
| <span style="font-size:190%;">ˋ</span> ({{lang|mnp|à}})
|-
|}
([[:w:en:Kienning Colloquial Romanized]]より、要所だけ)
{{rel-bottom}}
:{| class="wikitable" style="width:80%; text-align:center"
|-
!呉拼!!声調番号 (Wikt)!!声調名!!調値!!方言大詞典調値
|-
!1!!1!!陰平
|{{IPAfont|˥˧}} 53|| 陰平 ({{IPAfont|˥˧}} 53)
|-
!5!!2!!陰去
|{{IPAfont|˧˦}} 34|| 陰去 ({{IPAfont|˧˥}} 35)<br>陰上 ({{IPAfont|˥}} 55)
|-
!6!!3!!陽去
|{{IPAfont|˨˧}} 23|| 陽舒 ({{IPAfont|˩˧}} 13)
|-
!7!!4!!陰入
|{{IPAfont|˥ʔ}} <u>55</u>||陰入 ({{IPAfont|˥ʔ}} <u>55</u>)
|-
!8!!5!!陽入
|{{IPAfont|˩˨ʔ}} <u>12</u>|| 陽入 ({{IPAfont|˩˧ʔ}} <u>13</u>)
|}
{|class="wikitable" style="text-align:center;"
|-
|声調||陰平||陽平||上聲||陰去||陽去||陰入||陽入||長入
|-
|声調番号||1||2||3||4||5||6||7||8
|-
|調値||˨˦ (24)||˨˩ (21)||˨˩˩ (211)||˧˥ (35)||˧ (33)||˥ (5)||˧ (3)||˥ (55)
|-
|方言大詞典調値||24||21||213||35||33||5||3||55
|}
なお、ここでいう長入とは、入声であるが、白読によって、第6声とみなされないものをいう。
b7sc4bg0pxn6dupg4wlwdw4gggj9ej9
2313440
2313437
2026-08-09T10:30:31Z
Kuroco2k
84207
/* テスト */
2313440
wikitext
text/x-wiki
'''Kuroco2k'''(雛宮黒狐ともいう)といいます。基本中立。議論が下手だから。
==最近思うこと==
#新規項目よりも既存項目の充実が大事であり、それが一段落するまで濫造に走ってはいけない。
==配下ページ==
*[[/二簡字]](未完)
*[[/朝鮮語基本語彙表]](今作ってある分の赤リンクを作り終えたら続編も作る)
==Todo==
#(進行中)漢検範囲内の訓立項
#(進行中)漢字項目のメンテナンス、異体字整理
#(進行中)漢字項目の立項
#(進行中)西夏文字項目の立項
==独り言==
#閩東語、閩北語にある「ṳ」などの文字たち。
#*ソート順に迷います。暫定的にはṳにy、e̤にoeを割り振ってます。将来的に提案できたらと思いますが、まだ実用的な段階に踏めてません。例えば、「[[用]]」の閩東語のソートはこれなら「oeyng6」になります。
#[[Template:kanji variants]]を使用してみたけど、ちょっとこの辺に困るなというところ:
#*Unicode順に整列されてしまうので、意図した並びが崩れてしまう
#*同じ文字を複数入れると反映されない(語義の違いとかで入れることがあるので...)
#シソーラスの名前空間
#*多分現状だと記事にカウントされているので、別の名前空間として扱いたい。
==リンク集(メモ)==
*[https://hongkongvision.com/tool/cc_py_conv_zh 漢字→廣東話/粵語拼音轉換工具]
**広東語のイェール式に変換してくれる。'''zi.toolsは粤拼'''。
*[https://www.wugniu.com/ 吳語學堂]
**いわゆる呉拼というやつ。上海語は下記のでいいですが、方言とかを記述するときにない時が多いので使っている。英語版の標準表記。
*[https://wu-chinese.com/minidict/ 吴音小字典]
**日本語版で、呉語の標準表記に使用される(主に上海語で)。
*[https://www.ydict.net/ 榕典]
**閩東語方言に使っている。
*[[特別:特別ページ一覧]]
**メモ用
*[[利用者:Naggy Nagumo/他言語版にあって日本語版にない項目]]
**タスクリスト
==テスト==
{{id-pr|bahasa}}
==リスト一覧==
{{rel-top|中国語}}
{| class="wikitable" style="text-align: center"
|-
! 声調番号 !! 声調名 !! 白話字(aを例として) !! 声調値(台北) !! 声調値(台南)
|-
| 1 || 陰平 || a || 55 || 44
|-
| 2 (6) || 陰上 || á || 51 || 53
|-
| 3 || 陰去 || à || 31 || 11
|-
| 4 || 陰入 || ap/at/ak/ah || 32 || 21
|-
| 5 || 陽平 || â || 14 || 25
|-
| 7 || 陽去 || ā || 33 || 22
|-
| 8 || 陽入 || a̍p/a̍t/a̍k/a̍h || 4 || 5
|}
{|class=wikitable border=1 style="text-align: left;"
! 声調名
! 白話字(aを例として)
! 声調値(苗栗腔)
! 声調値(新竹腔)
|-
|陰平
|â
|24
|53
|-
|陽平
|à
|11
|55
|-
|上声
|á
|31
|24
|-
|陰去
|a
|rowspan="2"|55
|11
|-
|陽去
|å
|33
|-
|陰入
|ap/at/ak
|2
|5
|-
|陽入
|a̍p/a̍t/a̍k
|5
|2
|-
|}
([[:w:白話字]]より、要所だけ)
{| class="wikitable" style="text-align:center;"
| bgcolor="#ABCDEF" |'''名称'''
| bgcolor="#ABCDEF" |'''声調番号'''
| bgcolor="#ABCDEF" |'''符号'''
| bgcolor="#ABCDEF" |'''例'''
|-
| 上平
| 55
| ◌̆
| 君 '''Gŭng'''
|-
| 上聲
| 33
| ◌̄
| 滾 '''Gūng'''
|-
| 上去
| 213
| ◌́
| 貢 '''Góng'''
|-
| 上入
| <u>24</u>
| ◌́
| 谷 '''Gók'''
|-
| 下平
| 53
| ◌̀
| 群 '''Gùng'''
|-
| 下去
| 242
| ◌̂
| 郡 '''Gông'''
|-
| 下入
| 5
| ◌̆
| 掘 '''Gŭk'''
|}
([[:w:en:Bàng-uâ-cê]]より、要所だけ)
{| class="wikitable"
|+ KCRにおける声調符号
|-
!番号
|1
|2
|3
|4
|5
|6
|7
|-
!声調タイプ
|陰平
|陽平
|上聲
|陰去
|陽去
|陰入
|陽入
|-
!KCRにおける符号
| <span style="font-size:190%;">ˊ</span> ({{lang|mnp|á}})
| <span style="font-size:190%;">ˆ</span> ({{lang|mnp|â}})
| <span style="font-size:190%;">ˇ</span> ({{lang|mnp|ǎ}})
| <span style="font-size:190%;"> ̿</span> ({{lang|mnp|a̿}})
| <span style="font-size:190%;">ˉ</span> ({{lang|mnp|ā}})
| <span style="font-size:190%;">˘</span> ({{lang|mnp|ă}})
| <span style="font-size:190%;">ˋ</span> ({{lang|mnp|à}})
|-
|}
([[:w:en:Kienning Colloquial Romanized]]より、要所だけ)
{{rel-bottom}}
:{| class="wikitable" style="width:80%; text-align:center"
|-
!呉拼!!声調番号 (Wikt)!!声調名!!調値!!方言大詞典調値
|-
!1!!1!!陰平
|{{IPAfont|˥˧}} 53|| 陰平 ({{IPAfont|˥˧}} 53)
|-
!5!!2!!陰去
|{{IPAfont|˧˦}} 34|| 陰去 ({{IPAfont|˧˥}} 35)<br>陰上 ({{IPAfont|˥}} 55)
|-
!6!!3!!陽去
|{{IPAfont|˨˧}} 23|| 陽舒 ({{IPAfont|˩˧}} 13)
|-
!7!!4!!陰入
|{{IPAfont|˥ʔ}} <u>55</u>||陰入 ({{IPAfont|˥ʔ}} <u>55</u>)
|-
!8!!5!!陽入
|{{IPAfont|˩˨ʔ}} <u>12</u>|| 陽入 ({{IPAfont|˩˧ʔ}} <u>13</u>)
|}
{|class="wikitable" style="text-align:center;"
|-
|声調||陰平||陽平||上聲||陰去||陽去||陰入||陽入||長入
|-
|声調番号||1||2||3||4||5||6||7||8
|-
|調値||˨˦ (24)||˨˩ (21)||˨˩˩ (211)||˧˥ (35)||˧ (33)||˥ (5)||˧ (3)||˥ (55)
|-
|方言大詞典調値||24||21||213||35||33||5||3||55
|}
なお、ここでいう長入とは、入声であるが、白読によって、第6声とみなされないものをいう。
cwi8mnn1ujum2ilt61duv2lkbqwnjuu
ばっとう
0
521108
2313265
2084539
2026-08-09T00:06:17Z
鍼灸
112313
2313265
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|はっとう|はつどう}}
=={{ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[抜刀]]】:刀を抜くこと。
*【[[帕頭]]】:頭巾。
mqkv05qhi7m8m3txhgf0d71jpkohvlm
浣肠
0
526370
2313112
2094618
2026-08-08T13:55:08Z
M-30722
1202
2313112
wikitext
text/x-wiki
=={{L|zh}}==
==={{pron}}===
{{cmn-pron|huǎncháng, wǎncháng|z=n}}
==={{noun}}===
{{zh-cat|huan3chang2|noun|医療}}
{{zhchars|t=浣腸}}
#(医療)[[浣腸]]。
gilhgq8qneawjtojrp006r4thwsupqw
モジュール:number list
828
531427
2313402
2105025
2026-08-09T08:10:16Z
Kuroco2k
84207
2313402
Scribunto
text/plain
-- TODO: support <id:...>. currently it does nothing.
local m_links = require("モジュール:links")
local m_str_utils = require("モジュール:string utilities")
local char = string.char
local concat = table.concat
local gsub = m_str_utils.gsub
local insert = table.insert
local list_to_set = require("モジュール:table").listToSet
local sort = table.sort
local u = m_str_utils.char
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local upper = string.upper
local export = {}
--[=[
Terminology:
Number = a bare number; a mathematical entity which has different form types (e.g. cardinal, ordinal)
Form type = a category of the forms that represent a number; examples are cardinal, ordinal, distributive, fractional
Form = a word or expression that represents a number in a given language
Tag = an identifier attached to a form that allows different logical subtypes of forms from the same form type to be
identified; e.g. 'vuitanta-vuit<tag:Central>' vs. 'huitanta-huit<tag:Valencian>' to identify variants of
Catalan cardinal number 88 for different dialectal standards; there can be multiple tags per form, e.g.
'tair ar ddeg<tag:vigesimal><tag:feminine>' for the Welsh number 13 where there are both decimal/vigesimal and
masculine/feminine variants of this number
Tag list = a list of tags in the order they are specified in the data, e.g. {"vigesimal", "feminine"} for the example
above
Combined tag = the string representation of a tag list, using ||| to separate individual tags
]=]
local default_form_types = {
{key = "cardinal", display = "[[基数]]"},
{key = "ordinal", display = "[[序数]]"},
{key = "adverbial", display = "[[副詞]]"},
{key = "multiplier", display = "[[乗数]]"},
{key = "distributive", display = "[[配分数詞]]"},
{key = "collective", display = "[[集合数詞]]"},
{key = "fractional", display = "[[分数]]"},
}
-- Keys in a `numbers` entry that aren't form types.
local non_form_types = {
numeral = true,
wplink = true,
next = true,
prev = true,
next_outer = true,
prev_outer = true,
upper = true,
lower = true,
}
local function track(page)
require("モジュール:debug/track")("number list/" .. page)
return true
end
--[=[
--
-- General set intersection
local function set_intersection(sets)
local intersection = {}
for key, _ in pairs(sets[1]) do
intersection[key] = true
end
for i = 2, #sets do
local this_set = sets[i]
for key, _ in pairs(intersection) do
if not this_set[key] then
-- See https://stackoverflow.com/questions/6167555/how-can-i-safely-iterate-a-lua-table-while-keys-are-being-removed
-- It is safe to modify or remove a key while iterating over the table.
intersection[key] = nil
end
end
end
return intersection
end
]=]
local function set_intersection(set1, set2)
local intersection = {}
for key, _ in pairs(set1) do
intersection[key] = true
end
for key, _ in pairs(intersection) do
if not set2[key] then
-- See https://stackoverflow.com/questions/6167555/how-can-i-safely-iterate-a-lua-table-while-keys-are-being-removed
-- It is safe to modify or remove a key while iterating over the table.
intersection[key] = nil
end
end
return intersection
end
function export.get_data_module_name(langcode)
return "モジュール:number list/data/" .. langcode
end
-- Format a number (either a Lua number or a string) in fixed point without any decimal point or scientific notation.
-- `tostring()` doesn't work because it converts large numbers such as 1000000000000000 to "1e+15".
function export.format_fixed(number)
if type(number) == "string" then
return number
else
return ("%.0f"):format(number)
end
end
-- Parse a form with modifiers such as 'vuitanta-vuit<tag:Central>' or 'سیزده<tr:sizdah>'
-- or 'سیزده<tr:sizdah><tag:Iranian>' into its component parts. Return a form object, i.e. an object with fields
-- `form` for the form, and `tr`, `tag`, `q`, `qq` or `link` for the modifiers. The `tag` field is a tag list
-- (see above).
function export.parse_form_and_modifiers(form_with_modifiers)
local retval = {}
local form
form = form_with_modifiers
while true do
local new_form, angle_bracketed = form:match("^(.-)(%b<>)$")
if not new_form then
break
end
local prefix, content = angle_bracketed:match "^<(%w+):(.+)>$"
if not prefix then
break
end
if prefix == "tag" then
if retval.tag then
insert(retval.tag, content)
else
retval.tag = {content}
end
elseif prefix == "q" or prefix == "qq" or prefix == "tr" or prefix == "link" or prefix == "id" then
if retval[prefix] then
error(("Duplicate modifier '%s' in data module form, already saw value '%s': %s"):format(prefix,
retval[prefix], form_with_modifiers))
else
retval[prefix] = content
end
else
error(("Unrecognized modifier '%s' in data module form: %s"):format(prefix, form_with_modifiers))
end
form = new_form
end
retval.form = form
return retval
end
-- Find the `numbers` object for a given number (which should be in string representation).
function export.lookup_data(m_data, numstr)
-- Don't try to convert very large numbers to Lua numbers because they may overflow.
-- Powers of 10 >= 10^22 cannot be represented exactly as a Lua number.
return m_data.numbers[numstr] or #numstr < 22 and m_data.numbers[tonumber(numstr)] or nil
end
-- Return true if a < b, where either may be a Lua number or the string representation of a number.
function export.numbers_less_than(a, b)
a, b = export.format_fixed(a), export.format_fixed(b)
local alen = #a
local blen = #b
if alen < blen then
return true
end
if alen > blen then
return false
end
return a < b
end
-- Return true if a > b, where either may be a Lua number or the string representation of a number.
function export.numbers_greater_than(a, b)
return export.numbers_less_than(b, a)
end
-- Given a number form, convert it to its independent (un-affixed) form. This only makes sense for certain languages
-- where there is a difference between independent and affixed forms of numerals. Currently the only such language
-- is Swahili, where e.g. the cardinal number form for 3 is affixed [[-tatu]], independent [[tatu]], and the ordinal
-- number form is [[-a tatu]], independent [[tatu]]. We rely on a set of Lua pattern substitutions to convert from
-- affixed to independent form.
--
-- FIXME: This needs major rethinking in a way that isn't specific to Swahili.
local function maybe_unaffix(m_data, form)
if not m_data.unaffix then
return form
end
for _, entry in ipairs(m_data.unaffix) do
local from, to = unpack(entry)
form = gsub(form, from, to)
end
return form
end
-- Convert the given number form (taken from the data for `lang`, after parsing the form for modifiers and stripping
-- the modifiers) to an entry name. The form may have links and/or accent/length marks that need to be stripped.
local function form_to_entry_name(form, lang)
return (lang:makeEntryName(m_links.remove_links(form)))
end
-- Return true if the given number form object (taken from the data for `lang`, after parsing the form for modifiers)
-- matches `pagename`. If there is a <link:...> modifier, we check against it. Otherwise, we check against the form
-- itself. In this case, the form may have links and/or accent/length marks that need to be stripped, and we may need
-- to convert the form to its independent (un-affixed) form, if there is a difference between independent and affixed
-- forms (as in Swahili).
local function form_equals_pagename(formobj, pagename, m_data, lang)
if formobj.link == pagename then
return true
end
local entry_name = form_to_entry_name(formobj.form, lang)
return entry_name == pagename or maybe_unaffix(m_data, entry_name) == pagename
end
-- Given the data for a language and a number (which should be in string representation), find the next and previous
-- numbers to display (in string representation).
local function get_next_and_prev_keys(m_data, numstr)
local numdata = export.lookup_data(m_data, numstr)
if not numdata then
return nil, nil
end
local nextnum = numdata.next
local prevnum = numdata.prev
if not nextnum or not prevnum then
-- Find the next/previous numbers by sorting all the keys and locating the number in question among them.
local sorted_list = {}
local index = 1
for key, _ in pairs(m_data.numbers) do
sorted_list[index] = key
index = index + 1
end
sort(sorted_list, export.numbers_less_than)
-- We could binary search to save time, but given that we already sort, which is supra-linear, it won't
-- matter to search linearly.
for i, key in ipairs(sorted_list) do
if export.format_fixed(key) == numstr then
nextnum = nextnum or sorted_list[i + 1]
prevnum = prevnum or sorted_list[i - 1]
break
end
end
end
if nextnum then
nextnum = export.format_fixed(nextnum)
end
if prevnum then
prevnum = export.format_fixed(prevnum)
end
return nextnum, prevnum
end
-- Find the "description objects" (a two-element list {NUMBER, TYPE}, where NUMBER is either a Lua number or a string,
-- depending on how it appears in the underlying data) that matches `pagename` and (if given) `matching_type`.
-- Return a list of such objects.
local function lookup_number_by_form(lang, m_data, pagename, matching_type)
local retval = {}
local function check_form(form, num, typ)
local formobj = export.parse_form_and_modifiers(form)
if form_equals_pagename(formobj, pagename, m_data, lang) and (not matching_type or typ == matching_type) then
-- It's possible the same pagename occurs multiply for a given type and number, e.g. with different length
-- or accent marks. The calling code is OK with multiple entries for a given number (which can also occur
-- with different types, e.g. the ordinal and fractional forms for a given number are the same), but will
-- throw an error if different numbers are seen.
insert(retval, {num, typ})
end
end
for num, numdata in pairs(m_data.numbers) do
for numtype, forms in pairs(numdata) do
if non_form_types[numtype] then
-- do nothing
elseif type(forms) == "table" then
for _, form in ipairs(forms) do
check_form(form, num, numtype)
end
else
check_form(forms, num, numtype)
end
end
end
return retval
end
-- additional_types is an array of tables like form_types,
-- but each table can contain the keys "before" or "after", which specify
-- the numeral type that the form should appear before or after.
-- The transformations are applied in order.
local function add_form_types(form_types, additional_types)
local types = require("モジュール:table").deepcopy(form_types)
for _, additional_type in ipairs(additional_types) do
if not (additional_type.before or additional_type.after) then
insert(types, additional_type)
else
if additional_type.before and additional_type.after then
error("The form type '" .. additional_type.key .. "' is specifying both before and after, which is not allowed")
end
local anchor, index = additional_type.before or additional_type.after
for i, another_type in ipairs(types) do
if another_type.key == anchor then
index = i
break
end
end
if index and additional_type.after then
index = index + 1
end
additional_type = require("モジュール:table").shallowCopy(additional_type)
additional_type.before, additional_type.after = nil, nil
if not index then
mw.log("Number type "
.. (additional_type.before or additional_type.after)
.. " was not found.")
insert(types, additional_type)
else
insert(types, index, additional_type)
end
end
end
return types
end
-- Return all form types for the language in question, in order.
function export.get_number_types(m_data)
local form_types = default_form_types
if m_data.additional_number_types then
return add_form_types(form_types, m_data.additional_number_types)
else
return form_types
end
end
-- Convert a number type object (an object with `display` and `key` fields) to its displayed form.
function export.display_number_type(number_type)
if number_type.display then
return number_type.display
else
return (number_type.key:gsub("^.", upper):gsub("_", " "))
end
end
-- Group digits with a separator, such as a comma or a period. See [[w:Digit grouping]].
local function add_separator(numstr, separator, group, start)
start = start or group
if start >= #numstr then
return numstr
end
local parts = { numstr:sub(-start) }
for i = start + 1, #numstr, group do
insert(parts, 1, numstr:sub(-(i + group - 1), -i))
end
return concat(parts, separator)
end
function export.add_thousands_separator(numstr, separator)
if #numstr < 4 then -- < 1000
return numstr
end
return add_separator(numstr, separator or ",", 3)
end
local function add_Indic_separator(numstr, separator)
return add_separator(numstr, separator, 2, 3)
end
-- Convert a number (represented as a string) to non-Arabic form based on the specs in `numeral_config`.
-- This is used, for example, to display the Hindu, Eastern Arabic or Roman form of a number along with the standard
-- Arabic form. Most of the code below assumes that the non-Arabic numerals are decimal, and the digits map one-to-one
-- with Arabic numerals. If this is not the case (e.g. for Roman numerals), a special module function is called to do
-- the conversion.
function export.generate_non_arabic_numeral(numeral_config, numstr)
-- `numstr` is a number represented as a string. See comment near top of show_box().
if numeral_config.module and numeral_config.func then
return require("モジュール:" .. numeral_config.module)[numeral_config.func](numstr)
end
local thousands_separator, Indic_separator, zero_codepoint =
numeral_config.thousands_separator,
numeral_config.Indic_separator,
numeral_config.zero_codepoint
if not zero_codepoint then
return nil
end
if thousands_separator then
numstr = export.add_thousands_separator(numstr, thousands_separator)
elseif Indic_separator then
numstr = add_Indic_separator(numstr, Indic_separator)
end
return numstr:gsub("%d", function (digit)
return u(zero_codepoint + tonumber(digit))
end)
end
-- Format a number (either a Lua number or a string) for display. Sufficiently small numbers are displayed in fixed
-- point with thousands separators. Larger numbers are displayed in both fixed point and scientific notation using
-- superscripts, and sufficiently large numbers are displayed only in scientific notation.
function export.format_number_for_display(number)
local MAX_NUM_DIGITS_FOR_FIXED_ONLY = 6
local MIN_NUM_DIGITS_FOR_SCIENTIFIC_ONLY = 13
local numstr = export.format_fixed(number)
local fixed = export.add_thousands_separator(numstr)
if #numstr <= MAX_NUM_DIGITS_FOR_FIXED_ONLY then
return fixed
end
local kstr = numstr:match("^([0-9]*[1-9])0*$")
if not kstr then
error("内部エラー: Unable to match number '" .. numstr .. "'")
end
local exponent = ("10<sup>%s</sup>"):format(#numstr - 1)
local mantissa
if kstr == "1" then
mantissa = ""
elseif #kstr == 1 then
mantissa = kstr .. " × "
else
mantissa = kstr:gsub("^([0-9])", "%1.") .. " × "
end
local scientific = mantissa .. exponent
if #numstr >= MIN_NUM_DIGITS_FOR_SCIENTIFIC_ONLY then
return scientific
else
return fixed .. " (" .. scientific .. ")"
end
end
-- Map a list of tags to a single string that is equivalent. We need to do this because we can't easily put lists in the
-- keys of tables.
local function tag_list_to_combined_tag(tag_list)
return concat(tag_list, "|||")
end
-- Given a list of forms with attached inline modifiers (e.g. 'huitanta-huit<tag:Valencian>' or
-- 'tair ar ddeg<tag:vigesimal><tag:feminine>'), parse the forms into form objects (the return value of
-- parse_form_and_modifiers()) and group by the tag. Three values are returned:
-- `seen_forms`, `forms_by_tag`, `seen_tags` where:
-- (1) `seen_forms` is the list of parsed form objects;
-- (2) `forms_by_tag` is a table grouping the form objects by combined tag, where the key is the tag and the value is
-- a list of the form objects seen with that tag (forms without tag are grouped under the empty-string tag);
-- (3) `seen_tags` is a list of the combined tags encountered, in the order they were encountered;
-- (4) `combined_tags_to_tag_lists` is a map from combined tags to the corresponding tag lists.
function export.group_numeral_forms_by_tag(forms)
local seen_forms = {}
local forms_by_tag = {}
local seen_tags = {}
local combined_tags_to_tag_lists = {}
for _, form in ipairs(forms) do
local formobj = export.parse_form_and_modifiers(form)
insert(seen_forms, formobj)
local combined_tag = formobj.tag and tag_list_to_combined_tag(formobj.tag) or ""
if not forms_by_tag[combined_tag] then
insert(seen_tags, combined_tag)
forms_by_tag[combined_tag] = {}
combined_tags_to_tag_lists[combined_tag] = formobj.tag or {}
end
insert(forms_by_tag[combined_tag], formobj)
end
return seen_forms, forms_by_tag, seen_tags, combined_tags_to_tag_lists
end
-- Given a form object (as returned by parse_form_and_modifiers()), format as appropriate for the current language.
function export.format_formobj(formobj, m_data, lang)
local left_q = formobj.q and require("モジュール:qualifier").format_qualifier(formobj.q) .. " " or ""
local right_q = formobj.qq and " " .. require("モジュール:qualifier").format_qualifier(formobj.qq) or ""
local term = maybe_unaffix(m_data, formobj.form)
local alt = nil
if term ~= formobj.form then alt = formobj.form end
return left_q .. m_links.full_link{
lang = lang, term = term, alt = alt, tr = formobj.tr,
} .. right_q
end
-- Implementation of {{number box}}.
function export.show_box(frame)
local full_link = m_links.full_link
local params = {
[1] = {required = true},
[2] = {},
["pagename"] = {},
["type"] = {},
}
local parent_args = frame:getParent().args
if parent_args.pagename then
track("show-box-pagename")
end
local args = require("Module:parameters").process(parent_args, params)
local langcode = args[1] or "und"
local lang = require("Module:languages").getByCode(langcode, 1)
-- Get the data from the data module. Some modules (e.g. currently [[モジュール:number list/data/ka]]) have to be
-- loaded with require() because the exported numbers table has a metatable.
local module_name = export.get_data_module_name(langcode)
local m_data = require(module_name)
local pagename = args.pagename or (mw.title.getCurrentTitle().nsText == "付録" and "*" or "") .. mw.title.getCurrentTitle().subpageText
-- Resolve any risky characters which makeEntryName will escape, so that any matches involving them work correctly.
pagename = (lang:makeEntryName(pagename))
local cur_type = args.type
-- We represent all numbers as strings in this function to deal with the limited precision inherent in Lua numbers.
-- These large numbers do occur, such as 100 trillion ([[རབ་བཀྲམ་ཆེན་པོ]]), 1 sextillion, etc. Lua represents all
-- numbers as 64-bit floats, meaning that some numbers above 2^53 cannot be represented exactly. The first power of
-- 10 that cannot be represented exactly is 10^22 (ten sextillion in short scale, ten thousand trillion in long
-- scale), but the first power of ten whose neighboring numbers cannot be represented exactly is 10^16 (ten
-- quadrillion or ten thousand billion). Ideally we would use a big integer library of some kind, but unfortunately
-- Wiktionary does not seem to have any such library installed. MediaWiki docs make mention of bcmath, but
-- mw.bcmath.new() throws an error.
--
-- In module data, we allow numbers to be indexed as Lua numbers or as strings. See lookup_data() above.
local cur_num = args[2] or langcode == "und" and mw.title.getCurrentTitle().nsText == "Template" and "2" or nil
-- If a current number wasn't specified, find it by looking through the data for the current language and matching
-- forms against the pagename.
if not cur_num then
local nums_and_types = lookup_number_by_form(lang, m_data, pagename, cur_type)
if #nums_and_types == 0 then
error("現在のページ名'" .. pagename .. "'が一致しません。モジュールまたはページ名の綴りを確認してください。")
end
for _, num_and_type in ipairs(nums_and_types) do
local num = num_and_type[1]
num = export.format_fixed(num)
if cur_num and num ~= cur_num then
local errparts = {}
for _, num_and_type in ipairs(nums_and_types) do
local num, typ = unpack(num_and_type)
insert(errparts, ("%s (%s)"):format(num, typ))
end
error("現在のページ名'" .. pagename .. "'がmatches the spelling of 倍数 in [[" ..
module_name .. "]]: " .. concat(errparts, ",") .. "。正しい数字を指定してください。")
else
cur_num = num
end
end
end
cur_num = cur_num:gsub(",", "") -- remove thousands separators
if not cur_num:find("^%d+$") then
error("Extraneous characters in parameter 2: should be decimal number (integer): '" .. cur_num .. "'")
end
-- Wrapper around `export.lookup_data` that may throw an error if the number can't be found (specifically if
-- param_for_error is given).
local function lookup_data(numstr, param_for_error)
local retval = export.lookup_data(m_data, numstr)
if not retval and param_for_error then
error(('The %s number "%s" specified in the "numbers" table entry for "%s" cannot be found in '
.. "[[%s]]; please fix the module."):format(param_for_error, numstr, cur_num, module_name))
end
return retval
end
local cur_data = lookup_data(cur_num)
if not cur_data then
error('The number "' .. cur_num .. '" is not found in the "numbers" table in [[' .. module_name .. "]].")
end
local formatted_forms = {}
if cur_type and not cur_data[cur_type] then
error("The numeral type " .. cur_type .. " for " .. cur_num .. " is not found in [[" .. module_name .. "]].")
end
-- See above for the definition of "combined tag" and "tag list". The combined tag is just the concatenation of the
-- tag list with ||| between the tags.
local cur_tag_list, cur_combined_tag
local form_types = export.get_number_types(m_data)
-- LONG COMMENT EXPLAINING TAG HANDLING:
--
-- For each form type (see `form_types` at top of file), group the entries for that form type by tag and figure out
-- what the current form type and tag is, i.e. the form type and tag for the form matching the pagename. Tags are
-- e.g. as in 'vuitanta-vuit<tag:Central>' or 'huitanta-huit<tag:Valencian>' for Catalan and allow different
-- logical sets of numbers for the same form type to be identified. There can potentially be multiple tags per
-- form, e.g. 'tair ar ddeg<tag:vigesimal><tag:feminine>' for the Welsh number 13 where there are both decimal/
-- vigesimal and masculine/feminine variants of this number.
--
-- We need to do two passes over all form types. In the first pass, for each form type we parse all the forms,
-- group them by tag, and store the results in a per-form-type table. In the second pass, we then format all forms
-- for all form types. The reason for doing two passes is because we need to know the current tag in order to
-- display a form type correctly (because we display the forms for the current tag before the forms for any other
-- tags), but we won't know the current tag until we have done a pass over all form types and forms of those form
-- types in order to determine which one matches the pagename.
--
-- We use the current tag in two ways:
-- 1. When displaying all the forms for a given number, we group both by form type and tag, and display the forms
-- for a given form type/tag combination on a single line. For a given form type, we display the forms for each
-- tag in the order the tags were specified in the data, except that the forms for the current tag are placed
-- before all others (so e.g. for Catalan, if the current tag is "Valencian", we list the Valencian form(s)
-- first even if the Central form(s) are listed first in the data file).
-- 2. When displaying links to adjacent numbers in display_adjacent_number_links(), if there aren't form(s) for the
-- current type, we don't display any links; but if there are mutiple tagged forms for the current type, we only
-- display links for the forms for the current tag if there are any such forms, otherwise we display links for
-- all forms of all tags.
--
-- In the presence of multiple tags, things get a bit more complicated:
-- 1. When displaying links to adjacent numbers, say the current tag is vigesimal+feminine, we want to prefer an
-- adjacent-number form that's both vigesimal and feminine, but otherwise we prefer one that's vigesimal or
-- feminine over one that's neither. Say the current tag is just vigesimal; we of course prefer an
-- adjacent-number form that's just vigesimal, but otherwise we prefer a tag that's vigesimal + either masculine
-- or feminine to a tag that's not vigesimal. So it seems we want the form(s) that have the maximum intersection
-- of tags, and if there are two different tag lists with the same number of intersecting tags (e.g. the current
-- tag is vigesimal+feminine and we have a choice of decimal+feminine or just vigesimal), we should prefer the
-- form that has fewer non-matching tags, hence we prefer the just-vigesimal form.
-- 2. By the same logic, when displaying all the forms for a given number, we should order by the size of the
-- intersection of the tag list in question with the current tag list, then inversely by the size of the tag list
-- (so we prefer tag lists with fewer non-matching tags), then by the order of the tag lists in the data file.
local forms_by_tag_per_form_type = {}
local seen_tags_per_form_type = {}
local combined_tags_to_tag_lists_per_form_type = {}
for _, form_type in ipairs(form_types) do
local numeral = cur_data[form_type.key]
if numeral then
local seen_forms, forms_by_tag, seen_tags, combined_tags_to_tag_lists = export.group_numeral_forms_by_tag(
type(numeral) == "table" and numeral or {numeral}
)
forms_by_tag_per_form_type[form_type] = forms_by_tag
seen_tags_per_form_type[form_type] = seen_tags
combined_tags_to_tag_lists_per_form_type[form_type] = combined_tags_to_tag_lists
for _, formobj in ipairs(seen_forms) do
if not cur_tag_list and form_equals_pagename(formobj, pagename, m_data, lang) then
cur_tag_list = formobj.tag or {}
cur_combined_tag = tag_list_to_combined_tag(cur_tag_list)
cur_type = cur_type or form_type.key
end
end
end
end
-- Error if we couldn't locate the pagename among the forms for the current number. This only happens if the
-- number if given explicitly in 2=.
if not cur_type and mw.title.getCurrentTitle().nsText ~= "テンプレート" then
error("現在のページ名'" .. pagename .. "'が一致しません。モジュールまたはページ名の綴りを確認してください。")
end
-- Now, format all the forms for all form types for the current number.
local function sort_combined_tags(combined_tags, seen_tags, combined_tags_to_tag_lists)
-- cur_tag_list should normally never be nil, but can be so in template space
local cur_tag_set = list_to_set(cur_tag_list or {})
local tags_to_order = {}
for i, tag in ipairs(seen_tags) do
tags_to_order[tag] = i
end
local function compare_tags(tag1, tag2)
-- See long comment above.
-- First compare by number of tags in common with the current tag list.
local tag_list1 = combined_tags_to_tag_lists[tag1]
local tag_list2 = combined_tags_to_tag_lists[tag2]
local common1 = set_intersection(cur_tag_set, list_to_set(tag_list1))
local common2 = set_intersection(cur_tag_set, list_to_set(tag_list2))
if #common1 ~= #common2 then
return #common1 < #common2
end
-- Then compare inversely by number of tags not in common with the current tag list (which is equivalent to
-- comparing by total number of tags, since tags should be distinct).
if #tag_list1 ~= #tag_list2 then
return #tag_list1 > #tag_list2
end
-- Finally, compare by the original ordering in the number data, but if a tag is the same as the current
-- tag, put it first, and if somehow we encounter a tag that's not in the original ordering, put it last.
local index1 = tag1 == cur_combined_tag and 0 or tags_to_order[tag1] or #seen_tags + 1
local index2 = tag2 == cur_combined_tag and 0 or tags_to_order[tag2] or #seen_tags + 1
return index1 < index2
end
sort(combined_tags, compare_tags)
end
for _, form_type in ipairs(form_types) do
local forms_by_tag = forms_by_tag_per_form_type[form_type]
local seen_tags = seen_tags_per_form_type[form_type]
local combined_tags_to_tag_lists = combined_tags_to_tag_lists_per_form_type[form_type]
if forms_by_tag then
local function insert_forms_by_tag(tag)
local formatted_tag_forms = {}
local pagename_among_forms = false
for _, formobj in ipairs(forms_by_tag[tag]) do
insert(formatted_tag_forms, export.format_formobj(formobj, m_data, lang))
if form_equals_pagename(formobj, pagename, m_data, lang) then
pagename_among_forms = true
end
end
if tag ~= "" then
local tag_list = combined_tags_to_tag_lists[tag]
tag = concat(tag_list, " / ")
end
local displayed_number_type = export.display_number_type(form_type) .. (tag == "" and "" or (" (%s)"):format(tag))
if pagename_among_forms then
displayed_number_type = "'''" .. displayed_number_type .. "'''"
end
insert(formatted_forms, " " .. displayed_number_type .. ": " ..
concat(formatted_tag_forms, ", "))
end
sort_combined_tags(seen_tags, seen_tags, combined_tags_to_tag_lists)
for _, tag in ipairs(seen_tags) do
insert_forms_by_tag(tag)
end
end
end
-- Current number in header
local cur_display = export.format_number_for_display(cur_num)
local numeral
if m_data.numeral_config then
numeral = export.generate_non_arabic_numeral(m_data.numeral_config, cur_num)
elseif cur_data["numeral"] then
numeral = export.format_fixed(cur_data["numeral"])
end
if numeral then
cur_display = full_link{lang = lang, alt = numeral, tr = "-"} .. "<br/><span style=\"font-size: smaller;\">" .. cur_display .. "</span>"
end
--------------------- Determine next/prev, next/prev outer, and upper/lower numbers. ----------------------
-- We have three series of numbers to determine:
--
-- 1. The next/previous numbers, which are always those in the sorted series of available numbers unless overridden
-- by `next`/`prev` specs in an individual number.
-- 2. The next/previous outer numbers, which are displayed to the outside of the next/previous numbers. These can
-- be overridden for an individual number using `next_outer`/`prev_outer`. Otherwise, we try according to an
-- algorithm described below in the code for computing the outer numbers.
-- 3. The upper/lower numbers, which are displayed above or below the central number box. These can be overridden
-- for an individual number using `upper`/`lower`. These are always 10x greater or less than the number in
-- question, number not considering a number if it's the same as the next/previous number.
local next_num, prev_num = get_next_and_prev_keys(m_data, cur_num)
local next_data = next_num and lookup_data(next_num, "next")
local prev_data = prev_num and lookup_data(prev_num, "previous")
--------- Decompose number into mantissa (k) and exponent (m). ----------
local k, m
if cur_num == "0" then
k = 0
m = 1
else
local kstr, mstr = cur_num:match("^([0-9]*[1-9])(0*)$")
if not kstr then
error("内部エラー: Unable to match number '" .. cur_num .. "'")
elseif #kstr > 15 then
-- This is because some numbers with 16 or more digits can't be represented exactly.
error("Can't handle 数字 with more than 15桁 before the trailing zeros: '" .. cur_num .. "'")
end
k = tonumber(kstr)
m = #mstr
end
-- Find the next greater power of 10 for cur_num, up to 10^6. `try` should look up the data for a power of 10
-- and return it if it's available and the number passes any checks, otherwise nil.
local function make_greater_power_of_ten(power)
return cur_num .. ("0"):rep(power)
end
-- Find the next lesser power of 10 for cur_num, up to 10^6. `try` should look up the data for a power of 10
-- and return it if it's available and the number passes any checks, otherwise nil.
local function make_lesser_power_of_ten(power)
local desired_zeros = m - power
if desired_zeros < 0 then
return nil
end
return k .. ("0"):rep(desired_zeros)
end
local next_outer_data, prev_outer_data
local next_outer_num, prev_outer_num = cur_data.next_outer, cur_data.prev_outer
-- When trying to find then next/previous outer numbers, first, if the base-10 mantissa is not 1 or 0, we add 1 to
-- or subtract 1 from the mantissa, keeping the same number of zeros. Hence, for 300, we try 400 for the next outer,
-- 200 for the previous outer. For 900, we try 1000 for the next outer and 800 for the previous outer. If the
-- mantissa is 1, the next outer is computed the same but for the previous outer we use 9 followed by one fewer
-- zero. Hence, for 100 we try 200 for the next outer but 90 for the previous outer. If the mantissa is 0 (i.e. the
-- entire number is 0), we try 10 for the next outer, and have no previous outer.
--
-- Next, if the number is an even power of 10, we try 10x, 1000x greater, 100x greater and 1,000,000x greater, in
-- that sequence. Essentially, first we try the next power of 10; then we try the next short-scale number (billion,
-- trillion, etc. where large numbers follow a 10^3 sequence); then we try the next long-scale number (where large
-- numbers follow a 10^6 sequence); then we try the next Indic-scale number (where large numbers follow a 10^2
-- sequence: lakh, crore, arab, ...). We don't just try powers of 10 in order because then if e.g. we have entries
-- for one million, ten million, one hundred million and one billion, and the current number is one million, the
-- next number will be ten million and the next outer number one hundred million, when it would be cleaner to have
-- one billion as the outer number (and in many cases, there is no Wiktionary entry for one hundred million).
--
-- For the previous outer number, we do an analogous algorithm but make sure we don't try numbers less than 1.
local power_of_10_sequence = { 1, 3, 2, 6 }
--------- Determine next outer number. ----------
if next_outer_num then
next_outer_data = lookup_data(next_outer_num, "next outer")
else
local function try(num)
local data = (not next_num or export.numbers_greater_than(num, next_num)) and lookup_data(num) or nil
if data then
next_outer_num = num
next_outer_data = data
end
return data
end
if not try((k + 1) .. ("0"):rep(m)) and k == 1 then
-- Try looking up a greater power of ten instead.
for _, power_of_10 in ipairs(power_of_10_sequence) do
if try(make_greater_power_of_ten(power_of_10)) then
break
end
end
end
end
--------- Determine previous outer number. ----------
if prev_outer_num then
prev_outer_data = lookup_data(prev_outer_num, "previous outer")
else
local function try(num)
local data = (not prev_num or export.numbers_less_than(num, prev_num)) and lookup_data(num) or nil
if data then
prev_outer_num = num
prev_outer_data = data
end
return data
end
if k == 0 or m == 0 then
-- less than 10; no previous outer num
else
local num_to_try
if k == 1 then
num_to_try = "9" .. ("0"):rep(m - 1)
else
num_to_try = (k - 1) .. ("0"):rep(m)
end
if not try(num_to_try) and k == 1 then
-- Try looking up a smaller power of ten instead.
for _, power_of_10 in ipairs(power_of_10_sequence) do
local num_to_try = make_lesser_power_of_ten(power_of_10)
if num_to_try and try(num_to_try) then
break
end
end
end
end
end
local upper_data, lower_data
local upper_num, lower_num = cur_data.upper, cur_data.lower
--------- Determine upper number. ----------
if upper_num then
upper_data = lookup_data(upper_num, "upper")
else
-- Try looking up the next power of ten.
upper_num = make_greater_power_of_ten(1)
if upper_num == next_num or cur_num == "0" then
upper_num = nil
else
upper_data = lookup_data(upper_num)
end
end
--------- Determine lower number. ----------
if lower_num then
lower_data = lookup_data(lower_num, "lower")
elseif k == 0 or m == 0 then
-- less than 10; no lower num
else
-- Try looking up the previous power or 10.
lower_num = make_lesser_power_of_ten(1)
if lower_num == prev_num then
lower_num = nil
else
lower_data = lookup_data(lower_num)
end
end
-- For a number `num` (an "adjacent" number to the current number, i.e. either next, previous, next/previous outer,
-- or upper/lower) with corresponding entry data `num_data`, display link(s) to the form(s) for this number that
-- are associated with the current type and tag. If there is a single form to be linked to, the form is linked
-- using the number itself as the display text; otherwise, the multiple forms are linked with superscripted [a],
-- [b], etc. and the number it displayed adjacent to the links. In either case, beside the number there may be an
-- arrow. If `arrow` == "rarrow", the format is like this:
-- if multiple entries:
-- <numeral> → <sup>[a], [b], ...</sup>
-- else
-- <numeral> →
-- If `arrow` == "larrow", the format is like this:
-- if multiple entries:
-- <sup>[a], [b], ...</sup> ← <numeral>
-- else
-- ← <numeral>
-- Otherwise, the format is like this:
-- if multiple entries:
-- <numeral><sup>[a], [b], ...</sup>
-- else
-- <numeral>
--
-- Returns nil if `num_data` is nil or there is no entry in `num_data` for the current number type.
--
-- For the handling of tags in this function, see the "LONG COMMENT EXPLAINING TAG HANDLING" above.
local function display_adjacent_number_links(num, num_data, arrow)
if not num_data then
return nil
end
local forms = num_data[cur_type]
if not forms then
return nil
elseif type(forms) ~= "table" then
forms = {forms}
end
local seen_forms, forms_by_tag = export.group_numeral_forms_by_tag(forms)
-- FIXME: `cur_tag` is not defined. This seems to have been missed when multiple tag handling was added in [[特別:Diff/68978046]].
local forms_to_display
if cur_tag and forms_by_tag[cur_tag] then
forms_to_display = forms_by_tag[cur_tag]
else
forms_to_display = seen_forms
end
for i, form_to_display in ipairs(forms_to_display) do
forms_to_display[i] = form_to_display.link or maybe_unaffix(m_data,
form_to_entry_name(form_to_display.form, lang))
end
local seen_pagenames = {}
local pagenames_to_display = {}
for _, form in ipairs(forms_to_display) do
if not seen_pagenames[form] then
insert(pagenames_to_display, form)
seen_pagenames[form] = true
end
end
if #pagenames_to_display == 0 then
return nil
end
num = export.format_number_for_display(num)
local num_arrow =
arrow == "rarrow" and num .. " → " or
arrow == "larrow" and " ← " .. num or
num
if #pagenames_to_display > 1 then
local a = ("a"):byte()
local links = {}
for i, term in ipairs(pagenames_to_display) do
links[i] = m_links.language_link{lang = lang, term = term, alt = "[" .. char(a + i - 1) .. "]"}
end
links = "<sup>" .. concat(links, ", ") .. "</sup>"
return arrow == "larrow" and links .. num_arrow or num_arrow .. links
else
return m_links.language_link {
lang = lang,
term = pagenames_to_display[1],
alt = num_arrow,
}
end
end
-- Display links to previous/next numbers
local prev_display = display_adjacent_number_links(prev_num, prev_data, "larrow") or ""
local next_display = display_adjacent_number_links(next_num, next_data, "rarrow") or ""
-- Display links to previous/next outer numbers
local prev_outer_display = display_adjacent_number_links(prev_outer_num, prev_outer_data, "larrow")
local next_outer_display = display_adjacent_number_links(next_outer_num, next_outer_data, "rarrow")
-- Display links to upper/lower numbers
local upper_display = display_adjacent_number_links(upper_num, upper_data)
local lower_display = display_adjacent_number_links(lower_num, lower_data)
local canonical_name = lang:getCanonicalName()
local appendix1 = canonical_name .. " 数詞"
local appendix2 = canonical_name .. " 数詞"
local appendix
local title
if mw.title.new(appendix1, "付録"):getContent() then
appendix = appendix1
elseif mw.title.new(appendix2, "付録"):getContent() then
appendix = appendix2
end
if appendix then
title = "[[付録:" .. appendix .. "|" .. appendix2 .. "]]"
else
title = appendix2
end
local function format_cell(contents, class_name, colspan, bold)
class_name = class_name and (" " .. class_name) or ""
colspan = colspan and ('colspan="%s" '):format(colspan) or ""
bold = bold and "!" or "|"
return ('%s %sclass="table-cell %s | %s\n'):format(bold, colspan, class_name, contents)
end
local has_outer_display = not not (prev_outer_display or next_outer_display)
local function format_upper_lower_display_row(display)
local blank_cell
if has_outer_display then
blank_cell = '| colspan="2" |\n'
else
blank_cell = "|\n"
end
local parts = {'|- class="adjacent-panel"\n'}
insert(parts, blank_cell)
insert(parts, format_cell(display, "adjacent-number"))
insert(parts, blank_cell)
return concat(parts)
end
upper_display = upper_display and format_upper_lower_display_row(upper_display) or ""
lower_display = lower_display and format_upper_lower_display_row(lower_display) or ""
local function format_display_cell(display)
return format_cell(display, "adjacent-number")
end
prev_display = format_display_cell(prev_display)
next_display = format_display_cell(next_display)
prev_outer_display = has_outer_display and format_display_cell(prev_outer_display or "") or ""
next_outer_display = has_outer_display and format_display_cell(next_outer_display or "") or ""
cur_display = format_cell(cur_display, "current-number", nil, "bold")
local forms_display = ('| colspan="%s" style="text-align: center;" | %s\n'):format(
has_outer_display and 5 or 3, concat(formatted_forms, "<br/>"))
local footer_display
if cur_data.wplink then
local footer =
"[[w:" .. lang:getCode() .. ":|" .. lang:getCanonicalName() .. "版ウィキペディア]]" ..
m_links.full_link{lang = lang, term = "w:" .. lang:getCode() .. ":" .. cur_data.wplink,
alt = export.format_number_for_display(cur_num)}
footer_display = '|- style="text-align: center;"\n' .. format_cell(footer, "footer-cell", has_outer_display and 5 or 3)
else
footer_display = ""
end
local edit_link = ' <sup>(<span class="plainlinks">[' ..
tostring(mw.uri.fullUrl(module_name, { action = "edit" })) ..
" 編集]</span>)</sup>"
return [=[{| class="floatright number-box" cellpadding="5" cellspacing="0" style="background: var(--wikt-palette-white, #ffffff); color: inherit; border: 1px #aaa solid; border-collapse: collapse; margin-top: .5em;" rules="all"
|+ ''']=] .. title .. edit_link .. "'''\n" ..
upper_display .. '|- style="text-align: center;"\n' ..
prev_outer_display .. prev_display .. cur_display .. next_display .. next_outer_display .. "|-\n" ..
lower_display .. "|-\n" ..
forms_display .. footer_display .. "|}" ..
require("モジュール:TemplateStyles")("テンプレート:number box/styles.css")
end
function export.show_box_manual(frame)
local m_links = require("モジュール:links")
local num_type = frame.args["type"]
local args = require("モジュール:parameters").process(frame:getParent().args, {
[1] = {required = true, type = "language", default = "und"},
sc = {type = "script"},
headlink = true,
wplink = true,
alt = true,
tr = true,
[2] = true, -- prev_symbol
[3] = true, -- cur_symbol
[4] = true, -- next_symbol
[5] = true, -- prev_term
[6] = true, -- next_term
card = true, cardalt = true, cardtr = true,
ord = true, ordalt = true, ordtr = true,
adv = true, advalt = true, advtr = true,
mult = true, multalt = true, multtr = true,
dis = true, disalt = true, distr = true,
coll = true, collalt = true, colltr = true,
frac = true, fracalt = true, fractr = true,
opt = true, optx = true, optxalt = true, optxtr = true,
opt2 = true, opt2x = true, opt2xalt = true, opt2xtr = true,
})
local lang = args[1]
local sc = args.sc
local headlink = args.headlink
local wplink = args.wplink
local alt = args.alt
local tr = args.tr
local prev_symbol = args[2]
local cur_symbol = args[3]
local next_symbol = args[4]
local prev_term = args[5]
local next_term = args[6]
local cardinal_term = args.card; local cardinal_alt = args.cardalt; local cardinal_tr = args.cardtr
local ordinal_term = args.ord; local ordinal_alt = args.ordalt; local ordinal_tr = args.ordtr
local adverbial_term = args.adv; local adverbial_alt = args.advalt; local adverbial_tr = args.advtr
local multiplier_term = args.mult; local multiplier_alt = args.multalt; local multiplier_tr = args.multtr
local distributive_term = args.dis; local distributive_alt = args.disalt; local distributive_tr = args.distr
local collective_term = args.coll; local collective_alt = args.collalt; local collective_tr = args.colltr
local fractional_term = args.frac; local fractional_alt = args.fracalt; local fractional_tr = args.fractr
local optional1_title = args.opt
local optional1_term = args.optx; local optional1_alt = args.optxalt; local optional1_tr = args.optxtr
local optional2_title = args.opt2
local optional2_term = args.opt2x; local optional2_alt = args.opt2xalt; local optional2_tr = args.opt2xtr
track(lang:getCode())
if sc then
track("sc")
end
if headlink then
track("headlink")
end
if wplink then
track("wplink")
end
if alt then
track("alt")
end
if cardinal_alt or ordinal_alt or adverbial_alt or multiplier_alt or distributive_alt or collective_alt or fractional_alt or optional1_alt or optional2_alt then
track("xalt")
end
local subpage = mw.title.getCurrentTitle().subpageText
local is_reconstructed = lang:hasType("reconstructed") or mw.title.getCurrentTitle().nsText == "付録"
-- Commenting out this line prevents passing redundant alts to full_link;
-- however, there may have been a purpose to it.
-- alt = alt or (is_reconstructed and "*" or "") .. subpage
if num_type == "cardinal" then
cardinal_term = cardinal_term or (is_reconstructed and "*" or "") .. subpage
cardinal_alt = cardinal_alt or alt
cardinal_tr = cardinal_tr or tr
elseif num_type == "ordinal" then
ordinal_term = ordinal_term or (is_reconstructed and "*" or "") .. subpage
ordinal_alt = ordinal_alt or alt
ordinal_tr = ordinal_tr or tr
end
local header = lang:getCanonicalName() .. " " .. num_type .. " numbers"
if headlink then
header = "[[" .. headlink .. "|" .. header .. "]]"
end
local previous = ""
if prev_term or prev_symbol then
previous = m_links.full_link{lang = lang, sc = sc, term = prev_term, alt = " < " .. prev_symbol, tr = "-", no_alt_ast = true}
end
local current = m_links.full_link{lang = lang, sc = sc, alt = cur_symbol, tr = "-", no_alt_ast = true}
local next = ""
if next_term or next_symbol then
next = m_links.full_link{lang = lang, sc = sc, term = next_term, alt = next_symbol .. " > ", tr = "-", no_alt_ast = true}
end
local forms = {}
if cardinal_term then
insert(forms, " [[基数]]: " .. m_links.full_link{lang = lang, sc = sc, term = cardinal_term, alt = cardinal_alt, tr = cardinal_tr})
end
if ordinal_term then
insert(forms, " [[序数]]: " .. m_links.full_link{lang = lang, sc = sc, term = ordinal_term, alt = ordinal_alt, tr = ordinal_tr})
end
if adverbial_term then
insert(forms, " [[副詞]]: " .. m_links.full_link{lang = lang, sc = sc, term = adverbial_term, alt = adverbial_alt, tr = adverbial_tr})
end
if multiplier_term then
insert(forms, " [[乗数]]: " .. m_links.full_link{lang = lang, sc = sc, term = multiplier_term, alt = multiplier_alt, tr = multiplier_tr})
end
if distributive_term then
insert(forms, " [[配分数詞]]: " .. m_links.full_link{lang = lang, sc = sc, term = distributive_term, alt = distributive_alt, tr = distributive_tr})
end
if collective_term then
insert(forms, " [[集合数詞]]: " .. m_links.full_link{lang = lang, sc = sc, term = collective_term, alt = collective_alt, tr = collective_tr})
end
if fractional_term then
insert(forms, " [[分数]]: " .. m_links.full_link{lang = lang, sc = sc, term = fractional_term, alt = fractional_alt, tr = fractional_tr})
end
if optional1_title then
insert(forms, " " .. optional1_title .. ": " .. m_links.full_link{lang = lang, sc = sc, term = optional1_term, alt = optional1_alt, tr = optional1_tr})
end
if optional2_title then
insert(forms, " " .. optional2_title .. ": " .. m_links.full_link{lang = lang, sc = sc, term = optional2_term, alt = optional2_alt, tr = optional2_tr})
end
local footer = ""
if wplink then
footer =
"[[w:" .. lang:getCode() .. ":|" .. lang:getCanonicalName() .. "版ウィキペディア]]" ..
m_links.full_link{lang = lang, sc = sc, term = "w:" .. lang:getCode() .. ":" .. wplink, alt = alt, tr = tr}
end
return [=[{| class="floatright number-box" cellpadding="5" cellspacing="0" rules="all"
|+ ''']=] .. header .. [=['''
|-
| class="adjacent-slot" | ]=] .. previous .. [=[
! class="current-slot" | ]=] .. current .. [=[
| class="adjacent-slot" | ]=] .. next .. [=[
|-
| colspan="3" class="form-slot" | ]=] .. concat(forms, "<br/>") .. [=[
|-
| colspan="3" class="footer-slot" | ]=] .. footer .. [=[
|}]=] .. require("モジュール:TemplateStyles")("テンプレート:number box/styles.css")
end
return export
tld0z3bqr9n2cj96pfbwkaut60fm0ko
修煉
0
546834
2313463
2140132
2026-08-09T11:51:18Z
Kuroco2k
84207
/* {{desc}} */
2313463
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しゅうれん}}
=={{L|ja}}==
{{ja-kanjitab|しゅう|れん|yomi=o}}
==={{pron}}===
{{ja-pron|しゅうれん|acc=1}}
==={{noun}}===
{{ja-noun-suru|[[しゅうれん]]}}({{同音前|[[修練]]}})
#[[身体]]や[[精神]]、[[技術]]などを{{おくりがな2|磨|みが|き|みがく}}{{おくりがな2|鍛|きた|える|きたえる}}こと。
==={{verb}}===
{{ja-verb-suru|しゅうれん}}
{{日本語サ変活用}}
=={{L|zh}}==
==={{alter}}===
*{{zh-l|修練}}
*{{zh-l|修鍊}}
==={{pron}}===
{{cmn-pron|xiūliàn}}
{{yue-pron|sau1 lin6}}
==={{verb}}===
{{zh-cat|xiu1lian4|verb|道教}}
{{yue-cat|sau1lin6|verb}}
{{zhchars}}({{zh-ts||'''[[修炼]]'''}})
#[[修練]]する。[[練習]]する。
#{{context|道教|lang=yue|skey=sau1lin6}}[[瞑想]]する。
==={{desc}}===
{{CJKV|[[修煉]], [[修練]], [[修鍊]]|j=しゅうれん|修煉|j2=修練|j3=修鍊|[[수련]]|k=修鍊/修練}}
a5lzdn2d51ebbs6apamzu910t30e3hk
四島
0
547027
2313271
2140476
2026-08-09T00:12:02Z
鍼灸
112313
2313271
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しとう|よんとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[しとう]]|[[よんとう]]}}
#{{タグ|ja|島}}四つの[[しま|島]]。
#{{タグ|ja|略語}} 「[[北方四島]]」の略称。
g6fvky64lvcswhyh3ezqtcbxvihb3p0
2313272
2313271
2026-08-09T00:12:13Z
鍼灸
112313
2313272
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[しとう]]|[[よんとう]]}}
#{{タグ|ja|島}}四つの[[しま|島]]。
#{{タグ|ja|略語}} 「[[北方四島]]」の略称。
2x0v1d1cknx153de3g906fzsneqmz93
よんとう
0
547033
2313192
2140764
2026-08-08T22:58:36Z
~2026-43757-49
132871
/* 日本語 */
2313192
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
=={{L|ja}}==
==={{homonym}}===
{{ja-hom}}
*【[[四島]]】:四つの島。
*【[[四等]]】:第四位。
a93tjryw1qnuehfasg96lqz330rbu95
2313234
2313192
2026-08-08T23:39:45Z
鍼灸
112313
2313234
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[四島]]】:四つの島。
*【[[四等]]】:第四位。
abiw69i5lab4ifz7ggwaz4k1ebsnrph
2313236
2313234
2026-08-08T23:43:00Z
鍼灸
112313
2313236
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[四島]]】:四つの島。
*【[[四等]]】:第四位。
*【[[四頭]]】:(動物)が四匹。
fh9te0p3nhp1dquc4cmdah67p0jqld5
にとう
0
547043
2313239
2140736
2026-08-08T23:44:01Z
鍼灸
112313
2313239
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[二島]]】:二つの島。
*【[[二刀]]】:二本の刀。
*【[[二等]]】:第二位。
*【[[二桃]]】:二個の桃。
*【[[二頭]]】:(動物が)二匹。
*【[[二糖]]】:[[二糖類]]。
pumg83omk8snzohrtkuq48wffp3jew5
四等
0
547260
2313274
2140746
2026-08-09T00:12:39Z
鍼灸
112313
2313274
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[しとう]]|[[よんとう]]}}
#四[[番目]]の[[等級]]。
tgbwtd21hfn3rbd5z32gqei879y08qg
さんず
0
547322
2313285
2140859
2026-08-09T00:24:25Z
鍼灸
112313
2313285
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[三頭]], [[三図]]】:[[三封]]。
*【[[三途]], [[三塗]]】:[[三途の川]]。
3ppqi3oquvwr39s4jurfdjggrktpvzg
利用者:Kuroco2k/common.js
2
554760
2313200
2312496
2026-08-08T23:21:35Z
Kuroco2k
84207
スイッチオン
2313200
javascript
text/javascript
mw.loader.load("/wiki/利用者:Kuroco2k/hangul.js?action=raw&ctype=text/javascript");
mw.loader.load('/wiki/利用者:Kuroco2k/maintenance.js?action=raw&ctype=text/javascript');
mw.loader.load('/wiki/利用者:Kuroco2k/es-verb-form.js?action=raw&ctype=text/javascript');
mw.loader.load('/wiki/利用者:Kuroco2k/pt-verb-form.js?action=raw&ctype=text/javascript');
mw.loader.load('/wiki/利用者:Kuroco2k/fr-verb-form.js?action=raw&ctype=text/javascript');
mw.loader.load('/wiki/利用者:Kuroco2k/de-verb-form.js?action=raw&ctype=text/javascript');
mw.loader.load('/wiki/利用者:Kuroco2k/gl-verb-form.js?action=raw&ctype=text/javascript');
mw.loader.load(
'/w/index.php?title=利用者:Kuroco2k/verb-form-config.js&action=raw&ctype=text/javascript'
);
rdbvnyu4uiyb51h1asblv9mg1eo2v7h
2313222
2313200
2026-08-08T23:24:12Z
Kuroco2k
84207
スイッチオフ
2313222
javascript
text/javascript
mw.loader.load("/wiki/利用者:Kuroco2k/hangul.js?action=raw&ctype=text/javascript");
mw.loader.load('/wiki/利用者:Kuroco2k/es-verb-form.js?action=raw&ctype=text/javascript');
mw.loader.load('/wiki/利用者:Kuroco2k/pt-verb-form.js?action=raw&ctype=text/javascript');
mw.loader.load('/wiki/利用者:Kuroco2k/fr-verb-form.js?action=raw&ctype=text/javascript');
mw.loader.load('/wiki/利用者:Kuroco2k/de-verb-form.js?action=raw&ctype=text/javascript');
mw.loader.load('/wiki/利用者:Kuroco2k/gl-verb-form.js?action=raw&ctype=text/javascript');
mw.loader.load(
'/w/index.php?title=利用者:Kuroco2k/verb-form-config.js&action=raw&ctype=text/javascript'
);
tj1hi53cvhiv8ezeghlntm5uzqrwg26
モジュール:id-pronunciation
828
560499
2313441
2286378
2026-08-09T10:34:46Z
Kuroco2k
84207
2313441
Scribunto
text/plain
-- Based on [[Module:es-pronunc]] by Benwing2 and [[Module:ceb-pron]] by TagaSanPedroAko.
-- Original module by Rex Aurorum, improved by TagaSanPedroAko.
-- Partly rewritten by TagaSanPedroAko, merging code from [[Module:es-pronunc]] back into this module; {{tl-pr}} restructured
-- to take inline modifiers, like {{es-pr}}.
-- Modified for {{id-pr}}.
local export = {}
--[==[
FIXME:
1. Use apostrophe ' to mark irregular stress instead of macron (e.g 'a not ā)
2. Ability to fully detect plosives cluster with /r/ and /l/
3. Placement of stress where a word has schwas needs to be smarter (see [[w:Malay phonology]] for details). In entries and [[jenderal]], {{id-pr))/{{id-IPA}} would place the stress on wrong position (i.e. ultimate instead of penultimate) and currently needs adding a macron on vowel at syllable where stress actually applies. This rule doesn't seem to apply to affixed words with penultimate schwas such as [[menentang]] (root [[tentang]], which has ultimate stress), which should be pronounced with ultimate stress, so stress have to be applied manually.
4. Allow Q against K e.g. [[bapak]] respelled 'bapaq' with syllabification 'ba.pak', [[rakyat]] respelled 'raqyat' with syllabification
'rak.yat', . [DONE]
5. Fix syllabification of words with R followed by J e.g. [[kerja]], [[perjalanan]]. [DONE]
6. Fix syllabification of words with K pronounced as glottal stop (and respelled Q) followed by any consonant e.g. [[rakyat]], [[dakwa]], [[bakso]]. [DONE]
7. Allow syllabification of words with E respelled É and È. [DONE]
8. Diphthongs should not be split in syllabification. [DONE]
9. Final /k/ should be devoiced. [DONE]
10. "EU" found in borrowings and place names from Acehnese and Sundanese should be just rendered with schwa. [DONE]
11. Insert a /w/ or /j/ in vowel cluster beginning with /u/ or /i/ respectively. [TODO]
12. Diphthongs (ai, au, ei, ui) should be transcribed in phonemic IPA as vowel+i̯/u̯ instead of vowel+glide (j or w) [DONE]
13. Schwa insertion in pt and ps clusters as standard pronunciation and silent as nonstandard or English influenced pronunciation
]==]
local force_cat = false -- enable for testing
local m_IPA = require("Module:IPA")
local m_str_utils = require("Module:string utilities")
local m_table = require("Module:table")
local accent_qualifier_module = "Module:accent qualifier"
local audio_module = "Module:audio"
local headword_data_module = "Module:headword/data"
local hyphenation_module = "Module:hyphenation"
local labels_module = "Module:labels"
local parse_utilities_module = "Module:parse utilities"
local rhymes_module = "Module:rhymes"
local set_utilities_module = "Module:set utilities"
local lang = require("Module:languages").getByCode("id")
local rfind = m_str_utils.find
local rsubn = m_str_utils.gsub
local rsplit = m_str_utils.split
local toNFC = mw.ustring.toNFC
local toNFD = mw.ustring.toNFD
local trim = mw.text.trim
local u = m_str_utils.char
local ulen = m_str_utils.len
local ulower = m_str_utils.lower
local unpack = unpack or table.unpack -- Lua 5.2 compatibility
local AC = u(0x0301) -- acute = ́
local GR = u(0x0300) -- grave = ̀
local CFLEX = u(0x0302) -- circumflex = ̂
local MAC = u(0x0304) -- macron
local BR = u(0x0306) -- breve = ˘
local vowel = "aeéèiɨoòuəɛɔ" -- vowel
local V = "[" .. vowel .. "]"
local W = "[jw]" -- glide
local NV = "[^" .. vowel .. "]"
local accent = AC .. GR .. MAC .. BR
local accent_c = "[" .. accent .. "]"
local stress_c = "[" .. MAC .. BR .. "]"
local ipa_stress = "ˈ"
local ipa_stress_c = "[" .. ipa_stress .. "]"
local separator = accent .. ipa_stress .. "# .-"
local C = "[^" .. vowel .. separator .. "]" -- consonant
local unstressed_words = m_table.listToSet {
--prepositions
"di", "ké",
-- letter names. Excluding ones that also occur as regular words
"a", "bé", "cé", "dé", "é", "èf", "gé", "ha", "i", "jé", "èl", "èm", "èn", "o", "pé",
"ki", "èr", "té", "u", "vé", "wé", "èks", "yé", "zèt",
"dan" -- conjunction
}
local unstressed_affixes = m_table.listToSet {
-- NOTE: prefixes here aren't currently used with prefixes themselves because they are all assumed unstressed
-- in the absence of an explicit accent marker..
"-an", "-in", "ber-", "di-", "meng-", "me-", "peng-", "pe-", "per-", "-nya", "-mu", "-ku"
}
local function track(page)
require("Module:debug/track")("id-pron/" .. page)
return true
end
-- version of rsubn() that discards all but the first return value
local function rsub(term, foo, bar)
local retval = rsubn(term, foo, bar)
return retval
end
-- version of rsubn() that returns a 2nd argument boolean indicating whether
-- a substitution was made.
local function rsubb(term, foo, bar)
local retval, nsubs = rsubn(term, foo, bar)
return retval, nsubs > 0
end
-- apply rsub() repeatedly until no change
local function rsub_repeatedly(term, foo, bar)
while true do
local new_term = rsub(term, foo, bar)
if new_term == term then
return term
end
term = new_term
end
end
-- Combine two sets of qualifiers, either of which may be nil or a list of qualifiers. Remove duplicate qualifiers.
-- Return value is nil or a list of qualifiers.
local function combine_qualifiers(qual1, qual2)
if not qual1 then
return qual2
end
if not qual2 then
return qual1
end
local qualifiers = m_table.deepCopy(qual1)
for _, qual in ipairs(qual2) do
m_table.insertIfNot(qualifiers, qual)
end
return qualifiers
end
local function decompose(text)
-- decompose everything but é, è, Javanese ò
text = toNFD(text)
text = rsub(text, "." .. "[" .. AC .. CFLEX .. GR .. "]", {
["e" .. AC] = "é",
["e" .. GR] = "è",
["o" .. GR] = "ò", -- O as in the Javanese place names "Solo", "Purwokerto", "Probolinggo"
})
return text
end
local function remove_accents(str)
str = decompose(str)
str = rsub(str, "(.)" .. accent_c, "%1")
return str
end
local function split_on_comma(term)
if term:find(",%s") then
return require(parse_utilities_module).split_on_comma(term)
else
return rsplit(term, ",")
end
end
-- ĵ, ɟ and ć are used internally to represent [d͡ʒ], [j] and [t͡ʃ]
--
function export.IPA(text)
local debug = {}
text = ulower(text)
text = decompose(text)
-- convert commas and en/en dashes to IPA foot boundaries
text = rsub(text, "%s*[,–—]%s*", " | ")
-- question mark or exclamation point in the middle of a sentence -> IPA foot boundary
text = rsub(text, "([^%s])%s*[!?]%s*([^%s])", "%1 | %2")
-- canonicalize multiple spaces and remove leading and trailing spaces
local function canon_spaces(text)
text = rsub(text, "%s+", " ")
text = rsub(text, "^ ", "")
text = rsub(text, " $", "")
return text
end
text = canon_spaces(text)
-- Make prefixes unstressed unless they have an explicit stress marker; also make certain
-- monosyllabic words (e.g. [[di]], [[ke]], [[se-]], [[meng-]], etc.) without stress marks be
-- unstressed.
local words = rsplit(text, " ")
for i, word in ipairs(words) do
if rfind(word, "%-$") and not rfind(word, accent_c) or unstressed_words[word] then
-- add BR to the last vowel not the first one
-- adding the BR after the 'u'
words[i] = rsub(word, "^(.*" .. V .. ")", "%1" .. BR)
end
end
text = table.concat(words, " ")
-- Convert hyphens to spaces
text = rsub(text, "%-", " ")
-- canonicalize multiple spaces again, which may have been introduced by hyphens
text = canon_spaces(text)
-- now eliminate punctuation
text = rsub(text, "[!?']", "")
-- put # at word beginning and end and double ## at text/foot boundary beginning/end
text = rsub(text, " | ", "# | #")
text = "##" .. rsub(text, " ", "# #") .. "##"
table.insert(debug, text)
--"i" or "u" as part of diphthongs. to indicate these should be separate sounds, add a period.
text = rsub(text, "(" .. V .. ")i([#.])", "%1i̯%2")
text = rsub(text, "(" ..V.. ")u([#.])", "%1u̯%2")
-- syllable-initial X (e.g. in [[xenofobia]], [[xenon]], [[xilofon]])
text = rsub(text, "x("..V..")", "s%1")
-- handle certain combinations; eu, kh, ng, ny and sy handling needs to go first, so is word-initial ps/pt
text = rsub(text, "eu", "ə") -- as used in Acehnese and Sundanese (e.g. [[Lhokseumawe]])
text = rsub(text, "kh", "x")
text = rsub(text, "ng", "ŋ")
text = rsub(text, "ny", "ɲ")
text = rsub(text, "sy", "ʃ")
text = rsub(text, "([#])p([st])", "pə.%2") -- e.g. [[psikologi]], [[pterodaktil]]
text = rsub(text, "bh", "b") -- in terms from Sanskrit e.g. [[bhakti]], [[bhayangkara]]
table.insert(debug, text)
--alphabet-to-phoneme
text = rsub(text, "[ceéègjòqvy]",
--["g"]="ɡ": U+0067 LATIN SMALL LETTER G → U+0261 LATIN SMALL LETTER SCRIPT G
{ ["c"] = "ć", ["e"] = "ə", ["é"] = "e", ["è"] = "ɛ", ["g"] = "ɡ", ["j"] = "ĵ", ["ò"] = "ɔ", ["q"] = "ʔ", ["y"] = "j" })
-- reduce any remaining double consonants (e.g. [[massa]], [[Makassar]], [[Tallo]]);
text = rsub(text, "(" .. C .. ")%1", "%1")
--syllable division
local vowel_to_glide = { ["i"] = "j", ["o"] = "w", ["u"] = "w" }
-- i, o and u between vowels -> j and w e.g. [[rangkaian]])
text = rsub_repeatedly(text, "(" .. V .. accent_c .. "*)([iou])(" .. V .. ")",
function(v1, iou, v2)
return v1 .. vowel_to_glide[iou] .. v2
end
)
table.insert(debug, text)
-- "mb", "mp", "nd", "nk", "nt" combinations
text = rsub_repeatedly(text, "(m)([bp])([^hlrɟ" .. vowel .. separator .."])(" .. V .. ")", "%1%2.%3%4")
text = rsub_repeatedly(text, "(n)([dkt])([^hlrɟ" .. vowel .. separator .. "])(" .. V .. ")", "%1%2.%3%4")
text = rsub_repeatedly(text, "(n)([s])([^lrt" .. vowel .. separator .. "])(" .. V .. ")", "%1.%2%3%4")
text = rsub_repeatedly(text, "(ŋ)([k])([^hlrɟ" .. vowel .. separator .. "])(" .. V .. ")", "%1%2.%3%4")
text = rsub_repeatedly(text, "([r])([bćdfɡklmnpsʃvz])([^hlrɟ" .. vowel .. separator .. "])(" .. V .. ")", "%1%2.%3%4")
text = rsub_repeatedly(text, "([r])([t])([sz]?)([^hlrɟsʃ" .. vowel .. separator .. "])(" .. V .. ")", "%1%2%3.%4%5")
text = rsub_repeatedly(text, "(" .. V .. accent_c .. "*)(" .. C .. W .. "?" .. V .. ")", "%1.%2")
text = rsub_repeatedly(text, "(" .. V .. accent_c .. "*" .. C .. "+)(" .. C .. C .. V .. ")", "%1.%2")
text = rsub_repeatedly(text, "(" .. V .. accent_c .. "*" .. C .. ")(" .. C .. V .. ")", "%1.%2")
text = rsub_repeatedly(text, "(" .. V .. accent_c .. "*" .. C .. "+)(" .. C .. C .. V .. ")", "%1.%2")
text = rsub_repeatedly(text, "(" .. C .. ")%.s(" .. C .. ")", "%1s.%2")
text = rsub_repeatedly(text, "(" .. V .. accent_c .. "*)("..V..")", "%1.%2")
--fix diphthongs before stress is applied.
text = rsub(text, "(" .. V .. ")([.])i̯([#.])", "%1i̯%3")
text = rsub(text, "(" ..V.. ")([.])u̯([#.])", "%1u̯%3")
table.insert(debug, text)
local accent_to_stress_mark = { [MAC] = "ˈ", [BR] = "" }
local function accent_word(word, syllables)
-- Now stress the word. If any accent exists in the word (including macron indicating an unaccented word),
-- put the stress mark(s) at the beginning of the indicated syllable(s). Otherwise, apply the default
-- stress rule.
if rfind(word, accent_c) then
for i = 1, #syllables do
syllables[i] = rsub(syllables[i], "^(.*)(" .. accent_c .. ")(.*)$",
function(pre, accent, post)
return accent_to_stress_mark[accent] .. pre .. post
end
)
end
else
-- Default stress rule. Words without vowels (e.g. IPA foot boundaries) don't get stress.
if #syllables == 1 and rfind(word, V) then
syllables[#syllables] = "ˈ" ..syllables[#syllables] -- Monosyllabic words with schwa don't get stress
elseif #syllables == 2 and rfind(word, "([ə])(".. C .."?)([#])") then
syllables[#syllables - 1] = "ˈ" .. syllables[#syllables - 1]
elseif #syllables == 2 and rfind(word, "([ə])(".. C .."?)([.])") then
syllables[#syllables] = "ˈ" .. syllables[#syllables]
elseif #syllables >= 3 and rfind(word, "([.])(".. C .."?)([ə])(".. C .."?)([.])(".. C .."?)(".. V ..")(".. V .."?)(".. C .."?)(".. C .."?)([#])") then
syllables[#syllables] = "ˈ" .. syllables[#syllables]
elseif #syllables > 1 then
syllables[#syllables - 1] = "ˈ" .. syllables[#syllables - 1]
end
end
end
local words = rsplit(text, " ")
for j, word in ipairs(words) do
-- accentuation
local syllables = rsplit(word, "%.")
accent_word(word, syllables)
-- Reconstruct the word.
words[j] = table.concat(syllables, ".")
end
text = table.concat(words, " ")
-- suppress syllable mark before IPA stress indicator
text = rsub(text, "%.(" .. ipa_stress_c .. ")", "%1")
--make all primary stresses but the last one be secondary
text = rsub_repeatedly(text, "ˈ(.+)ˈ", "ˌ%1ˈ")
table.insert(debug,text)
--correct final consonant placement before Y or W
text = rsub(text,"([.])(".. C ..")([ɟjw])(" .. V .. ")","%2%1%3%4")
table.insert(debug,text)
text = rsub_repeatedly(text, "^([#]*)([ˈˌ])([#]*)", "%1%3%2") -- Move stress inside word boundary fix at start
text = rsub_repeatedly(text, "([ ])([#]*)([ˈˌ])([#]*)", "%1%2%4%3") -- Move stress inside word boundary fix at start
local id_IPA_table = {
["phonetic"] = text,
["phonemic"] = text,
["raw"] = text
}
for key, value in pairs(id_IPA_table) do
text = id_IPA_table[key]
--phonetic transcription
if key == "phonetic" then
table.insert(debug, text)
--vowel plus glide to diphthong (to handle examples such as [[siomay]], [[Mongondow]], [[kuproy]])
text = rsub(text, "([aeou])([jɟ])([#.ˈ])", "%1i̯%3")
text = rsub(text, "([a])w([#.ˈ])", "%1u̯%2")
table.insert(debug, text)
--change i, u in closed final syllables
text = rsub(text, "(".. C .."?)i(".. C ..")([#])","%1ɪ%2%3")
text = rsub(text, "(".. C .."?)u(".. C ..")([#])","%1ʊ%2%3")
text = rsub(text, "(".. C .."?)e(".. C ..")([#])","%1ɛ%2%3")
text = rsub(text, "(".. C .."?)o(".. C ..")([#])","%1ɔ%2%3")
table.insert(debug, text)
--i, u in closed stressed syllables with nasal coda
text = rsub(text, "([ˈ])(".. C .. ")ɪ([mnŋ])([.#])","%1%2i%3%4")
text = rsub(text, "([ˈ])(" .. C .. ")ʊ([mnŋ])([.#])","%1%2u%3%4")
text = rsub(text, "([ˈ])(".. C .. ")ɛ([mnŋ])([.#])","%1%2e%3%4")
text = rsub(text, "([ˈ])(" .. C .. ")ɔ([mnŋ])([.#])","%1%2o%3%4")
table.insert(debug, text)
-- prevent unreleased plosives before syllables starting with j or w
text = rsub(text, "p([#.ˈ])([jw])", "p%1%2")
text = rsub(text, "t([#.ˈ])([jw])", "t̪%1%2")
text = rsub(text, "k([#.ˈ])([jw])", "k%1%2")
text = rsub(text, "b([#.ˈ])([jw])", "b%1%2")
text = rsub(text, "d([#.ˈ])([jw])", "d%1%2")
text = rsub(text, "ɡ([#.ˈ])([jw])", "ɡ%1%2")
-- then apply the usual final-stop unreleased rule safely
text = rsub(text, "[bp]([#.ˈ])","p̚%1")
text = rsub(text, "[dt]([#.ˈ])","t̚%1")
text = rsub(text, "[ɡk]([#.ˈ])","k̚%1")
--Indonesian /t/ is dental
text = rsub(text, "t","t̪")
--/n/ sandhi
text = rsub(text,"([n])([ˈˌ# .]*[ćĵʃ])","ɲ%2")
text = rsub(text,"([n])([ˈˌ# .]*[t])", "n̪%2")
--V to F
text = rsub(text, "v","f")
--final fix for phonetic diphthongs
text = rsub(text,"(".. V ..")ɪ̯","%1i̯") -- ai, ei
text = rsub(text,"(".. V ..")ʊ̯","%1u̯") --au
-- insert optional glottal stop between identical vowels (e.g., aa → a(ʔ)a)
text = rsub(text, "([aeiouɛɔɪʊə])%.?%1", "%1.(ʔ)%1")
mw.log(text)
end
table.insert(debug, text)
-- convert fake symbols to real ones
local final_conversions = {
["ć"] = "t͡ʃ", -- fake "c" to real "c"
["ɟ"] = "j", -- fake "i" to real "i"
["ĵ"] = "d͡ʒ" -- fake "j" to real "j"
}
text = rsub(text, "[ćɟĵ]", final_conversions)
-- Do not have multiple syllable break consecutively
text = rsub_repeatedly(text, "([.]+)", ".")
text = rsub_repeatedly(text, "([.]?)(‿)([.]?)", "%2")
-- remove # symbols at word and text boundaries
text = rsub_repeatedly(text, "([.]?)#([.]?)", "")
-- resuppress syllable mark before IPA stress indicator
text = rsub(text, "%.(" .. ipa_stress_c .. ")", "%1")
text = rsub_repeatedly(text, "([.]?)(" .. ipa_stress_c .. ")([.]?)", "%2")
id_IPA_table[key] = canon_spaces(toNFC(text))
end
return id_IPA_table
end
function export.show(frame)
local params = {
[1] = {},
["pre"] = {},
["bullets"] = {type = "number", default = 1},
}
local parargs = frame:getParent().args
local args = require("Module:parameters").process(parargs, params)
local results = {}
local text = args[1] or mw.loadData("Module:headword/data").pagename
local IPA_result = export.IPA(text)
table.insert(results, { pron = "/" .. IPA_result["phonemic"] .. "/" })
table.insert(results, { pron = "[" .. IPA_result["phonetic"] .. "]" })
local pre = args.pre and args.pre .. " " or ""
local bullet = (args.bullets ~= 0) and "* " or ""
return bullet .. pre .. m_IPA.format_IPA_full { lang, results }
end
local function parse_gloss(arg)
local poses, gloss
if arg:find("%^") then
poses, gloss = arg:match("^(.-)%^(.*)$")
if gloss == "" then
gloss = nil
end
else
gloss = arg
end
if poses then
poses = split_on_comma(poses)
local m_headword_data = mw.loadData(headword_data_module)
for i, pos in ipairs(poses) do
poses[i] = m_headword_data.pos_aliases[pos] or pos
end
end
return {
poses = poses,
gloss = gloss,
}
end
-- Parse a raw accent spec, which is one or more comma-separated accent qualifiers.
local function parse_accents(arg)
return require(labels_module).split_labels_on_comma(arg)
end
-- Return the number of syllables of a phonemic or phonetic representation, which should have syllable dividers in it
-- but no hyphens.
local function get_num_syl_from_ipa(pron)
-- Maybe we should just count vowels instead of the below code.
pron = rsub(pron, "|", " ") -- remove IPA foot boundaries
local words = rsplit(pron, " +")
for i, word in ipairs(words) do
-- IPA stress marks are syllable divisions if between characters; otherwise just remove.
word = rsub(word, "(.)[ˌˈ](.)", "%1.%2")
word = rsub(word, "[ˌˈ]", "")
words[i] = word
end
-- There should be a syllable boundary between words.
pron = table.concat(words, ".")
return ulen(rsub(pron, "[^.]", "")) + 1
end
-- Get the rhyme by truncating everything up through the last stress mark + any following consonants, and remove
-- syllable boundary markers.
local function convert_phonemic_to_rhyme(phonemic)
-- NOTE: This works because the phonemic vowels are just [aeiou] possibly with diacritics that are separate
-- Unicode chars.
phonemic = rsplit(phonemic, " ")
phonemic = phonemic[#phonemic]
phonemic = rsub(rsub(phonemic, ".*[ˌˈ]", ""), "^" .. NV .. "*", ""):gsub("%.", "")
phonemic = rsub_repeatedly(phonemic, "^[iu](" .. V .. ")", "%1" )
return phonemic
end
local function split_syllabified_spelling(spelling)
spelling = "#" .. spelling .. "#"
spelling = rsub_repeatedly(spelling, "%.([ #])", "·%1")
spelling = rsub_repeatedly(spelling, "#", "")
spelling = rsplit(spelling, "%.")
for key, value in ipairs(spelling) do
spelling[key] = rsub_repeatedly(value, "·", ".")
end
return spelling
end
-- "Align" syllabified respelling `syllab` to original spelling `spelling` by matching character-by-character, allowing
-- for extra syllable and accent markers in the syllabification and certain mismatches in the consonants. The goal is to
-- produce the appropriately syllabified version of the original spelling (the pagename) by matching characters in the
-- syllabified respelling to the original spelling, putting the syllable boundaries in the appropriate places in the
-- original spelling.
--
-- If we encounter an extra syllable marker (.), we allow and keep it. If we encounter an extra accent marker in thes
-- syllabification, we drop it. We allow for mismatches in capitalization and for certain other mismatches, e.g. extra
-- glottal stops (written q), respelling of unadapted loanwords, etc. If we can't match, we return nil
-- indicating the alignment failed.
local function align_syllabification_to_spelling(syllab, spelling)
local result = {}
local function concat_result()
-- Postprocess to remove dots (syllable boundaries) next to hyphens.
return (toNFC(table.concat(result)):gsub("%.%-", "-"):gsub("%-%.", "-"))
end
-- Replace glottal stop (q) from respelling with k, as found for original
-- spelling. (FIXME: Diacritics should be removed , but they're currently removed earlier, in
-- syllabify_from_spelling(). We should probably get rid of the removal there and put it here.)
syllab = decompose(syllab:gsub("ː", "")):gsub("7", "q")
local syll_chars = rsplit(ulower(syllab), "")
local spelling_chars = rsplit(spelling, "")
local i = 1
local j = 1
local function matches(uci, ucj)
-- Return true if a syllabified respelling character (uci) matches the corresponding spelling char (ucj).
-- Both uci and ucj should be lowercase.
-- Sound is at the key, values are the letters sound can match
local matching_chars = {
["e"] = {"e", "a"},
["k"] = {"k", "q"},
["s"] = {"j", "c", "x"}
}
return uci == ucj or (matching_chars[uci] and m_table.contains(matching_chars[uci], ucj) and true) or false
end
local function silent_spelling_letter(ucj)
return ucj == "h" or ucj == "'" or ucj == "-"
end
local function syll_at(pos)
return syll_chars[pos] or ""
end
local function spell_at(pos)
return spelling_chars[pos] or ""
end
local function uspell_at(pos)
local c = spelling_chars[pos]
return c and ulower(c) or ""
end
while i <= #syll_chars or j <= #spelling_chars do
local uci = syll_at(i)
local cj = spell_at(j)
local ucj = uspell_at(j)
if uci == "g" and syll_at(i - 1) == "n" and syll_at(i + 1) == "." and matches(syll_at(i + 2), ucj) and
not matches(syll_at(i + 2), uspell_at(j + 1)) then
-- As a special case, before checking whether the corresponding characters match, we have to skip an extra
-- g in an -ng- sequence in the syllabified respelling if the corresponding spelling character matches the
-- next respelling character (taking into account the syllable boundary).
i = i + 1
elseif uci == "g" and ucj == "g" and uspell_at(j + 1) == TILDE then
table.insert(result, cj)
table.insert(result, uspell_at(j + 1))
i = i + 1
j = j + 2
elseif matches(uci, ucj) then
table.insert(result, cj)
i = i + 1
j = j + 1
elseif ucj == uspell_at(j - 1) and uci == "." and ucj ~= syll_at(i + 1) then
-- See below. We want to allow for a doubled letter in spelling that is pronounced single, and preserve the
-- doubled letter. But it's tricky in the presence of syllable boundaries on both sides of the doubled
-- letter as well as doubled letters pronounced double. Specifically, there are three possibilities,
-- exemplified by:
-- (1) syll='Ma.ka.ssar', spelling='Makassar' -> 'Ma.ka.ssar';
-- (2) syll='Ta.llo', spelling='Tallo' -> 'Ta.llo'.
table.insert(result, cj)
j = j + 1
elseif silent_spelling_letter(ucj) and uci == "." and ucj ~= syll_at(i + 1) and
not rfind(uspell_at(j + 1), V) then
-- See below for apostrophe in spelling. This condition is parallel to the one directly above
-- for silent doubled letters in spelling and handles the case of syllab='Abdurrahmān', spelling='Abdurahman',
-- which should be syllabified 'Ab.du.rrah.man'. But we need a check to see that the next spelling character
-- isn't a vowel, because in that case we want the silent letter to go after the period, e.g.
-- syllab='Jumu.ah', spelling='Jumu'ah' -> 'Ju.mu.ah'.
table.insert(result, cj)
j = j + 1
elseif uci == "." then
table.insert(result, uci)
i = i + 1
elseif ucj == uspell_at(j - 1) then
-- A doubled letter in spelling that is pronounced single. Examples:
-- * syllab='mas.sa', spelling='massa' -> 'masa' (with s)
-- * syllab='Ma.kas.sar', spelling='Makassar' -> 'Ma.ka.ssar' (with s)
-- * syllab='Ka.a.ba', spelling='Kaaba' -> 'Kaa.ba' (with a)
-- * syllab='Tal.lo', spelling='Tallo' -> 'Tal.lo' (with l)
table.insert(result, cj)
j = j + 1
elseif silent_spelling_letter(ucj) then
-- A silent h, apostrophe or hyphen in spelling. Examples:
-- * syllab='Ramadān', spelling='Ramadhan' -> 'Ra.ma.dhan'
table.insert(result, cj)
j = j + 1
elseif uci == AC or uci == GR or uci == MAC or uci == BR or
uci == "y" or uci == "w" then
-- skip character
i = i + 1
else
-- non-matching character
mw.log(("Syllabification alignment mismatch for pagename '%s' (position %s, character %s), syllabified respelling '%s' (position %s, character %s), aligned result so far '%s'"
):format(spelling, j, ucj, syllab, i, uci, concat_result()))
return nil
end
end
if i <= #syll_chars or j <= #spelling_chars then
-- left-over characters on one side or the other
mw.log(("Syllabification alignment mismatch for pagename '%s' (%s), syllabified respelling '%s' (%s), aligned result so far '%s'"
):format(
spelling, j > #spelling_chars and "end of string" or ("position %s, character %s"):format(j, uspell_at(j)),
syllab, i > #syll_chars and "end of string" or ("position %s, character %s"):format(i, syll_at(i)),
concat_result()))
return nil
end
return concat_result()
end
local function generate_syll_obj(term)
return {syllabification = term, hyph = split_syllabified_spelling(term)}
end
-- Word should already be decomposed.
local function word_has_vowels(word)
word = ulower(word)
return rfind(word, V) or word:find("y")
end
local function any_words_have_vowels(term)
local words = rsplit(decompose(term), "[ %-]")
for i, word in ipairs(words) do
-- Allow empty word; this occurs with prefixes and suffixes.
if word_has_vowels(word) then
return true
end
end
return false
end
local function should_generate_rhyme_from_respelling(term)
local words = rsplit(decompose(term), " +")
local last_word = words[#words]
local should_generate_cat = #words == 1
local should_generate_rhyme =
not last_word:find("%-$") and -- no if word is a prefix
not (last_word:find("^%-") and last_word:find(MAC)) and -- no if word is an unstressed suffix
word_has_vowels(last_word) -- no if word has no vowels (e.g. a single letter)
return should_generate_rhyme, should_generate_cat
end
local function should_generate_rhyme_from_ipa(ipa)
local should_generate_cat = not ipa:find("%s")
local should_generate_rhyme = word_has_vowels(decompose(ipa))
return should_generate_rhyme, should_generate_cat
end
local function should_generate_rhyme_from_termobj(termobj)
if termobj.raw then
return should_generate_rhyme_from_ipa(termobj.raw_phonemic or termobj.raw_phonetic)
else
return should_generate_rhyme_from_respelling(termobj.term)
end
end
local function process_specified_rhymes(rhymes, sylls, parsed_respellings)
local rhyme_ret = {}
for _, rhyme in ipairs(rhymes) do
local num_syl = rhyme.num_syl
local no_num_syl = false
-- If user explicitly gave the rhyme but didn't explicitly specify the number of syllables, try to take it from
-- the syllabification.
if not num_syl then
num_syl = {}
for _, syll in ipairs(sylls) do
if should_generate_rhyme_from_respelling(syll.syllabification) then
local this_num_syl = 1 + ulen(rsub(syll.syllabification, "[^.]", ""))
m_table.insertIfNot(num_syl, this_num_syl)
else
no_num_syl = true
break
end
end
if no_num_syl or #num_syl == 0 then
num_syl = nil
end
end
-- If that fails and term is single-word, try to take it from the phonemic.
if not no_num_syl and not num_syl then
for _, parsed in ipairs(parsed_respellings) do
for _, pronun in ipairs(parsed.pronuns) do
-- Check that pronun.phonemic exists (it may not if raw phonetic-only pronun is given), and rhyme
-- isn't suppressed (which may happen if the term has a qualifier "colloquial", "obsolete" or the
-- like or is an auto-generated "glottal stop elision" pronunciation).
if pronun.phonemic and not pronun.no_rhyme then
if not should_generate_rhyme_from_ipa(pronun.phonemic) then
no_num_syl = true
break
end
-- Count number of syllables by looking at syllable boundaries (including stress marks).
local this_num_syl = get_num_syl_from_ipa(pronun.phonemic)
m_table.insertIfNot(num_syl, this_num_syl)
end
end
if no_num_syl then
break
end
end
if no_num_syl or #num_syl == 0 then
num_syl = nil
end
end
local rhymeobj = m_table.shallowCopy(rhyme)
rhymeobj.num_syl = num_syl
table.insert(rhyme_ret, rhymeobj)
end
end
-- Parse a pronunciation modifier in `arg`, the argument portion in an inline modifier (after the prefix), which
-- specifies a pronunciation property such as rhyme, syllabification, homophones or audio. The argument can itself have
-- inline modifiers, e.g. <audio:Foo.ogg<a:Jakarta>>. The allowed inline modifiers are specified by `param_mods` (of
-- the format expected by `parse_inline_modifiers()`); in addition to any modifiers specified there, the modifiers
-- <q:...>, <qq:...>, <a:...> and <aa:...> are always accepted (and can be repeated). `generate_obj` and `parse_err` are
-- like in `parse_inline_modifiers()` and specify respectively a function to generate the object into which modifier
-- properties are stored given the non-modifier part of the argument, and a function to generate an error message (given
-- the message). Normally, a comma-separated list of pronunciation properties is accepted and parsed, where each element
-- in the list can have its own inline modifiers and where no spaces are allowed next to the commas in order for them to
-- be recognized as separators. If `no_split_on_comma` is given, only a single pronunciation property is accepted. If
-- `has_outer_container` is given, the list of pronunciation properties is embedded in the `terms` property of an outer
-- container, into which other list-level modifiers can also be stored (by setting `overall = "true"` in the respective
-- spec in `param_mods`). The return value is a list if neither `no_split_on_comma` nor `has_outer_container` are given,
-- otherwise a container object (which, in the case of `has_outer_container`, will contain a list inside of it, in the
-- `terms` property).
local function parse_pron_modifier(arg, parse_err, generate_obj, param_mods, no_split_on_comma, has_outer_container)
if arg:find("<") then
local insert = { store = "insert" }
param_mods.q = insert
param_mods.qq = insert
param_mods.a = insert
param_mods.aa = insert
return require(parse_utilities_module).parse_inline_modifiers(arg, {
param_mods = param_mods,
generate_obj = generate_obj,
parse_err = parse_err,
splitchar = not no_split_on_comma and "," or nil,
outer_container = has_outer_container and {} or nil,
})
elseif no_split_on_comma then
return generate_obj(arg)
else
local retval = {}
for _, term in ipairs(split_on_comma(arg)) do
table.insert(retval, generate_obj(term))
end
if has_outer_container then
retval = {
terms = retval,
}
end
return retval
end
end
local function parse_rhyme(arg, parse_err)
local function generate_obj(term)
return {rhyme = term}
end
local param_mods = {
s = {
item_dest = "num_syl",
type = "number",
sublist = true,
},
}
return parse_pron_modifier(arg, parse_err, generate_obj, param_mods)
end
local function parse_syll(arg, parse_err)
local param_mods = {
cap = { overall = true},
}
-- We need to pass in has_outer_container because we have an overall property <cap:...> (the caption, defaulting
-- to "Syllabification") applying to the whole set of syllabifications.
return parse_pron_modifier(arg, parse_err, generate_syll_obj, param_mods, nil, "has outer container")
end
local function parse_homophone(arg, parse_err)
local function generate_obj(term)
return {term = term}
end
local param_mods = {
t = {
-- [[Module:links]] (called from [[Module:homophones]]) expects the gloss in "gloss".
item_dest = "gloss",
},
gloss = {},
pos = {},
alt = {},
lit = {},
id = {},
g = {
-- [[Module:links]] (called from [[Module:homophones]]) expects the genders in "genders".
item_dest = "genders",
sublist = true,
},
}
return parse_pron_modifier(arg, parse_err, generate_obj, param_mods)
end
local function generate_audio_obj(arg)
local file, gloss = arg:match("^(.-)%s*#%s*(.*)$")
if not file then
file = arg
gloss = "Audio"
end
return {file = file, gloss = gloss}
end
local function parse_audio(arg, parse_err)
-- None other than qualifiers
local param_mods = {}
-- Don't split on comma because some filenames have embedded commas not followed by a space (typically followed by
-- an underscore).
return parse_pron_modifier(arg, parse_err, generate_audio_obj, param_mods, "no split on comma")
end
local function syllabify_from_spelling(text, pagename)
-- Auto syllabifications start --
local vowel = vowel .. "ẃý" -- vowel
local V = "[" .. vowel .. "]"
local NV = "[^" .. vowel .. "]"
local C = "[^" .. vowel .. separator .."]" -- consonant
text = decompose(text)
local origtext = remove_accents(text)
text = string.lower(text)
text = rsub(text, "[.] ", "․ ")
text = rsub(text, "[.]$", "․")
-- put # at word beginning and end and double ## at text/foot boundary beginning/end
text = rsub(text, " | ", "# | #")
text = "##" .. rsub(text, " ", "# #") .. "##"
text = rsub_repeatedly(text, "([.]?)#([.]?)", "#")
text = rsub(text, "bh", "β")
text = rsub(text, "eu", "ɨ")
text = rsub(text, "ng", "ŋ")
text = rsub(text, "ny", "ɲ")
text = rsub(text, "c", "ć")
text = rsub(text, "j", "ĵ")
text = rsub(text, "kh", "x")
text = rsub(text, "sy", "ʃ")
text = rsub(text, "ʔ(["..separator.."])", "q%1")
text = rsub(text, "(" .. V .. ")(" .. accent_c .. "?)ẃ([bdfgkpt])([r" .. vowel .. separator .."])" ,"%1%2w%3%4")
text = rsub(text, "(" .. V .. ")(" .. accent_c .. "?)ẃ([bfgkp])([l" .. vowel .. separator .."])" ,"%1%2w%3%4")
text = rsub(text, "(" .. V .. ")(" .. accent_c .. "?)ý([bdfgkpt])([r" .. vowel .. separator .."])" ,"%1%2y%3%4")
text = rsub(text, "(" .. V .. ")(" .. accent_c .. "?)ý([bfgkp])([l" .. vowel .. separator .."])" ,"%1%2y%3%4")
text = rsub_repeatedly(text, "(" .. V .. accent_c .. "*)(" .. C .. V .. ")", "%1.%2")
-- "mb", "mp", "nd", "nk", "nt" combinations
text = rsub_repeatedly(text, "(m)([bp])([^lrɟy" .. vowel .. separator .."])(" .. V .. ")", "%1%2.%3%4")
text = rsub_repeatedly(text, "(n)([dk])([^lrɟy" .. vowel .. separator .. "])(" .. V .. ")", "%1%2.%3%4")
text = rsub_repeatedly(text, "(n)([s])([^ɟy" .. vowel .. separator .. "])(" .. V .. ")", "%1%2.%3%4")
text = rsub_repeatedly(text, "(n)([t])([^lrɟys" .. vowel .. separator .. "])(" .. V .. ")", "%1%2.%3%4")
text = rsub_repeatedly(text, "(ŋ)([k])([^lrɟy" .. vowel .. separator .. "])(" .. V .. ")", "%1%2.%3%4")
text = rsub_repeatedly(text, "([r])([bćdfgklmnpsʃvz])([^lrɟy" .. vowel .. separator .. "])(" .. V .. ")", "%1%2.%3%4")
text = rsub_repeatedly(text, "([r])([t])([sz]?)([^lrɟysʃ" .. vowel .. separator .. "])(" .. V .. ")", "%1%2%3.%4%5")
text = rsub_repeatedly(text, "(" .. V .. accent_c .. "*)(" .. C .. W .. "?" .. V .. ")", "%1.%2")
text = rsub_repeatedly(text, "(" .. V .. accent_c .. "*" .. C .. ")(" .. C .. V .. ")", "%1.%2")
text = rsub_repeatedly(text, "(" .. V .. accent_c .. "*" .. C .. "+)(" .. C .. C .. V .. ")", "%1.%2")
text = rsub_repeatedly(text, "(" .. C .. ")%.s(" .. C .. ")", "%1s.%2")
-- Any aeéèo, or stressed iu, should be syllabically divided from a following aeéèo or stressed iu.
text = rsub_repeatedly(text, "([aeéèo]" .. accent_c .. "*)([aeéèo])", "%1.%2")
text = rsub_repeatedly(text, "([aeéèo]" .. accent_c .. "*)(" .. V .. accent_c .. ")", "%1.%2")
text = rsub(text, "([iu]" .. accent_c .. ")([aeéèo])", "%1.%2")
text = rsub_repeatedly(text, "([iu]" .. accent_c .. ")(" .. V .. accent_c .. ")", "%1.%2")
text = rsub_repeatedly(text, "i(" .. accent_c .. "*)i", "i%1.i")
text = rsub_repeatedly(text, "u(" .. accent_c .. "*)u", "u%1.u")
text = rsub_repeatedly(text, "i([aeéèou])", "i.%1")
text = rsub_repeatedly(text, "u([aeéèio])", "u.%1")
--correct final consonant placement before any glides (e.g. in [[rakyat]], [[dakwa]] [[jadwal]])
text = rsub(text,"([.])(".. C .. ")(".. W ..")(" .. V .. ")","%2%1%3%4")
text = rsub(text, "β", "bh")
text = rsub(text, "ć", "c")
text = rsub(text, "ĵ", "j")
text = rsub(text, "x", "kh")
text = rsub(text, "ŋ", "ng")
text = rsub(text, "ɲ", "ny")
text = rsub(text, "ʃ", "sy")
text = rsub(text, "q", "k")
text = rsub(text, "ɨ", "eu")
text = rsub(text, "([éè])", "e")
text = rsub(text, "ò", "o")
text = remove_accents(text)
text = rsub_repeatedly(text, "([.]+)", ".")
text = rsub(text, "[.]?-[.]?", "-")
text = rsub(text, "[‿]([^ ])", "|%1")
text = rsub(text, "[.]([^ ])", "|%1")
text = rsub(text, "([|])+", "%1")
-- remove # symbols at word and text boundaries
text = rsub_repeatedly(text, "([.]?)#([.]?)", "")
text = rsub(text, "․", ".")
-- Fix Capitalization --
local syllbreak = 0
for i=1, #text do
if text:sub(i,i) == "|" and origtext:sub(i-syllbreak, i-syllbreak) ~= "." and origtext:sub(i-syllbreak, i-syllbreak) ~= "7" then
syllbreak = syllbreak + 1
elseif origtext:sub(i-syllbreak, i-syllbreak) == text:sub(i,i):upper() then
text = table.concat({text:sub(1, i-1), text:sub(i,i):upper(), text:sub(i+1)})
end
end
-- Fix hyphens --
-- FIXME!!! Why are we relying on looking at the pagename here? This should not be happening.
origtext = pagename
if (table.concat(rsplit(origtext, "-")) == table.concat(rsplit(table.concat(rsplit(text, "|")), "-"))) then
syllbreak = 0
for i=1, #text do
if text:sub(i,i) == "|" then
if origtext:sub(i-syllbreak, i-syllbreak) == "-" then
text = table.concat({text:sub(1, i-1), "-", text:sub(i+1)})
else
syllbreak = syllbreak + 1
end
end
end
end
-- FIXME! Hack -- up above we changed periods to vertical bars. The rest of the code expects periods so change
-- them back. We should clean up the code above to leave the periods alone.
return (text:gsub("|", "%."))
end
function export.syllabify_and_align(respelling, pagename)
local syllabification = syllabify_from_spelling(respelling, pagename)
return align_syllabification_to_spelling(syllabification, pagename)
end
local function css_wrap(text, classes)
return ('<span class="%s">%s</span>'):format(classes, text)
end
local function format_glosses(glosses)
if not glosses then
return ""
end
local formatted_glosses = {}
for _, glossobj in ipairs(glosses) do
local gloss_parts = {}
if glossobj.gloss then
table.insert(gloss_parts, css_wrap("“", "mention-gloss-double-quote") ..
css_wrap(glossobj.gloss, "mention-gloss") .. css_wrap("”", "mention-gloss-double-quote"))
end
if glossobj.poses then
for _, pos in ipairs(glossobj.poses) do
table.insert(gloss_parts, css_wrap(pos, "ann-pos"))
end
end
table.insert(formatted_glosses, table.concat(gloss_parts, css_wrap(",", "mention-gloss-comma") .. " "))
end
return " " .. css_wrap("(", "mention-gloss-paren annotation-paren") ..
table.concat(formatted_glosses, css_wrap(";", "mention-gloss-semicolon") .. " ") ..
css_wrap(")", "mention-gloss-paren annotation-paren")
end
local function format_pronuns(pronuns)
local pronunciations = {}
-- Loop through each pronunciation. For each one, add the phonemic and phonetic versions to `pronunciations`,
-- for formatting by [[Module:IPA]].
for j, pronun in ipairs(pronuns) do
local qs = pronun.q
local first_pronun = #pronunciations + 1
if not pronun.phonemic and not pronun.phonetic then
error("Internal error: Saw neither phonemic nor phonetic pronunciation")
end
if pronun.phonemic then -- missing if 'raw:[...]' given
-- don't display syllable division markers in phonemic
local slash_pron = "/" .. pronun.phonemic:gsub("%.", "") .. "/"
table.insert(pronunciations, {
pron = slash_pron,
})
end
if pronun.phonetic then -- missing if 'raw:/.../' given
local bracket_pron = "[" .. pronun.phonetic .. "]"
table.insert(pronunciations, {
pron = bracket_pron,
})
end
local last_pronun = #pronunciations
if pronun.q then
pronunciations[first_pronun].q = pronun.q
end
if j > 1 then
pronunciations[first_pronun].separator = ", "
end
if pronun.qq then
pronunciations[last_pronun].qq = pronun.qq
end
if pronun.refs then
pronunciations[last_pronun].refs = pronun.refs
end
if first_pronun ~= last_pronun then
pronunciations[last_pronun].separator = " "
end
end
return m_IPA.format_IPA_full(lang, pronunciations, nil, "")
end
local function format_pronun_line(parsed)
local formatted_pronuns = format_pronuns(parsed.pronuns)
local pre = is_first and parsed.pre and parsed.pre .. " " or ""
local post = is_first and parsed.post and " " .. parsed.post or ""
return pre .. formatted_pronuns .. format_glosses(parsed.t) .. post
end
local function parse_respelling(respelling, pagename, parse_err)
local raw_respelling = respelling:match("^raw:(.*)$")
if raw_respelling then
local raw_phonemic, raw_phonetic = raw_respelling:match("^/(.*)/ %[(.*)%]$")
if not raw_phonemic then
raw_phonemic = raw_respelling:match("^/(.*)/$")
end
if not raw_phonemic then
raw_phonetic = raw_respelling:match("^%[(.*)%]$")
end
if not raw_phonemic and not raw_phonetic then
parse_err(("Unable to parse raw respelling '%s', should be one of /.../, [...] or /.../ [...]")
:format(raw_respelling))
end
return {
raw = true,
raw_phonemic = raw_phonemic,
raw_phonetic = raw_phonetic,
}
end
if respelling == "+" then
respelling = pagename
end
return {term = respelling}
end
-- External entry point for {{id-pr}}.
function export.show_full(frame)
--------------------------------- 1. Parse the arguments. ------------------------------------
local params = {
[1] = {list = true},
["rhyme"] = {},
["syll"] = {},
["hmp"] = {},
["audio"] = {list = true},
["pagename"] = {},
}
local parargs = frame:getParent().args
local args = require("Module:parameters").process(parargs, params)
local pagename = args.pagename or mw.loadData("Module:headword/data").pagename
local respellings = #args[1] > 0 and args[1] or {"+"}
local parsed_respellings = {}
local function overall_parse_err(msg, arg, val)
error(msg .. ": " .. arg .. "=" .. val)
end
local overall_rhyme = args.rhyme and
parse_rhyme(args.rhyme, function(msg) overall_parse_err(msg, "rhyme", args.rhyme) end) or nil
local overall_syll = args.syll and
parse_syll(args.syll, function(msg) overall_parse_err(msg, "syll", args.syll) end) or nil
local overall_hmp = args.hmp and
parse_homophone(args.hmp, function(msg) overall_parse_err(msg, "hmp", args.hmp) end) or nil
local overall_audio
if #args.audio > 0 then
overall_audio = {}
for _, audio in ipairs(args.audio) do
local parsed_audio = parse_audio(audio, function(msg) overall_parse_err(msg, "audio", audio) end)
table.insert(overall_audio, parsed_audio)
end
end
-- Parse each respelling. Individual arguments in 1=, 2=, etc. can consist of one or more comma-separated
-- respellings, each of which can have inline modifiers <q:...>, <qq:...>, <a:...>, <aa:...> or <ref:...>.
-- In addition, the respellings as a whole of a given argument can be followed by various inline modifiers,
-- such as <t:...>, <rhyme:...>, <syll:...>, etc. The result of parsing goes into `parsed_respellings`, which
-- is a list of objects (one per numbered argument), each of which is a table of the form
--
-- {
-- terms = {TERM, TERM, ...},
-- audio = {AUDIO, AUDIO, ...},
-- rhyme = {RHYME, RHYME, ...},
-- syll = {SYLL, SYLL, ...},
-- hmp = {HMP, HMP, ...},
-- t = {GLOSS, GLOSS, ...},
-- pre = "PRE-TEXT" or nil,
-- post = "POST-TEXT" or nil,
-- bullets = NUM_BULLETS,
-- accents = {"ACCENT", "ACCENT", ...},
-- }
--
-- In this structure, TERM is an object that usually has the form
--
-- {
-- term = "RESPELLING",
-- ref = {"REF-SPEC", "REF-SPEC", ...},
-- q = {"QUALIFIER", "QUALIFIER", ...},
-- qq = {"QUALIFIER", "QUALIFIER", ...},
-- }
--
-- Note that in this structure, "REF-SPEC" of the form parsable by parse_references() in [[Module:references]].
--
-- Alternatively, if phonemic or phonetic IPA is given in place of a respelling, TERM will have the form
--
-- {
-- raw = true,
-- phonemic = "PHONEMIC",
-- phonetic = "PHONETIC",
-- ref = {"REF-SPEC", "REF-SPEC", ...},
-- q = {"QUALIFIER", "QUALIFIER", ...},
-- qq = {"QUALIFIER", "QUALIFIER", ...},
-- }
--
-- AUDIO is a table of the form
--
-- {
-- file = "FILE",
-- gloss = "GLOSS",
-- q = {"QUALIFIER", "QUALIFIER", ...},
-- qq = {"QUALIFIER", "QUALIFIER", ...},
-- a = {"ACCENT-QUALIFIER", "ACCENT-QUALIFIER", ...},
-- aa = {"ACCENT-QUALIFIER", "ACCENT-QUALIFIER", ...},
-- }
--
-- RHYME is a table of the form
--
-- {
-- rhyme = "RHYME",
-- num_syl = {NUM_SYL, NUM_SYL, ...},
-- q, qq, a, aa = (as for AUDIO),
-- }
--
-- SYLL is a table of the form (where `hyph` is required to be named this way for [[Module:hyphenation]])
--
-- {
-- syllabification = "SYL.LAB.LES",
-- hyph = {"SYL", "LAB", "LES"},
-- q, qq, a, aa = (as for AUDIO),
-- }
--
-- HMP is a table of the form
--
-- {
-- term = "HOMOPHONE",
-- gloss = "GLOSS" or nil,
-- pos = "POS" or nil,
-- alt = "ALT" or nil,
-- lit = "LIT" or nil,
-- id = "ID" or nil,
-- g = {"G", "G", ...},
-- q, qq, a, aa = (as for AUDIO),
-- }
--
-- GLOSS is a table of the form
--
-- {
-- poses = {"POS", "POS", ...} or nil,
-- gloss = "GLOSS" or nil,
-- }
for i, respelling in ipairs(respellings) do
if respelling:find("<") then
local param_mods = {
pre = { overall = true },
post = { overall = true },
bullets = {
overall = true,
type = "number",
},
t = {
overall = true,
store = "insert",
convert = parse_gloss,
},
rhyme = {
overall = true,
store = "insert-flattened",
convert = parse_rhyme,
},
syll = {
overall = true,
-- Not `store = "insert-flattened"`. parse_syll() does not generates a list but a structure where
-- the syllabifications are in `terms` and there's an additional overall property `cap` for the
-- caption (defaulting to "Syllabification"). FIXME: Rethink whether we even want "insert-flattened"
-- or just "insert" for the remaining pronunciation properties.
convert = parse_syll,
},
hmp = {
overall = true,
store = "insert-flattened",
convert = parse_homophone,
},
audio = {
overall = true,
store = "insert", -- not "insert-flattened" because parse_audio returns a single object
convert = parse_audio,
},
ref = { store = "insert" },
q = { store = "insert" },
qq = { store = "insert" },
a = {
item_dest = "accents",
overall = true,
convert = parse_accents,
},
}
local parsed = require(parse_utilities_module).parse_inline_modifiers(respelling, {
paramname = i,
param_mods = param_mods,
generate_obj = function(term, parse_err)
return parse_respelling(term, pagename, parse_err)
end,
pre_normalize_modifiers = function(data)
local modtext = data.modtext
modtext = modtext:match("^<(.*)>$")
if not modtext then
error(("Internal error: Passed-in modifier isn't surrounded by angle brackets: %s"):format(
data.modtext))
end
if modtext:find("%^") and not modtext:find("^t:") then
modtext = "t:" .. modtext
end
return "<" .. modtext .. ">"
end,
splitchar = ",",
outer_container = {},
})
if not parsed.bullets then
parsed.bullets = 1
end
table.insert(parsed_respellings, parsed)
else
local termobjs = {}
local function parse_err(msg)
error(msg .. ": " .. i .. "=" .. respelling)
end
for _, term in ipairs(split_on_comma(respelling)) do
table.insert(termobjs, parse_respelling(term, pagename, parse_err))
end
table.insert(parsed_respellings, {
terms = termobjs,
bullets = 1,
})
end
end
--------------------------------- 2. Generate IPA, rhymes and syllabification. ------------------------------------
-- Used for categorization below.
local syllabification_alignment_failed = false
-- Canonicalize syllabifications in `sylls` by convering '+' to the default syllabification of the pagename, '#' to
-- the pagename itself, and '-' to no syllabification (return `null_syll`). If '-' not seen, return `sylls`.
local function canonicalize_syllabification(sylls, null_syll)
for _, syll in ipairs(sylls.terms) do
if syll.syllabification == "+" then
syll.syllabification = syllabify_from_spelling(pagename, pagename)
syll.hyph = split_syllabified_spelling(syll.syllabification)
elseif syll.syllabification == "#" then
syll.syllabification = pagename
syll.hyph = {syll.syllabification}
elseif syll.syllabification == "-" then
return null_syll
end
end
return sylls
end
if overall_syll then
overall_syll = canonicalize_syllabification(overall_syll, {})
end
local function doesnt_count_for_rhyme(list)
if not list then
return false
end
local accent_no_count = {"colloquial", "obsolete", "nonstandard"}
for _, item in ipairs(list) do
for _, word_no_count in ipairs(accent_no_count) do
if item:find("%f[%w]" .. word_no_count .. "%f[%W]") then
return true
end
end
end
return false
end
-- Loop over individual respellings, processing each.
for _, parsed in ipairs(parsed_respellings) do
-- First, sort the specified accents and default to "Standard Indonesian".
local default_accent = "Standard Indonesian"
if not parsed.accents then
parsed.accents = {default_accent}
end
-- If more than one respelling given, then if any accent or qualifier has the words 'colloquial', 'obsolete' or
-- 'nonstandard' in them, don't generate a rhyme or a '#-syllable word' category.
local more_than_one_respelling = #parsed.terms > 1 or #parsed_respellings > 1
local is_standard = m_table.contains(parsed.accents, default_accent) and true or false
local all_terms_no_rhyme = more_than_one_respelling and doesnt_count_for_rhyme(parsed.accents)
parsed.pronuns = {}
for i, term in ipairs(parsed.terms) do
local phonemic, phonetic
if term.raw then
phonemic = term.raw_phonemic
phonetic = term.raw_phonetic
else
local ret = export.IPA(term.term)
phonemic = ret.phonemic
phonetic = ret.phonetic
end
local refs
if not term.ref then
refs = nil
else
refs = {}
for _, refspec in ipairs(term.ref) do
local this_refs = require("Module:references").parse_references(refspec)
for _, this_ref in ipairs(this_refs) do
table.insert(refs, this_ref)
end
end
end
local no_rhyme, rhyme_with_cat
-- Same check as above for colloquial/obsolete/relaxed but check the qualifiers, which are attached to
-- individual respellings rather than a single-line set of respellings.
no_rhyme = all_terms_no_rhyme or more_than_one_respelling and (
doesnt_count_for_rhyme(term.q) or doesnt_count_for_rhyme(term.qq)
)
if not no_rhyme then
local should_generate_rhyme, should_generate_cat = should_generate_rhyme_from_termobj(term)
no_rhyme = not should_generate_rhyme
rhyme_with_cat = should_generate_cat
end
local pronobj = {
raw = term.raw,
phonemic = phonemic,
phonetic = phonetic,
refs = refs,
q = term.q,
qq = term.qq,
no_rhyme = no_rhyme,
rhyme_with_cat = rhyme_with_cat,
}
table.insert(parsed.pronuns, pronobj)
end
if not parsed.syll then
if not overall_syll and any_words_have_vowels(pagename) then
for _, term in ipairs(parsed.terms) do
if not term.raw then
local syllabification = syllabify_from_spelling(term.term, pagename)
local aligned_syll = align_syllabification_to_spelling(syllabification, pagename)
if aligned_syll then
if not parsed.syll then
parsed.syll = {terms = {}}
end
m_table.insertIfNot(parsed.syll.terms, generate_syll_obj(aligned_syll))
else
syllabification_alignment_failed = true
end
end
end
end
else
parsed.syll = canonicalize_syllabification(parsed.syll, nil)
end
if not parsed.rhyme then
if overall_rhyme then
parsed.rhyme = nil
else
-- Generate the rhymes.
for _, pronun in ipairs(parsed.pronuns) do
-- We should have already excluded multiword terms and terms without vowels from rhyme generation
-- (see `no_auto_rhyme` below). But make sure to check that pronun.phonemic exists (it may not if
-- raw phonetic-only pronun is given), and rhyme isn't suppressed (which may happen if the term has
-- a qualifier "colloquial", "obsolete" or the like ).
if pronun.phonemic and not pronun.no_rhyme then
-- Count number of syllables by looking at syllable boundaries (including stress marks).
local num_syl = get_num_syl_from_ipa(pronun.phonemic)
-- Get the rhyme by truncating everything up through the last stress mark + any following
-- consonants, and remove syllable boundary markers.
local rhyme = convert_phonemic_to_rhyme(pronun.phonemic)
-- Copying qualifiers to rhymes:
-- (1) If there's only one pronunciation, displaying any associated qualifier on the rhyme is
-- is redundant, so don't do it.
-- (2) If there are multiple pronunciations, then we generally do want to copy the qualifier(s)
-- from pronunciation to rhyme, but only if a given rhyme either derives from a single
-- pronunciation, or derives from multiple pronunciations all of which share the same
-- qualifier(s). We do NOT want to combine two different qualifiers from two different
-- pronunciations.
-- (3) If there are multiple pronunciations that map to a single rhyme, and all pronunciations
-- share qualifiers, then we might consider omitting the qualifiers as redundant; but this
-- case will rarely happen so it might not be worth worrying about.
-- (4) Similarly, if there are multiple pronunciations where some have the rhyme suppressed (see
-- above), and all pronunciations share qualifiers, then we might consider omitting the
-- qualifiers as redundant; but again, this case will rarely happen (especially since in
-- almost all cases the suppressed-rhyme pronunciation will have distinctive qualifiers) so
-- it probably isn't worth worrying about. Note that in the common case where the qualifiers
-- of the rhyme-suppressed pronunciation differ from those of the rhyme-included
-- pronunciation, we do want to include the qualifiers of the rhyme-included pronunciation
-- (imagine e.g. there are two pronunciations marked "standard" and "colloquial"; we want to
-- mark the rhyme as "standard").
-- (4) There are two different types of qualifiers (left and right); when comparing qualifiers,
-- we need to compare the entire set of both qualifiers and make sure they both match
-- (although it will be rare to have both left and right qualifiers on a single
-- pronunciation).
local saw_already = false
if not parsed.rhyme then
parsed.rhyme = {}
end
for _, existing in ipairs(parsed.rhyme) do
if existing.rhyme == rhyme then
saw_already = true
-- We already saw this rhyme but possibly with a different number of syllables,
-- e.g. if the user specified two pronunciations 'biologi' (4 syllables) and
-- 'biologi' (5 syllables), both of which have the same rhyme /ogi/.
m_table.insertIfNot(existing.num_syl, num_syl)
if not m_table.deepEquals(existing.q, pronun.q) or not
m_table.deepEquals(existing.qq, pronun.qq) then
existing.q = nil
existing.qq = nil
end
break
end
end
if not saw_already then
table.insert(parsed.rhyme, {
rhyme = rhyme,
num_syl = {num_syl},
q = #parsed.pronuns > 1 and pronun.q or nil,
qq = #parsed.pronuns > 1 and pronun.qq or nil,
nocat = not pronun.rhyme_with_cat,
})
end
end
end
end
else
local no_rhyme = false
for _, rhyme in ipairs(parsed.rhyme) do
if rhyme.rhyme == "-" then
no_rhyme = true
break
end
end
if no_rhyme then
parsed.rhyme = nil
else
parsed.rhyme = process_specified_rhymes(parsed.rhyme, parsed.syll and parsed.syll.terms or {}, {parsed})
end
end
end
if overall_rhyme then
local no_overall_rhyme = false
for _, orhyme in ipairs(overall_rhyme) do
if orhyme.rhyme == "-" then
no_overall_rhyme = true
break
end
end
if no_overall_rhyme then
overall_rhyme = nil
else
local all_sylls
if overall_syll then
all_sylls = overall_syll
else
all_sylls = {}
for _, parsed in ipairs(parsed_respellings) do
if parsed.syll then
for _, syll in ipairs(parsed.syll.terms) do
m_table.insertIfNot(all_sylls, syll)
end
end
end
end
overall_rhyme = process_specified_rhymes(overall_rhyme, all_sylls, parsed_respellings)
end
end
-- Determine whether all sets of pronunciations have the same value for a pronunciation property (rhymes,
-- syllabifications or homophones). If so, we display them them only once at the bottom, otherwise beneath each set,
-- indented. This function takes one argument, the name of a slot specifying the pronunciation property, and
-- returns two values, a boolean indicating whether all values are the same and the first value seen (which will
-- be the only value seen if all values are the same).
local function all_sets_equal(parsed_slot)
local first_set
local all_sets_eq = true
for j, parsed in ipairs(parsed_respellings) do
if j == 1 then
first_set = parsed[parsed_slot]
elseif not m_table.deepEquals(first_set, parsed[parsed_slot]) then
all_sets_eq = false
break
end
end
return all_sets_eq, first_set
end
local all_rhyme_sets_eq, first_rhyme_ret = all_sets_equal("rhyme")
local all_syll_sets_eq, first_sylls = all_sets_equal("syll")
local all_hmp_sets_eq, first_hmps = all_sets_equal("hmp")
------------------------------ 3. Insert categories as appropriate. ---------------------------------
local categories = {}
local function get_rhymes_categories(rhymes)
if not rhymes then
return
end
end
get_rhymes_categories(overall_rhyme)
for _, parsed in ipairs(parsed_respellings) do
get_rhymes_categories(parsed.rhyme)
end
local function get_syll_categories(sylls)
if not sylls then
return
end
for _, syll in ipairs(sylls.terms) do
local syll_no_dot = "#" .. syll.syllabification .. "#"
syll_no_dot = syll.syllabification:gsub("%.([^ #])", "%1"):gsub("#", "")
if syll_no_dot ~= pagename then
mw.log(("For page '%s', saw syllabification '%s' not matching pagename"):format(
pagename, syll.syllabification))
m_table.insertIfNot(categories, ("%s terms with syllabification not matching pagename"):format(
lang:getCanonicalName()))
end
end
end
get_syll_categories(overall_syll)
for _, parsed in ipairs(parsed_respellings) do
get_syll_categories(parsed.syll)
end
if syllabification_alignment_failed then
table.insert(categories, ("%s terms where syllabification alignment failed"):format(lang:getCanonicalName()))
end
---------------------------- 4. Format IPA, rhymes and syllabification for display. -------------------------------
local function bullet_prefix(num_bullets)
return string.rep("*", num_bullets) .. " "
end
local function format_rhyme(rhymes)
return require(rhymes_module).format_rhymes {
lang = lang,
rhymes = rhymes,
force_cat = force_cat,
}
end
local function format_syllabifications(syllobj)
return require(hyphenation_module).format_hyphenations {
lang = lang,
hyphs = syllobj.terms,
caption = syllobj.cap or "Syllabification"
}
end
local function format_homophones(hmps)
return require("Module:homophones").format_homophones { lang = lang, homophones = hmps }
end
local function format_audio(audios, num_bullets)
local ret = {}
for i, audio in ipairs(audios) do
local text = require(audio_module).format_audio {
lang = lang,
file = audio.file,
caption = audio.gloss,
q = audio.q,
qq = audio.qq,
a = audio.a,
aa = audio.aa,
}
table.insert(ret, bullet_prefix(num_bullets) .. text)
end
return table.concat(ret, "\n")
end
-- Implement grouping by accent. If there is a run of more than one consecutive set of pronunciations with the
-- same accent, the accent goes on its own line and the pronunciations with this accent go below with an extra
-- bullet.
local prev_accents
local num_seen_with_these_accents
for j, parsed in ipairs(parsed_respellings) do
if m_table.deepEquals(prev_accents, parsed.accents) then
parsed.of_several_accents = "continuation"
num_seen_with_these_accents = num_seen_with_these_accents + 1
if num_seen_with_these_accents == 2 then
parsed_respellings[j - 1].of_several_accents = "first"
end
else
prev_accents = parsed.accents
num_seen_with_these_accents = 1
end
end
-- Pull out autogenerated pronunciations and move to the next line, indented.
for _, parsed in ipairs(parsed_respellings) do
local saw_next_line_pronuns = false
for _, pronun in ipairs(parsed.pronuns) do
if pronun.move_to_next_line then
saw_next_line_pronuns = true
break
end
end
if saw_next_line_pronuns then
local this_line_pronuns = {}
local next_line_pronuns = {}
for _, pronun in ipairs(parsed.pronuns) do
if pronun.move_to_next_line then
table.insert(next_line_pronuns, pronun)
else
table.insert(this_line_pronuns, pronun)
end
end
-- Now see if there are qualifiers shared among all elements of the next-line pronuns and deduplicate if so.
local function deduplicate_qualifiers(field, keepfirst)
local saw_nil = false
for _, pronun in ipairs(next_line_pronuns) do
if not pronun[field] then
saw_nil = true
break
end
end
if not saw_nil then
local m_setutil = require(set_utilities_module)
local qualifiers = {}
for _, pronun in ipairs(next_line_pronuns) do
table.insert(qualifiers, m_setutil.list_to_set(pronun[field]))
end
local all_shared = m_setutil.intersect(unpack(qualifiers))
if next(all_shared) then
local first_index, last_index
if keepfirst then
first_index = 2
last_index = #pronun
else
first_index = 1
last_index = #pronun - 1
end
for i = first_index, last_index do
local pronun = next_line_pronuns[i]
local new_qualifiers = {}
for _, q in ipairs(pronun[field]) do
if not all_shared[q] then
table.insert(new_qualifiers, q)
end
end
pronun[field] = new_qualifiers
end
end
end
end
parsed.pronuns = this_line_pronuns
parsed.next_line_pronuns = next_line_pronuns
end
end
-- Now actually format the pronunciations.
local textparts = {}
local first_line = true
local function ins_line(linetext, num_bullets)
if not first_line then
table.insert(textparts, "\n")
end
first_line = false
table.insert(textparts, bullet_prefix(num_bullets) .. linetext)
end
local min_num_bullets = math.huge
for j, parsed in ipairs(parsed_respellings) do
if parsed.bullets < min_num_bullets then
min_num_bullets = parsed.bullets
end
local accent_grouping_offset = 0
if parsed.of_several_accents == "first" then
ins_line(require(accent_qualifier_module).format_qualifiers(lang, parsed.accents), parsed.bullets)
end
local pronuns = format_pronun_line(parsed)
local accent_prefix
if not parsed.of_several_accents then
accent_prefix = require(accent_qualifier_module).format_qualifiers(lang, parsed.accents) .. " "
else
accent_prefix = ""
accent_grouping_offset = 1
end
ins_line(accent_prefix .. pronuns, parsed.bullets + accent_grouping_offset)
if parsed.next_line_pronuns then
ins_line(format_pronuns(parsed.next_line_pronuns), parsed.bullets + accent_grouping_offset + 1)
end
if parsed.audio then
-- format_audio() inserts multiple lines and handles bullets by itself.
table.insert(textparts, "\n")
-- If only one pronunciation set, add the audio with the same number of bullets, otherwise indent audio by
-- one more bullet.
table.insert(textparts, format_audio(parsed.audio,
(#parsed_respellings == 1 and parsed.bullets or parsed.bullets + 1) + accent_grouping_offset))
end
if not all_rhyme_sets_eq and parsed.rhyme then
ins_line(format_rhyme(parsed.rhyme), parsed.bullets + 1 + accent_grouping_offset)
end
if not all_syll_sets_eq and parsed.syll then
ins_line(format_syllabifications(parsed.syll), parsed.bullets + 1 + accent_grouping_offset)
end
if not all_hmp_sets_eq and parsed.hmp then
ins_line(format_homophones(parsed.hmp), parsed.bullets + 1 + accent_grouping_offset)
end
end
if overall_audio then
-- format_audio() inserts multiple lines and handles bullets by itself.
table.insert(textparts, "\n")
table.insert(textparts, format_audio(overall_audio, min_num_bullets))
end
if all_rhyme_sets_eq and first_rhyme_ret then
ins_line(format_rhyme(first_rhyme_ret), min_num_bullets)
end
if overall_rhyme then
ins_line(format_rhyme(overall_rhyme), min_num_bullets)
end
if all_syll_sets_eq and first_sylls then
ins_line(format_syllabifications(first_sylls), min_num_bullets)
end
if overall_syll then
ins_line(format_syllabifications(overall_syll), min_num_bullets)
end
if all_hmp_sets_eq and first_hmps then
ins_line(format_homophones(first_hmps), min_num_bullets)
end
if overall_hmp then
ins_line(format_homophones(overall_hmp), min_num_bullets)
end
return table.concat(textparts) ..
require("Module:utilities").format_categories(categories, lang, nil, nil, force_cat)
end
-- Meant to be called from a bot.
function export.pron_json(frame)
local iparams = {
[1] = {list = true, required = true},
["pagename"] = {required = true},
}
local iargs = require("Module:parameters").process(frame.args, iparams)
local data = {}
local syllabification_from_pagename = syllabify_from_spelling(iargs.pagename, iargs.pagename)
for _, respelling in ipairs(iargs[1]) do
local pronun = export.IPA(respelling)
local syllabification = export.syllabify_and_align(respelling, iargs.pagename)
local num_syl = get_num_syl_from_ipa(pronun.phonemic)
local rhyme = convert_phonemic_to_rhyme(pronun.phonemic)
table.insert(data, {
respelling = respelling,
phonemic = pronun.phonemic,
phonetic = pronun.phonetic,
syllabification = syllabification,
num_syl = num_syl,
rhyme = rhyme,
})
end
local retval = {
pagename = iargs.pagename,
syllabification_from_pagename = syllabification_from_pagename,
data = data,
}
return require("Module:JSON").toJSON(retval)
end
return export
5tsem08gkobq2nprecu8cnrawhaf4j3
八島
0
564108
2313257
2174992
2026-08-08T23:53:18Z
鍼灸
112313
2313257
wikitext
text/x-wiki
{{kana-DEFAULTSORT|はっとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[はっとう]]}}
#{{タグ|ja|島}}八つの[[しま|島]]。
==={{wago}}===
{{ja-wagokanji|やしま}}
#{{wagokanji of|やしま}}
9jrjeiato3ddtnz91pzihufb4ri3vt5
利用者:となりのふぁいやーくん
2
569225
2313307
2307618
2026-08-09T01:22:51Z
となりのふぁいやーくん
129376
2313307
wikitext
text/x-wiki
[https://ja.wikipedia.org/wiki/利用者:となりのふぁいやーくん]
35jamybpny6wi1ayobrjfcnl8mor79u
利用者・トーク:Keikei kanji
3
577848
2313386
2301919
2026-08-09T07:39:06Z
Kuroco2k
84207
/* 字源 */ 返信
2313386
wikitext
text/x-wiki
== 漢字項目の編集に関して ==
「文字情報」見出しは[[Wiktionary:編集室/2026年Q1#文字情報見出しについて]]にて「コード等」とすることで合意されておりますので見出し名は「コード等」として下さい。また、{{temp|character info}}は非推奨となっておりますので使わず、代わりに{{temp|文字コード}}を使用して下さい。--[[利用者:M-30722|M-30722]] ([[利用者・トーク:M-30722|トーク]]) 2026年3月24日 (火) 15:44 (UTC)
:わかりました。これから新規項目作成の時にはそうします。--[[利用者:Keikei kanji|Keikei kanji]] ([[利用者・トーク:Keikei kanji|トーク]]) 2026年3月25日 (水) 11:06 (UTC)
== 内部リンクを外部リンク風にしなくてよい ==
[[特別:差分/2299483|これ]]で、[https://ja.wiktionary.org/wiki/蜘#字源 別にわざわざこんなこと]しなくても、[[蜘#字源]]と書けばよいですよ(見た目分からなければソースコードを見てください)。--[[利用者:Kuroco2k|<span style="color:#000000">'''雛宮黒狐'''</span>]]([[利用者‐会話:Kuroco2k|<span style="color:#5a00cc">Talk</span>]]) 2026年7月22日 (水) 07:22 (UTC)
:これからはそうします。ありがとうございます。--[[利用者:Keikei kanji|Keikei kanji]] ([[利用者・トーク:Keikei kanji|トーク]]) 2026年7月22日 (水) 07:30 (UTC)
== 字源 ==
編集お疲れ様です
字源の編集にいくつか誤りがあるのでこちらで修正しています
以下気をつけてください
* 形声文字の音符に書く上古音は、大文字の諧声域にする
* 上古音の諧声関係を理解する(たとえば[[声母]]の s と t や、[[韻母]]の -m と -n は諧声しません)
* 本義を明確に(「[[胡]]」の「なんぞ」は本義ではなく仮借義、「[[働]]」の本義は漢語ではなく和語)
* 別字衝突を明確に(「[[歹]]」のスコップとチベット文字は、相反する別の説ではなく別字衝突です)
* 表意初文と後起の形声文字を区別する(「[[穎]]」は後起の形声文字で、象形文字ではありません)
--[[利用者:KashiDisco|KashiDisco]] ([[利用者・トーク:KashiDisco|トーク]]) 2026年7月22日 (水) 11:00 (UTC)
:成程。浅学がでしゃばりすぎました。音符の上古音は大文字に変更しておきました。
:質問なんですが、本義を確認するのは「[https://humanum.arts.cuhk.edu.hk/Lexis/lexi-mf/ 漢語多功能字庫]」でいいでしょうか。(「なんぞ」は単純な思い込みでした)--[[利用者:Keikei kanji|Keikei kanji]] ([[利用者・トーク:Keikei kanji|トーク]]) 2026年7月22日 (水) 11:31 (UTC)
::諧声域は[http://www.kaom.net/sgy_bzd.php 広韻形声考]のいちばん左の列にある記号を使ってくださいね
::本義については、実際に使われていた語義のうち、意符に最も関係が深いもの(たとえば「[[肉]]」であれば人体に関することなど)を採用することになります
::実例のある上古漢語を調べるのは [https://qwert-ly.github.io/xtext/ PBOC] というサイトが便利です
::漢語多功能字庫は『説文解字』の解釈をそのまま載せているケースがあり、『説文』は実例のない語義を想像で書いている(望形生訓)ことが多いので注意が必要です
::こんな感じでなかなか難しいので、単純な形声文字であれば構成だけ述べて終わりでも大丈夫ですよ--[[利用者:KashiDisco|KashiDisco]] ([[利用者・トーク:KashiDisco|トーク]]) 2026年7月22日 (水) 11:54 (UTC)
:::ありがとうございます。--[[利用者:Keikei kanji|Keikei kanji]] ([[利用者・トーク:Keikei kanji|トーク]]) 2026年7月22日 (水) 13:14 (UTC)
::::{{q|横から失礼}}
::::>「単純な形声文字であれば構成だけ述べて終わりでも大丈夫ですよ」
::::*[[:w:Wikipedia:検証可能性|ダメです]]。如何に単純な形声文字でも、そう書いてあるなんかしらの材料は持ってきてください。前もなんか[[利用者・トーク:Denifr|勘違いしてる人]]がいましたが、文になってないことは書けません。
::::--[[利用者:Kuroco2k|<span style="color:#000000">'''雛宮黒狐'''</span>]]([[利用者‐会話:Kuroco2k|<span style="color:#5a00cc">Talk</span>]]) 2026年7月27日 (月) 12:23 (UTC)
:::::[[駸]]の要約欄を見ていたら、「自明な形声文字だけに対する記述はほぼないです。漢字は形声文字が8~9割ですから基本的に形声文字と考える方が合理的」ですが...。(字源を書く人の9割近く) 勘違いされてますが、[[:w:Wikipedia:独自研究は載せない|ダメです]]。記述がないということは、それは書けないというだけです。--[[利用者:Kuroco2k|<span style="color:#000000">'''雛宮黒狐'''</span>]]([[利用者‐会話:Kuroco2k|<span style="color:#5a00cc">Talk</span>]]) 2026年8月9日 (日) 07:39 (UTC)
4d6i1bfey7erf772fii5rmim625lfnr
利用者:Keikei kanji
2
579104
2313350
2312949
2026-08-09T03:45:13Z
Keikei kanji
129888
2313350
wikitext
text/x-wiki
==自己紹介==
Keikei kanjiと申します。学生です。
[[古文字学]]の初学者ですので、管見の限り間違いのないようにしていますが、どうしても誤りがある場合があります。
*[[会意形声文字]]は現在必要性を感じた事がないため私は破棄します。
*基本上古音は布之道の「[http://www.kaom.net/sgy_bzd.php 廣韻形聲考]」に則ります。
=== 漢検一級漢字一覧(部首別) ===
* [[字源]]/[[意義]]/[[熟語]]整備。古いテンプレを使用していれば入れ替えもします。
《優先順位》
# 立項
# 字源/古いテンプレ入れ替え
# 熟語/意義
* とりあえず[https://jigennoshiori.jp/kanken-11 このサイト]に並びは準拠します。
「[[弌]]」,「[[丐]]」,「[[丕]]」,「[[丫]]」,「[[丱]]」,「[[乂]]」,「[[乖]]」,「[[予]]」,「[[于]]」,「[[弍]]」,「[[亟]]」,「[[亢]]」,「[[亶]]」,「[[仍]]」,「[[仄]]」,「[[仆]]」,「[[仂]]」,「[[仗]]」,「[[仞]]」,「[[仭]]」,「[[仟]]」,「[[价]]」,「[[伉]]」,「[[佚]]」,「[[估]]」,「[[佝]]」,「[[佗]]」,「[[佇]]」,「[[佞]]」,「[[余]]」,「[[佶]]」,「[[侈]]」,「[[侏]]」,「[[侘]]」,「[[佻]]」,「[[佩]]」,「[[佰]]」,「[[侑]]」,「[[佯]]」,「[[侖]]」,「[[俔]]」,「[[俟]]」,「[[俎]]」,「[[俘]]」,「[[俛]]」,「[[俑]]」,「[[俚]]」,「[[俐]]」,「[[俤]]」,「[[俥]]」,「[[倚]]」,「[[倨]]」,「[[倔]]」,「[[倪]]」,「[[倥]]」,「[[倅]]」,「[[伜]]」,「[[俶]]」,「[[倡]]」,「[[倩]]」,「[[倬]]」,「[[俾]]」,「[[俯]]」,「[[們]]」,「[[倆]]」,「[[偃]]」,「[[偕]]」,「[[偐]]」,「[[偈]]」,「[[偖]]」,「[[偬]]」,「[[偸]]」,「[[做]]」,「[[傀]]」,「[[傚]]」,「[[傅]]」,「[[傴]]」,「[[僉]]」,「[[僊󠄁]]」,「[[僊]]」,「[[僂]]」,「[[僖]]」,「[[僥]]」,「[[僭]]」,「[[僣]]」,「[[僮]]」,「[[僵]]」,「[[儁]]」,「[[儂]]」,「[[儕]]」,「[[儔]]」,「[[儚]]」,「[[儡]]」,「[[儳]]」,「[[儺]]」,「[[儷]]」,「[[儼]]」,「[[儻]]」,「[[兀]]」,「[[兌]]」,「[[兢]]」,「[[兪]]」,「[[冀]]」,「[[冉󠄁]]」,「[[冉]]」,「[[冏]]」,「[[冑]]」,「[[冓]]」,「[[冕]]」,「[[冤]]」,「[[寃]]」,「[[冢]]」,「[[冪]]」,「[[冱]]」,「[[冽]]」,「[[凊]]」,「[[凅]]」,「[[凜]]」,「[[凛]]」,「[[几]]」,「[[凩]]」,「[[凭]]」,「[[刋]]」,「[[刔]]」,「[[刎]]」,「[[刪]]」,「[[刮]]」,「[[刳]]」,「[[刱]]」,「[[剏]]」,「[[剄]]」,「[[剋]]」,「[[剌]]」,「[[剞]]」,「[[剔]]」,「[[剪]]」,「[[剴]]」,「[[剳]]」,「[[剿]]」,「[[𠞰]]」,「[[剽]]」,「[[劈]]」,「[[劬]]」,「[[劭]]」,「[[劼]]」,「[[勁]]」,「[[勍]]」,「[[勖]]」,「[[勗]]」,「[[勣]]」,「[[勦]]」,「[[飭]]」,「[[勠]]」,「[[匆]]」,「[[匈]]」,「[[甸]]」,「[[匍]]」,「[[匐]]」,「[[匏]]」,「[[匕]]」,「[[匚]]」,「[[匣]]」,「[[匯]]」,「[[匱]]」,「[[匳]]」,「[[卅]]」,「[[丗]]」,「[[卉]]」,「[[卉]]」,「[[卍]]」,「[[卮]]」,「[[巵]]」,「[[卻]]」,「[[厖]]」,「[[厥]]」,「[[厲]]」,「[[篡]]」,「[[簒]]」,「[[叟]]」,「[[燮]]」,「[[叮]]」,「[[叨]]」,「[[叭]]」,「[[叺]]」,「[[吁]]」,「[[吽]]」,「[[听]]」,「[[吭]]」,「[[吼]]」,「[[吮]]」,「[[吶]]」,「[[吩]]」,「[[吝]]」,「[[呎]]」,「[[呏]]」,「[[咏]]」,「[[呵]]」,「[[咎]]」,「[[呟]]」,「[[呱]]」,「[[呷]]」,「[[呰]]」,「[[呻]]」,「[[咀]]」,「[[呶]]」,「[[咄]]」,「[[咐]]」,「[[咆]]」,「[[哇]]」,「[[咢]]」,「[[咸]]」,「[[咥]]」,「[[咬]]」,「[[哄]]」,「[[哈]]」,「[[咨]]」,「[[咫]]」,「[[哂]]」,「[[咤]]」,「[[哥]]」,「[[哦]]」,「[[唏]]」,「[[唔]]」,「[[哽]]」,「[[哮]]」,「[[哭]]」,「[[哢]]」,「[[哳]]」,「[[唹󠄁]]」,「[[唹]]」,「[[啀]]」,「[[啣]]」,「[[售]]」,「[[啜]]」,「[[啅]]」,「[[啖]]」,「[[啗]]」,「[[唸]]」,「[[唳󠄂]]」,「[[唳]]」,「[[喑]]」,「[[喙]]」,「[[喀]]」,「[[喊]]」,「[[喟]]」,「[[啻]]」,「[[啾]]」,「[[喘]]」,「[[喞]]」,「[[啼]]」,「[[喃]]」,「[[喇]]」,「[[喨]]」,「[[嗚]]」,「[[嗇]]」,「[[嗟]]」,「[[嗄]]」,「[[嗜]]」,「[[嗤]]」,「[[嗔]]」,「[[嘔]]」,「[[嗷]]」,「[[嘖]]」,「[[嗾]]」,「[[嗽]]」,「[[嘛]]」,「[[噁]]」,「[[噎]]」,「[[嘴]]」,「[[嘶]]」,「[[嘸]]」,「[[噫]]」,「[[噤]]」,「[[嘯]]」,「[[噬]]」,「[[噪]]」,「[[噯]]」,「[[噦]]」,「[[嚆]]」,「[[嚀]]」,「[[嚊]]」,「[[嚠]]」,「[[嚔]]」,「[[嚏]]」,「[[嚥]]」,「[[嚮]]」,「[[嚮󠄃]]」,「[[嚬]]」,「[[嚶]]」,「[[囂]]」,「[[嚼]]」,「[[囁]]」,「[[囃]]」,「[[囀]]」,「[[囈]]」,「[[囮󠄁]]」,「[[囮]]」,「[[囹]]」,「[[圀]]」,「[[囿]]」,「[[圄]]」,「[[圉]]」,「[[圜]]」,「[[圦]]」,「[[坎]]」,「[[埳]]」,「[[圻]]」,「[[址]]」,「[[坏]]」,「[[坩]]」,「[[坡]]」,「[[坿]]」,「[[垓]]」,「[[垠]]」,「[[垤]]」,「[[埃]]」,「[[埆]]」,「[[埒]]」,「[[堊]]」,「[[堋󠄁]]」,「[[堋]]」,「[[堙󠄁]]」,「[[堙]]」,「[[堝]]」,「[[堡]]」,「[[堽]]」,「[[塋]]」,「[[塒]]」,「[[塹]]」,「[[墅]]」,「[[塿]]」,「[[墟]]」,「[[壅]]」,「[[壎]]」,「[[壑]]」,「[[壙]]」,「[[壜]]」,「[[壟]]」,「[[壼]]」,「[[夐]]」,「[[夥]]」,「[[夬]]」,「[[夭]]」,「[[夲]]」,「[[夸]]」,「[[夾]]」,「[[奕]]」,「[[奐]]」,「[[奎]]」,「[[奚]]」,「[[奘]]」,「[[弉]]」,「[[奠]]」,「[[奢]]」,「[[奸]]」,「[[妁]]」,「[[妝]]」,「[[妣]]」,「[[妲]]」,「[[姆]]」,「[[姨]]」,「[[姜]]」,「[[姸]]」,「[[妍]]」,「[[姙]]」,「[[姮]]」,「[[嫦]]」,「[[姚]]」,「[[娥]]」,「[[娟]]」,「[[娑]]」,「[[娜󠄁]]」,「[[娜]]」,「[[娉]]」,「[[婀]]」,「[[婬]]」,「[[婉]]」,「[[娵]]」,「[[娶]]」,「[[婢]]」,「[[婪]]」,「[[媚]]」,「[[媼]]」,「[[媾󠄁]]」,「[[媾]]」,「[[嫋]]」,「[[嫂󠄁]]」,「[[嫂]]」,「[[媽]]」,「[[嫣]]」,「[[嫗]]」,「[[嫩]]」,「[[嫖]]」,「[[嫺]]」,「[[嫻]]」,「[[嬌]]」,「[[嬋]]」,「[[嬖]]」,「[[嬲]]」,「[[嬪]]」,「[[嬶]]」,「[[嬾]]」,「[[孅]]」,「[[孀]]」,「[[孒]]」,「[[孑]]」,「[[孕]]」,「[[孚]]」,「[[孛]]」,「[[孥]]」,「[[孩]]」,「[[孰]]」,「[[孶]]」,「[[孳]]」,「[[孵]]」,「[[孺]]」,「[[孼]]」,「[[孽]]」,「[[宦]]」,「[[宸]]」,「[[寇]]」,「[[冦]]」,「[[寔]]」,「[[寐]]」,「[[寤]]」,「[[寞]]」,「[[寥]]」,「[[寰]]」,「[[尠]]」,「[[尨]]」,「[[尸]]」,「[[尹]]」,「[[屁]]」,「[[屎]]」,「[[屛]]」,「[[屏]]」,「[[屠]]」,「[[孱]]」,「[[屭]]」,「[[屓]]」,「[[屮]]」,「[[屶]]」,「[[屹]]」,「[[岌]]」,「[[岑]]」,「[[岔]]」,「[[岫]]」,「[[峙]]」,「[[峭]]」,「[[峪]]」,「[[崟]]」,「[[崛]]」,「[[崑]]」,「[[崔]]」,「[[崢]]」,「[[崚]]」,「[[崙]]」,「[[崘]]」,「[[嵌]]」,「[[嵒]]」,「[[嵎]]」,「[[嵋]]」,「[[嵬]]」,「[[嶇]]」,「[[嶄]]」,「[[嶂]]」,「[[嶢]]」,「[[嶝]]」,「[[嶬]]」,「[[嶮]]」,「[[嶷]]」,「[[嶼]]」,「[[巉]]」,「[[巍]]」,「[[巓]]」,「[[巒]]」,「[[巫]]」,「[[已]]」,「[[帚]]」,「[[帙]]」,「[[帑]]」,「[[帛]]」,「[[帷]]」,「[[幄]]」,「[[幃]]」,「[[幀]]」,「[[幎]]」,「[[幗]]」,「[[幔]]」,「[[幟]]」,「[[幢]]」,「[[幫]]」,「[[幇]]」,「[[幵]]」,「[[幷]]」,「[[并]]」,「[[幺]]」,「[[麼]]」,「[[庠]]」,「[[廁]]」,「[[厠]]」,「[[廂]]」,「[[廈]]」,「[[厦]]」,「[[廖]]」,「[[廝]]」,「[[厮]]」,「[[廛]]」,「[[壥]]」,「[[廡]]」,「[[廨]]」,「[[廩]]」,「[[龐]]」,「[[廬]]」,「[[廱]]」,「[[弁]]」,「[[彝]]」,「[[彜]]」,「[[弋]]」,「[[弑]]」,「[[弖]]」,「[[弩]]」,「[[弭]]」,「[[弸󠄁]]」,「[[弸]]」,「[[彎]]」,「[[弯]]」,「[[彗]]」,「[[彭]]」,「[[彷]]」,「[[徂]]」,「[[彿]]」,「[[彽]]」,「[[徊]]」,「[[很]]」,「[[徇]]」,「[[徙]]」,「[[徘]]」,「[[徨]]」,「[[徭]]」,「[[徼]]」,「[[忖]]」,「[[忻]]」,「[[忤]]」,「[[忸]]」,「[[忱]]」,「[[忝]]」,「[[忿]]」,「[[怡]]」,「[[怙]]」,「[[怩]]」,「[[怎]]」,「[[怛]]」,「[[怕]]」,「[[怫]]」,「[[怦]]」,「[[怏]]」,「[[怱]]」,「[[悤]]」,「[[怺]]」,「[[恚]]」,「[[恁]]」,「[[恪]]」,「[[恟]]」,「[[恊]]」,「[[恍]]」,「[[恃]]」,「[[恤]]」,「[[卹]]」,「[[恂]]」,「[[恬]]」,「[[恫]]」,「[[恙]]」,「[[悁]]」,「[[悍]]」,「[[悃]]」,「[[悚]]」,「[[悄]]」,「[[悛]]」,「[[悖]]」,「[[悒]]」,「[[悧]]」,「[[悋]]」,「[[悸]]」,「[[惓]]」,「[[悴]]」,「[[忰]]」,「[[悽]]」,「[[惆]]」,「[[悵]]」,「[[惘]]」,「[[悾]]」,「[[愕]]」,「[[愆]]」,「[[惶]]」,「[[惷]]」,「[[愀]]」,「[[惴]]」,「[[惺]]」,「[[愃]]」,「[[愒]]」,「[[惻]]」,「[[愍]]」,「[[愎]]」,「[[慍]]」,「[[慇]]」,「[[愾]]」,「[[愨]]」,「[[愧]]」,「[[慊]]」,「[[愿]]」,「[[愬]]」,「[[愴]]」,「[[慂]]」,「[[慳]]」,「[[慷]]」,「[[慙]]」,「[[慚]]」,「[[慫]]」,「[[慴]]」,「[[慥]]」,「[[慠]]」,「[[慟]]」,「[[慝]]」,「[[慓]]」,「[[慵]]」,「[[憖]]」,「[[憔]]」,「[[憚]]」,「[[憊]]」,「[[憑]]」,「[[憫]]」,「[[憮]]」,「[[懌]]」,「[[懊]]」,「[[懈]]」,「[[懃]]」,「[[懆]]」,「[[憺]]」,「[[懋]]」,「[[懍]]」,「[[懦]]」,「[[懣]]」,「[[懶]]」,「[[懺]]」,「[[懴]]」,「[[懿]]」,「[[懽]]」,「[[懾]]」,「[[懼]]」,「[[戈]]」,「[[戉]]」,「[[戍]]」,「[[戌]]」,「[[戔]]」,「[[戛]]」,「[[戞]]」,「[[戡]]」,「[[截]]」,「[[戮]]」,「[[戳]]」,「[[扁]]」,「[[扈󠄁]]」,「[[扈]]」,「[[扎]]」,「[[扣]]」,「[[扛]]」,「[[扞]]」,「[[扠]]」,「[[扨]]」,「[[扼]]」,「[[抉]]」,「[[找]]」,「[[抒]]」,「[[抓]]」,「[[抖]]」,「[[抃]]」,「[[抔]]」,「[[拗]]」,「[[拑]]」,「[[抻]]」,「[[拆]]」,「[[拈]]」,「[[拌]]」,「[[拊]]」,「[[拇]]」,「[[拋]]」,「[[抛]]」,「[[拿]]」,「[[拏]]」,「[[挌]]」,「[[拮]]」,「[[拱]]」,「[[挂]]」,「[[挈]]」,「[[拯]]」,「[[拵]]」,「[[挘]]」,「[[捐]]」,「[[捍]]」,「[[捏]]」,「[[掖]]」,「[[掎]]」,「[[掀]]」,「[[掫]]」,「[[捶]]」,「[[掣]]」,「[[掏]]」,「[[掉]]」,「[[掟]]」,「[[捫]]」,「[[捩󠄁]]」,「[[捩]]」,「[[掾]]」,「[[揩]]」,「[[揀]]」,「[[揆]]」,「[[揣]]」,「[[揉]]」,「[[揶]]」,「[[捓]]」,「[[揄]]」,「[[搤]]」,「[[搴]]」,「[[搆󠄁]]」,「[[搆]]」,「[[搦]]」,「[[搶]]」,「[[搓]]」,「[[搗]]」,「[[搏]]」,「[[搨]]」,「[[摶]]」,「[[摧]]」,「[[摎]]」,「[[摏]]」,「[[撕]]」,「[[撓]]」,「[[撥]]」,「[[撩]]」,「[[撈]]」,「[[撼]]」,「[[擒]]」,「[[擅]]」,「[[撻]]」,「[[擘]]」,「[[擂]]」,「[[擱]]」,「[[擠]]」,「[[擡]]」,「[[抬]]」,「[[擣]]」,「[[擯]]」,「[[擲]]」,「[[擺]]」,「[[攀]]」,「[[擽]]」,「[[攘]]」,「[[攢]]」,「[[攅]]」,「[[攤]]」,「[[攣]]」,「[[攫]]」,「[[攬]]」,「[[畋]]」,「[[敖]]」,「[[敞]]」,「[[敝]]」,「[[敲]]」,「[[斂]]」,「[[斃]]」,「[[斛]]」,「[[斟]]」,「[[斫]]」,「[[旃]]」,「[[旆]]」,「[[旁]]」,「[[旄]]」,「[[旌]]」,「[[旒]]」,「[[旛]]」,「[[旱]]」,「[[旰]]」,「[[杲]]」,「[[昊]]」,「[[昃]]」,「[[旻]]」,「[[杳]]」,「[[昵]]」,「[[昶]]」,「[[昴]]」,「[[昜]]」,「[[晏]]」,「[[晁]]」,「[[晟]]」,「[[晞]]」,「[[晤]]」,「[[晧]]」,「[[晨]]」,「[[晢]]」,「[[晣]]」,「[[晰]]」,「[[晳]]」,「[[暈]]」,「[[暉]]」,「[[暄]]」,「[[暘]]」,「[[暝]]」,「[[曁󠄁]]」,「[[曁]]」,「[[暹]]」,「[[暾]]」,「[[曄]]」,「[[曚]]」,「[[曠]]」,「[[昿]]」,「[[曦]]」,「[[曩]]」,「[[曬]]」,「[[曰]]」,「[[曷]]」,「[[曼]]」,「[[朏]]」,「[[朞]]」,「[[朦]]」,「[[朧]]」,「[[朮]]」,「[[朿]]」,「[[朶]]」,「[[朸]]」,「[[杆]]」,「[[桿]]」,「[[杠]]」,「[[杞]]」,「[[杙]]」,「[[杣]]」,「[[枉]]」,「[[杼]]」,「[[杪]]」,「[[枌]]」,「[[枋]]」,「[[枡]]」,「[[桝]]」,「[[桝󠄂]]」,「[[枷]]」,「[[柯]]」,「[[枴]]」,「[[柬]]」,「[[枳]]」,「[[柩]]」,「[[枸]]」,「[[柤]]」,「[[柞]]」,「[[柝]]」,「[[柢]]」,「[[柮]]」,「[[枹]]」,「[[柎]]」,「[[栞]]」,「[[框]]」,「[[栩]]」,「[[桀]]」,「[[栲]]」,「[[桎]]」,「[[桄]]」,「[[梳]]」,「[[栫]]」,「[[桙]]」,「[[枅]]」,「[[桛]]」,「[[桷]]」,「[[梟]]」,「[[梏]]」,「[[梭]]」,「[[梔]]」,「[[梛󠄁]]」,「[[梛]]」,「[[梃]]」,「[[桴]]」,「[[梵]]」,「[[梠]]」,「[[梲]]」,「[[梻]]」,「[[梺]]」,「[[椏]]」,「[[椁]]」,「[[棊]]」,「[[椈]]」,「[[棘]]」,「[[棍]]」,「[[棕]]」,「[[椶]]」,「[[椒]]」,「[[椄]]」,「[[棗]]」,「[[棣]]」,「[[棹]]」,「[[棠]]」,「[[椚]]」,「[[楹]]」,「[[楸]]」,「[[楫]]」,「[[楔]]」,「[[楮]]」,「[[椹]]」,「[[椽]]」,「[[椰]]」,「[[楡]]」,「[[楞󠄁]]」,「[[楞]]」,「[[楝]]」,「[[楾]]」,「[[榁]]」,「[[榀]]」,「[[槐]]」,「[[槁]]」,「[[槓]]」,「[[榾]]」,「[[槎]]」,「[[寨]]」,「[[槊]]」,「[[榻]]」,「[[槃]]」,「[[榔]]」,「[[榧]]」,「[[榑]]」,「[[榜]]」,「[[榕]]」,「[[榴]]」,「[[槔]]」,「[[槹]]」,「[[榱]]」,「[[樛]]」,「[[槿]]」,「[[槲]]」,「[[槧]]」,「[[樅]]」,「[[槭]]」,「[[樔]]」,「[[樊]]」,「[[樒]]」,「[[櫁]]」,「[[槨]]」,「[[橄]]」,「[[橇]]」,「[[橙]]」,「[[橦]]」,「[[橈]]」,「[[樸]]」,「[[檋]]」,「[[檔]]」,「[[檐]]」,「[[檠]]」,「[[檄]]」,「[[檣]]」,「[[檗]]」,「[[蘗]]」,「[[檻]]」,「[[櫃]]」,「[[櫂]]」,「[[檸]]」,「[[檳]]」,「[[檬]]」,「[[櫟]]」,「[[檪]]」,「[[櫚]]」,「[[櫪]]」,「[[櫨]]」,「[[櫱]]」,「[[蘖]]」,「[[欅]]」,「[[櫸]]」,「[[櫺]]」,「[[欒]]」,「[[欖]]」,「[[欠]]」,「[[欸]]」,「[[欷]]」,「[[欹]]」,「[[歃]]」,「[[歇]]」,「[[歉]]」,「[[歙]]」,「[[歔]]」,「[[歛]]」,「[[歟]]」,「[[歠]]」,「[[歿]]」,「[[殀]]」,「[[殄]]」,「[[殃]]」,「[[殍]]」,「[[殞]]」,「[[殤]]」,「[[殪]]」,「[[殫]]」,「[[殯]]」,「[[殲]]」,「[[殱]]」,「[[殷]]」,「[[毋]]」,「[[毟]]」,「[[毬]]」,「[[毫]]」,「[[毳]]」,「[[毯]]」,「[[氈]]」,「[[氓]]」,「[[氛]]」,「[[汞]]」,「[[汕]]」,「[[沂]]」,「[[汪]]」,「[[沍]]」,「[[沚]]」,「[[沁]]」,「[[沛]]」,「[[汨]]」,「[[沐]]」,「[[泄]]」,「[[泓]]」,「[[沽]]」,「[[泗]]」,「[[泅]]」,「[[泝]]」,「[[沱]]」,「[[沮]]」,「[[沾]]」,「[[泯]]」,「[[泛]]」,「[[泪]]」,「[[洟]]」,「[[洶]]」,「[[洫]]」,「[[洽]]」,「[[洸]]」,「[[洵]]」,「[[洌]]」,「[[洒]]」,「[[浣]]」,「[[涓]]」,「[[浚]]」,「[[浹]]」,「[[浙]]」,「[[涎]]」,「[[涕]]」,「[[涅]]」,「[[淹]]」,「[[涵]]」,「[[𣶏]]」,「[[涸]]」,「[[淆]]」,「[[淬]]」,「[[淌]]」,「[[淒]]」,「[[淅]]」,「[[淙]]」,「[[淤󠄁]]」,「[[淤]]」,「[[淪]]」,「[[渭]]」,「[[湮󠄁]]」,「[[湮]]」,「[[渙]]」,「[[湲]]」,「[[渾]]」,「[[渣]]」,「[[湫]]」,「[[渫]]」,「[[湍]]」,「[[渟]]」,「[[湃]]」,「[[渺]]」,「[[湎]]」,「[[渝]]」,「[[游]]」,「[[溂]]」,「[[溘]]」,「[[滉]]」,「[[溷]]」,「[[滓]]」,「[[溽]]」,「[[滄]]」,「[[溲]]」,「[[滔]]」,「[[滕󠄁]]」,「[[滕]]」,「[[溏]]」,「[[溥]]」,「[[滂]]」,「[[溟]]」,「[[滬󠄁]]」,「[[滬]]」,「[[滸]]」,「[[滾]]」,「[[漿]]」,「[[滲]]」,「[[漱]]」,「[[漲]]」,「[[滌]]」,「[[漾]]」,「[[漓]]」,「[[滷]]」,「[[澆]]」,「[[潺]]」,「[[潸]]」,「[[潯]]」,「[[潭]]」,「[[澂]]」,「[[潘]]」,「[[澎]]」,「[[潦]]」,「[[澳]]」,「[[澣]]」,「[[澡]]」,「[[澹]]」,「[[濆]]」,「[[澪]]」,「[[濬]]」,「[[濔]]」,「[[濘]]」,「[[濛]]」,「[[瀉]]」,「[[瀋]]」,「[[濺]]」,「[[瀑]]」,「[[瀁]]」,「[[瀏]]」,「[[濾]]」,「[[沪]]」,「[[瀛󠄁]]」,「[[瀛]]」,「[[瀚]]」,「[[瀝]]」,「[[瀟]]」,「[[瀰]]」,「[[瀾]]」,「[[瀲]]」,「[[灑]]」,「[[炙]]」,「[[炒]]」,「[[炯]]」,「[[烱]]」,「[[炷]]」,「[[炬]]」,「[[炸]]」,「[[炳]]」,「[[炮]]」,「[[烟]]」,「[[烋]]」,「[[烝]]」,「[[烙]]」,「[[焉]]」,「[[烽]]」,「[[焠]]」,「[[焜]]」,「[[焙]]」,「[[煥]]」,「[[煦]]」,「[[煢󠄁]]」,「[[煢]]」,「[[煌]]」,「[[煖]]」,「[[煬]]」,「[[熙]]」,「[[煕]]」,「[[熈]]」,「[[熄]]」,「[[熕]]」,「[[熨]]」,「[[熬]]」,「[[燗]]」,「[[熹]]」,「[[熾]]」,「[[燉]]」,「[[燔]]」,「[[燎]]」,「[[燠]]」,「[[燬]]」,「[[燧]]」,「[[燵]]」,「[[燻]]」,「[[熏]]」,「[[燼]]」,「[[燹]]」,「[[燿]]」,「[[爍]]」,「[[爛]]」,「[[爨]]」,「[[爬]]」,「[[爰]]」,「[[牀]]」,「[[牆]]」,「[[墻]]」,「[[牋]]」,「[[牖]]」,「[[牘]]」,「[[牴]]」,「[[牾]]」,「[[犂]]」,「[[犁]]」,「[[犇]]」,「[[犒]]」,「[[犖]]」,「[[犢]]」,「[[犲]]」,「[[狃]]」,「[[狆]]」,「[[狄]]」,「[[狎]]」,「[[狒]]」,「[[狢]]」,「[[狠]]」,「[[狡]]」,「[[狷]]」,「[[倏]]」,「[[猊]]」,「[[猗]]」,「[[猜]]」,「[[猖]]」,「[[猝]]」,「[[猋]]」,「[[猴]]」,「[[猯]]」,「[[猩]]」,「[[猥]]」,「[[猾]]」,「[[獏]]」,「[[獗]]」,「[[獪]]」,「[[獮]]」,「[[獰]]」,「[[獺]]」,「[[玫]]」,「[[珈]]」,「[[玻]]」,「[[珀]]」,「[[珥]]」,「[[珮]]」,「[[珞]]」,「[[琅]]」,「[[瑯]]」,「[[琥]]」,「[[琲]]」,「[[琺]]」,「[[瑇]]」,「[[玳]]」,「[[瑕]]」,「[[瑟]]」,「[[瑙]]」,「[[瑁]]」,「[[瑜]]」,「[[瑶]]」,「[[瑩]]」,「[[瑰]]」,「[[瑣]]」,「[[瑪]]」,「[[瑾]]」,「[[璋]]」,「[[璇]]」,「[[璢]]」,「[[璞]]」,「[[瓊]]」,「[[瓏]]」,「[[瓔]]」,「[[瓠󠄁]]」,「[[瓠]]」,「[[瓣]]」,「[[瓧]]」,「[[瓩]]」,「[[瓮]]」,「[[瓲]]」,「[[瓰]]」,「[[瓱]]」,「[[瓸]]」,「[[瓷]]」,「[[甄󠄁]]」,「[[甄]]」,「[[甃]]」,「[[甅]]」,「[[甌]]」,「[[甎]]」,「[[甍]]」,「[[甕]]」,「[[甓]]」,「[[甦]]」,「[[畛]]」,「[[畚]]」,「[[畤]]」,「[[畬]]」,「[[畭]]」,「[[畸]]」,「[[疆]]」,「[[疇]]」,「[[畴]]」,「[[疔]]」,「[[疚]]」,「[[疝]]」,「[[疥]]」,「[[疣]]」,「[[痂]]」,「[[疸]]」,「[[疳]]」,「[[痃]]」,「[[疵]]」,「[[疽]]」,「[[疼]]」,「[[疱]]」,「[[痍]]」,「[[痊]]」,「[[痒]]」,「[[痙]]」,「[[痣]]」,「[[痞]]」,「[[痾]]」,「[[痿]]」,「[[痼]]」,「[[瘁]]」,「[[痰]]」,「[[痹]]」,「[[痺]]」,「[[痲]]」,「[[痳]]」,「[[瘋]]」,「[[瘉]]」,「[[瘟]]」,「[[瘧]]」,「[[瘠]]」,「[[瘡]]」,「[[瘢]]」,「[[瘤]]」,「[[瘴]]」,「[[瘰]]」,「[[瘻]]」,「[[癇]]」,「[[癈]]」,「[[癆]]」,「[[癜]]」,「[[癘]]」,「[[癢]]」,「[[癨]]」,「[[癩]]」,「[[癧]]」,「[[癪]]」,「[[癬]]」,「[[癭]]」,「[[癰]]」,「[[癲]]」,「[[癴]]」,「[[癸]]」,「[[皁]]」,「[[皎]]」,「[[皖]]」,「[[皓]]」,「[[皙]]」,「[[皚]]」,「[[皰]]」,「[[皴]]」,「[[皹]]」,「[[皸]]」,「[[皺]]」,「[[盂]]」,「[[盍]]」,「[[盒]]」,「[[盞]]」,「[[盥]]」,「[[盧]]」,「[[盪]]」,「[[蘯]]」,「[[盻]]」,「[[眈]]」,「[[眇]]」,「[[眄]]」,「[[眩]]」,「[[眥]]」,「[[眦]]」,「[[眛]]」,「[[眷]]」,「[[眸]]」,「[[睇]]」,「[[睚]]」,「[[睨]]」,「[[睫]]」,「[[睛]]」,「[[睥]]」,「[[睾]]」,「[[睹]]」,「[[瞎]]」,「[[瞋]]」,「[[瞑]]」,「[[瞠]]」,「[[瞞]]」,「[[瞰]]」,「[[瞿]]」,「[[瞼]]」,「[[瞽]]」,「[[瞻]]」,「[[矇]]」,「[[矍]]」,「[[矚]]」,「[[矜]]」,「[[矣]]」,「[[矮]]」,「[[矼]]」,「[[矻]]」,「[[砌]]」,「[[砒]]」,「[[砠]]」,「[[硅]]」,「[[硼󠄁]]」,「[[硼]]」,「[[碚]]」,「[[碌]]」,「[[碣]]」,「[[碪]]」,「[[磑]]」,「[[磋]]」,「[[磔]]」,「[[碾]]」,「[[碼]]」,「[[磅]]」,「[[磊]]」,「[[磬]]」,「[[磧]]」,「[[磚]]」,「[[磽]]」,「[[磴]]」,「[[礒]]」,「[[礑]]」,「[[礙]]」,「[[礬]]」,「[[礫]]」,「[[祀]]」,「[[祠]]」,「[[祗]]」,「[[祟]]」,「[[祚]]」,「[[祓]]」,「[[祺]]」,「[[禊]]」,「[[禝]]」,「[[禧]]」,「[[禳]]」,「[[禹]]」,「[[禺]]」,「[[秉]]」,「[[秕]]」,「[[粃]]」,「[[秧]]」,「[[秬]]」,「[[秣]]」,「[[稈]]」,「[[稍]]」,「[[稠]]」,「[[稟]]」,「[[禀]]」,「[[稷]]」,「[[穡]]」,「[[穢]]」,「[[穹]]」,「[[穽]]」,「[[窈]]」,「[[窕]]」,「[[窘]]」,「[[窖]]」,「[[窩]]」,「[[窶]]」,「[[窿]]」,「[[竅]]」,「[[竄]]」,「[[竇]]」,「[[竍]]」,「[[竏]]」,「[[竕]]」,「[[竓]]」,「[[站]]」,「[[竚]]」,「[[竟]]」,「[[竡]]」,「[[竦]]」,「[[竢]]」,「[[竭]]」,「[[竰]]」,「[[竽]]」,「[[笏]]」,「[[笊]]」,「[[笆]]」,「[[笋]]」,「[[笳]]」,「[[笘]]」,「[[笙]]」,「[[笞]]」,「[[笵]]」,「[[笨]]」,「[[筐]]」,「[[筺]]」,「[[筓]]」,「[[笄]]」,「[[筍]]」,「[[筌]]」,「[[筅]]」,「[[筵]]」,「[[筥]]」,「[[筴]]」,「[[筧]]」,「[[筰]]」,「[[筱]]」,「[[筬]]」,「[[筮]]」,「[[筲]]」,「[[箝]]」,「[[箘]]」,「[[箍]]」,「[[箜]]」,「[[箚]]」,「[[劄]]」,「[[箒]]」,「[[箏]]」,「[[筝]]」,「[[箙󠄁]]」,「[[箙]]」,「[[篋]]」,「[[篁]]」,「[[篌]]」,「[[箴]]」,「[[篆]]」,「[[篪]]」,「[[篝]]」,「[[篩]]」,「[[簑]]」,「[[簔]]」,「[[篥]]」,「[[簀]]」,「[[簇]]」,「[[篳]]」,「[[篷]]」,「[[簍]]」,「[[簓]]」,「[[簗]]」,「[[簣]]」,「[[簧]]」,「[[簪]]」,「[[簟]]」,「[[簷]]」,「[[簫]]」,「[[簽]]」,「[[籌]]」,「[[籃]]」,「[[籔]]」,「[[籒]]」,「[[籀]]」,「[[籐󠄁]]」,「[[籐]]」,「[[籟]]」,「[[籙]]」,「[[籡]]」,「[[籤]]」,「[[籖]]」,「[[籥]]」,「[[籬]]」,「[[籵]]」,「[[粏]]」,「[[粤]]」,「[[粢]]」,「[[粨]]」,「[[粳]]」,「[[粲]]」,「[[粱]]」,「[[粽]]」,「[[糀]]」,「[[糂]]」,「[[糅]]」,「[[糒]]」,「[[糜]]」,「[[糝]]」,「[[糯]]」,「[[糲]]」,「[[糱]]」,「[[糴]]」,「[[糶]]」,「[[糺]]」,「[[紆]]」,「[[紂]]」,「[[紉]]」,「[[紜]]」,「[[紕]]」,「[[紊]]」,「[[絅]]」,「[[紮]]」,「[[紲]]」,「[[紿]]」,「[[紵]]」,「[[絆]]」,「[[絳]]」,「[[絖]]」,「[[絎]]」,「[[絨]]」,「[[絮]]」,「[[絏]]」,「[[綉]]」,「[[絛]]」,「[[綏]]」,「[[絽]]」,「[[綛󠄁]]」,「[[綛]]」,「[[絣]]」,「[[絣󠄁]]」,「[[綺]]」,「[[綮󠄁]]」,「[[綮]]」,「[[綦]]」,「[[綣]]」,「[[綵]]」,「[[緇]]」,「[[綽]]」,「[[綫]]」,「[[綢]]」,「[[綯]]」,「[[綸]]」,「[[綟󠄁]]」,「[[綟]]」,「[[綰]]」,「[[緘]]」,「[[緝]]」,「[[緤]]」,「[[緞]]」,「[[緲]]」,「[[緡]]」,「[[縅]]」,「[[縊]]」,「[[縕]]」,「[[縡]]」,「[[縒]]」,「[[縟]]」,「[[縉]]」,「[[縋]]」,「[[縢󠄂]]」,「[[縢]]」,「[[繆]]」,「[[繈]]」,「[[繦]]」,「[[縻]]」,「[[縵]]」,「[[縹]]」,「[[繃󠄁]]」,「[[繃]]」,「[[縷]]」,「[[縲]]」,「[[縺]]」,「[[繝]]」,「[[繖]]」,「[[繞]]」,「[[繙]]」,「[[繚]]」,「[[繧]]」,「[[繹]]」,「[[繳]]」,「[[繻]]」,「[[繽]]」,「[[辮]]」,「[[纃]]」,「[[纊]]」,「[[纈]]」,「[[纐]]」,「[[纓]]」,「[[纔]]」,「[[纛]]」,「[[纘]]」,「[[纉]]」,「[[纜]]」,「[[缶]]」,「[[缸]]」,「[[罅]]」,「[[罌]]」,「[[罍]]」,「[[罎]]」,「[[罕]]」,「[[罔]]」,「[[罘]]」,「[[罟]]」,「[[罠]]」,「[[罨]]」,「[[罩]]」,「[[罧]]」,「[[罹]]」,「[[羂]]」,「[[羆]]」,「[[羃]]」,「[[羇]]」,「[[羈]]」,「[[羌]]」,「[[羔]]」,「[[羝]]」,「[[羚]]」,「[[羯]]」,「[[羲]]」,「[[羹]]」,「[[羶]]」,「[[羸]]」,「[[翅]]」,「[[翊]]」,「[[翕]]」,「[[翔]]」,「[[翡]]」,「[[翦]]」,「[[翩󠄁]]」,「[[翩]]」,「[[翳]]」,「[[翹]]」,「[[耆]]」,「[[耄]]」,「[[耋]]」,「[[耘]]」,「[[耙]]」,「[[耜]]」,「[[耡]]」,「[[耦]]」,「[[耨]]」,「[[耿]]」,「[[聊]]」,「[[聆]]」,「[[聒]]」,「[[聘]]」,「[[聚]]」,「[[聟]]」,「[[聢]]」,「[[聳]]」,「[[聶]]」,「[[聿]]」,「[[肄]]」,「[[肆]]」,「[[肛]]」,「[[肓]]」,「[[肚]]」,「[[肭]]」,「[[肬]]」,「[[胛]]」,「[[胥]]」,「[[胙]]」,「[[胝]]」,「[[胄]]」,「[[胖]]」,「[[胚]]」,「[[胯]]」,「[[胱]]」,「[[脛]]」,「[[脩]]」,「[[脣]]」,「[[脯]]」,「[[腋]]」,「[[腆]]」,「[[脾]]」,「[[腓]]」,「[[腑]]」,「[[腁]]」,「[[胼]]」,「[[腱]]」,「[[腮]]」,「[[腥]]」,「[[腴]]」,「[[腠]]」,「[[膃]]」,「[[膈]]」,「[[膊]]」,「[[膀]]」,「[[膂]]」,「[[膠]]」,「[[膣]]」,「[[腟]]」,「[[膩]]」,「[[膰]]」,「[[膵]]」,「[[膾]]」,「[[臀]]」,「[[臂]]」,「[[膺]]」,「[[臉]]」,「[[臍]]」,「[[臑]]」,「[[臘]]」,「[[臙]]」,「[[臚]]」,「[[臠]]」,「[[臧]]」,「[[臻]]」,「[[臾]]」,「[[舁]]」,「[[舂]]」,「[[舅]]」,「[[舐]]」,「[[舒]]」,「[[舫]]」,「[[舸]]」,「[[舳]]」,「[[艀]]」,「[[艙]]」,「[[艘]]」,「[[艚]]」,「[[艝]]」,「[[艟]]」,「[[艤]]」,「[[艢]]」,「[[艨]]」,「[[艪]]」,「[[艫]]」,「[[艱]]」,「[[艸]]」,「[[艾]]」,「[[芍󠄁]]」,「[[芍]]」,「[[芒]]」,「[[芸]]」,「[[芫]]」,「[[芟]]」,「[[芻]]」,「[[蒭]]」,「[[芬]]」,「[[苆]]」,「[[苡]]」,「[[苣󠄁]]」,「[[苣]]」,「[[苟]]」,「[[苴]]」,「[[苳]]」,「[[范]]」,「[[苻]]」,「[[苹]]」,「[[苞]]」,「[[茆]]」,「[[苜]]」,「[[茉]]」,「[[苙]]」,「[[苺]]」,「[[莓]]」,「[[茵]]」,「[[茴]]」,「[[茱]]」,「[[茲]]」,「[[荀]]」,「[[茹]]」,「[[荐]]」,「[[荅]]」,「[[茯]]」,「[[茫]]」,「[[茗]]」,「[[茘]]」,「[[莅]]」,「[[莚]]」,「[[莪]]」,「[[莟]]」,「[[莢]]」,「[[茣]]」,「[[莎]]」,「[[荼]]」,「[[荳]]」,「[[荵󠄁]]」,「[[荵]]」,「[[莠]]」,「[[莉]]」,「[[莨]]」,「[[菴]]」,「[[萁]]」,「[[菫]]」,「[[菎]]」,「[[菽]]」,「[[萃]]」,「[[菘]]」,「[[菁]]」,「[[菠]]」,「[[菲]]」,「[[莽]]」,「[[萍]]」,「[[萢󠄁]]」,「[[萢]]」,「[[萸]]」,「[[葭]]」,「[[萼]]」,「[[葷]]」,「[[葩]]」,「[[葆]]」,「[[葯]]」,「[[萵]]」,「[[蒹]]」,「[[蒿]]」,「[[蒟]]」,「[[蓍]]」,「[[蒻]]」,「[[蓁]]」,「[[蓐]]」,「[[蓆]]」,「[[蓖]]」,「[[蒡]]」,「[[蓙]]」,「[[蔡]]」,「[[蓿]]」,「[[蓴󠄁]]」,「[[蓴]]」,「[[蔗]]」,「[[蔘]]」,「[[蔬]]」,「[[蔟]]」,「[[蔕]]」,「[[蒂]]」,「[[蔔]]」,「[[蓼]]」,「[[蕀]]」,「[[蕣]]」,「[[蕘]]」,「[[蕈]]」,「[[蕁]]」,「[[蕕]]」,「[[薀]]」,「[[薤]]」,「[[薈]]」,「[[薑]]」,「[[薊]]」,「[[薨]]」,「[[蕭]]」,「[[薏]]」,「[[薔]]」,「[[薛]]」,「[[薇]]」,「[[﨟]]」,「[[臈]]」,「[[薜]]」,「[[蕾]]」,「[[薐]]」,「[[蕷]]」,「[[薺]]」,「[[藉]]」,「[[藐]]」,「[[薹]]」,「[[藕]]」,「[[藜]]」,「[[藹]]」,「[[蘊]]」,「[[蘋]]」,「[[藾]]」,「[[藺]]」,「[[蘆]]」,「[[芦]]」,「[[蘢]]」,「[[蘚]]」,「[[蘿]]」,「[[虔]]」,「[[虒]]」,「[[虧]]」,「[[蚓]]」,「[[蚣]]」,「[[蚩]]」,「[[蚪]]」,「[[蚌]]」,「[[蚶]]」,「[[蚯]]」,「[[蛄]]」,「[[蛆]]」,「[[蚰]]」,「[[蛉]]」,「[[蚫]]」,「[[蛔]]」,「[[蛞]]」,「[[蛩]]」,「[[蛬]]」,「[[蛟]]」,「[[蛯]]」,「[[蜒]]」,「[[蜆]]」,「[[蜈]]」,「[[蜀]]」,「[[蜃]]」,「[[蛻]]」,「[[蜑]]」,「[[蜉]]」,「[[蜓]]」,「[[蜍]]」,「[[蛹]]」,「[[蜊]]」,「[[蜴]]」,「[[蜿]]」,「[[蜷]]」,「[[蜻]]」,「[[蜹]]」,「[[蚋]]」,「[[蜥]]」,「[[蜩]]」,「[[蜚]]」,「[[蝠]]」,「[[蝟]]」,「[[蝸]]」,「[[蝌]]」,「[[蝎]]」,「[[蝴]]」,「[[蝗]]」,「[[蝨]]」,「[[虱]]」,「[[蝮]]」,「[[蝘]]」,「[[蝙󠄁]]」,「[[蝙]]」,「[[蝓]]」,「[[蝣]]」,「[[蝲]]」,「[[螈]]」,「[[螗]]」,「[[螟]]」,「[[螂]]」,「[[蜋]]」,「[[螯]]」,「[[蟋]]」,「[[螽󠄁]]」,「[[螽]]」,「[[蟀]]」,「[[螫]]」,「[[蟄]]」,「[[螳]]」,「[[蟇]]」,「[[蟆]]」,「[[螻]]」,「[[螾]]」,「[[蟎]]」,「[[蟯]]」,「[[蟪]]」,「[[蟠]]」,「[[蟒󠄁]]」,「[[蠎]]」,「[[蠍]]」,「[[蠆]]」,「[[蠊]]」,「[[蟾]]」,「[[蟶]]」,「[[蟷]]」,「[[蠑]]」,「[[蠖]]」,「[[蠕]]」,「[[蠢]]」,「[[蠡]]」,「[[蠱]]」,「[[蠹]]」,「[[蠧]]」,「[[衄]]」,「[[衊]]」,「[[衍]]」,「[[衒]]」,「[[衙]]」,「[[衢]]」,「[[衫]]」,「[[衾]]」,「[[衮]]」,「[[袞]]」,「[[衵]]」,「[[衲]]」,「[[袂]]」,「[[袗]]」,「[[袒]]」,「[[袙]]」,「[[袢]]」,「[[袍]]」,「[[袤]]」,「[[袰]]」,「[[袵]]」,「[[衽]]」,「[[袿]]」,「[[袱]]」,「[[裃]]」,「[[裄]]」,「[[裔]]」,「[[裎]]」,「[[裘]]」,「[[裙]]」,「[[裹]]」,「[[褂]]」,「[[裼]]」,「[[裨]]」,「[[裴]]」,「[[裲]]」,「[[褄]]」,「[[褌]]」,「[[褊󠄁]]」,「[[褊]]」,「[[褓]]」,「[[褞]]」,「[[褥]]」,「[[褪]]」,「[[褫]]」,「[[襁]]」,「[[襄]]」,「[[褻]]」,「[[褶]]」,「[[褸]]」,「[[襌]]」,「[[褝]]」,「[[襠]]」,「[[襞]]」,「[[襦]]」,「[[襤]]」,「[[襭]]」,「[[襪󠄁]]」,「[[襪]]」,「[[襯]]」,「[[襴]]」,「[[襷]]」,「[[覃]]」,「[[覈]]」,「[[覓]]」,「[[覘]]」,「[[覡]]」,「[[覩]]」,「[[覦]]」,「[[覬]]」,「[[覯󠄁]]」,「[[覯]]」,「[[覲]]」,「[[覿]]」,「[[觚]]」,「[[觜]]」,「[[觝]]」,「[[觥]]」,「[[觴]]」,「[[訖]]」,「[[訐]]」,「[[訌]]」,「[[訛]]」,「[[訝]]」,「[[訥]]」,「[[訶]]」,「[[詁]]」,「[[詛]]」,「[[詒]]」,「[[詆]]」,「[[詈]]」,「[[詼]]」,「[[詭]]」,「[[詬]]」,「[[詢]]」,「[[誅]]」,「[[誂]]」,「[[誄]]」,「[[誨]]」,「[[誡]]」,「[[誑]]」,「[[誥]]」,「[[誚]]」,「[[誦]]」,「[[誣]]」,「[[諄]]」,「[[諍]]」,「[[諂]]」,「[[諚]]」,「[[諳]]」,「[[諤]]」,「[[諱]]」,「[[謔]]」,「[[諠]]」,「[[諢]]」,「[[諷]]」,「[[諞󠄁]]」,「[[諞]]」,「[[諛󠄁]]」,「[[諛]]」,「[[諡]]」,「[[謚]]」,「[[謌]]」,「[[謇]]」,「[[謖]]」,「[[謐]]」,「[[謗]]」,「[[謳]]」,「[[鞫]]」,「[[謦]]」,「[[謫]]」,「[[謾]]」,「[[謨]]」,「[[譁󠄁]]」,「[[譁]]」,「[[譌]]」,「[[譏]]」,「[[譎]]」,「[[譖]]」,「[[譛]]」,「[[譚]]」,「[[譚󠄁]]」,「[[譫]]」,「[[譟]]」,「[[譬]]」,「[[譴]]」,「[[讌]]」,「[[讐]]」,「[[讎]]」,「[[讒]]」,「[[讖]]」,「[[讙]]」,「[[谺]]」,「[[豁]]」,「[[谿]]」,「[[豈]]」,「[[豌]]」,「[[豕]]」,「[[豢]]」,「[[豺]]」,「[[貂]]」,「[[貉]]」,「[[貊]]」,「[[貎]]」,「[[貘]]」,「[[貽]]」,「[[貲]]」,「[[貶]]」,「[[賈]]」,「[[賁]]」,「[[賚]]」,「[[賽]]」,「[[賺]]」,「[[賻]]」,「[[贄]]」,「[[贅]]」,「[[贇]]」,「[[贏]]」,「[[贍]]」,「[[贐]]」,「[[贓]]」,「[[贔]]」,「[[贖]]」,「[[赧]]」,「[[赭]]」,「[[赬]]」,「[[赳]]」,「[[趁]]」,「[[趙]]」,「[[跂]]」,「[[趾]]」,「[[趺]]」,「[[跎]]」,「[[跏]]」,「[[跚]]」,「[[跖]]」,「[[跌]]」,「[[跛]]」,「[[跋]]」,「[[跪]]」,「[[跫]]」,「[[跟]]」,「[[跣]]」,「[[跼]]」,「[[踉]]」,「[[跿]]」,「[[踝]]」,「[[踑]]」,「[[踞]]」,「[[踟]]」,「[[蹂]]」,「[[踵]]」,「[[踰]]」,「[[踴]]」,「[[踴󠄁]]」,「[[蹊]]」,「[[蹇]]」,「[[蹉]]」,「[[蹌]]」,「[[蹐]]」,「[[蹈]]」,「[[蹙]]」,「[[蹤]]」,「[[蹠]]」,「[[蹣]]」,「[[蹕]]」,「[[蹻]]」,「[[蹶]]」,「[[蹲]]」,「[[蹼]]」,「[[躁]]」,「[[躅]]」,「[[躇]]」,「[[躄]]」,「[[躃]]」,「[[躋]]」,「[[躊]]」,「[[躑]]」,「[[躓]]」,「[[躔]]」,「[[躡]]」,「[[躪]]」,「[[躙]]」,「[[躬]]」,「[[躮]]」,「[[躱]]」,「[[躾]]」,「[[軈]]」,「[[軋]]」,「[[軛]]」,「[[軼]]」,「[[軫]]」,「[[軻]]」,「[[軾]]」,「[[輊]]」,「[[輅]]」,「[[輀]]」,「[[轜]]」,「[[輒]]」,「[[輙]]」,「[[輓]]」,「[[輜]]」,「[[輟]]」,「[[輛]]」,「[[輌]]」,「[[輦]]」,「[[輳]]」,「[[輻]]」,「[[輹]]」,「[[轅]]」,「[[轂]]」,「[[輾]]」,「[[轆]]」,「[[轌]]」,「[[轎]]」,「[[轗]]」,「[[轢]]」,「[[轤]]」,「[[辜]]」,「[[辟]]」,「[[辷]]」,「[[迚]]」,「[[迥]]」,「[[迢]]」,「[[迪]]」,「[[廸]]」,「[[迴]]」,「[[逅]]」,「[[迹]]」,「[[逕]]」,「[[逡]]」,「[[逑]]」,「[[逍]]」,「[[逞]]」,「[[逞󠄁]]」,「[[逖]]」,「[[逋]]」,「[[逧]]」,「[[逬]]」,「[[迸]]」,「[[逵]]」,「[[遏]]」,「[[遐]]」,「[[遑]]」,「[[遒]]」,「[[逎]]」,「[[遉]]」,「[[逾]]」,「[[遖]]」,「[[遘󠄁]]」,「[[遘]]」,「[[遨]]」,「[[遯]]」,「[[遶]]」,「[[邂]]」,「[[遽]]」,「[[邁]]」,「[[邀]]」,「[[邃󠄁]]」,「[[邃]]」,「[[邇]]」,「[[邏]]」,「[[邨]]」,「[[邯]]」,「[[邱]]」,「[[邵]]」,「[[郢]]」,「[[郤]]」,「[[郛]]」,「[[鄂]]」,「[[鄒]]」,「[[鄙]]」,「[[鄲]]」,「[[酊]]」,「[[酖]]」,「[[酣]]」,「[[酥]]」,「[[酩]]」,「[[酳]]」,「[[酲]]」,「[[醋]]」,「[[醂]]」,「[[醢]]」,「[[醯]]」,「[[醪]]」,「[[醵]]」,「[[醴]]」,「[[醺]]」,「[[釁]]」,「[[釉]]」,「[[釐]]」,「[[釵]]」,「[[鈞]]」,「[[釿]]」,「[[鈔]]」,「[[鈕]]」,「[[鈑]]」,「[[鉞]]」,「[[鉅]]」,「[[鉗]]」,「[[鉉]]」,「[[鉈]]」,「[[鈿]]」,「[[鉋]]」,「[[銕]]」,「[[銜]]」,「[[銖]]」,「[[銓]]」,「[[銛]]」,「[[鋏]]」,「[[銹]]」,「[[銷]]」,「[[鋩󠄁]]」,「[[鋩]]」,「[[錏]]」,「[[鋺]]」,「[[錙]]」,「[[錚]]」,「[[錣]]」,「[[錺]]」,「[[錵]]」,「[[錻]]」,「[[鍠]]」,「[[鍼]]」,「[[鍮]]」,「[[鎰]]」,「[[鎬]]」,「[[鎹]]」,「[[𫒼]]」,「[[鎺]]」,「[[鏖]]」,「[[鏗]]」,「[[鏨]]」,「[[鏘]]」,「[[鏃]]」,「[[鏝]]」,「[[鏐]]」,「[[鏈]]」,「[[鏤]]」,「[[鐚]]」,「[[鐔]]」,「[[鐓]]」,「[[鐃]]」,「[[鐐]]」,「[[鐶]]」,「[[鐫]]」,「[[鐺]]」,「[[鑒]]」,「[[鑠]]」,「[[鑢]]」,「[[鑞]]」,「[[鑪]]」,「[[鑰]]」,「[[鑵]]」,「[[鑷]]」,「[[鑽]]」,「[[鑚]]」,「[[鑼]]」,「[[鑾]]」,「[[钁]]」,「[[鑿]]」,「[[閂]]」,「[[閊]]」,「[[閔]]」,「[[閘]]」,「[[閨]]」,「[[閧]]」,「[[閭]]」,「[[閼󠄁]]」,「[[閼]]」,「[[閻]]」,「[[閹]]」,「[[閾]]」,「[[闊]]」,「[[濶]]」,「[[闃]]」,「[[闍]]」,「[[闌]]」,「[[闕]]」,「[[闔]]」,「[[闖]]」,「[[闡]]」,「[[闥]]」,「[[闢]]」,「[[阡]]」,「[[阨]]」,「[[阮]]」,「[[阯]]」,「[[陂]]」,「[[陌]]」,「[[陋]]」,「[[陜]]」,「[[陞]]」,「[[陝]]」,「[[陟]]」,「[[陲]]」,「[[陬]]」,「[[隋]]」,「[[隍]]」,「[[隘]]」,「[[隗]]」,「[[隕]]」,「[[隧]]」,「[[隰]]」,「[[隴]]」,「[[雎]]」,「[[雋]]」,「[[雉]]」,「[[雍]]」,「[[雕]]」,「[[霍]]」,「[[襍]]」,「[[雖]]」,「[[雹]]」,「[[霄]]」,「[[霆]]」,「[[霈]]」,「[[霓]]」,「[[霎]]」,「[[霑]]」,「[[霏]]」,「[[霖]]」,「[[霙]]」,「[[霤]]」,「[[霪]]」,「[[霰]]」,「[[霹]]」,「[[霸]]」,「[[霽]]」,「[[霾]]」,「[[靄]]」,「[[靆]]」,「[[靂]]」,「[[靉]]」,「[[靠]]」,「[[靡]]」,「[[靤]]」,「[[靦]]」,「[[靨]]」,「[[勒]]」,「[[靫]]」,「[[鞅]]」,「[[靼]]」,「[[鞁]]」,「[[靺]]」,「[[鞆]]」,「[[鞋]]」,「[[鞏]]」,「[[鞐]]」,「[[鞜]]」,「[[鞨]]」,「[[鞦]]」,「[[鞣]]」,「[[鞳]]」,「[[鞴]]」,「[[韆]]」,「[[韈]]」,「[[韋]]」,「[[韞]]」,「[[韜]]」,「[[齏]]」,「[[韲]]」,「[[韵]]」,「[[韶]]」,「[[頏]]」,「[[頌]]」,「[[頤]]」,「[[頡]]」,「[[頷]]」,「[[頽]]」,「[[頹]]」,「[[顆]]」,「[[顋]]」,「[[顫]]」,「[[顬]]」,「[[顰]]」,「[[顱]]」,「[[顴]]」,「[[顳]]」,「[[颪]]」,「[[颯]]」,「[[颱]]」,「[[颶]]」,「[[飄]]」,「[[飆]]」,「[[飜]]」,「[[飩]]」,「[[飫]]」,「[[餃]]」,「[[餉]]」,「[[餒]]」,「[[餔]]」,「[[餡]]」,「[[餞]]」,「[[餤]]」,「[[餬]]」,「[[餮]]」,「[[餽]]」,「[[餾]]」,「[[饂]]」,「[[饉]]」,「[[饅]]」,「[[饐]]」,「[[饋]]」,「[[饑]]」,「[[饒]]」,「[[饌]]」,「[[饕]]」,「[[馗]]」,「[[馘]]」,「[[馥]]」,「[[馭]]」,「[[馮]]」,「[[駟]]」,「[[駛]]」,「[[駝]]」,「[[駑]]」,「[[駘]]」,「[[駭]]」,「[[駮]]」,「[[駱]]」,「[[駻]]」,「[[駸]]」,「[[騁]]」,「[[騏]]」,「[[騅]]」,「[[騈]]」,「[[駢]]」,「[[騙]]」,「[[騫]]」,「[[騭]]」,「[[驂]]」,「[[驀]]」,「[[驃]]」,「[[騾]]」,「[[驕]]」,「[[驍]]」,「[[驎]]」,「[[驟]]」,「[[驢]]」,「[[驥]]」,「[[驤]]」,「[[驩]]」,「[[驪]]」,「[[骭]]」,「[[骰]]」,「[[骼]]」,「[[髀]]」,「[[髏]]」,「[[髑]]」,「[[髢]]」,「[[髥]]」,「[[髯]]」,「[[髣]]」,「[[髦]]」,「[[髫]]」,「[[髴]]」,「[[髱]]」,「[[髷]]」,「[[髻]]」,「[[鬆]]」,「[[鬘]]」,「[[鬚]]」,「[[鬟]]」,「[[鬢]]」,「[[鬣]]」,「[[鬧]]」,「[[閙]]」,「[[鬨]]」,「[[鬩]]」,「[[鬭]]」,「[[鬮]]」,「[[鬯]]」,「[[鬻]]」,「[[魃]]」,「[[魄]]」,「[[魏]]」,「[[魍]]」,「[[魎]]」,「[[魑]]」,「[[魘]]」,「[[魞]]」,「[[魳]]」,「[[魴]]」,「[[魬]]」,「[[魸]]」,「[[鮓]]」,「[[鮃]]」,「[[鮑]]」,「[[鮖]]」,「[[鮗󠄁]]」,「[[鮗]]」,「[[鮇]]」,「[[𩶗]]」,「[[鮠]]」,「[[鮨]]」,「[[鮟]]」,「[[鮴]]」,「[[鮲]]」,「[[鮱]]」,「[[鯀]]」,「[[鯊]]」,「[[鮹]]」,「[[鮸]]」,「[[鯏]]」,「[[鯑]]」,「[[鯒]]」,「[[鯎]]」,「[[鯐]]」,「[[鯣]]」,「[[鯢]]」,「[[鯤]]」,「[[鯔]]」,「[[鯡]]」,「[[鯲󠄁]]」,「[[鯲]]」,「[[鯱]]」,「[[鯰]]」,「[[鰕]]」,「[[鰔]]」,「[[鰉]]」,「[[鰓]]」,「[[鰌]]」,「[[鰆]]」,「[[鰈]]」,「[[鰒]]」,「[[鰊]]」,「[[鰄]]」,「[[鰘]]」,「[[鰙]]」,「[[鰚]]」,「[[鰮]]」,「[[鰛]]」,「[[鰥]]」,「[[鰤]]」,「[[鰧]]」,「[[鰰]]」,「[[鱆]]」,「[[鰾]]」,「[[鱇]]」,「[[鱏]]」,「[[鱓]]」,「[[鱚]]」,「[[鱛]]」,「[[𬵪]]」,「[[鱟]]」,「[[鱠]]」,「[[鱧]]」,「[[鱩]]」,「[[鱶]]」,「[[鱲]]」,「[[鱸]]」,「[[鳧]]」,「[[鳬]]」,「[[鳰]]」,「[[鴉]]」,「[[鴃]]」,「[[鴂]]」,「[[鴆]]」,「[[鴥]]」,「[[鴪]]」,「[[鴣]]」,「[[鴟]]」,「[[鴕]]」,「[[鴒]]」,「[[鵄]]」,「[[鵁]]」,「[[鴿]]」,「[[鴾]]」,「[[鵆]]」,「[[鵇]]」,「[[鵝]]」,「[[鵞]]」,「[[鵑]]」,「[[鵤]]」,「[[鵥]]」,「[[鵲]]」,「[[鶉]]」,「[[鶇]]」,「[[鵯]]」,「[[鵺]]」,「[[鶄]]」,「[[鶍]]」,「[[鶎]]」,「[[鶪]]」,「[[鵙]]」,「[[鶚]]」,「[[鶤]]」,「[[鶩]]」,「[[鶫]]」,「[[鶲]]」,「[[鷁]]」,「[[鶻]]」,「[[鶸]]」,「[[鶺]]」,「[[鷆]]」,「[[鷂]]」,「[[鷙]]」,「[[鷓]]」,「[[鷸]]」,「[[鷦]]」,「[[鷭]]」,「[[鷯]]」,「[[鷽]]」,「[[鸛]]」,「[[鸞]]」,「[[鹵]]」,「[[鹹]]」,「[[麈]]」,「[[麋]]」,「[[麌]]」,「[[麕]]」,「[[麇]]」,「[[麑]]」,「[[麝]]」,「[[麤]]」,「[[麁]]」,「[[麩]]」,「[[麸]]」,「[[麭]]」,「[[麾]]」,「[[黌]]」,「[[黎]]」,「[[黏]]」,「[[黐]]」,「[[黔]]」,「[[黜]]」,「[[黝]]」,「[[黠]]」,「[[黥]]」,「[[黯]]」,「[[黴]]」,「[[黶]]」,「[[黷]]」,「[[黹]]」,「[[黻]]」,「[[黼]]」,「[[黽]]」,「[[鼇]]」,「[[鼈]]」,「[[鼕]]」,「[[鼬]]」,「[[鼯]]」,「[[鼴]]」,「[[鼹]]」,「[[鼾]]」,「[[齎]]」,「[[齔]]」,「[[齣]]」,「[[齟]]」,「[[齠]]」,「[[齦]]」,「[[齧]]」,「[[囓]]」,「[[齬]]」,「[[齪]]」,「[[齷]]」,「[[齲]]」,「[[齶]]」,「[[龕]]」,「[[龠]]」
=== メモ ===
==== 諧声域 ====
M- ⇔ MR-
S- ⇔ SR-
S- ⇔ DZ-
fzdu853ddwzsq5sduy6r94zmsh2alof
モジュール・トーク:number list/data/hu
829
581646
2313403
2217066
2026-08-09T08:13:23Z
Kuroco2k
84207
/* 英語版から移植しましたが… */ 返信
2313403
wikitext
text/x-wiki
== 英語版から移植しましたが… ==
実際にハンガリー語の数詞の項目で[[テンプレート:number box]]を使用すると、エラーが発生します。修正されるまでは使用しないでください。Module:number listが英語版と日本語版で内部で使用しているメソッドが変わっていたりするので、その辺りに原因があるかもしれません。--[[利用者:NekoyamaWataru|NekoyamaWataru]] ([[利用者・トーク:NekoyamaWataru|トーク]]) 2026年4月15日 (水) 00:07 (UTC)
:@[[利用者:NekoyamaWataru|NekoyamaWataru]] 最低限動かせるようにしてみました。自環境ではとりあえず問題なく表示されますが、そちらで不具合があったらまだ使うべきでないかもしれません。また、まだ未翻訳の箇所も多々見受けられるようです。--[[利用者:Kuroco2k|<span style="color:#000000">'''雛宮黒狐'''</span>]]([[利用者‐会話:Kuroco2k|<span style="color:#5a00cc">Talk</span>]]) 2026年8月9日 (日) 08:13 (UTC)
m8p1p0j95n2jvmlq447uy8k0abqmrac
モジュール:lt-pron
828
589513
2313439
2281497
2026-08-09T10:29:32Z
Kuroco2k
84207
長かった...。
2313439
Scribunto
text/plain
--[==[
Backend for {{lt-pr}}: IPA, hyphenation, and rhyme generation.
Author: TongcyDai
]==]
local export = {}
local m_debug = require("Module:debug")
local m_str = require("Module:string utilities")
local m_lt_common = require("Module:lt-common")
local u = m_str.char
local ulower = m_str.lower
local uupper = m_str.upper
local usub = m_str.sub
local ulen = m_str.len
local ugsub = m_str.gsub
local ufind = m_str.find
local umatch = m_str.match
local rsplit = m_str.split
local lang = require("Module:languages").getByCode("lt")
-- Accent mark constants (re-exported from Module:lt-common to keep all
-- Lithuanian modules in sync).
local GRAVE = m_lt_common.GRAVE -- U+0300
local ACUTE = m_lt_common.ACUTE -- U+0301
local TILDE = m_lt_common.TILDE -- U+0303
local DOTABOVE = m_lt_common.DOTABOVE -- U+0307
local OGONEK = m_lt_common.OGONEK -- U+0328
-- M4: Reuse Module:lt-common's display formatter directly instead of
-- maintaining a parallel local copy.
local makeDisplayText = m_lt_common.makeDisplayText
-- Liaison marker: U+203F UNDERTIE — separates clitics from their stressed host
-- in input. The phonological grammar treats it like a "soft" word boundary that
-- is transparent to several cross-word processes (palatalization spread,
-- geminate / fricative simplification, place assimilation), per VLKK §19–§23.
local LIAISON = u(0x203F)
-- Lazy-loaded external modules
local m_IPA
local audio_module = "Module:audio"
local homophones_module = "Module:homophones"
local hyphenation_module = "Module:hyphenation"
local rhymes_module = "Module:rhymes"
local parameters_module = "Module:parameters"
local parse_util_module = "Module:parse utilities"
local concat = table.concat
local insert = table.insert
local lang_obj
local function get_lang()
if not lang_obj then
lang_obj = require("Module:languages").getByCode("lt")
end
return lang_obj
end
local function track(reason)
m_debug.track("lt-pron/" .. reason)
end
-- ============================================================================
-- SECTION 1: Orthography & Phonology Definitions
-- ============================================================================
-- Suffix table for automatic phonetic adjustments (currently disabled)
-- Exact matching lists (must include precomposed normalized tone markers)
--[[
local SUFFIX_LOAN = {
["fòbas"]=true, ["fòbė"]=true, ["fòbija"]=true, ["fònas"]=true, ["fònė"]=true,
["lògas"]=true, ["lògija"]=true, ["skòpas"]=true
}
--]]
-- Consonant classes for syllabification (Sonority Hierarchy)
local CLASS = {
R = {["l"]=true, ["m"]=true, ["n"]=true, ["r"]=true, ["v"]=true, ["j"]=true},
S = {["s"]=true, ["z"]=true, ["š"]=true, ["ž"]=true, ["f"]=true, ["x"]=true, ["h"]=true, ["ch"]=true},
T = {["p"]=true, ["b"]=true, ["t"]=true, ["d"]=true, ["k"]=true, ["g"]=true, ["c"]=true, ["dz"]=true, ["č"]=true, ["dž"]=true}
}
-- Front vowels trigger palatalization
local FRONT_V = {
["e"]=true, ["ę"]=true, ["ė"]=true, ["i"]=true, ["į"]=true, ["y"]=true, ["ie"]=true, ["ei"]=true, ["eu"]=true
}
-- Vowel -> Base IPA mapping (Unstressed short/inherent)
local V_IPA = {
["a"] = "ɐ", ["ą"] = "ɑː", ["e"] = "ɛ", ["ę"] = "æː", ["ė"] = "eː",
["i"] = "ɪ", ["į"] = "iː", ["y"] = "iː",
["u"] = "ʊ", ["ų"] = "uː", ["ū"] = "uː", ["o"] = "oː",
["ie"] = "iɛ", ["uo"] = "uɔ",
-- Unstressed simple diphthongs
["ai"] = "ɐɪ", ["au"] = "ɒʊ", ["ei"] = "ɛɪ", ["eu"] = "ɛʊ",
["ui"] = "ʊɪ", ["oi"] = "ɔɪ", ["ou"] = "ɔʊ"
}
-- Consonant -> Base IPA mapping (Unpalatalized)
local CONS_IPA = {
["b"] = "b", ["c"] = "t͡s", ["č"] = "t͡ʃ", ["d"] = "d",
["dz"] = "d͡z", ["dž"] = "d͡ʒ", ["ch"] = "x",
["f"] = "f", ["g"] = "ɡ", ["h"] = "ɣ", ["j"] = "j",
["k"] = "k", ["l"] = "l", ["m"] = "m", ["n"] = "n",
["p"] = "p", ["r"] = "r", ["s"] = "s", ["š"] = "ʃ",
["t"] = "t", ["v"] = "ʋ", ["z"] = "z", ["ž"] = "ʒ",
}
-- Voicing pairs for Voicing Assimilation
local VOICING_PAIRS = {
["p"]="b", ["b"]="p", ["t"]="d", ["d"]="t", ["k"]="g", ["g"]="k",
["c"]="dz", ["dz"]="c", ["č"]="dž", ["dž"]="č",
["s"]="z", ["z"]="s", ["š"]="ž", ["ž"]="š", ["x"]="ɣ", ["ɣ"]="x"
}
local function is_voiced(c)
local voiced_set = {["b"]=true, ["d"]=true, ["g"]=true, ["dz"]=true, ["dž"]=true, ["z"]=true, ["ž"]=true, ["ɣ"]=true}
return voiced_set[c] == true
end
-- Accent pairs for conjugation module support
-- Maps base vowel/diphthong to accented forms (falling/rising)
local ACCENT_PAIRS = {
-- Long vowels (acute or tilde)
["ą"] = {acute="ą"..ACUTE, tilde="ą"..TILDE},
["ę"] = {acute="ę"..ACUTE, tilde="ę"..TILDE},
["ė"] = {acute="ė"..ACUTE, tilde="ė"..TILDE},
["y"] = {acute="y"..ACUTE, tilde="y"..TILDE},
["į"] = {acute="į"..ACUTE, tilde="į"..TILDE},
["ū"] = {acute="ū"..ACUTE, tilde="ū"..TILDE},
["ų"] = {acute="ų"..ACUTE, tilde="ų"..TILDE},
-- a/e can be short (grave) or long (tilde)
["a"] = {grave="a"..GRAVE, tilde="a"..TILDE},
["e"] = {grave="e"..GRAVE, tilde="e"..TILDE},
-- o: ó/õ/o are long, ò is short
["o"] = {acute="o"..ACUTE, grave="o"..GRAVE, tilde="o"..TILDE},
-- Short vowels i/u (only grave)
["i"] = {grave="i"..GRAVE},
["u"] = {grave="u"..GRAVE},
-- Simple diphthongs
["ai"] = {acute="a"..ACUTE.."i", tilde="a".."i"..TILDE},
["au"] = {acute="a"..ACUTE.."u", tilde="a".."u"..TILDE},
["ei"] = {acute="e"..ACUTE.."i", tilde="e".."i"..TILDE},
["ui"] = {grave="u"..GRAVE.."i", tilde="u".."i"..TILDE},
-- Complex diphthongs
["ie"] = {acute="i"..ACUTE.."e", tilde="i".."e"..TILDE},
["uo"] = {acute="u"..ACUTE.."o", tilde="u".."o"..TILDE},
-- Mixed diphthongs (a series - acute/tilde)
["al"] = {acute="a"..ACUTE.."l", tilde="a".."l"..TILDE},
["am"] = {acute="a"..ACUTE.."m", tilde="a".."m"..TILDE},
["an"] = {acute="a"..ACUTE.."n", tilde="a".."n"..TILDE},
["ar"] = {acute="a"..ACUTE.."r", tilde="a".."r"..TILDE},
-- Mixed diphthongs (e series - acute/grave/tilde, grave for foreign)
["el"] = {acute="e"..ACUTE.."l", grave="e"..GRAVE.."l", tilde="e".."l"..TILDE},
["em"] = {acute="e"..ACUTE.."m", grave="e"..GRAVE.."m", tilde="e".."m"..TILDE},
["en"] = {acute="e"..ACUTE.."n", grave="e"..GRAVE.."n", tilde="e".."n"..TILDE},
["er"] = {acute="e"..ACUTE.."r", grave="e"..GRAVE.."r", tilde="e".."r"..TILDE},
-- Mixed diphthongs (i series - grave/tilde)
["il"] = {grave="i"..GRAVE.."l", tilde="i".."l"..TILDE},
["im"] = {grave="i"..GRAVE.."m", tilde="i".."m"..TILDE},
["in"] = {grave="i"..GRAVE.."n", tilde="i".."n"..TILDE},
["ir"] = {grave="i"..GRAVE.."r", tilde="i".."r"..TILDE},
-- Mixed diphthongs (u series - grave/tilde)
["ul"] = {grave="u"..GRAVE.."l", tilde="u".."l"..TILDE},
["um"] = {grave="u"..GRAVE.."m", tilde="u".."m"..TILDE},
["un"] = {grave="u"..GRAVE.."n", tilde="u".."n"..TILDE},
["ur"] = {grave="u"..GRAVE.."r", tilde="u".."r"..TILDE},
-- Foreign diphthongs (grave only)
["eu"] = {grave="e"..GRAVE.."u"},
["oi"] = {grave="o"..GRAVE.."i"},
["ou"] = {grave="o"..GRAVE.."u"},
["ol"] = {grave="o"..GRAVE.."l"},
["om"] = {grave="o"..GRAVE.."m"},
["on"] = {grave="o"..GRAVE.."n"},
["or"] = {grave="o"..GRAVE.."r"},
}
-- ============================================================================
-- SECTION 2: Lexical Normalization (Avoid NFD destruction)
-- ============================================================================
-- Helper: Remove all accent marks from text (moved here for early use).
-- Delegates to Module:lt-common to keep the de-accenting logic shared.
local function remove_all_accents(text)
return m_lt_common.to_stem_bare(mw.ustring.toNFD(text))
end
-- Extract pagename from input or load from headword data
local function get_pagename(input)
-- Check for manual override: <base:xxx>
local manual = input:match("<base:([^>]+)>")
if manual then
return manual, input:gsub("<base:[^>]+>", "")
end
-- Load from headword data
local success, data = pcall(function()
return mw.loadData("Module:headword/data").pagename
end)
if success and data then
return data, input
end
return nil, input
end
-- Identify respelling j and (j) positions
local function identify_respelling_glides(input_with_accents, pagename)
if not pagename then
return {} -- No pagename, no respelling detection
end
-- Remove all accents from input
local input_clean = remove_all_accents(input_with_accents)
-- Remove special markers (^, .)
input_clean = ugsub(input_clean, "[%^%.]", "")
-- Remove <base:...> if present
input_clean = ugsub(input_clean, "<base:[^>]+>", "")
-- Remove literal ˌ
input_clean = ugsub(input_clean, "ˌ", "")
-- Remove softening mark ʼ
input_clean = ugsub(input_clean, "ʼ", "")
-- Remove (j) markers - replace with j for comparison
input_clean = ugsub(input_clean, "%(j%)", "j")
-- Remove spaces for comparison
input_clean = ugsub(input_clean, " ", "")
-- Convert to NFC for comparison
input_clean = mw.ustring.toNFC(input_clean)
-- Normalize pagename (lowercase, remove spaces)
local pagename_clean = ulower(pagename)
pagename_clean = ugsub(pagename_clean, " ", "")
-- Find respelling j positions (j in input but not in pagename)
local respelling_positions = {}
local input_idx = 1
local page_idx = 1
while input_idx <= ulen(input_clean) do
local input_char = usub(input_clean, input_idx, input_idx)
if input_char == "j" then
-- Check if this j exists in pagename at corresponding position
local page_char = page_idx <= ulen(pagename_clean)
and usub(pagename_clean, page_idx, page_idx)
if page_char ~= "j" then
-- This is a respelling j
insert(respelling_positions, input_idx)
input_idx = input_idx + 1
-- Don't advance page_idx
else
-- This is an original j
input_idx = input_idx + 1
page_idx = page_idx + 1
end
else
input_idx = input_idx + 1
page_idx = page_idx + 1
end
end
return respelling_positions
end
-- Safe mapping to extract tones without destroying precomposed characters
local TONE_MAP = {
["á"]="a,acute", ["à"]="a,grave", ["ã"]="a,tilde",
["é"]="e,acute", ["è"]="e,grave", ["ẽ"]="e,tilde",
["í"]="i,acute", ["ì"]="i,grave", ["ĩ"]="i,tilde",
["ý"]="y,acute", ["ỳ"]="y,grave", ["ỹ"]="y,tilde",
["ú"]="u,acute", ["ù"]="u,grave", ["ũ"]="u,tilde",
["ó"]="o,acute", ["ò"]="o,grave", ["õ"]="o,tilde",
-- Precomposed vowels with macrons/ogoneks + tones (represented here via standard combinations)
["ą́"]="ą,acute", ["ą̃"]="ą,tilde",
["ę́"]="ę,acute", ["ę̃"]="ę,tilde",
["ė́"]="ė,acute", ["ė̃"]="ė,tilde",
["į́"]="į,acute", ["į̃"]="į,tilde",
["ų́"]="ų,acute", ["ų̃"]="ų,tilde",
["ū́"]="ū,acute", ["ū̃"]="ū,tilde",
-- Tilde on liquids (for semi-diphthongs)
["l̃"]="l,tilde", ["m̃"]="m,tilde", ["ñ"]="n,tilde", ["r̃"]="r,tilde",
["j̃"]="j,tilde"
}
-- Resolves NFD back to safe representation if input was somehow NFD.
-- The PUA rejection (with replacement hints), non-standard format tracking,
-- and i/j-with-dotabove canonicalization are all delegated to Module:lt-common
-- so that all Lithuanian modules share one implementation. Only the
-- TONE_MAP-based codepoint parser remains local since it produces the
-- token list specifically consumed by lt-pron's tokenizer.
local function safe_normalize(text)
-- Reject PUA characters with helpful "use X instead" hints.
m_lt_common.reject_pua(text)
-- Track non-standard input encodings for analytics. Detection runs on
-- the raw input (in NFD internally) before any canonicalization, so the
-- counts reflect what editors actually typed.
local has_dotless, has_precomp_i = m_lt_common.detect_nonstandard(text)
if has_dotless then track('dotless-ij') end
if has_precomp_i then track('precomposed-i-accent') end
-- "Explicit dotabove" (i.e., i/j + U+0307 + accent) is the *correct*
-- input form for accented i/j and is tracked separately to monitor
-- editor adoption. This check stays local since lt-common's
-- detect_nonstandard intentionally only flags the wrong forms.
if ufind(mw.ustring.toNFD(text), "[ij]" .. DOTABOVE) then
track('explicit-dotabove')
end
-- Normalize: drops stray dot-aboves between i/j and accents,
-- converts dotless ı/ȷ to standard i/j, returns clean NFC.
text = m_lt_common.canonicalize_input(text)
-- Parse the canonicalized NFC string into {char, tone} tokens.
-- TONE_MAP entries are 1- or 2-codepoint precomposed sequences
-- (e.g. "á" is one codepoint; "ą́" is "ą" + U+0301). The lookup tries
-- the 2-codepoint match first, then falls back to the 1-codepoint match.
local result = {}
local i = 1
while i <= ulen(text) do
local c = usub(text, i, i)
local c_lower = ulower(c) -- Convert to lowercase for TONE_MAP lookup
-- Look ahead for combining marks if any slipped through
local next_c = usub(text, i+1, i+1)
local next_c_lower = ulower(next_c)
local combined = c_lower .. next_c_lower
if TONE_MAP[combined] then
local parts = rsplit(TONE_MAP[combined], ",")
-- Preserve original case of base character
local base_char = parts[1]
if c ~= c_lower then
base_char = uupper(base_char)
end
insert(result, {char = base_char, tone = parts[2]})
i = i + 2
elseif TONE_MAP[c_lower] then
local parts = rsplit(TONE_MAP[c_lower], ",")
-- Preserve original case of base character
local base_char = parts[1]
if c ~= c_lower then
base_char = uupper(base_char)
end
insert(result, {char = base_char, tone = parts[2]})
i = i + 1
else
insert(result, {char = c, tone = nil})
i = i + 1
end
end
return result
end
-- ============================================================================
-- SECTION 3: Tokenization & Diphthong/Digraph resolution
-- ============================================================================
local function get_type(c)
local lc = ulower(c)
if V_IPA[lc] then return "V" end
if CLASS.R[lc] then return "R" end
if CLASS.S[lc] then return "S" end
if CLASS.T[lc] then return "T" end
return "UNKNOWN"
end
-- Helper: Convert token array back to NFC string for suffix/prefix matching
local function tokens_to_string(tok_list)
local s = ""
for _, t in ipairs(tok_list) do
local c = t.char
if t.tone == "grave" then c = c .. GRAVE
elseif t.tone == "acute" then c = c .. ACUTE
elseif t.tone == "tilde" then c = c .. TILDE
end
s = s .. c
end
return mw.ustring.toNFC(s)
end
-- Apply automatic properties based on word structure (e.g. loanwords)
local function apply_auto_properties(tokens)
local word_str = ulower(tokens_to_string(tokens))
--[[ Suffix detection for loanword quality (currently disabled)
local matched_loan_suff = nil
for suff, _ in pairs(SUFFIX_LOAN) do
if usub(word_str, -ulen(suff)) == suff then
matched_loan_suff = suff; break
end
end
if matched_loan_suff then
local suff_len = ulen(matched_loan_suff)
local acc_len = 0
for i = #tokens, 1, -1 do
local t = tokens[i]
acc_len = acc_len + ulen(tokens_to_string({t}))
if t.type == "V" and ulower(t.char) == "o" then
t.auto_targeted = true
if not t.force_default then t.loan_quality = true end
end
if acc_len >= suff_len then break end
end
end
-- Check for redundant asterisks globally
for _, t in ipairs(tokens) do
if t.force_default and not t.auto_targeted then
track('redundant-asterisk')
end
end
--]]
return tokens
end
-- Strict whitelist for valid diphthong and tone combinations
local function is_strict_diphthong(c1, t1, c2, t2)
local combo = c1 .. c2
-- Unstressed: neither element has a tone
if not t1 and not t2 then
return (combo == "ie" or combo == "uo" or combo == "ai" or combo == "au" or combo == "ei" or combo == "ui" or combo == "oi" or combo == "ou" or combo == "eu")
end
-- Tone on the first element (acute or grave)
if t1 and not t2 then
if t1 == "acute" then
return (combo == "ai" or combo == "au" or combo == "ei" or combo == "ie" or combo == "uo" or combo == "oi")
elseif t1 == "grave" then
return (combo == "ui" or combo == "oi" or combo == "ou" or combo == "eu")
end
end
-- Tone on the second element (tilde)
if not t1 and t2 then
if t2 == "tilde" then
return (combo == "ai" or combo == "au" or combo == "ei" or combo == "ui" or combo == "ie" or combo == "uo" or combo == "eu")
end
end
return false
end
local function tokenize(text_str, pagename)
local raw_chars = safe_normalize(text_str)
-- Identify respelling glides
local respelling_j_positions = identify_respelling_glides(text_str, pagename)
local tokens = {}
local i = 1
while i <= #raw_chars do
local curr = raw_chars[i]
local nxt = raw_chars[i+1]
local lc_curr = ulower(curr.char)
local lc_nxt = nxt and ulower(nxt.char)
-- Explicit Modifiers
if curr.char == "^" then
local last_v = nil
for j = #tokens, 1, -1 do
if tokens[j].type == "V" then last_v = tokens[j]; break end
end
if last_v then
local lc_v = ulower(last_v.char)
local base_v = usub(lc_v, -1) -- Last char for silent i combinations
local is_e_base = (lc_v == "e") or (base_v == "e")
local is_o_base = (lc_v == "o") or (base_v == "o")
-- Check for valid e: no tone or grave only
if is_e_base then
if not last_v.tone or last_v.tone == "grave" then
last_v.loan_quality = true
elseif last_v.tone == "acute" then
error("lt-pron: '^' cannot be used with acute 'é' (use only with plain 'e' or grave 'è')")
elseif last_v.tone == "tilde" then
error("lt-pron: '^' cannot be used with tilde 'ẽ' (use only with plain 'e' or grave 'è')")
end
-- Check for valid o: no tone only
elseif is_o_base then
if not last_v.tone then
last_v.loan_quality = true
elseif last_v.tone == "grave" then
error("lt-pron: '^' is redundant for 'ò' (already pronounced [ɔ])")
elseif last_v.tone == "acute" or last_v.tone == "tilde" then
error("lt-pron: '^' cannot be used with 'ó' or 'õ' (native long vowels)")
end
else
error("lt-pron: '^' can only be used with 'e' (plain/grave) or 'o' (plain). Found: '" .. lc_v .. "'")
end
end
i = i + 1
-- Check for (j) marker
elseif curr.char == "(" and i + 2 <= #raw_chars then
local char2 = raw_chars[i+1]
local char3 = raw_chars[i+2]
if char2.char == "j" and char3.char == ")" then
insert(tokens, {char = "j", type = "R", tone = nil, is_respelling = true, is_optional = true, original_char = "-"})
i = i + 3
else
error("lt-pron: '(' must be followed by 'j)' to form the (j) glide marker")
end
--[[ Asterisk modifier (currently disabled)
elseif curr.char == "*" then
local last_v = nil
for j = #tokens, 1, -1 do
if tokens[j].type == "V" then last_v = tokens[j]; break end
end
if last_v then last_v.force_default = true end
i = i + 1
--]]
elseif curr.char == "." then
insert(tokens, {char = ".", type = "BOUNDARY"})
i = i + 1
elseif curr.char == "ˌ" then
insert(tokens, {char = "ˌ", type = "SECONDARY_STRESS_BOUNDARY"})
i = i + 1
elseif curr.char == "ʼ" then
-- Softening mark: palatalize the preceding consonant
for j = #tokens, 1, -1 do
local tok = tokens[j]
if tok.type == "T" or tok.type == "S" or tok.type == "R" then
tok.softening_mark = true
break
end
end
i = i + 1
elseif lc_curr == "d" and nxt and (lc_nxt == "z" or lc_nxt == "ž") then
insert(tokens, {char = curr.char .. nxt.char, type = "T", tone = nil})
i = i + 2
elseif lc_curr == "c" and nxt and lc_nxt == "h" then
insert(tokens, {char = curr.char .. nxt.char, type = "S", tone = nil})
i = i + 2
-- Special handling for V + j̃ (final j with tilde): treat as V + ĩ diphthong
elseif curr.type ~= "BOUNDARY" and get_type(curr.char) == "V" and nxt and ulower(nxt.char) == "j" and nxt.tone == "tilde" then
-- Check if this is word-final (no more non-boundary tokens after j̃)
local is_final = true
for k = i + 2, #raw_chars do
if raw_chars[k].char ~= " " then
is_final = false
break
end
end
if is_final then
-- Combine V + j̃ as a diphthong V + ĩ (e.g., uj̃ → ui̇̃)
local v_char = ulower(curr.char)
local combined_char = v_char .. "i" -- e.g., "u" + "i" = "ui"
local tone = "tilde" -- j̃'s tilde
local tone_position = 2 -- Tilde is on the second vowel (i)
insert(tokens, {
char = combined_char,
type = "V",
tone = tone,
tone_position = tone_position,
original_char = v_char .. "j" -- For hyphenation: display as "uj̃"
})
i = i + 2
else
-- Not final, treat as regular V + j
insert(tokens, {char = curr.char, type = "V", tone = curr.tone})
i = i + 1
end
elseif curr.type ~= "BOUNDARY" and get_type(curr.char) == "V" and nxt and get_type(nxt.char) == "V" then
local nxt_nxt = raw_chars[i+2]
local lc_nxt_nxt = nxt_nxt and ulower(nxt_nxt.char)
local back_diph = lc_nxt and lc_nxt_nxt and (lc_nxt .. lc_nxt_nxt)
local is_silent_i_diph = (lc_curr == "i" and not curr.tone) and
(back_diph == "au" or back_diph == "ai" or back_diph == "ou" or back_diph == "oi" or back_diph == "uo")
local is_silent_i_mono = (lc_curr == "i" and not curr.tone) and
(lc_nxt == "a" or lc_nxt == "ą" or lc_nxt == "o" or
lc_nxt == "u" or lc_nxt == "ų" or lc_nxt == "ū" or lc_nxt == "ɔ")
local is_valid_diph = is_strict_diphthong(lc_curr, curr.tone, lc_nxt, nxt and nxt.tone)
if is_valid_diph and nxt_nxt and get_type(nxt_nxt.char) == "V" then
local lc_nxt_nxt = ulower(nxt_nxt.char)
local is_next_valid_diph = is_strict_diphthong(lc_nxt, nxt.tone, lc_nxt_nxt, nxt_nxt.tone)
if is_next_valid_diph then
-- Resolve ambiguous triplets (e.g., auo -> a.uo is standard)
-- Break the first valid diphthong unless explicitly stressed
if not curr.tone then
is_valid_diph = false
end
end
end
if is_silent_i_diph then
local tone = nxt.tone or nxt_nxt.tone
local tone_position = nil
if tone then
-- For silent i diphthongs (e.g., iau), position is relative to the full string
-- Position 2 = middle vowel, Position 3 = last vowel
if nxt.tone then
tone_position = 2
elseif nxt_nxt.tone then
tone_position = 3
end
end
insert(tokens, {char = curr.char .. nxt.char .. nxt_nxt.char, type = "V", tone = tone, has_silent_i = true, tone_position = tone_position})
i = i + 3
elseif is_silent_i_mono then
local tone = nxt.tone
local tone_position = nil
if tone then
-- For silent i monosyllables (e.g., ia), position 2 = second character
tone_position = 2
end
insert(tokens, {char = curr.char .. nxt.char, type = "V", tone = tone, has_silent_i = true, tone_position = tone_position})
i = i + 2
elseif is_valid_diph then
local tone = curr.tone or nxt.tone
local tone_position = nil
if tone then
-- Record which vowel carries the tone (1 = first, 2 = second)
if curr.tone then
tone_position = 1
elseif nxt.tone then
tone_position = 2
end
end
insert(tokens, {char = curr.char .. nxt.char, type = "V", tone = tone, tone_position = tone_position})
i = i + 2
else
insert(tokens, {char = curr.char, type = "V", tone = curr.tone})
i = i + 1
end
else
if curr.char ~= " " then
local tok_type = get_type(curr.char)
local is_respelling_j = false
-- Check if this is a respelling j
if ulower(curr.char) == "j" and #respelling_j_positions > 0 then
-- Build cleaned string up to current position to find clean position
local cleaned_so_far = ""
for k = 1, i do
local c = raw_chars[k]
if c.char ~= "^" and c.char ~= "." and c.char ~= " " and c.char ~= "ʼ" and c.char ~= "ˌ" then
local char_clean = c.char
-- Don't add tone marks to cleaned string
if not c.tone then
cleaned_so_far = cleaned_so_far .. char_clean
else
-- Add base character without tone
cleaned_so_far = cleaned_so_far .. char_clean
end
end
end
local clean_pos = ulen(cleaned_so_far)
-- Check if this position is in respelling list
for _, pos in ipairs(respelling_j_positions) do
if pos == clean_pos then
is_respelling_j = true
break
end
end
end
if ulower(curr.char) == "j" then
local tok_data = {char = curr.char, type = tok_type, tone = curr.tone, is_respelling = is_respelling_j, is_optional = false}
if is_respelling_j then
tok_data.original_char = "-" -- Respelling: use "-" to indicate not in orthography
end
insert(tokens, tok_data)
else
insert(tokens, {char = curr.char, type = tok_type, tone = curr.tone})
end
end
i = i + 1
end
end
-- Validate respelling glides are between vowels
for i, tok in ipairs(tokens) do
if tok.is_respelling then
local prev_is_vowel = false
local next_is_vowel = false
-- Check previous non-boundary token
for j = i - 1, 1, -1 do
if tokens[j].type ~= "BOUNDARY" and tokens[j].type ~= "SECONDARY_STRESS_BOUNDARY" then
prev_is_vowel = (tokens[j].type == "V")
break
end
end
-- Check next non-boundary token
for j = i + 1, #tokens do
if tokens[j].type ~= "BOUNDARY" and tokens[j].type ~= "SECONDARY_STRESS_BOUNDARY" then
next_is_vowel = (tokens[j].type == "V")
break
end
end
if not (prev_is_vowel and next_is_vowel) then
error("lt-pron: Respelling glide 'j' or '(j)' must be between two vowels")
end
end
end
return apply_auto_properties(tokens)
end
-- ============================================================================
-- SECTION 4: Syllabification
-- ============================================================================
-- Pre-syllabification: Merge geminate (doubled) consonants
-- This must happen BEFORE syllabification to prevent false mixed diphthongs
-- For example: pérrašo → pér-ra-šo would incorrectly treat ér as a mixed diphthong
-- By merging rr→r first, we get pé-ra-šo, correctly keeping é as a pure vowel
local function merge_geminate_consonants(tokens)
local SIBILANTS = {["s"]=true, ["z"]=true, ["š"]=true, ["ž"]=true}
local i = 1
while i < #tokens do
local tok = tokens[i]
local nxt = tokens[i+1]
local tok_is_cons = (tok.type == "T" or tok.type == "S" or tok.type == "R")
local nxt_is_cons = (nxt.type == "T" or nxt.type == "S" or nxt.type == "R")
if tok_is_cons and nxt_is_cons then
local tok_char = ulower(tok.char)
local nxt_char = ulower(nxt.char)
local tok_is_sib = SIBILANTS[tok_char]
local nxt_is_sib = SIBILANTS[nxt_char]
-- Merge if: (1) both are sibilants, or (2) identical consonants
if (tok_is_sib and nxt_is_sib) or (tok_char == nxt_char) then
-- Remove the first token (keep the second)
table.remove(tokens, i)
-- Don't increment i, check the same position again
else
i = i + 1
end
else
i = i + 1
end
end
end
local function syllabify(tokens)
local syllables = {}
local current_syl = {}
-- Check for leading secondary stress marker
local has_initial_secondary_stress = false
if #tokens > 0 and tokens[1].type == "SECONDARY_STRESS_BOUNDARY" then
has_initial_secondary_stress = true
end
local v_indices = {}
for i, tok in ipairs(tokens) do
if tok.type == "V" then insert(v_indices, i) end
end
if #v_indices == 0 then return {tokens} end -- Edge case: no vowels
local boundaries = {}
-- Sonority Sequencing Algorithm combined with Morphophonological Maximum Onset
for idx = 1, #v_indices - 1 do
local v1_idx = v_indices[idx]
local v2_idx = v_indices[idx + 1]
local raw_c_tokens = {}
local forced_boundary_idx = nil
for i = v1_idx + 1, v2_idx - 1 do
if tokens[i].type == "BOUNDARY" or tokens[i].type == "SECONDARY_STRESS_BOUNDARY" then
forced_boundary_idx = i
else
insert(raw_c_tokens, {t=tokens[i], orig_idx=i})
end
end
if forced_boundary_idx then
boundaries[forced_boundary_idx] = true
elseif #raw_c_tokens == 0 then
-- Hiatus
boundaries[v2_idx] = true
else
-- Macro-Token Grouping: Treat consecutive sibilants (S) as a single phonological unit
local macro_c = {}
local i = 1
while i <= #raw_c_tokens do
local current = raw_c_tokens[i]
if current.t.type == "S" then
local absorbed = {current}
local j = i + 1
-- Absorb any subsequent S tokens into this macro unit, keeping track of them
while j <= #raw_c_tokens and raw_c_tokens[j].t.type == "S" do
insert(absorbed, raw_c_tokens[j])
j = j + 1
end
insert(macro_c, {type = "S", orig_idx = current.orig_idx, tokens = absorbed})
i = j
else
insert(macro_c, {type = current.t.type, orig_idx = current.orig_idx, tokens = {current}})
i = i + 1
end
end
local m_count = #macro_c
if m_count == 1 then
-- V.CV (or V.SSV, e.g., sausšala -> sau.sšala)
boundaries[macro_c[1].orig_idx] = true
elseif m_count == 2 then
local t1, t2 = macro_c[1].type, macro_c[2].type
-- ST, SR, TR -> V.CCV
if (t1=="S" and t2=="T") or (t1=="S" and t2=="R") or (t1=="T" and t2=="R") then
boundaries[macro_c[1].orig_idx] = true
else
-- Handle TSS and RSS sequences properly (e.g., Oksfordas, transformavo).
-- If the macro cluster is T+S or R+S, and the S unit absorbed multiple sibilants,
-- split between the first and second sibilant (TS.S, RS.S).
if (t1=="T" or t1=="R") and t2=="S" and #macro_c[2].tokens > 1 then
boundaries[macro_c[2].tokens[2].orig_idx] = true
else
-- Default VC.CV
boundaries[macro_c[2].orig_idx] = true
end
end
elseif m_count == 3 then
local t1, t2, t3 = macro_c[1].type, macro_c[2].type, macro_c[3].type
if t1=="S" and t2=="T" and t3=="R" then
boundaries[macro_c[1].orig_idx] = true -- V.CCCV
elseif (t1=="T" and t2=="S" and t3=="T") or
(t1=="R" and t2=="S" and t3=="T") or
(t1=="T" and t2=="S" and t3=="R") or
(t1=="R" and t2=="T" and t3=="R") or
(t1=="T" and t2=="T" and t3=="R") or
(t1=="R" and t2=="S" and t3=="R") then
boundaries[macro_c[2].orig_idx] = true -- VC.CCV (includes RSR, e.g., konfliktas)
else
boundaries[macro_c[3].orig_idx] = true -- VCC.CV
end
elseif m_count == 4 then
-- Identify the 4-consonant pattern according to the 8 documented combinations
local pattern = macro_c[1].type .. macro_c[2].type .. macro_c[3].type .. macro_c[4].type
if pattern == "RSTR" or pattern == "TSTR" then
-- R.STR, T.STR -> VC.CCCV
boundaries[macro_c[2].orig_idx] = true
elseif pattern == "RTRR" or pattern == "TSTS" then
-- RTR.R, TST.S -> VCCC.CV
boundaries[macro_c[4].orig_idx] = true
else
-- RT.ST, RT.SR, RT.TR, ST.TR -> VCC.CCV
boundaries[macro_c[3].orig_idx] = true
end
elseif m_count >= 5 then
-- Fallback for >=5 logical consonant units
track('complex-consonant-cluster')
boundaries[macro_c[3].orig_idx] = true
end
end
end
-- Construct syllables
local secondary_stress_syllables = {}
for i, tok in ipairs(tokens) do
if boundaries[i] and #current_syl > 0 then
insert(syllables, current_syl)
-- If this is a secondary stress boundary, mark the NEXT syllable
if tok.type == "SECONDARY_STRESS_BOUNDARY" then
secondary_stress_syllables[#syllables + 1] = true
end
current_syl = {}
end
if tok.type ~= "BOUNDARY" and tok.type ~= "SECONDARY_STRESS_BOUNDARY" then
insert(current_syl, tok)
end
end
if #current_syl > 0 then insert(syllables, current_syl) end
-- Apply secondary stress marks
for idx, _ in pairs(secondary_stress_syllables) do
if syllables[idx] then
syllables[idx].secondary_stress = true
end
end
-- Apply initial secondary stress if present
if has_initial_secondary_stress and #syllables > 0 then
syllables[1].secondary_stress = true
end
return syllables
end
-- ============================================================================
-- SECTION 5: Base IPA Mapping & Stress Assignment
-- ============================================================================
local function is_mixed_diphthong(syl, v_idx)
local v_tok = syl[v_idx]
local lc_v = ulower(v_tok.char)
-- Strip silent 'i' for accurate length calculation
if v_tok.has_silent_i then
lc_v = usub(lc_v, 2)
end
-- Digraphs (ie, uo, ai, au, etc.) or natively long vowels (ą, ę, ė, į, y, ų, ū)
-- do NOT form mixed diphthongs with subsequent resonants.
-- Only short a, e, i, u, o can form true mixed diphthongs.
if ulen(lc_v) > 1 then return false end
local LONG_V = {["ą"]=true, ["ę"]=true, ["ė"]=true, ["į"]=true, ["y"]=true, ["ų"]=true, ["ū"]=true}
if LONG_V[lc_v] then return false end
-- V + R in the SAME syllable (coda)
if v_idx < #syl and syl[v_idx+1].type == "R" then
-- j and v are not considered for typical liquid semi-diphthongs length rules
if syl[v_idx+1].char ~= "j" and syl[v_idx+1].char ~= "v" then
return true
end
end
return false
end
local function map_base_phonetics(syllables)
local stress_prefix = nil
for _, syl in ipairs(syllables) do
local v_idx = nil
for i, tok in ipairs(syl) do
if tok.type == "V" then v_idx = i; break end
end
if v_idx then
local v_tok = syl[v_idx]
local v_char = v_tok.char
local lc_v_char = ulower(v_char)
local tone = v_tok.tone
local is_mixed = is_mixed_diphthong(syl, v_idx)
if is_mixed and not tone then
local r_tok = syl[v_idx+1]
if r_tok.tone then tone = r_tok.tone end
end
if v_tok.has_silent_i then
v_tok.silent_i = true
local actual_vowel = usub(lc_v_char, 2)
v_tok.ipa = V_IPA[actual_vowel] or "ɐ"
lc_v_char = actual_vowel
else
-- Apply loan quality base default for 'o' and 'e'
v_tok.ipa = V_IPA[lc_v_char] or "ɐ"
if lc_v_char == "o" and v_tok.loan_quality then
v_tok.ipa = "ɔ"
end
if lc_v_char == "e" and v_tok.loan_quality then
v_tok.ipa = "e"
end
-- Automatically prepend glide 'j' to syllable-initial 'ie'
if lc_v_char == "ie" and v_idx == 1 then
v_tok.ipa = "jiɛ"
end
end
if tone then
local s_mark = ""
local v_base = usub(lc_v_char, 1, 1)
if tone == "acute" then
s_mark = "¹ˈ"
if lc_v_char == "a" then
if is_mixed then v_tok.ipa = "ɑˑ" else v_tok.ipa = "ɑː" end
elseif lc_v_char == "e" then
-- Note: '^' modifier not allowed with acute 'é' as of current rules
-- This code path preserved for consistency
if is_mixed and v_tok.loan_quality then
v_tok.ipa = "ɛ" -- Loanword é in mixed diphthongs is short /ɛ/ without length
elseif is_mixed then
v_tok.ipa = "æˑ" -- Mixed diphthong: half-long
else
v_tok.ipa = "æː" -- Pure vowel: full-long
end
elseif lc_v_char == "ai" then v_tok.ipa = "ɑˑɪ"
elseif lc_v_char == "au" then v_tok.ipa = "ɑˑʊ"
elseif lc_v_char == "ei" then v_tok.ipa = "æˑɪ"
elseif lc_v_char == "eu" then v_tok.ipa = "æˑʊ"
elseif lc_v_char == "oi" then v_tok.ipa = "oˑɪ"
end
elseif tone == "grave" then
if is_mixed and (v_base == "i" or v_base == "u" or v_base == "e" or v_base == "o") then
s_mark = "¹ˈ"
elseif lc_v_char == "ui" or lc_v_char == "oi" or lc_v_char == "ou" or lc_v_char == "eu" then
s_mark = "¹ˈ"
else
s_mark = "ˈ"
end
-- Handle loanword variants for grave
if lc_v_char == "e" and v_tok.loan_quality then
v_tok.ipa = "e" -- è^ (loanword) → [e]
end
if lc_v_char == "o" then
v_tok.ipa = "ɔ" -- ò (always loanword) → [ɔ]
end
elseif tone == "tilde" then
s_mark = "²ˈ"
if lc_v_char == "ai" then v_tok.ipa = "ɐɪˑ"
elseif lc_v_char == "au" then v_tok.ipa = "ɒʊˑ"
elseif lc_v_char == "ei" then v_tok.ipa = "ɛɪˑ"
elseif lc_v_char == "eu" then v_tok.ipa = "ɛʊˑ"
elseif lc_v_char == "ui" then v_tok.ipa = "ʊɪˑ"
elseif lc_v_char == "a" then
if is_mixed then v_tok.ipa = "ɐ" else v_tok.ipa = "ɑː" end
elseif lc_v_char == "e" then
if is_mixed then v_tok.ipa = "ɛ" else v_tok.ipa = "æː" end
end
end
syl.stress = s_mark
end
-- Set base IPA for consonants (case-insensitive mapping)
for i, tok in ipairs(syl) do
if tok.type ~= "V" then
local lc_c = ulower(tok.char)
tok.ipa = CONS_IPA[lc_c] or lc_c
end
end
-- Handle tilde half-length on mixed diphthong coda
if tone == "tilde" and is_mixed then
local r_tok = syl[v_idx+1]
r_tok.half_long = true
end
else
-- Syllable with no vowel (e.g. leftover consonant)
for i, tok in ipairs(syl) do
local lc_c = ulower(tok.char)
tok.ipa = CONS_IPA[lc_c] or lc_c
end
end
end
end
-- ============================================================================
-- SECTION 6: Phonetic Polish Passes
-- ============================================================================
-- Pass 1: Palatalization Spreading (Right-to-Left)
--
-- right_context_palatalizing (optional, used by the cross-word pipeline):
-- When the current word is followed by a liaisoned word whose first effective
-- phoneme is "soft" (front V, j, or a palatalized consonant), pass `true` so
-- that:
-- 1. spread_active starts true (allowing the word's last consonant to
-- receive ʲ even though it has no in-word right neighbour);
-- 2. is_direct evaluates to true for that last consonant when it is k/g,
-- so VLKK §19's "lyk‿jója → [lʲiːkʲ‿…]" pattern is produced.
-- When omitted or false, the function behaves exactly like the within-word
-- palatalization that this module has always done.
local function apply_palatalization(syllables, right_context_palatalizing)
-- Flatten tokens for cross-syllable spreading
local flat_tokens = {}
for _, syl in ipairs(syllables) do
for _, tok in ipairs(syl) do insert(flat_tokens, tok) end
end
-- First pass: Apply softening marks (no spreading)
for i = 1, #flat_tokens do
local tok = flat_tokens[i]
if tok.softening_mark and tok.ipa ~= "" then
tok.ipa = tok.ipa .. "ʲ"
tok.is_palatalized = true
end
end
local spread_active = right_context_palatalizing and true or false
for i = #flat_tokens, 1, -1 do
local tok = flat_tokens[i]
local lc_char = ulower(tok.char)
if tok.type == "V" then
if tok.silent_i or FRONT_V[lc_char] then
spread_active = true
else
spread_active = false
end
elseif lc_char == "j" then
-- Preserve special IPA for final j (ɪ̯), don't override it
if tok.ipa ~= "ɪ̯" and tok.ipa ~= "" then
tok.ipa = "j"
end
tok.is_palatalized = true
spread_active = true
else
if spread_active then
-- Check if the palatalization is DIRECT (immediate contact with front V or j)
local is_direct = false
local nxt = flat_tokens[i+1]
if nxt then
local nxt_lc = ulower(nxt.char)
if (nxt.type == "V" and (nxt.silent_i or FRONT_V[nxt_lc])) or nxt_lc == "j" then
is_direct = true
end
elseif right_context_palatalizing then
-- No in-word neighbour, but a liaisoned soft phoneme follows.
is_direct = true
end
tok.is_palatalized = true
if lc_char == "k" or lc_char == "g" then
if is_direct and tok.ipa ~= "" then
tok.ipa = tok.ipa .. "ʲ"
end
-- DO NOT set spread_active to false! k/g are transparent to spreading.
else
if tok.ipa ~= "" then
tok.ipa = tok.ipa .. "ʲ"
end
end
end
end
end
end
-- Pass 2: Voicing Assimilation (Right-to-Left)
local function apply_voicing_assimilation(syllables)
local flat_tokens = {}
for _, syl in ipairs(syllables) do
for _, tok in ipairs(syl) do insert(flat_tokens, tok) end
end
local target_voice = nil
for i = #flat_tokens, 1, -1 do
local tok = flat_tokens[i]
if tok.type == "V" or tok.type == "R" then
target_voice = nil -- Blocked by vowels and resonants
elseif tok.type == "S" or tok.type == "T" then
local lc_char = ulower(tok.char)
local is_uppercase = (tok.char ~= lc_char)
if target_voice == nil then
-- Establish new assimilation target
target_voice = is_voiced(lc_char) and "voiced" or "voiceless"
else
-- Assimilate
local current_is_voiced = is_voiced(lc_char)
if target_voice == "voiced" and not current_is_voiced then
local new_char = VOICING_PAIRS[lc_char] or lc_char
tok.char = is_uppercase and uupper(new_char) or new_char
elseif target_voice == "voiceless" and current_is_voiced then
local new_char = VOICING_PAIRS[lc_char] or lc_char
tok.char = is_uppercase and uupper(new_char) or new_char
end
-- Update IPA based on new character, preserving palatalization
local lc_new_char = ulower(tok.char)
local new_ipa = CONS_IPA[lc_new_char] or lc_new_char
if tok.is_palatalized and lc_new_char ~= "k" and lc_new_char ~= "g" then
new_ipa = new_ipa .. "ʲ"
end
tok.ipa = new_ipa
end
end
end
end
-- Pass 3: Nasal Assimilation (n -> ŋ before velars k/g and post-velar ch/h)
-- Per VLKK §6.3, n assimilates to the place of articulation of any following
-- velar/uvular consonant, including the fricatives ch [x] and h [ɣ].
local function apply_nasal_assimilation(syllables)
local flat_tokens = {}
for _, syl in ipairs(syllables) do
for _, tok in ipairs(syl) do insert(flat_tokens, tok) end
end
for i = 1, #flat_tokens - 1 do
local tok = flat_tokens[i]
-- Ignore vowels for lookahead
local lookahead = i + 1
while lookahead <= #flat_tokens and flat_tokens[lookahead].type == "V" do
if flat_tokens[lookahead].silent_i then
lookahead = lookahead + 1
else
break
end
end
local nxt = flat_tokens[lookahead]
if nxt and ulower(tok.char) == "n" then
local lc_nxt = ulower(nxt.char)
if lc_nxt == "k" or lc_nxt == "g" or lc_nxt == "ch" or lc_nxt == "h" then
-- Check actual IPA string for direct palatalization
if ufind(nxt.ipa, "ʲ") then
tok.ipa = "ŋʲ"
else
tok.ipa = "ŋ"
end
end
end
end
end
-- Pass 4: Vowel Quality Adjustments after Palatalization
local function adjust_vowel_quality(syllables)
for _, syl in ipairs(syllables) do
local has_palatal_onset = false
for i, tok in ipairs(syl) do
if tok.type ~= "V" and (tok.is_palatalized or ulower(tok.char) == "j") then
has_palatal_onset = true
elseif tok.type == "V" and has_palatal_onset then
local ipa = tok.ipa
-- Shift a/e quality
if ipa == "ɐ" then ipa = "ɛ"
elseif ipa == "ɑː" then ipa = "æː"
-- Diphthong shifts for iau / iai
elseif ipa == "ɒʊ" then ipa = "ɛʊ"
elseif ipa == "ɑˑʊ" then ipa = "æˑʊ"
elseif ipa == "ɒʊˑ" then ipa = "ɛʊˑ"
elseif ipa == "ɐɪ" then ipa = "ɛɪ"
elseif ipa == "ɑˑɪ" then ipa = "æˑɪ"
elseif ipa == "ɐɪˑ" then ipa = "ɛɪˑ"
end
-- Dynamic fronting for u/o/ɔ (adds U+031F)
-- Matches ONLY the first character (^) to avoid double fronting in uɔ
ipa = ugsub(ipa, "^([uʊoɔ])", "%1̟")
tok.ipa = ipa
has_palatal_onset = false
end
end
end
end
-- Pass 5: Terminal Devoicing (Word-final obstruent devoicing)
local function apply_terminal_devoicing(syllables)
if #syllables == 0 then return end
local last_syl = syllables[#syllables]
local last_tok = last_syl[#last_syl]
if last_tok and (last_tok.type == "S" or last_tok.type == "T") then
local lc_char = ulower(last_tok.char)
local is_uppercase = (last_tok.char ~= lc_char)
if is_voiced(lc_char) then
local devoiced = VOICING_PAIRS[lc_char]
if devoiced then
last_tok.char = is_uppercase and uupper(devoiced) or devoiced
local new_ipa = CONS_IPA[devoiced] or devoiced
if last_tok.is_palatalized then new_ipa = new_ipa .. "ʲ" end
last_tok.ipa = new_ipa
end
end
end
end
-- Pass 6: Place Assimilation (Sibilant + Affricate)
-- When a sibilant meets an affricate, the sibilant adjusts its place of articulation:
-- s+č→š, z+dž→ž, š+c→s, ž+dz→z
local function apply_place_assimilation(syllables)
local flat_tokens = {}
for _, syl in ipairs(syllables) do
for _, tok in ipairs(syl) do insert(flat_tokens, tok) end
end
local PLACE_ASSIM = {
["s"] = {["t͡ʃ"] = "ʃ"},
["z"] = {["d͡ʒ"] = "ʒ"},
["ʃ"] = {["t͡s"] = "s"},
["ʒ"] = {["d͡z"] = "z"},
}
for i = 1, #flat_tokens - 1 do
local tok = flat_tokens[i]
local nxt = flat_tokens[i+1]
if tok.type == "S" and nxt.type == "T" then
local rule = PLACE_ASSIM[tok.ipa]
if rule and rule[nxt.ipa] then
tok.ipa = rule[nxt.ipa]
end
end
end
end
-- Pass 7: Geminate Simplification (Double consonant reduction)
-- NOTE: Original geminates (rr, ll, etc.) are already merged in merge_geminate_consonants.
-- This pass handles geminates created by phonetic rules (e.g., voicing assimilation: td→dd).
-- Sibilants: any two sibilants merge into one (keeping the second)
-- Other consonants: only identical pairs merge
local function apply_geminate_simplification(syllables)
local flat_tokens = {}
for _, syl in ipairs(syllables) do
for _, tok in ipairs(syl) do insert(flat_tokens, tok) end
end
local SIBILANTS = {["s"]=true, ["z"]=true, ["ʃ"]=true, ["ʒ"]=true}
for i = 1, #flat_tokens - 1 do
local tok = flat_tokens[i]
local nxt = flat_tokens[i+1]
local tok_is_cons = (tok.type == "T" or tok.type == "S" or tok.type == "R")
local nxt_is_cons = (nxt.type == "T" or nxt.type == "S" or nxt.type == "R")
if tok_is_cons and nxt_is_cons then
local tok_is_sib = SIBILANTS[tok.ipa]
local nxt_is_sib = SIBILANTS[nxt.ipa]
if tok_is_sib and nxt_is_sib then
tok.ipa = ""
elseif tok.ipa == nxt.ipa and tok.ipa ~= "" then
tok.ipa = ""
end
end
end
end
-- Pass 8: Final Consonant Vocalization (v → ʊ̯, j → ɪ̯)
-- Word-final v and j (without tilde) become non-syllabic vowels
-- Note: j with tilde is already converted to i with tilde in tokenization
local function apply_final_consonant_vocalization(syllables)
if #syllables == 0 then return end
local last_syl = syllables[#syllables]
local last_tok = last_syl[#last_syl]
if last_tok then
local lc_char = ulower(last_tok.char)
-- Final v → ʊ̯
if lc_char == "v" then
last_tok.ipa = "ʊ̯"
-- Keep type as "R" (resonant) for now - it's treated as non-syllabic
end
-- Final j (without tilde) → ɪ̯
-- Note: j with tilde is already converted to i in tokenization, so won't reach here
if lc_char == "j" and last_tok.tone ~= "tilde" then
last_tok.ipa = "ɪ̯"
-- Keep type as "R" (resonant) for now - it's treated as non-syllabic
end
end
end
-- ============================================================================
-- SECTION 7: Output Assembly
-- ============================================================================
-- ---------------------------------------------------------------------------
-- Cross-word phonology helpers
-- ---------------------------------------------------------------------------
-- Split a term into segments at spaces only. Returns a plain list of
-- non-empty word strings. The liaison marker ‿ is reserved for IPA output
-- and must never appear in input; if it does, raise an error so the editor
-- knows to use a regular space instead.
local function split_into_segments(term)
if term and ufind(term, LIAISON) then
error("lt-pron: the liaison marker \"" .. LIAISON ..
"\" (U+203F) must not appear in the input. Use a regular " ..
"space between words; the module decides where to insert ‿ " ..
"in the IPA output based on stress.")
end
local segs = {}
for _, w in ipairs(rsplit(term or "", " ")) do
if w ~= "" then insert(segs, w) end
end
return segs
end
-- True if any syllable in the word has primary or secondary stress.
local function word_has_stress(syllables)
for _, syl in ipairs(syllables) do
if syl.stress or syl.secondary_stress then
return true
end
end
return false
end
-- Compute the clitic group anchor for each word in a phrase.
--
-- A "clitic group" is a stressed word together with all unstressed words that
-- prosodically attach to it. Two adjacent words share a liaison ‿ iff they
-- belong to the same group. The algorithm:
--
-- 1. Every stressed word is its own anchor.
-- 2. Each unstressed word looks FORWARD for the nearest stressed word
-- (proclitic case, e.g., "iš namų̃" — iš leans on namų̃).
-- 3. If no stressed word follows, look BACKWARD instead (enclitic case,
-- e.g., "sakaũ gi" — gi leans on sakaũ).
-- 4. If the entire phrase has no stressed word (rare edge case), all
-- unstressed words share a single pseudo-group with anchor 0.
--
-- This matches VLKK §4.7 examples like "iš namų̃ [ɪʃ‿nɐ²ˈmuː]" (proclitic)
-- and "sakaũ gi [sɐ²ˈkɒʊˑ‿ɡʲɪ]" (enclitic), and produces the correct
-- behavior for VLKK §4.9's "išėjaũ į kiẽmą" where the unstressed į proclitic
-- to kiẽmą while išėjaũ stands alone.
local function compute_clitic_anchors(word_data)
local anchors = {}
-- Pass 1: stressed words anchor themselves.
for i, wd in ipairs(word_data) do
if word_has_stress(wd.syllables) then
anchors[i] = i
end
end
-- Pass 2: RTL — each unstressed word adopts the next word's anchor.
-- Scanning RTL means each position can simply copy anchors[i+1], which
-- already points to the nearest stressed word to the right (or nil).
for i = #word_data - 1, 1, -1 do
if anchors[i] == nil then
anchors[i] = anchors[i+1]
end
end
-- Pass 3: LTR — words still without an anchor (no stressed word to the
-- right) fall back to the nearest stressed word on the left.
for i = 2, #word_data do
if anchors[i] == nil then
anchors[i] = anchors[i-1]
end
end
-- Pass 4: entire phrase has no stress at all — bundle everything into
-- pseudo-group 0 so the words at least share liaison with each other.
if #word_data > 0 and anchors[1] == nil then
for i = 1, #word_data do
anchors[i] = 0
end
end
return anchors
end
-- Find the first non-empty token across syllables (skips silent or zero-IPA
-- tokens that don't realize a phoneme).
local function first_effective_token(syllables)
for _, syl in ipairs(syllables) do
for _, tok in ipairs(syl) do
if tok.ipa ~= "" then return tok end
end
end
return nil
end
-- Find the last non-empty token across syllables.
local function last_effective_token(syllables)
for s = #syllables, 1, -1 do
local syl = syllables[s]
for t = #syl, 1, -1 do
if syl[t].ipa ~= "" then return syl[t] end
end
end
return nil
end
-- Return true if the next word's first effective phoneme triggers
-- palatalization across the liaison boundary (front V, j, or an already
-- palatalized consonant). Must be called AFTER the next word's palatalization
-- pass has run, so `is_palatalized` is reliable.
local function first_token_palatalizes(syllables)
local tok = first_effective_token(syllables)
if not tok then return false end
local lc = ulower(tok.char)
if tok.type == "V" then
return tok.silent_i or FRONT_V[lc] or false
end
if lc == "j" then return true end
return tok.is_palatalized == true
end
-- VLKK §20: the preposition "už" keeps its [ʒ] (i.e. terminal devoicing is
-- skipped) when the next liaisoned word starts with a vowel or sonorant
-- consonant (n, m, l, r, j, v). Other words always undergo terminal devoicing.
local UZ_SKIP_SONORANTS = {
["n"]=true, ["m"]=true, ["l"]=true,
["r"]=true, ["j"]=true, ["v"]=true,
}
local function should_skip_devoicing_for_uz(word_text, next_syllables)
-- remove_all_accents returns NFD; we have to fold it back to NFC before
-- comparing against the literal "už" because ž (U+017E) decomposes to
-- z + COMBINING CARON (U+030C) in NFD form.
local clean = ulower(mw.ustring.toNFC(remove_all_accents(word_text or "")))
if clean ~= "už" then return false end
if not next_syllables then return false end
local nxt = first_effective_token(next_syllables)
if not nxt then return false end
if nxt.type == "V" then return true end
return UZ_SKIP_SONORANTS[ulower(nxt.char)] == true
end
-- VLKK §21b / §22b / §23b: at a liaison boundary, the last consonant of W1
-- and the first consonant of W2 may interact. We mirror within-word place
-- assimilation and geminate / sibilant simplification, applied just before
-- W1's palatalization pass so that any new ipa (e.g. s → ʃ) gets palatalized
-- correctly when needed.
local CROSSWORD_PLACE_ASSIM = {
["s"] = {["t͡ʃ"] = "ʃ"},
["z"] = {["d͡ʒ"] = "ʒ"},
["ʃ"] = {["t͡s"] = "s"},
["ʒ"] = {["d͡z"] = "z"},
}
local CROSSWORD_SIBILANTS = {["s"]=true, ["z"]=true, ["ʃ"]=true, ["ʒ"]=true}
local function strip_trailing_palatal(ipa)
if not ipa then return "" end
local stripped = ugsub(ipa, "ʲ$", "")
return stripped
end
local function apply_crossword_polish_at_junction(w1_syllables, w2_syllables)
local w1_last = last_effective_token(w1_syllables)
local w2_first = first_effective_token(w2_syllables)
if not (w1_last and w2_first) then return end
-- W1's last token has not yet been palatalized at this point in the
-- pipeline, so its ipa is the bare base form. W2 has already been fully
-- polished, so we must strip a trailing ʲ before using it as a key.
local w1_base = w1_last.ipa or ""
local w2_base = strip_trailing_palatal(w2_first.ipa)
if w1_base == "" or w2_base == "" then return end
-- Geminate / sibilant cluster: drop W1's last consonant entirely.
if w1_base == w2_base
or (CROSSWORD_SIBILANTS[w1_base] and CROSSWORD_SIBILANTS[w2_base]) then
w1_last.ipa = ""
return
end
-- Place assimilation: rewrite W1's last consonant base. Palatalization,
-- if any, will be re-applied by the palatalization pass.
local rule = CROSSWORD_PLACE_ASSIM[w1_base]
if rule and rule[w2_base] then
w1_last.ipa = rule[w2_base]
end
end
-- ---------------------------------------------------------------------------
-- Word-level rendering
-- ---------------------------------------------------------------------------
-- Tokenize, syllabify, and assign base phonetics for one word. Returns a
-- table { text, syllables } with the word's mutable phonological state.
local function prepare_word_state(word, pagename)
local tokens = tokenize(word, pagename)
merge_geminate_consonants(tokens)
local syllables = syllabify(tokens)
map_base_phonetics(syllables)
return {text = word, syllables = syllables}
end
-- Render a fully polished syllables list into an IPA string. Identical to
-- the original tail of process_single_word_ipa.
local function render_word_ipa(syllables)
local parts = {}
for s_idx, syl in ipairs(syllables) do
local syl_str = ""
local hiatus_sep = ""
if s_idx > 1 then
local prev_syl = syllables[s_idx - 1]
local prev_last_tok = prev_syl[#prev_syl]
local curr_first_tok = syl[1]
local prev_ends_with_v = (prev_last_tok and prev_last_tok.type == "V" and not prev_last_tok.silent_i)
local curr_starts_with_v = (curr_first_tok and curr_first_tok.type == "V" and not curr_first_tok.silent_i)
if prev_ends_with_v and curr_starts_with_v then
local prev_v_char = ulower(prev_last_tok.char)
local curr_v_char = ulower(curr_first_tok.char)
-- Only handle ie special case
if curr_v_char == "ie" then
-- 'ie' has implicit 'j' from map_base_phonetics.
syl_str = ""
hiatus_sep = ""
else
-- Standard hiatus without glide insertion
syl_str = "."
hiatus_sep = ""
end
end
end
-- Check for conflict between primary and secondary stress
if syl.secondary_stress and syl.stress then
error("lt-pron: A syllable cannot have both primary stress (tone mark) and secondary stress (ˌ)")
end
-- Add stress markers (primary or secondary, mutually exclusive)
if syl.secondary_stress then
syl_str = syl_str .. "ˌ"
elseif syl.stress then
syl_str = syl_str .. syl.stress
end
syl_str = syl_str .. hiatus_sep
for _, tok in ipairs(syl) do
if tok.is_respelling then
if tok.is_optional then
syl_str = syl_str .. "(j)"
else
syl_str = syl_str .. tok.ipa
end
else
syl_str = syl_str .. tok.ipa
end
if tok.half_long then syl_str = syl_str .. "ˑ" end
end
insert(parts, syl_str)
end
return concat(parts, "")
end
-- ---------------------------------------------------------------------------
-- Multi-word IPA assembler with cross-word phonology
-- ---------------------------------------------------------------------------
-- Pipeline for a phrase made of space-separated words. The liaison marker ‿
-- never appears in input; it is inserted into the rendered IPA according to
-- clitic-group anchors computed from per-word stress (see
-- compute_clitic_anchors above).
--
-- Per-word polish order (unchanged from VLKK §17–§19):
-- terminal devoicing → voicing assim → place assim → geminate simp →
-- final-cons vocalization → cross-word polish at junction →
-- palatalization (with cross-word right context) → nasal assim →
-- vowel quality.
--
-- Cross-word polish at the junction (§21b/§22b/§23b) runs *before* W1's
-- palatalization pass so that any rewritten ipa still receives ʲ correctly.
-- Words are processed RTL so that each W_i sees the already-polished state
-- of W_{i+1} when computing its cross-word context.
local function to_ipa(term, provided_pagename)
-- Use provided pagename if available, otherwise try to extract from term
local pagename, clean_term
if provided_pagename then
pagename = provided_pagename
clean_term = term
else
pagename, clean_term = get_pagename(term)
end
term = clean_term
-- Split input and pagename on whitespace; bail out if input contains ‿.
local input_segs = split_into_segments(term)
local pagename_segs = nil
if pagename then
pagename_segs = split_into_segments(pagename)
-- Verify word count matches (only when both are multi-word)
if #input_segs > 1 and #pagename_segs > 1 and #input_segs ~= #pagename_segs then
error("lt-pron: Input has " .. #input_segs .. " words but pagename has "
.. #pagename_segs .. " words. They must match.")
end
-- If pagename is a single word but input is multi-word, drop pagename
-- alignment (respelling detection only makes sense for exact matches).
if #pagename_segs == 1 and #input_segs > 1 then
pagename_segs = nil
end
end
-- Stage 1: tokenize / syllabify / map base phonetics for every word.
local word_data = {}
for i, seg_text in ipairs(input_segs) do
local seg_pagename = (pagename_segs and pagename_segs[i]) or nil
insert(word_data, prepare_word_state(seg_text, seg_pagename))
end
if #word_data == 0 then return "" end
-- Stage 2: compute clitic anchors and decide liaison per junction.
-- Two adjacent words share a ‿ iff they belong to the same clitic group.
local anchors = compute_clitic_anchors(word_data)
for i = 1, #word_data - 1 do
word_data[i].is_liaison = (anchors[i] == anchors[i+1])
end
if word_data[#word_data] then
word_data[#word_data].is_liaison = false -- no successor
end
-- Stage 3: flag the už §20 exception. už keeps its [ʒ] (i.e. terminal
-- devoicing is skipped) only when it is in a liaison junction with the
-- following word AND that word starts with a vowel or sonorant. Whether
-- už is proclitic or enclitic in the group doesn't matter — what matters
-- is that ‿ sits between už and the next phoneme.
for i = 1, #word_data do
local wd = word_data[i]
wd.skip_terminal_devoicing = false
if wd.is_liaison and word_data[i+1] then
if should_skip_devoicing_for_uz(wd.text, word_data[i+1].syllables) then
wd.skip_terminal_devoicing = true
end
end
end
-- Stage 4: run the polish pipeline RTL across word_data so each W_i sees
-- W_{i+1}'s polished state when computing cross-word context.
for i = #word_data, 1, -1 do
local wd = word_data[i]
local next_wd = wd.is_liaison and word_data[i+1] or nil
-- Within-word polish (passes 1-5)
if not wd.skip_terminal_devoicing then
apply_terminal_devoicing(wd.syllables)
end
apply_voicing_assimilation(wd.syllables)
apply_place_assimilation(wd.syllables)
apply_geminate_simplification(wd.syllables)
apply_final_consonant_vocalization(wd.syllables)
-- Cross-word fricative simplification / place assimilation at the
-- liaison boundary, before W1 palatalizes (so a freshly assimilated
-- s → ʃ can still pick up ʲ).
if next_wd then
apply_crossword_polish_at_junction(wd.syllables, next_wd.syllables)
end
-- Determine right palatalization context for the cross-word case.
local right_palatalizing = false
if next_wd then
right_palatalizing = first_token_palatalizes(next_wd.syllables)
end
-- Pass 6: palatalization (with cross-word context).
apply_palatalization(wd.syllables, right_palatalizing)
-- Remaining within-word passes.
apply_nasal_assimilation(wd.syllables)
adjust_vowel_quality(wd.syllables)
end
-- Stage 5: render each word and join with ‿ (same clitic group) or " ".
local result_parts = {}
for i, wd in ipairs(word_data) do
insert(result_parts, render_word_ipa(wd.syllables))
end
local result = result_parts[1] or ""
for i = 2, #word_data do
local sep = word_data[i-1].is_liaison and LIAISON or " "
result = result .. sep .. result_parts[i]
end
return result
end
-- Rhyme Extractor
local IPA_VOWELS = "aɐɑæɛeəɪiɔoʊuɒɜ"
local function get_rhyme(ipa)
-- Remove liaison and spaces before rhyme calculation
local clean_ipa = ugsub(ipa, "[‿ ]", "")
-- Search for the last stress mark from right to left
local last_stress_pos = nil
for i = ulen(clean_ipa), 1, -1 do
local char = usub(clean_ipa, i, i)
if char == "ˈ" then
-- Skip superscript if present
if i > 1 then
local prev = usub(clean_ipa, i - 1, i - 1)
if prev == "¹" or prev == "²" then
last_stress_pos = i -- Point to ˈ, skip superscript
else
last_stress_pos = i
end
else
last_stress_pos = i
end
break
end
end
if not last_stress_pos then return nil end
-- Extract content after the stress mark
local after = usub(clean_ipa, last_stress_pos + 1)
-- Remove hiatus dots for rhyme grouping
after = ugsub(after, "%.", "")
-- Find first vowel position (skip onset consonants)
local vstart = umatch(after, "()[" .. IPA_VOWELS .. "]")
if vstart then
return usub(after, vstart)
end
return after
end
-- Hyphenation generator (supports multi-word phrases)
local function get_hyphenation(term, provided_pagename)
-- Use provided pagename if available, otherwise try to extract from term
local pagename, clean_term
if provided_pagename then
pagename = provided_pagename
clean_term = term
else
pagename, clean_term = get_pagename(term)
end
term = clean_term
-- Split input on both ‿ and space, tracking the separator type so the
-- final hyphenation string can preserve liaison markers from the input.
local input_segs = split_into_segments(term)
local pagename_segs = nil
if pagename then
pagename_segs = split_into_segments(pagename)
-- Verify segment count matches (only when both are multi-segment)
if #input_segs > 1 and #pagename_segs > 1 and #input_segs ~= #pagename_segs then
error("lt-pron: Input has " .. #input_segs .. " words but pagename has "
.. #pagename_segs .. " words. They must match.")
end
-- If pagename is a single word but input is multi-word, drop alignment
if #pagename_segs == 1 and #input_segs > 1 then
pagename_segs = nil
end
end
local all_word_parts = {}
for i, seg_text in ipairs(input_segs) do
-- Get the corresponding pagename word, or nil if not available
local seg_pagename = (pagename_segs and pagename_segs[i]) or nil
local tokens = tokenize(seg_text, seg_pagename)
local syllables = syllabify(tokens)
local parts = {}
for _, syl in ipairs(syllables) do
local text = ""
for _, tok in ipairs(syl) do
-- Skip respelling characters (original_char == "-" means not in orthography)
if tok.original_char ~= "-" then
-- Re-attach original tone visually for display
local t_mark = ""
if tok.tone == "acute" then t_mark = ACUTE
elseif tok.tone == "grave" then t_mark = GRAVE
elseif tok.tone == "tilde" then t_mark = TILDE
end
-- Use original_char if set (e.g., j̃ → i internally but j in display)
-- Otherwise use tok.char
local disp_char = tok.original_char or tok.char
-- Restore original orthography for ɔ
if disp_char == "ɔ" then disp_char = "o" end
if disp_char == "Ɔ" then disp_char = "O" end
-- Handle tone placement for diphthongs
if tok.tone_position then
-- Diphthong: place tone on the specified vowel
local char_len = ulen(disp_char)
if char_len == 2 then
-- Two-character diphthong
local v1 = usub(disp_char, 1, 1)
local v2 = usub(disp_char, 2, 2)
if tok.tone_position == 1 then
text = text .. v1 .. t_mark .. v2
else
text = text .. v1 .. v2 .. t_mark
end
elseif char_len == 3 then
-- Three-character (silent i) diphthong
local v1 = usub(disp_char, 1, 1)
local v2 = usub(disp_char, 2, 2)
local v3 = usub(disp_char, 3, 3)
if tok.tone_position == 1 then
text = text .. v1 .. t_mark .. v2 .. v3
elseif tok.tone_position == 2 then
text = text .. v1 .. v2 .. t_mark .. v3
else
text = text .. v1 .. v2 .. v3 .. t_mark
end
end
else
-- Single vowel or consonant: tone goes after the character
text = text .. disp_char .. t_mark
end
end
end
parts[#parts + 1] = makeDisplayText(text)
end
insert(all_word_parts, concat(parts, "‧")) -- Use ‧ instead of standard - internally to preserve word boundaries
end
-- Hyphenation always joins multi-word phrases with a plain space — the
-- liaison marker ‿ is purely an IPA-output device and never appears here.
local combined_string = concat(all_word_parts, " ")
local final_parts = {}
for _, piece in ipairs(rsplit(combined_string, "‧")) do
insert(final_parts, piece)
end
-- Calculate actual syllable count (for correct num_syl)
local syllable_count = 0
for _, word_part in ipairs(all_word_parts) do
local word_syls = rsplit(word_part, "‧")
syllable_count = syllable_count + #word_syls
end
-- Store actual syllable count as a field (since __len doesn't work on tables in Lua 5.1)
final_parts.syllable_count = syllable_count
return final_parts
end
-- ============================================================================
-- SECTION 7.5: Conjugation Module Support Functions
-- ============================================================================
-- Export: Get syllables as string array with accents
function export.get_syllables(term)
local pagename, clean_term = get_pagename(term)
term = clean_term
local tokens = tokenize(term, pagename)
local syllables = syllabify(tokens)
local result = {}
for _, syl in ipairs(syllables) do
local text = ""
for _, tok in ipairs(syl) do
-- Skip respelling glides in syllable output
if not tok.is_respelling then
-- Re-attach original tone
local t_mark = ""
if tok.tone == "acute" then t_mark = ACUTE
elseif tok.tone == "grave" then t_mark = GRAVE
elseif tok.tone == "tilde" then t_mark = TILDE
end
-- Restore original orthography for ɔ
local disp_char = tok.char
if disp_char == "ɔ" then disp_char = "o" end
if disp_char == "Ɔ" then disp_char = "O" end
-- Handle tone placement for diphthongs
if tok.tone_position then
-- Diphthong: place tone on the specified vowel
local char_len = ulen(disp_char)
if char_len == 2 then
-- Two-character diphthong
local v1 = usub(disp_char, 1, 1)
local v2 = usub(disp_char, 2, 2)
if tok.tone_position == 1 then
text = text .. v1 .. t_mark .. v2
else
text = text .. v1 .. v2 .. t_mark
end
elseif char_len == 3 then
-- Three-character (silent i) diphthong
local v1 = usub(disp_char, 1, 1)
local v2 = usub(disp_char, 2, 2)
local v3 = usub(disp_char, 3, 3)
if tok.tone_position == 1 then
text = text .. v1 .. t_mark .. v2 .. v3
elseif tok.tone_position == 2 then
text = text .. v1 .. v2 .. t_mark .. v3
else
text = text .. v1 .. v2 .. v3 .. t_mark
end
end
else
-- Single vowel or consonant: tone goes after the character
text = text .. disp_char .. t_mark
end
end
end
-- Return NFC format with proper dotabove insertion
insert(result, makeDisplayText(text))
end
return result
end
-- Export: Check if a syllable is heavy or light
function export.is_heavy_syllable(syllable)
local pagename, clean_syllable = get_pagename(syllable)
syllable = clean_syllable
-- Validate single syllable
local tokens = tokenize(syllable, pagename)
local syllables = syllabify(tokens)
if #syllables ~= 1 then
error("is_heavy_syllable: input must be a single syllable, got " .. #syllables .. " syllables")
end
local syl = syllables[1]
-- Find the vowel token
local v_idx = nil
for i, tok in ipairs(syl) do
if tok.type == "V" then
v_idx = i
break
end
end
if not v_idx then
error("is_heavy_syllable: no vowel found in syllable")
end
local v_tok = syl[v_idx]
local lc_v = ulower(v_tok.char)
-- Handle silent i (e.g., "iau" where i is silent)
if v_tok.has_silent_i then
lc_v = usub(lc_v, 2)
end
-- Long vowels (inherently long, regardless of accent)
local LONG_VOWELS = {
["ą"]=true, ["ę"]=true, ["ė"]=true, ["į"]=true, ["y"]=true, ["ų"]=true, ["ū"]=true,
["o"]=true, ["ɔ"]=true -- o/ɔ are always long (except ò, but we treat all o as long)
}
if LONG_VOWELS[lc_v] then
return true
end
-- Diphthongs (length > 1)
if ulen(lc_v) > 1 then
return true
end
-- Mixed diphthongs: short vowel + liquid in coda position
local SHORT_VOWELS = {["a"]=true, ["e"]=true, ["i"]=true, ["u"]=true}
if SHORT_VOWELS[lc_v] and v_idx < #syl then
local next_tok = syl[v_idx + 1]
-- Liquid in coda (not j or v, which don't form mixed diphthongs)
if next_tok.type == "R" and next_tok.char ~= "j" and next_tok.char ~= "v" then
return true
end
end
-- Otherwise, it's a light syllable
return false
end
-- Export: Change accent of a syllable
function export.change_accent(syllable, target_accent)
local pagename, clean_syllable = get_pagename(syllable)
syllable = clean_syllable
-- Validate target_accent parameter
local VALID_ACCENTS = {acute=true, tilde=true, grave=true, none=true}
if not VALID_ACCENTS[target_accent] then
error("change_accent: invalid target_accent '" .. tostring(target_accent) ..
"', must be 'acute', 'tilde', 'grave', or 'none'")
end
-- Validate single syllable
local tokens = tokenize(syllable, pagename)
local syllables = syllabify(tokens)
if #syllables ~= 1 then
error("change_accent: input must be a single syllable, got " .. #syllables .. " syllables")
end
-- Remove all existing accents
local clean = remove_all_accents(syllable)
-- If target is 'none', return clean syllable
if target_accent == "none" then
return clean
end
-- Re-tokenize the clean syllable to analyze structure
local clean_tokens = tokenize(clean, pagename)
local clean_syllables = syllabify(clean_tokens)
local syl = clean_syllables[1]
-- Find vowel position and extract vowel part
local onset = ""
local vowel_part = ""
local coda = ""
local v_idx = nil
for i, tok in ipairs(syl) do
if tok.type == "V" then
v_idx = i
break
else
onset = onset .. tok.char
end
end
if not v_idx then
error("change_accent: no vowel found in syllable")
end
local v_tok = syl[v_idx]
vowel_part = ulower(v_tok.char)
-- Handle silent i
if v_tok.has_silent_i then
vowel_part = usub(vowel_part, 2)
end
-- Check if this is a mixed diphthong
local is_mixed = false
if v_idx < #syl then
local next_tok = syl[v_idx + 1]
if next_tok.type == "R" and next_tok.char ~= "j" and next_tok.char ~= "v" then
-- Mixed diphthong: vowel + liquid
vowel_part = vowel_part .. ulower(next_tok.char)
is_mixed = true
-- Collect remaining coda after the liquid
for i = v_idx + 2, #syl do
coda = coda .. syl[i].char
end
else
-- Regular syllable: collect all coda
for i = v_idx + 1, #syl do
coda = coda .. syl[i].char
end
end
end
-- Look up the accented form in ACCENT_PAIRS
if not ACCENT_PAIRS[vowel_part] then
error("change_accent: vowel/diphthong '" .. vowel_part .. "' not found in accent pairs table")
end
local accented_vowel = ACCENT_PAIRS[vowel_part][target_accent]
if not accented_vowel then
error("change_accent: accent type '" .. target_accent ..
"' is not allowed for vowel/diphthong '" .. vowel_part .. "'")
end
-- Reconstruct the syllable with new accent (in NFD format)
local result = onset .. accented_vowel .. coda
return result
end
-- ============================================================================
-- SECTION 8: Module Exports & Template Formatting (Preserved)
-- ============================================================================
local q_spec = {store = "insert-flattened", type = "qualifier"}
local a_spec = {store = "insert-flattened", type = "labels"}
local ref_spec = {store = "insert-flattened", item_dest = "refs", type = "references"}
-- Generate audio object, supporting file#caption syntax
local function generate_audio_obj(arg)
local file, caption = arg:match("^(.-)%s*#%s*(.*)$")
file = file or arg
return {file = file, caption = caption}
end
-- Parse rhyme specification with optional syllable count
local function parse_rhyme(arg, parse_err)
local function generate_obj(term)
return {rhyme = term}
end
local param_mods = {
s = {
item_dest = "num_syl",
type = "number",
sublist = true,
},
}
-- Add q/qq/a/aa/ref support if inline modifiers are present
if arg:find("<") then
param_mods.q = q_spec
param_mods.qq = q_spec
param_mods.a = a_spec
param_mods.aa = a_spec
param_mods.ref = ref_spec
end
return require(parse_util_module).parse_inline_modifiers(arg, {
param_mods = param_mods,
generate_obj = generate_obj,
parse_err = parse_err,
splitchar = ",",
})
end
-- Parse hyphenation specification (dot-separated syllables)
local function parse_hyph(arg, parse_err)
local function generate_obj(term)
local parts = rsplit(term, "%.")
return {hyph = parts, syllabification = term}
end
local param_mods = {}
-- Add q/qq/a/aa/ref support if inline modifiers are present
if arg:find("<") then
param_mods.q = q_spec
param_mods.qq = q_spec
param_mods.a = a_spec
param_mods.aa = a_spec
param_mods.ref = ref_spec
end
return require(parse_util_module).parse_inline_modifiers(arg, {
param_mods = param_mods,
generate_obj = generate_obj,
parse_err = parse_err,
splitchar = ",",
})
end
-- Parse homophone specification
local function parse_homophone(arg, parse_err)
local function generate_obj(term)
return {term = term}
end
local param_mods = {
t = {item_dest = "gloss"},
gloss = {},
pos = {},
alt = {},
lit = {},
id = {},
g = {
item_dest = "genders",
sublist = true,
},
}
-- Add q/qq/a/aa/ref support if inline modifiers are present
if arg:find("<") then
param_mods.q = q_spec
param_mods.qq = q_spec
param_mods.a = a_spec
param_mods.aa = a_spec
param_mods.ref = ref_spec
end
return require(parse_util_module).parse_inline_modifiers(arg, {
param_mods = param_mods,
generate_obj = generate_obj,
parse_err = parse_err,
splitchar = ",",
})
end
local audio_nested_mods = {
["a"] = a_spec, ["aa"] = a_spec,
["q"] = q_spec, ["qq"] = q_spec,
["text"] = {},
["IPA"] = {sublist = true},
["t"] = {item_dest = "gloss"},
["gloss"] = {},
["pos"] = {},
["lit"] = {},
["g"] = {
item_dest = "genders",
sublist = true,
},
}
local function parse_one_term(raw, parse_err)
if not raw:find("<") then
return {term = raw, audio_list = {}, rhyme_list = {}, hyph_list = {}, pagename = nil}
end
-- Extract base spelling before parse_inline_modifiers
local pagename = nil
if raw:find("<base:") then
pagename = raw:match("<base:([^>]+)>")
raw = raw:gsub("<base:[^>]+>", "")
end
local parsed = require(parse_util_module).parse_inline_modifiers(raw, {
param_mods = {
["q"] = q_spec, ["qq"] = q_spec,
["a"] = a_spec, ["aa"] = a_spec,
["ref"] = ref_spec,
["audio"] = {
store = "insert",
item_dest = "audio_list",
convert = function(arg, perr)
if arg:find("<") then
local parsed_audio = require(parse_util_module).parse_inline_modifiers(arg, {
param_mods = audio_nested_mods,
generate_obj = generate_audio_obj,
parse_err = perr,
})
parsed_audio.lang = get_lang()
local textobj = require(audio_module).construct_audio_textobj(parsed_audio)
parsed_audio.text = textobj
parsed_audio.gloss = nil
parsed_audio.pos = nil
parsed_audio.lit = nil
parsed_audio.genders = nil
return parsed_audio
end
local audio_obj = generate_audio_obj(arg)
audio_obj.lang = get_lang()
local textobj = require(audio_module).construct_audio_textobj(audio_obj)
audio_obj.text = textobj
return audio_obj
end,
},
["rhyme"] = {
store = "insert-flattened",
item_dest = "rhyme_list",
convert = parse_rhyme,
},
["hyph"] = {
store = "insert-flattened",
item_dest = "hyph_list",
convert = parse_hyph,
},
["hmp"] = {
store = "insert-flattened",
item_dest = "hmp_list",
convert = parse_homophone,
},
},
generate_obj = function(t)
return {term = t, audio_list = {}, rhyme_list = {}, hyph_list = {}, hmp_list = {}}
end,
parse_err = parse_err,
})
parsed.audio_list = parsed.audio_list or {}
parsed.rhyme_list = parsed.rhyme_list or {}
parsed.hyph_list = parsed.hyph_list or {}
parsed.hmp_list = parsed.hmp_list or {}
parsed.pagename = pagename
return parsed
end
-- Format rhyme objects with qualifiers
local function fmt_rhyme(rhyme_objs, bullet)
if not rhyme_objs or #rhyme_objs == 0 then return nil end
local rhyme_data = {}
for _, robj in ipairs(rhyme_objs) do
insert(rhyme_data, {
rhyme = robj.rhyme,
num_syl = robj.num_syl,
q = robj.q,
qq = robj.qq,
a = robj.a,
aa = robj.aa,
})
end
return bullet .. require(rhymes_module).format_rhymes({
lang = get_lang(),
rhymes = rhyme_data
})
end
-- Format hyphenation objects with qualifiers
local function fmt_hyph(hyph_objs, bullet)
if not hyph_objs or #hyph_objs == 0 then return nil end
local hyph_data = {}
for _, hobj in ipairs(hyph_objs) do
insert(hyph_data, {
hyph = hobj.hyph,
q = hobj.q,
qq = hobj.qq,
a = hobj.a,
aa = hobj.aa,
})
end
return bullet .. require(hyphenation_module).format_hyphenations({
lang = get_lang(),
hyphs = hyph_data,
caption = "分綴"
})
end
-- Format audio object
local function fmt_audio(audio_obj, bullet)
return bullet .. require(audio_module).format_audio(audio_obj)
end
-- Format homophone objects with qualifiers
local function fmt_hmp(hmp_objs, bullet)
if not hmp_objs or #hmp_objs == 0 then return nil end
return bullet .. require(homophones_module).format_homophones({
lang = get_lang(),
homophones = hmp_objs,
})
end
local function is_multiword_term(term)
-- split_into_segments returns a list of non-empty word strings.
return #split_into_segments(term) > 1
end
function export.show(frame)
local parargs = frame:getParent().args
local args = require(parameters_module).process(parargs, {
[1] = {default = "nãmas"},
["bullets"] = {type = "number", default = 1},
})
local input = args[1]
local nb = args.bullets
local b1 = string.rep("*", nb) .. " "
local b2 = string.rep("*", nb + 1) .. " "
local raw_terms = require(parse_util_module).split_escaping(input, ",")
local parsed_terms = {}
for i, raw in ipairs(raw_terms) do
raw = raw:match("^%s*(.-)%s*$")
local pt = parse_one_term(raw, function(msg)
error("lt-pron: " .. msg .. " (term " .. i .. ")")
end)
parsed_terms[#parsed_terms + 1] = pt
end
m_IPA = m_IPA or require("Module:IPA")
local text_parts = {}
for _, pt in ipairs(parsed_terms) do
-- Determine bullet level: same level as IPA for single pronunciation, indented for multiple
local content_bullet = (#parsed_terms == 1) and b1 or b2
-- Generate IPA
local ipa_str = to_ipa(pt.term, pt.pagename)
-- Handle rhyme: manual override, suppression, or auto-generation
local rhyme_objs = nil
local suppress_rhyme = false
if #pt.rhyme_list > 0 then
for _, robj in ipairs(pt.rhyme_list) do
if robj.rhyme == "-" then
suppress_rhyme = true
break
end
end
if not suppress_rhyme then
rhyme_objs = {}
for _, robj in ipairs(pt.rhyme_list) do
-- If num_syl not specified, try to get from auto-generated hyphenation
if not robj.num_syl then
local auto_hyph = get_hyphenation(pt.term, pt.pagename)
if auto_hyph and #auto_hyph > 0 then
-- Use syllable_count field if available (for multi-word phrases), otherwise use array length
local syl_count = auto_hyph.syllable_count or #auto_hyph
robj.num_syl = {syl_count}
end
end
insert(rhyme_objs, robj)
end
end
else
-- Auto-generate rhyme (skip if term ends with - or is a multiword term)
if not pt.term:match("%-$") and not is_multiword_term(pt.term) then
local rhyme_str = get_rhyme(ipa_str)
if rhyme_str then
local auto_hyph = get_hyphenation(pt.term, pt.pagename)
-- Use syllable_count field if available (for multi-word phrases), otherwise use array length
local num_syl = (auto_hyph and #auto_hyph > 0) and {auto_hyph.syllable_count or #auto_hyph} or nil
rhyme_objs = {{rhyme = rhyme_str, num_syl = num_syl}}
end
end
end
-- Handle hyphenation: manual override, suppression, or auto-generation
local hyph_objs = nil
local suppress_hyph = false
if #pt.hyph_list > 0 then
for _, hobj in ipairs(pt.hyph_list) do
if hobj.syllabification == "-" then
suppress_hyph = true
break
end
end
if not suppress_hyph then
hyph_objs = pt.hyph_list
end
else
-- Auto-generate hyphenation
local auto_hyph = get_hyphenation(pt.term, pt.pagename)
if auto_hyph and #auto_hyph > 0 then
hyph_objs = {{hyph = auto_hyph, syllabification = concat(auto_hyph, ".")}}
end
end
-- Format IPA with qualifiers and references
local ipa_item = {pron = "[" .. ipa_str .. "]"}
if pt.q then ipa_item.q = pt.q end
if pt.qq then ipa_item.qq = pt.qq end
if pt.a then ipa_item.a = pt.a end
if pt.aa then ipa_item.aa = pt.aa end
if pt.refs then ipa_item.refs = pt.refs end
text_parts[#text_parts + 1] = b1 .. m_IPA.format_IPA_full(lang, {ipa_item})
-- Audio
for _, aud in ipairs(pt.audio_list or {}) do
text_parts[#text_parts + 1] = fmt_audio(aud, content_bullet)
end
-- Rhyme
if rhyme_objs then
local r = fmt_rhyme(rhyme_objs, content_bullet)
if r then text_parts[#text_parts + 1] = r end
end
-- Hyphenation
if hyph_objs then
local h = fmt_hyph(hyph_objs, content_bullet)
if h then text_parts[#text_parts + 1] = h end
end
-- Homophones
if pt.hmp_list and #pt.hmp_list > 0 then
local hmp = fmt_hmp(pt.hmp_list, content_bullet)
if hmp then text_parts[#text_parts + 1] = hmp end
end
end
return concat(text_parts, "\n")
end
export.toIPA = to_ipa
export.hyphenate = get_hyphenation
export.rhyme = get_rhyme
return export
9who7csu6tqbv2e1xwa8ksrqcjvbg9o
利用者・トーク:となりのふぁいやーくん
3
591282
2313309
2307617
2026-08-09T01:26:51Z
となりのふぁいやーくん
129376
ページの白紙化
2313309
wikitext
text/x-wiki
phoiac9h4m842xq45sp7s6u21eteeq1
僊󠄁
0
600984
2313318
2312995
2026-08-09T01:47:16Z
Keikei kanji
129888
2313318
wikitext
text/x-wiki
{{DEFAULTSORT:U+50CA E0101}}
==漢字==
{{kanji|人|11}}
{{kanji variants|僊}}
=== 字源 ===
* 「[[僊#字源]]」を参照。
=== 意義 ===
*「[[僊]]」に異体字セレクタの[[󠄁|U+E0101]]を指定した字形。
# 「[[僊]]」と同義。
== {{コード}} ==
{{文字コード}}
{{mjmoji|007055}}
[[Category:異体字セレクタ]]
9vhrysw04xc0kh9r61mchyr3mhltcxy
2313387
2313318
2026-08-09T07:41:58Z
Kuroco2k
84207
見た目単字だが、複数の文字を連ねている以上、{{文字コード}}は不適切。また、意義のみで同義であることは自明と推察できる。
2313387
wikitext
text/x-wiki
{{DEFAULTSORT:U+50CA E0101}}
==漢字==
{{kanji|人|11}}
{{kanji variants|僊}}
===字源===
*「[[僊#字源]]」を参照。
=== 意義 ===
#「[[僊]]」に異体字セレクタの[[󠄁|U+E0101]]を指定した字形。
=={{コード}}==
{{mjmoji|007055}}
[[Category:異体字セレクタ]]
5ukd6onjk00mrew7ejybhkth62y7j17
雁柱
0
601012
2313067
2026-08-08T12:10:36Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|がんちゅう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[がんちゅう]]}} #[[ことじ|琴柱]]。」
2313067
wikitext
text/x-wiki
{{kana-DEFAULTSORT|がんちゅう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[がんちゅう]]}}
#[[ことじ|琴柱]]。
ll6ddeyfc2j35gzfqfq9idnugmrh8cs
巌中
0
601013
2313068
2026-08-08T12:12:21Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|がんちゅう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[がんちゅう]]}} #[[石室]]。」
2313068
wikitext
text/x-wiki
{{kana-DEFAULTSORT|がんちゅう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[がんちゅう]]}}
#[[石室]]。
1lrtzt99tfjg1c3yebt7kve9yvwjprv
がんちゅう
0
601018
2313073
2026-08-08T12:14:31Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT}} {{also|かんちゅう}} =={{L|ja}}== ==={{kangokana}}=== {{ja-kangokana|h=y}} *【[[雁柱]]】琴柱。 *【[[巌中]]】石室。 *【[[眼中]]】眼の内。」
2313073
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|かんちゅう}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[雁柱]]】琴柱。
*【[[巌中]]】石室。
*【[[眼中]]】眼の内。
ba7x8r3qdbm09rev3zax5tjdo25380s
再再
0
601022
2313089
2026-08-08T12:38:58Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|さいさい}} =={{L|ja}}== ==={{adv}}=== {{ja-adv|[[さいさい]]}} #[[たびたび]]。[[再三]]。何度も。」
2313089
wikitext
text/x-wiki
{{kana-DEFAULTSORT|さいさい}}
=={{L|ja}}==
==={{adv}}===
{{ja-adv|[[さいさい]]}}
#[[たびたび]]。[[再三]]。何度も。
j7axt8f53qckweyjnleua1vsnoz0iyg
再々
0
601023
2313090
2026-08-08T12:40:00Z
うーむ
129171
[[再再]]への転送ページ
2313090
wikitext
text/x-wiki
#転送[[再再]]
hi1ky01k1u61ekxn908rj5yep5t00sf
細細
0
601024
2313091
2026-08-08T12:47:43Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|さいさい}} =={{ja}}== ==={{adjectivenoun}}=== {{ja-adjectival noun|[[さいさい]]}} #[[微細]]なさま。[[詳細]]。 #[[ほそい|細い]]さま。 #[[再再]]に同じ。 ==={{conjug}}=== {{日本語タルト活用}} ==={{wagokanji}}=== {{ja-wagokanji|こまごま|ほそぼそ}} #{{wagokanji of|こまごま}} #{{wagokanji of|ほそぼそ}}」
2313091
wikitext
text/x-wiki
{{kana-DEFAULTSORT|さいさい}}
=={{ja}}==
==={{adjectivenoun}}===
{{ja-adjectival noun|[[さいさい]]}}
#[[微細]]なさま。[[詳細]]。
#[[ほそい|細い]]さま。
#[[再再]]に同じ。
==={{conjug}}===
{{日本語タルト活用}}
==={{wagokanji}}===
{{ja-wagokanji|こまごま|ほそぼそ}}
#{{wagokanji of|こまごま}}
#{{wagokanji of|ほそぼそ}}
sch812kz7ih9kg2rhj9aktcmu1dzhvv
細々
0
601025
2313092
2026-08-08T12:48:51Z
うーむ
129171
[[細細]]への転送ページ
2313092
wikitext
text/x-wiki
#転送[[細細]]
hnqckdkd09cfrsgfw2o1xal9s2y5i5w
さいさい
0
601026
2313094
2026-08-08T12:54:31Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT}} {{also|さいざい|ざいざい}} =={{L|ja}}== ==={{kangokana}}=== {{ja-kangokana|h=y}} *【[[再再]]】たびたび。再三。 *【[[済済]]】数が多く盛んなこと。 *【[[細細]]】微細。詳細。 *【[[歳歳]]】毎年。」
2313094
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|さいざい|ざいざい}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[再再]]】たびたび。再三。
*【[[済済]]】数が多く盛んなこと。
*【[[細細]]】微細。詳細。
*【[[歳歳]]】毎年。
8cl9icmu1sff50rb6bvs1dusj6zk8iy
摧挫
0
601027
2313095
2026-08-08T12:56:54Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|さいざ}} =={{L|ja}}== ==={{noun}}=== {{ja-noun-suru|さいざ}} #[[くじく|挫く]]こと。 ==={{verb}}=== {{ja-verb-suru|さいざ}} {{日本語サ変活用}}」
2313095
wikitext
text/x-wiki
{{kana-DEFAULTSORT|さいざ}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun-suru|さいざ}}
#[[くじく|挫く]]こと。
==={{verb}}===
{{ja-verb-suru|さいざ}}
{{日本語サ変活用}}
jg7qd56q8dtiafrluz1022f3wkp1y6l
さいざい
0
601028
2313097
2026-08-08T13:03:04Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT}} {{also|さいさい|ざいざい}} =={{L|ja}}== ==={{kangokana}}=== {{ja-kangokana|h=y}} *【[[裁罪]]】断罪すること。 *【[[歳在]]】木星の位置。」
2313097
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|さいさい|ざいざい}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[裁罪]]】断罪すること。
*【[[歳在]]】木星の位置。
7rf0ehcigd080bg89ugjnzwvd2o4clv
裁罪
0
601029
2313098
2026-08-08T13:03:57Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|さいざい}} =={{L|ja}}== ==={{noun}}=== {{ja-noun-suru|[[さいざい]]}} #[[断罪]]すること。 ==={{verb}}=== {{ja-verb-suru|さいざい}} {{日本語サ変活用}}」
2313098
wikitext
text/x-wiki
{{kana-DEFAULTSORT|さいざい}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun-suru|[[さいざい]]}}
#[[断罪]]すること。
==={{verb}}===
{{ja-verb-suru|さいざい}}
{{日本語サ変活用}}
a7ytx8y2r98soitr9dzdejc1gfynxwz
歳在
0
601030
2313099
2026-08-08T13:04:54Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|さいざい}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[さいざい]]}} #[[木星]]の[[位置]]。」
2313099
wikitext
text/x-wiki
{{kana-DEFAULTSORT|さいざい}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[さいざい]]}}
#[[木星]]の[[位置]]。
fcr8bxt53wg92z3gzqtwrb2177ui9co
在在
0
601031
2313100
2026-08-08T13:08:40Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|ざいざい}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[ざいざい]]}} #[[あちこち]]の[[むらざと|村里]]。 #いたるところ。[[所所]]。」
2313100
wikitext
text/x-wiki
{{kana-DEFAULTSORT|ざいざい}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[ざいざい]]}}
#[[あちこち]]の[[むらざと|村里]]。
#いたるところ。[[所所]]。
0y9xunsdibwjda386yaatrez1e5eaks
ざいざい
0
601032
2313104
2026-08-08T13:14:41Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT}} {{also|さいさい|さいざい}} =={{L|ja}}== ==={{kangokana}}=== {{ja-kangokana}} *【[[在在]]】あちこちの村里。」
2313104
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|さいさい|さいざい}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana}}
*【[[在在]]】あちこちの村里。
exqqc5spmsh0zxpqw48ir20tyei41v9
最先
0
601033
2313105
2026-08-08T13:25:39Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|さいせん}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[さいせん]]}} #最も[[さき|先]]。[[最前]]。」
2313105
wikitext
text/x-wiki
{{kana-DEFAULTSORT|さいせん}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[さいせん]]}}
#最も[[さき|先]]。[[最前]]。
iylaeat2y27cosmhifqea05lzxn22gc
ἔνεμα
0
601037
2313113
2026-08-08T13:57:35Z
M-30722
1202
[[en:ἔνεμα]]より
2313113
wikitext
text/x-wiki
{{DEFAULTSORT:ενεμα}}
=={{L|grc}}==
==={{etym}}===
{{affix|grc|ἐνίημι|-μα}}.
==={{pron}}===
{{grc-IPA|ἔνεμᾰ}}
==={{noun}}===
{{grc-noun|head=ἔνεμᾰ|ἐνέμᾰτος|n|third}}
#{{タグ|grc|医療}}[[注射]]、[[浣腸]]。
{{grc-decl|form=N|ἔνεμᾰ|ἐνέμᾰτος}}
===={{syn}}====
* {{l|grc|κλύσμα}}
===={{desc}}====
* {{desc|la|enema|bor=1}}
** {{desc|ca|ènema}}
** {{desc|en|enema|bor=1}}
hkiwmmiwt2hn5dvj0bhu2n59zvpk98n
ènema
0
601038
2313114
2026-08-08T13:59:45Z
M-30722
1202
[[en:ènema]]より
2313114
wikitext
text/x-wiki
{{DEFAULTSORT:enema}}
{{also|enema|ę́nemą}}
=={{L|ca}}==
==={{etym}}===
{{etyl|LL.|ca}} {{m|la|enema}} < {{etyl|grc|ca}} {{m|grc|ἔνεμα}} < {{m|grc|ἐνίημι}} < {{m|grc|ἐν}} + {{m|grc|ἵημι}}
==={{pron}}===
* {{ca-IPA}}
* {{音声|ca|LL-Q7026 (cat)-Marvives-ènema.wav|a=Barcelona}}
==={{noun}}===
{{ca-noun|m|ènemes}}
#{{タグ|ca|医療}}[[浣腸]]。
===={{drv}}====
* {{l|ca|enèmic}}
ljmi6jpw65e6mrw0qwmeatp8wxq9bgx
ènemes
0
601039
2313115
2026-08-08T14:00:31Z
M-30722
1202
新規作成
2313115
wikitext
text/x-wiki
{{DEFAULTSORT:enemes}}
=={{L|ca}}==
==={{noun}}===
{{head|ca|plural}}
#{{plural of|ca|ènema}}
rhg4ha9ec1ji7m88vxjswiqup54co1p
plunge in
0
601040
2313119
2026-08-08T14:07:26Z
M-30722
1202
[[en:plunge in]]より
2313119
wikitext
text/x-wiki
{{DEFAULTSORT:plungein}}
=={{L|en}}==
==={{pron}}===
* {{音声|en|En-au-plunge in.ogg|a=AU}}
* {{rhymes|lang=en|ɪn|s=2}}
==={{verb}}===
{{英語句動詞|plunge|in}}
#{{おくりがな3|飛|と|び|込|こ|む|とびこむ}}、[[突入]]する。
===={{syn}}====
* {{l|en|dive in}}
* {{l|en|plunge into}}
gr1v2qgddfwqnww95mdm2e1od6lzu11
plunge into
0
601041
2313120
2026-08-08T14:08:04Z
M-30722
1202
新規作成
2313120
wikitext
text/x-wiki
{{DEFAULTSORT:plungeinto}}
=={{L|en}}==
==={{verb}}===
{{英語句動詞|plunge|into}}
#{{おくりがな3|飛|と|び|込|こ|む|とびこむ}}、[[突入]]する。
#:{{syn|en|plunge in}}
1j9my21kxyg8eg0crti1fwo66ncq0ic
đột nhập
0
601042
2313122
2026-08-08T14:12:09Z
M-30722
1202
新規作成
2313122
wikitext
text/x-wiki
{{vi-DEFAULTSORT|đột|nhập}}
=={{L|vi}}==
==={{pron}}===
{{vi-pron}}
==={{verb}}===
{{head|vi|verb}}{{vi-h|突|入}}
#[[突入]]する。
3h8qmls90r538nv6mykev039kgl5sjr
사막화
0
601045
2313130
2026-08-08T16:50:16Z
20041027 tatsu
59964
ページの作成:「=={{L|ko}}== {{wikipedia|lang=ko}} ==={{pron}}=== {{ko-IPA}} ==={{noun}}=== {{head|ko|noun}} {{ko-h|沙漠|化}} #{{context|環境|lang=ko}} [[砂漠化]]。」
2313130
wikitext
text/x-wiki
=={{L|ko}}==
{{wikipedia|lang=ko}}
==={{pron}}===
{{ko-IPA}}
==={{noun}}===
{{head|ko|noun}}
{{ko-h|沙漠|化}}
#{{context|環境|lang=ko}} [[砂漠化]]。
f5owc3o041igzf6tawqr36oada8h29v
沙漠化
0
601046
2313131
2026-08-08T16:51:40Z
20041027 tatsu
59964
ページの作成:「=={{L|ko}}== ==={{noun}}=== {{ko-head|noun|사막화|cat2=環境}} #[[砂漠化]]。」
2313131
wikitext
text/x-wiki
=={{L|ko}}==
==={{noun}}===
{{ko-head|noun|사막화|cat2=環境}}
#[[砂漠化]]。
nx5pny8ylbd0mlu5y9tdn7pemloxjvt
カテゴリ:押韻:英語/eɪʃən/6音節
14
601047
2313133
2026-08-08T17:08:04Z
20041027 tatsu
59964
ページの作成:「[[カテゴリ:押韻:{{en}}/eɪʃən|6]]」
2313133
wikitext
text/x-wiki
[[カテゴリ:押韻:{{en}}/eɪʃən|6]]
elszhi1zrthawv7onzu866woqv1lk19
輯製
0
601048
2313134
2026-08-08T22:23:05Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|しゅうせい}} =={{L|ja}}== ==={{noun}}=== {{ja-noun-suru|[[しゅうせい]]}} #[[編輯]]して[[つくる]]こと。 ==={{verb}}=== {{ja-verb-suru|しゅうせい}} {{日本語サ変活用}}」
2313134
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しゅうせい}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun-suru|[[しゅうせい]]}}
#[[編輯]]して[[つくる]]こと。
==={{verb}}===
{{ja-verb-suru|しゅうせい}}
{{日本語サ変活用}}
r85zvlwtcg0uw6o52t1wr0qa82fuuu1
テンプレート:suy
10
601049
2313135
2026-08-08T22:33:23Z
Kuroco2k
84207
新規作成
2313135
wikitext
text/x-wiki
<onlyinclude>キセジェ語</onlyinclude>[[Category:言語表記テンプレート|{{PAGENAME}}]][[Category:ISO 639-3|{{PAGENAME}}]]
lshvbo32bjlixg2m5nip384m258kvd5
剤銭
0
601050
2313156
2026-08-08T22:39:57Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|ざいせん}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[ざいせん]]}} #[[薬価]]。」
2313156
wikitext
text/x-wiki
{{kana-DEFAULTSORT|ざいせん}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[ざいせん]]}}
#[[薬価]]。
f41w85elrvt7tq01xxb948kl7g5306j
在先
0
601051
2313157
2026-08-08T22:43:09Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|ざいせん}} =={{L|ja}}== ==={{adv}}=== {{ja-adv|[[ざいせん]]}} #[[あらかじめ]]。」
2313157
wikitext
text/x-wiki
{{kana-DEFAULTSORT|ざいせん}}
=={{L|ja}}==
==={{adv}}===
{{ja-adv|[[ざいせん]]}}
#[[あらかじめ]]。
anlp1kkan2xspvfmlmicj5wfltkg0tf
ざいせん
0
601052
2313158
2026-08-08T22:45:19Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT}} {{also|さいせん|さいぜん}} =={{L|ja}}== ==={{kangokana}}=== {{ja-kangokana|h=y}} *【[[在先]]】あらかじめ。 *【[[剤銭]]】薬価。」
2313158
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|さいせん|さいぜん}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[在先]]】あらかじめ。
*【[[剤銭]]】薬価。
m4ggpyjr07nn53ibts5l0djx4xvr8kx
テンプレート・トーク:ISO639-1
11
601053
2313191
2026-08-08T22:53:25Z
Kuroco2k
84207
/* テンプレート:ISO 639への一元化 */ 新しい節
2313191
wikitext
text/x-wiki
== テンプレート:ISO 639への一元化 ==
{{temp|ISO639-1}}、{{temp|ISO639-2}}、{{temp|ISO639-23}}、{{temp|ISO639-3}}と区分されている4つのテンプレートを{{temp|ISO 639}}へまとめ、これらの非推奨化を提案します。単純に「非推奨のテンプレートを用いており(とくに2、23で顕著です)、現状の方式を避けたい」ことや、「スタイルの統一化」を理由としています。--[[利用者:Kuroco2k|<span style="color:#000000">'''雛宮黒狐'''</span>]]([[利用者‐会話:Kuroco2k|<span style="color:#5a00cc">Talk</span>]]) 2026年8月8日 (土) 22:53 (UTC)
gse302ckeucnwcsra2dcdl6y106sp1k
Wiktionary:削除依頼/2026年8月/テンプレート:ma
4
601054
2313232
2026-08-08T23:34:56Z
Kuroco2k
84207
依頼
2313232
wikitext
text/x-wiki
=== テンプレート:ma ===
言語コード誤用。そもそもISO 639-1に<code>ma</code>などというコードはない。誤解から来る誤用を防ぐ意味で、廃止ではなく即刻削除にした方がいいと考え、依頼。対象は以下2つ。
*[[テンプレート:ma]]
*[[テンプレート:Ma]]
*{{削除}} 依頼者票。--[[利用者:Kuroco2k|<span style="color:#000000">'''雛宮黒狐'''</span>]]([[利用者‐会話:Kuroco2k|<span style="color:#5a00cc">Talk</span>]]) 2026年8月8日 (土) 23:34 (UTC)
hp4kyc2vmwo9li0zuonnfjb7rlgdwmo
はっとう
0
601055
2313256
2026-08-08T23:49:48Z
鍼灸
112313
ページの作成:「{{kana-DEFAULTSORT}} {{also|はつどう|ばっとう}} =={{L|ja}}== ==={{kangokana}}=== {{ja-kangokana|h=y}} *【[[法堂]]】:[[講堂]]。 *【[[八島]]】:八つの島。 *【[[八等]]】:第八位。 *【[[八頭]]】:(動物が)八匹。」
2313256
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|はつどう|ばっとう}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[法堂]]】:[[講堂]]。
*【[[八島]]】:八つの島。
*【[[八等]]】:第八位。
*【[[八頭]]】:(動物が)八匹。
asgu7qtuzlci8b94rfa00mjat5dslrq
賀慶
0
601056
2313258
2026-08-08T23:53:35Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|がけい}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[がけい]]}} #[[めでたい]]こと。喜び[[いわう|祝う]]こと。[[慶賀]]。」
2313258
wikitext
text/x-wiki
{{kana-DEFAULTSORT|がけい}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[がけい]]}}
#[[めでたい]]こと。喜び[[いわう|祝う]]こと。[[慶賀]]。
e29q6elqahgcl4ew7jnlcx9hfq5ypu6
雅兄
0
601057
2313259
2026-08-08T23:57:59Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|がけい}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[がけい]]}} #{{タグ|ja|尊敬語}}(主に手紙で)相手の[[男性]]を[[敬愛]]していう語。」
2313259
wikitext
text/x-wiki
{{kana-DEFAULTSORT|がけい}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[がけい]]}}
#{{タグ|ja|尊敬語}}(主に手紙で)相手の[[男性]]を[[敬愛]]していう語。
amoxz1cgylhcq454skh5ankhn97j2p3
俄傾
0
601058
2313261
2026-08-09T00:00:46Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|がけい}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[がけい]]}} #[[しばらく]]の[[あいだ|間]]。」
2313261
wikitext
text/x-wiki
{{kana-DEFAULTSORT|がけい}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[がけい]]}}
#[[しばらく]]の[[あいだ|間]]。
1guzs2ahf1usblzy40wzqvqxi6oo3bp
峨髻
0
601059
2313263
2026-08-09T00:02:17Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|がけい}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[がけい]]}} #[[たかい|高く]]結った[[かみ|髪]]。」
2313263
wikitext
text/x-wiki
{{kana-DEFAULTSORT|がけい}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[がけい]]}}
#[[たかい|高く]]結った[[かみ|髪]]。
n3sk2h9kbyw9yjbmnl5f6za2myu37uj
がけい
0
601060
2313266
2026-08-09T00:06:40Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT}} {{also|かけい}} =={{L|ja}}== ==={{kangokana}}=== {{ja-kangokana|h=y}} *【[[俄傾]]】しばらくの間。 *【[[峨髻]]】高く結った頭髪。 *【[[賀慶]]】慶賀。 *【[[雅兄]]】(手紙で)相手の男性を敬愛していう語。」
2313266
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|かけい}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[俄傾]]】しばらくの間。
*【[[峨髻]]】高く結った頭髪。
*【[[賀慶]]】慶賀。
*【[[雅兄]]】(手紙で)相手の男性を敬愛していう語。
b06sz8tc8ol8xs0p2nqy9jee40k5n74
2313273
2313266
2026-08-09T00:12:20Z
うーむ
129171
2313273
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|かけい|かげい}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[俄傾]]】しばらくの間。
*【[[峨髻]]】高く結った頭髪。
*【[[賀慶]]】慶賀。
*【[[雅兄]]】(手紙で)相手の男性を敬愛していう語。
pdmt8gddj4ai2n38dstbncnnrl9zz81
華鯨
0
601061
2313267
2026-08-09T00:09:18Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|かげい}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[かげい]]}} #[[つりがね|釣鐘]]。また、その[[おと|音]]。」
2313267
wikitext
text/x-wiki
{{kana-DEFAULTSORT|かげい}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[かげい]]}}
#[[つりがね|釣鐘]]。また、その[[おと|音]]。
p0jm2ou005zrs09lxfmdc4ssiqujiwy
四頭
0
601062
2313268
2026-08-09T00:10:23Z
鍼灸
112313
ページの作成:「{{kana-DEFAULTSORT|しとう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[しとう]]|[[よんとう]]}} #([[動物]])が四匹。 #四つの[[頭部]]。 #四人の[[頭首]]。」
2313268
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[しとう]]|[[よんとう]]}}
#([[動物]])が四匹。
#四つの[[頭部]]。
#四人の[[頭首]]。
75s1br5fr0lo4j5gf9aatx9ckmoert4
かげい
0
601063
2313270
2026-08-09T00:11:42Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT}} {{also|かけい|がけい}} =={{L|ja}}== ==={{kangokana}}=== {{ja-kangokana}} *【[[華鯨]]】釣鐘。」
2313270
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|かけい|がけい}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana}}
*【[[華鯨]]】釣鐘。
7xzmr3bsqh1gv2fxujlyrglcryncmqk
八等
0
601064
2313276
2026-08-09T00:14:16Z
鍼灸
112313
ページの作成:「{{kana-DEFAULTSORT|はっとう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[はっとう]]}} #八[[番目]]の[[等級]]。」
2313276
wikitext
text/x-wiki
{{kana-DEFAULTSORT|はっとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[はっとう]]}}
#八[[番目]]の[[等級]]。
qm8yjy35d8e8cfwup84eul5yctu5qof
九島
0
601065
2313278
2026-08-09T00:19:36Z
鍼灸
112313
ページの作成:「{{kana-DEFAULTSORT|きゅうとう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[きゅうとう]]|[[くとう]]}} #{{タグ|ja|島}}九つの[[しま|島]]。」
2313278
wikitext
text/x-wiki
{{kana-DEFAULTSORT|きゅうとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[きゅうとう]]|[[くとう]]}}
#{{タグ|ja|島}}九つの[[しま|島]]。
ismthwocbmv2z6gcjems3tv18wdr2h6
九等
0
601066
2313279
2026-08-09T00:20:31Z
鍼灸
112313
ページの作成:「{{kana-DEFAULTSORT|きゅうとう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[きゅうとう]]|[[くとう]]}} #九[[番目]]の[[等級]]。」
2313279
wikitext
text/x-wiki
{{kana-DEFAULTSORT|きゅうとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[きゅうとう]]|[[くとう]]}}
#九[[番目]]の[[等級]]。
rrvz8aj4x4owk7vtdr2w0teuhemoffs
六賊
0
601067
2313280
2026-08-09T00:20:43Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|ろくぞく}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|ろくぞく}} #{{タグ|ja|仏教}}[[煩悩]]を引き起こす元となる[[六根]]。[[六盗]]。」
2313280
wikitext
text/x-wiki
{{kana-DEFAULTSORT|ろくぞく}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|ろくぞく}}
#{{タグ|ja|仏教}}[[煩悩]]を引き起こす元となる[[六根]]。[[六盗]]。
adu4cpu1s7j1fxego0ndj9w3vo3178m
六盗
0
601068
2313281
2026-08-09T00:21:39Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|ろくとう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[ろくとう]]}} #{{タグ|ja|仏教}}[[煩悩]]を引き起こす元となる[[六根]]。[[六賊]]。」
2313281
wikitext
text/x-wiki
{{kana-DEFAULTSORT|ろくとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[ろくとう]]}}
#{{タグ|ja|仏教}}[[煩悩]]を引き起こす元となる[[六根]]。[[六賊]]。
oclsalirh8xbjfphrjh5moogenngi4t
九頭
0
601069
2313282
2026-08-09T00:22:45Z
鍼灸
112313
ページの作成:「{{kana-DEFAULTSORT|きゅうとう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[きゅうとう]]|[[くず]]|[[くとう]]}} #([[動物]]が)九匹。 #九つの[[頭部]]。 #九つの[[頭首]]。」
2313282
wikitext
text/x-wiki
{{kana-DEFAULTSORT|きゅうとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[きゅうとう]]|[[くず]]|[[くとう]]}}
#([[動物]]が)九匹。
#九つの[[頭部]]。
#九つの[[頭首]]。
7fr3bpo1oupe6ds20y8hmocw4bhdv9s
2313298
2313282
2026-08-09T00:42:36Z
鍼灸
112313
2313298
wikitext
text/x-wiki
{{kana-DEFAULTSORT|きゅうとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[きゅうとう]]|[[くず]]|[[くとう]]}}
#([[動物]]が)九匹。
#九つの[[頭部]]。
#九人の[[頭首]]。
gro4k9g4tj770ucb738g3px09im4a2r
陸頭
0
601070
2313284
2026-08-09T00:24:04Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|ろくとう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[ろくとう]]}} #[[うし|牛]]の[[あたま|頭]]が平らなこと。」
2313284
wikitext
text/x-wiki
{{kana-DEFAULTSORT|ろくとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[ろくとう]]}}
#[[うし|牛]]の[[あたま|頭]]が平らなこと。
cykoojh1tycifhm1oqsnqfk4gsupjjy
禄位
0
601071
2313286
2026-08-09T00:26:56Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|ろくい}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|ろくい}} #[[俸禄]]と[[官位]]。[[身分]]。」
2313286
wikitext
text/x-wiki
{{kana-DEFAULTSORT|ろくい}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|ろくい}}
#[[俸禄]]と[[官位]]。[[身分]]。
iwqovehlr2p9luq8ws1xjohpz1uuzk9
はつどう
0
601072
2313287
2026-08-09T00:27:39Z
鍼灸
112313
ページの作成:「{{kana-DEFAULTSORT}} {{also|はっとう|ばっとう}} =={{L|ja}}== ==={{kangokana}}=== {{ja-kangokana}} *【[[発動]]】:始めること。」
2313287
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|はっとう|ばっとう}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana}}
*【[[発動]]】:始めること。
1x5fcgfj13w4g7hi5gmcgyh5ynlz6el
2313288
2313287
2026-08-09T00:28:56Z
鍼灸
112313
2313288
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|はっとう|ばっとう}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana}}
*【[[発動]]】:動き始めること。
76kkycqvzybypirm3ezr7kp6x2tramp
禄次
0
601073
2313290
2026-08-09T00:29:47Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|ろくじ}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[ろくじ]]}} #[[禄位]]。」
2313290
wikitext
text/x-wiki
{{kana-DEFAULTSORT|ろくじ}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[ろくじ]]}}
#[[禄位]]。
6zaweuffcefvj3wmm0qqjaobipq3f9a
禄等
0
601074
2313291
2026-08-09T00:31:26Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|ろくとう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[ろくとう]]}} #[[禄次]]。」
2313291
wikitext
text/x-wiki
{{kana-DEFAULTSORT|ろくとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[ろくとう]]}}
#[[禄次]]。
52j74zayncenvoehx9xg3c73dsh6tle
ろくとう
0
601075
2313292
2026-08-09T00:35:43Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT}} =={{L|ja}}== ==={{noun}}=== {{ja-noun}} #[[にんにく]]。 ==={{kangokana}}=== {{ja-kangokana|h=y}} *【[[六盗]]】[[六賊]]。 *【[[陸頭]]】牛の頭が平らなこと。 *【[[禄等]]】[[禄次]]。」
2313292
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun}}
#[[にんにく]]。
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[六盗]]】[[六賊]]。
*【[[陸頭]]】牛の頭が平らなこと。
*【[[禄等]]】[[禄次]]。
7o6wsb0btvs4031t7mubwre2gtxlwxq
2313293
2313292
2026-08-09T00:37:18Z
鍼灸
112313
2313293
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun}}
#[[にんにく]]。
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[六盗]]】[[六賊]]。
*【[[六島]]】六つの島。
*【[[六等]]】第六位。
*【[[六頭]]】(動物が)六匹。
*【[[陸頭]]】牛の頭が平らなこと。
*【[[禄等]]】[[禄次]]。
qdz1sl559vbqevfsidxu0bk458ygr7f
2313300
2313293
2026-08-09T00:44:47Z
うーむ
129171
/* */
2313300
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|ろくどう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun}}
#[[にんにく]]。
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[六盗]]】[[六賊]]。
*【[[六島]]】六つの島。
*【[[六等]]】第六位。
*【[[六頭]]】(動物が)六匹。
*【[[陸頭]]】牛の頭が平らなこと。
*【[[禄等]]】[[禄次]]。
7w4r4yxlsx35q26nzapwsrt2v97afw3
六島
0
601076
2313294
2026-08-09T00:38:20Z
鍼灸
112313
ページの作成:「{{kana-DEFAULTSORT|ろくとう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[ろくとう]]}} #{{タグ|ja|島}}六つの[[しま|島]]。」
2313294
wikitext
text/x-wiki
{{kana-DEFAULTSORT|ろくとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[ろくとう]]}}
#{{タグ|ja|島}}六つの[[しま|島]]。
mts7ba7k5wfp0l44y845eqq89nawbzm
六等
0
601077
2313295
2026-08-09T00:40:13Z
鍼灸
112313
ページの作成:「{{kana-DEFAULTSORT|ろくとう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[ろくとう]]}} #六[[番目]]の[[等級]]。」
2313295
wikitext
text/x-wiki
{{kana-DEFAULTSORT|ろくとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[ろくとう]]}}
#六[[番目]]の[[等級]]。
onsxpbyyylv1v8hc592utl7ams2zuat
菉豆
0
601078
2313296
2026-08-09T00:41:04Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|ろくどう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[ろくどう]]}} #「[[緑豆]]」の[[別称]]。」
2313296
wikitext
text/x-wiki
{{kana-DEFAULTSORT|ろくどう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[ろくどう]]}}
#「[[緑豆]]」の[[別称]]。
9zmn1l06xj2hlpa7ne03b0d6ubilhfp
六頭
0
601079
2313297
2026-08-09T00:41:46Z
鍼灸
112313
ページの作成:「{{kana-DEFAULTSORT|ろくとう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[ろくとう]]}} #([[動物]]が)六匹。 #六つの[[頭部]]。 #六人の[[頭首]]。」
2313297
wikitext
text/x-wiki
{{kana-DEFAULTSORT|ろくとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[ろくとう]]}}
#([[動物]]が)六匹。
#六つの[[頭部]]。
#六人の[[頭首]]。
109vs8f1zhj7xhydpsslc5ugi78kf49
ろくどう
0
601080
2313299
2026-08-09T00:43:42Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT}} {{also|ろくとう}} =={{L|ja}}== ==={{kangokana}}=== {{ja-kangokana|h=y}} *【[[六道]]】仏教で六つの迷界。 *【[[菉豆]]】「緑豆」の別称。」
2313299
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|ろくとう}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[六道]]】仏教で六つの迷界。
*【[[菉豆]]】「緑豆」の別称。
lr867qnykepiihrbrluf7g81ilikcwl
しちとう
0
601081
2313302
2026-08-09T00:46:06Z
鍼灸
112313
ページの作成:「{{kana-DEFAULTSORT}} =={{L|ja}}== ==={{kangokana}}=== {{ja-kangokana|h=y}} *【[[七党]]】:平安時代末期から鎌倉時代にかけて武蔵国で勢力を誇っていた七つの武士団。 *【[[七島]]】:七つの島。 *【[[七等]]】:第七位。 *【[[七頭]]】:(動物が)七匹。」
2313302
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[七党]]】:平安時代末期から鎌倉時代にかけて武蔵国で勢力を誇っていた七つの武士団。
*【[[七島]]】:七つの島。
*【[[七等]]】:第七位。
*【[[七頭]]】:(動物が)七匹。
qktuf8f39crxzi3rsawq9vmw2b5zka7
2313329
2313302
2026-08-09T02:40:03Z
うーむ
129171
/* */
2313329
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|しちどう}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[七党]]】:平安時代末期から鎌倉時代にかけて武蔵国で勢力を誇っていた七つの武士団。
*【[[七島]]】:七つの島。
*【[[七等]]】:第七位。
*【[[七頭]]】:(動物が)七匹。
n4hdg7wi1xsour214r6ej2k9b4mrhwm
七島
0
601082
2313304
2026-08-09T01:04:05Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|しちとう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[しちとう]]}} #七つの[[しま|島]]。特に、ある限られた[[水域]]にある主な七つの島。 #カヤツリグサ科の多年草。畳表などに使用される。 #「{{ふりがな|太藺|ふとい}}」の異称。」
2313304
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しちとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[しちとう]]}}
#七つの[[しま|島]]。特に、ある限られた[[水域]]にある主な七つの島。
#カヤツリグサ科の多年草。畳表などに使用される。
#「{{ふりがな|太藺|ふとい}}」の異称。
s48hcajrt787xtq16jx2j6rxkmqm1w9
2313319
2313304
2026-08-09T01:47:21Z
鍼灸
112313
2313319
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しちとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[しちとう]]|ななとう}}
#{{タグ|ja|島}}(しちとう、ななとう)七つの[[しま|島]]。特に、ある限られた[[水域]]にある主な七つの島。
#カヤツリグサ科の多年草。畳表などに使用される。
#「{{ふりがな|太藺|ふとい}}」の異称。
q9s1au2k9vyqw2areoi2jb4m3vmkhlq
2313430
2313319
2026-08-09T10:03:46Z
M-30722
1202
2313430
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しちとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[しちとう]]|ななとう}}
#{{タグ|ja|島}}(しちとう、ななとう)七つの[[しま|島]]。特に、ある限られた[[水域]]にある主な七つの島。
#{{タグ|ja|草}}カヤツリグサ科の多年草。畳表などに使用される。
#{{タグ|ja|草}}「{{ふりがな|太藺|ふとい}}」の異称。
qyub8e35g413a7f41h7mrtse8r189tb
七党
0
601083
2313305
2026-08-09T01:08:21Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|しちとう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[しちとう]]}} #[[平安時代]]から[[鎌倉時代]]にかけて[[武蔵国]]に[[勢力]]をもっていた七つの武士団。」
2313305
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しちとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[しちとう]]}}
#[[平安時代]]から[[鎌倉時代]]にかけて[[武蔵国]]に[[勢力]]をもっていた七つの武士団。
od4723abzy87icp1pcgpab04kf4e21h
2313433
2313305
2026-08-09T10:06:15Z
M-30722
1202
2313433
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しちとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[しちとう]]}}
#{{タグ|ja|日本史}}[[平安時代]]から[[鎌倉時代]]にかけて[[武蔵国]]に[[勢力]]をもっていた七つの武士団。
kx69207oetnvvr7jj3v5zlvxjlnzwho
七頭
0
601084
2313306
2026-08-09T01:14:37Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|しちとう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[しちとう]]|ななとう}} #(しちとう、ななとう)([[動物]]が)七匹。 #(しちとう)[[室町幕府]]で[[三職]]に次ぐ七つの家柄。山名氏、一色氏、土岐氏、赤松氏、京極氏、上杉氏、伊勢氏。」
2313306
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しちとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[しちとう]]|ななとう}}
#(しちとう、ななとう)([[動物]]が)七匹。
#(しちとう)[[室町幕府]]で[[三職]]に次ぐ七つの家柄。山名氏、一色氏、土岐氏、赤松氏、京極氏、上杉氏、伊勢氏。
s2v6epkxynxthw7yr0ubr7smlga0how
2313315
2313306
2026-08-09T01:42:18Z
鍼灸
112313
2313315
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しちとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[しちとう]]|ななとう}}
#(しちとう、ななとう)([[動物]]が)七匹。
#(しちとう、ななとう)七つの[[頭部]]。
#(しちとう、ななとう)七人の[[頭部]]。
#(しちとう)[[室町幕府]]で[[三職]]に次ぐ七つの家柄。山名氏、一色氏、土岐氏、赤松氏、京極氏、上杉氏、伊勢氏。
8zke80nxm4y6uw3epe4wo9dm256l78k
2313316
2313315
2026-08-09T01:42:34Z
鍼灸
112313
2313316
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しちとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[しちとう]]|ななとう}}
#(しちとう、ななとう)([[動物]]が)七匹。
#(しちとう、ななとう)七つの[[頭部]]。
#(しちとう、ななとう)七人の[[頭首]]。
#(しちとう)[[室町幕府]]で[[三職]]に次ぐ七つの家柄。山名氏、一色氏、土岐氏、赤松氏、京極氏、上杉氏、伊勢氏。
9wnaudhn03n2bechwu4x8iewlssusq8
2313432
2313316
2026-08-09T10:05:56Z
M-30722
1202
2313432
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しちとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[しちとう]]|ななとう}}
#(しちとう、ななとう)([[動物]]が)七匹。
#(しちとう、ななとう)七つの[[頭部]]。
#(しちとう、ななとう)七人の[[頭首]]。
#(しちとう){{タグ|ja|日本史}}[[室町幕府]]で[[三職]]に次ぐ七つの家柄。山名氏、一色氏、土岐氏、赤松氏、京極氏、上杉氏、伊勢氏。
okbimpu1mc029noekbhuaawv0aj0sl7
七等
0
601085
2313317
2026-08-09T01:46:17Z
鍼灸
112313
ページの作成:「{{kana-DEFAULTSORT|しちとう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[しちとう]]|ななとう}} #七[[番目]]の[[等級]]。 #人として優れた七つの階級。 #孫以下の七世代。」
2313317
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しちとう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[しちとう]]|ななとう}}
#七[[番目]]の[[等級]]。
#人として優れた七つの階級。
#孫以下の七世代。
l2qodh7pxeytch73qg1teihcq5r1eh3
じっとう
0
601086
2313321
2026-08-09T01:52:05Z
鍼灸
112313
ページの作成:「{{kana-DEFAULTSORT}} {{also|しっとう}} =={{L|ja}}== ==={{kangokana}}=== {{ja-kangokana|h=y}} *【[[十島]]】:十の島。 *【[[十等]]】:第十位。 *【[[十頭]]】:(動物が)十匹。」
2313321
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|しっとう}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[十島]]】:十の島。
*【[[十等]]】:第十位。
*【[[十頭]]】:(動物が)十匹。
jeul86fdjc8a1hae43qx4i0fyig9c6q
2313347
2313321
2026-08-09T03:06:31Z
うーむ
129171
/* */
2313347
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|しっとう|じつどう}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[十島]]】:十の島。
*【[[十等]]】:第十位。
*【[[十頭]]】:(動物が)十匹。
d2m35o7azrjcqhog4hm6lm3j4hjtyzf
じゅっとう
0
601087
2313323
2026-08-09T01:54:33Z
鍼灸
112313
ページの作成:「{{kana-DEFAULTSORT}} {{also|しゅっとう|しゅつどう}} =={{L|ja}}== ==={{kangokana}}=== {{ja-kangokana|h=y}} *【[[十島]]】:十の島。 *【[[十等]]】:第十位。 *【[[十頭]]】:(動物が)十匹。」
2313323
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|しゅっとう|しゅつどう}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[十島]]】:十の島。
*【[[十等]]】:第十位。
*【[[十頭]]】:(動物が)十匹。
tpp6ixhno30n1d35tqayhukweoejyh4
2313341
2313323
2026-08-09T02:54:19Z
うーむ
129171
/* */
2313341
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|しゅっとう|しゅつどう|じゅつどう}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[十島]]】:十の島。
*【[[十等]]】:第十位。
*【[[十頭]]】:(動物が)十匹。
7m7euyik9utt07rwn4003t7xh7drgh6
七堂伽藍
0
601088
2313325
2026-08-09T02:35:28Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|しちどうがらん}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|しちどうがらん}} #{{タグ|ja|仏教}}[[仏教]][[寺院]]で[[主要]]な七つの建物。[[時代]]や[[宗派]]によって異なる。」
2313325
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しちどうがらん}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|しちどうがらん}}
#{{タグ|ja|仏教}}[[仏教]][[寺院]]で[[主要]]な七つの建物。[[時代]]や[[宗派]]によって異なる。
73ed8jnmeluf6ss8vkn43i3qnimbkhd
2313326
2313325
2026-08-09T02:35:51Z
うーむ
129171
2313326
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しちどうがらん}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|しちどうがらん}}
#{{タグ|ja|仏教}}[[仏教]][[寺院]]で[[主要]]な七つの建物。[[時代]]や[[宗派]]によって異なる。[[七堂]]。
qc5ytltxuojkg4ntibg7w68ju2h81bp
七堂
0
601089
2313327
2026-08-09T02:37:16Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|しちどう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[しちどう]]}} #{{タグ|ja|略語|仏教}}「[[七堂伽藍]]」の[[略]]。」
2313327
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しちどう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[しちどう]]}}
#{{タグ|ja|略語|仏教}}「[[七堂伽藍]]」の[[略]]。
b135up9hchdgkq6qlx4ym6e8vjsl7zw
しちどう
0
601090
2313328
2026-08-09T02:39:21Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT}} {{also|しちとう}} =={{L|ja}}== ==={{kangokana}}=== {{ja-kangokana|h=y}} *【[[七堂]]】七堂伽藍の略。 *【[[七道]]】七つの主要な街道。」
2313328
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|しちとう}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[七堂]]】七堂伽藍の略。
*【[[七道]]】七つの主要な街道。
813n2ebjhjjq8z5jn1dhtbhhcv6nglt
しゅっとう
0
601091
2313331
2026-08-09T02:46:34Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT}} {{also|しゅつどう|じゅっとう|じゅつどう}} =={{L|ja}}== ==={{kangokana}}=== {{ja-kangokana}} *【[[出頭]]】本人自ら出向くこと。」
2313331
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|しゅつどう|じゅっとう|じゅつどう}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana}}
*【[[出頭]]】本人自ら出向くこと。
egrt7e871qedzn1jt3aq6bzl5sa5xcd
蝘
0
601092
2313334
2026-08-09T02:48:58Z
Keikei kanji
129888
ページの作成:「{{kana-DEFAULTSORT|えん}} == 漢字 == {{kanji|虫|9}} {{kanji variants|𧒛|𧓱|鼴}} {{wikipedia|ナツゼミ}} === 字源 === * [[形声文字|形声]]。「[[虫]]」 + [[音符]]「[[匽]]{{phoneme|*ʔAN}}」。「[[せみ]]」を[[意味]]する[[漢語]]{[[蝘]]{{phoneme|*ʔanʔ}}}を表す字。 {{字源}} ==== 参考文献 ==== * [[上古音]]は布之道『[http://www.kaom.net/sgy_bzd.php 廣韻形聲考]』による。 === 意義 === # [[蝉]]の…」
2313334
wikitext
text/x-wiki
{{kana-DEFAULTSORT|えん}}
== 漢字 ==
{{kanji|虫|9}}
{{kanji variants|𧒛|𧓱|鼴}}
{{wikipedia|ナツゼミ}}
=== 字源 ===
* [[形声文字|形声]]。「[[虫]]」 + [[音符]]「[[匽]]{{phoneme|*ʔAN}}」。「[[せみ]]」を[[意味]]する[[漢語]]{[[蝘]]{{phoneme|*ʔanʔ}}}を表す字。
{{字源}}
==== 参考文献 ====
* [[上古音]]は布之道『[http://www.kaom.net/sgy_bzd.php 廣韻形聲考]』による。
=== 意義 ===
# [[蝉]]の一種。なつぜみ。
== {{L|ja}} ==
[[Category:ja]]
{{ja-kanji|呉音=*|漢音=エン|訓=なつぜみ}}
==== {{prov}} ====
{{top}}
{{ruby|[[蝘蜓]]|とかげ}}
{{bottom}}
== {{L|zh}} ==
{{zh-han
|m=yǎn
|c=jin2
|mn-t=iēng
|pfs=jen3
|hrs=ren3
|gd=jan3
|w=ie2
}}
**'''[[上古音]]''':
***'''鄭張''': /*qeːnʔ/,/*qanʔ/
***'''布之道''': /*ʔanʔ/,/*ʔˤenʔ/
==== {{prov}} ====
{{top}}
* [[蝘蜓]]
* [[蝘切]]
* [[蝘鼠]]
* [[蜿蝘]]
{{bottom}}
== {{L|ko}} ==
{{ko-han|언}}
== {{コード}} ==
{{文字コード|jis=2-87-63|mj={{mjmoji|023570|023571}}|gb=CE69|cns=2-536E|big5=E7A7}}
{{検字|倉頡=LISAV|四角=5111.4}}
{{字典|大漢語林=10129|康煕=
1089.14|新大字典=14797|新潮漢字=11310|諸橋=33268}}
e8e2h1t7x98o9u1l634onkyab96lkam
2313335
2313334
2026-08-09T02:49:21Z
Keikei kanji
129888
2313335
wikitext
text/x-wiki
{{kana-DEFAULTSORT|えん}}
== 漢字 ==
{{kanji|虫|9}}
{{kanji variants|𧒛|𧓱|鼴}}
{{wikipedia|ナツゼミ}}
=== 字源 ===
* [[形声文字|形声]]。「[[虫]]」 + [[音符]]「[[匽]]{{phoneme|*ʔAN}}」。「[[せみ]]」を[[意味]]する[[漢語]]{[[蝘]]{{phoneme|*ʔanʔ}}}を表す字。
{{字源}}
==== 参考文献 ====
* [[上古音]]は布之道『[http://www.kaom.net/sgy_bzd.php 廣韻形聲考]』による。
=== 意義 ===
# [[蝉]]の一種。なつぜみ。
== {{L|ja}} ==
{{ja-kanji|呉音=*|漢音=エン|訓=なつぜみ}}
==== {{prov}} ====
{{top}}
{{ruby|[[蝘蜓]]|とかげ}}
{{bottom}}
== {{L|zh}} ==
{{zh-han
|m=yǎn
|c=jin2
|mn-t=iēng
|pfs=jen3
|hrs=ren3
|gd=jan3
|w=ie2
}}
**'''[[上古音]]''':
***'''鄭張''': /*qeːnʔ/,/*qanʔ/
***'''布之道''': /*ʔanʔ/,/*ʔˤenʔ/
==== {{prov}} ====
{{top}}
* [[蝘蜓]]
* [[蝘切]]
* [[蝘鼠]]
* [[蜿蝘]]
{{bottom}}
== {{L|ko}} ==
{{ko-han|언}}
== {{コード}} ==
{{文字コード|jis=2-87-63|mj={{mjmoji|023570|023571}}|gb=CE69|cns=2-536E|big5=E7A7}}
{{検字|倉頡=LISAV|四角=5111.4}}
{{字典|大漢語林=10129|康煕=
1089.14|新大字典=14797|新潮漢字=11310|諸橋=33268}}
9syc0hvqzn9cv5ujvewrujlp55m0q13
2313404
2313335
2026-08-09T08:56:10Z
ふゆくれ
95641
2313404
wikitext
text/x-wiki
{{kana-DEFAULTSORT|えん}}
==漢字==
{{kanji|虫|9}}
{{kanji variants|𧒛|𧓱|鼴}}
===字源===
*[[形声文字|形声]]。「[[虫]]」 + [[音符]]「[[匽]]{{phoneme|*ʔAN}}<ref group="字源" name="上古音">{{R:och:GYXSK}}</ref>」。「[[せみ]]」を[[意味]]する[[漢語]]{[[蝘]]{{phoneme|*ʔanʔ}}}を表す字。
{{字源}}
====参考文献====
<references group="字源"/>
===字義===
#家守。
#[[蝉]]の一種。なつぜみ。
=={{L|ja}}==
{{ja-kanji|呉音=*|漢音=エン|訓=やもり,なつぜみ}}
==={{prov}}===
*[[蝘蜒]]
*{{ruby|[[蝘蜓]]|[[とかげ]]、えんてい}}
===参考文献===
{{書誌・コトバンク|word=えんやもり|head={{PAGENAME}}|author=普及版 {{w|字通}}|accessdate=2026-08-09}}
=={{L|zh}}==
{{zh-cat|yan3}}
{{yue-cat|yin2}}
{{hak-cat|chen3}}
{{wuu-cat|i3}}
{{ltc-cat|jon3}}
{{och-cat|qeen}}
{{zh-han|m=yǎn|c=jin2|pfs=chén|hrs=ren3|gd=jan3|w=5i}}
**'''[[中古音]]''': 'jonX, 'enX
**'''[[上古音]]''':
***'''鄭張''': /*qeːnʔ/,/*qanʔ/
***'''布之道''': /*ʔanʔ/,/*ʔˤenʔ/
==={{prov}}===
{{zh-der|蝘蜓|蝘虭|蝘鼠|蝘腹|蜿蝘|蝘蜓座|海蝘}}
=={{L|ko}}==
{{ko-han|언}}
=={{L|vi}}==
{{vi-han|yển}}
==={{prov}}===
*{{vi-l|yển đình|蝘蜓}}
=={{コード}}==
{{文字コード|jis=2-87-63|mj={{mjmoji|023570|023571}}|gb=CE69|cns=2-536E|全={{全字庫|152430}}|big5=E7A7|ksx=1027-1-5C51|kps=10721-7219}}
{{検字|倉頡=LISAV|四角=5111.4}}
{{字典|大漢語林=10129|康煕=
1089.14|新大字典=14797|大字源=8840|新潮漢字=11310|諸橋=33268|hdz=42868.080|dj= 1555.230|ch=1193.501|広韻=280.25/288.42|matthews=7359|mw=888|cowles=1342|vt=B04322}}
1pkida8zz13yk9edot5eqruyqc9g0uz
2313446
2313404
2026-08-09T10:52:29Z
Keikei kanji
129888
2313446
wikitext
text/x-wiki
{{kana-DEFAULTSORT|えん}}
==漢字==
{{kanji|虫|9}}
{{kanji variants|𧒛|𧓱|鼴}}
===字源===
*[[形声文字|形声]]。「[[虫]]」 + [[音符]]「[[匽]]{{phoneme|*ʔAN}}<ref group="字源" name="上古音">{{R:och:GYXSK}}</ref>」。「[[せみ]]」を[[意味]]する[[漢語]]{[[蝘]]{{phoneme|*ʔanʔ}}}を表す字。
{{字源}}
====参考文献====
<references group="字源"/>
===字義===
#家守。
#[[蝉]]の一種。なつぜみ。
=={{L|ja}}==
{{ja-kanji|呉音=*|漢音=エン|訓=やもり,なつぜみ}}
==={{prov}}===
*[[蝘蜒]]
*{{ruby|[[蝘蜓]]|[[とかげ]]、えんてい}}
===参考文献===
{{書誌・コトバンク|word=えんやもり|head={{PAGENAME}}|author=普及版 {{w|字通}}|accessdate=2026-08-09}}
=={{L|zh}}==
{{zh-cat|yan3}}
{{yue-cat|yin2}}
{{hak-cat|chen3}}
{{wuu-cat|i3}}
{{ltc-cat|jon3}}
{{och-cat|qeen}}
{{zh-han|m=yǎn|c=jin2|pfs=chén|hrs=ren3|gd=jan3|w=5i}}
**'''[[中古音]]''': 'jonX, 'enX
**'''[[上古音]]''':
***'''鄭張''': /*qeːnʔ/,/*qanʔ/
***'''布之道''': /*ʔanʔ/,/*ʔˤenʔ/
==={{prov}}===
{{zh-der|蝘蜓|蝘虭|蝘鼠|蝘腹|蜿蝘|蝘蜓座|海蝘}}
=={{L|ko}}==
{{ko-han|언}}
== {{L|vi}} ==
{{vi-han|yển}}
==={{prov}}===
*{{vi-l|yển đình|蝘蜓}}
=={{コード}}==
{{文字コード|jis=2-87-63|mj={{mjmoji|023570|023571}}|gb=CE69|cns=2-536E|全={{全字庫|152430}}|big5=E7A7|ksx=1027-1-5C51|kps=10721-7219}}
{{検字|倉頡=LISAV|四角=5111.4}}
{{字典|大漢語林=10129|康煕=
1089.14|新大字典=14797|大字源=8840|新潮漢字=11310|諸橋=33268|hdz=42868.080|dj= 1555.230|ch=1193.501|広韻=280.25/288.42|matthews=7359|mw=888|cowles=1342|vt=B04322}}
jfrsdke2yxzrp8nmtghjvsn7662mamc
2313449
2313446
2026-08-09T11:09:32Z
ふゆくれ
95641
2313449
wikitext
text/x-wiki
{{kana-DEFAULTSORT|えん}}
==漢字==
{{kanji|虫|9}}
{{kanji variants|𧒛|𧓱|鼴}}
===字源===
*[[形声文字|形声]]。「[[虫]]」 + [[音符]]「[[匽]]{{phoneme|*ʔAN}}<ref group="字源" name="上古音">{{R:och:GYXSK}}</ref>」。「[[せみ]]」を[[意味]]する[[漢語]]{[[蝘]]{{phoneme|*ʔanʔ}}}を表す字。
{{字源}}
====参考文献====
<references group="字源"/>
===字義===
#家守。
#[[蝉]]の一種。なつぜみ。
=={{L|ja}}==
{{ja-kanji|呉音=*|漢音=エン|訓=やもり,なつぜみ|古訓=ゐもり;{{w|名義抄}},とかげ;{{w|字鏡集}}}}
==={{prov}}===
*[[蝘蜒]]
*{{ruby|[[蝘蜓]]|[[とかげ]]、えんてい}}
===参考文献===
{{書誌・コトバンク|word=えんやもり|head={{PAGENAME}}|author=普及版 {{w|字通}}|accessdate=2026-08-09}}
=={{L|zh}}==
{{zh-cat|yan3}}
{{yue-cat|yin2}}
{{hak-cat|chen3}}
{{wuu-cat|i3}}
{{ltc-cat|jon3}}
{{och-cat|qeen}}
{{zh-han|m=yǎn|c=jin2|pfs=chén|hrs=ren3|gd=jan3|w=5i}}
**'''[[中古音]]''': 'jonX, 'enX
**'''[[上古音]]''':
***'''鄭張''': /*qeːnʔ/,/*qanʔ/
***'''布之道''': /*ʔanʔ/,/*ʔˤenʔ/
==={{prov}}===
{{zh-der|蝘蜓|蝘虭|蝘鼠|蝘腹|蜿蝘|蝘蜓座|海蝘}}
=={{L|ko}}==
{{ko-han|언}}
=={{L|vi}}==
{{vi-han|yển}}
==={{prov}}===
*{{vi-l|yển đình|蝘蜓}}
=={{コード}}==
{{文字コード|jis=2-87-63|mj={{mjmoji|023570|023571}}|gb=CE69|cns=2-536E|全={{全字庫|152430}}|big5=E7A7|ksx=1027-1-5C51|kps=10721-7219}}
{{検字|倉頡=LISAV|四角=5111.4}}
{{字典|大漢語林=10129|康煕=
1089.14|新大字典=14797|大字源=8840|新潮漢字=11310|諸橋=33268|hdz=42868.080|dj= 1555.230|ch=1193.501|広韻=280.25/288.42|matthews=7359|mw=888|cowles=1342|vt=B04322}}
70stmphqpywt3l57ba1uq1hry7n29fa
しゅつどう
0
601093
2313336
2026-08-09T02:49:22Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT}} {{also|しゅっとう|じゅっとう|じゅつどう}} =={{L|ja}}== ==={{kangokana}}=== {{ja-kangokana}} *【[[出動]]】出向いて活動すること。」
2313336
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|しゅっとう|じゅっとう|じゅつどう}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana}}
*【[[出動]]】出向いて活動すること。
i91coo9h80snouvyav0ulakw70prb5h
術道
0
601094
2313339
2026-08-09T02:51:38Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|じゅつどう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[じゅつどう]]}} #[[祈祷]]や[[まじない]]などの[[術]]。」
2313339
wikitext
text/x-wiki
{{kana-DEFAULTSORT|じゅつどう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[じゅつどう]]}}
#[[祈祷]]や[[まじない]]などの[[術]]。
9036g1luec97eeu20cm04xhk820k3bs
じゅつどう
0
601095
2313340
2026-08-09T02:53:47Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT}} {{also|しゅっとう|じゅっとう|しゅつどう}} =={{L|ja}}== ==={{kangokana}}=== {{ja-kangokana}} *【[[術道]]】祈祷やまじないなどの術。」
2313340
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|しゅっとう|じゅっとう|しゅつどう}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana}}
*【[[術道]]】祈祷やまじないなどの術。
tos0hylfyaog4rx7fzv8cbjckjw8cj8
実動
0
601096
2313343
2026-08-09T03:00:14Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|じつどう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun-suru|[[じつどう]]}} #[[実際]]に[[機械]]などを[[運転]]すること。 #実際に人が[[活動]]すること。 ==={{verb}}=== {{ja-verb-suru|じつどう}} {{日本語サ変活用}}」
2313343
wikitext
text/x-wiki
{{kana-DEFAULTSORT|じつどう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun-suru|[[じつどう]]}}
#[[実際]]に[[機械]]などを[[運転]]すること。
#実際に人が[[活動]]すること。
==={{verb}}===
{{ja-verb-suru|じつどう}}
{{日本語サ変活用}}
q78upd11f08gkts4e6dz8aymox609tf
実道
0
601097
2313344
2026-08-09T03:02:07Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT|じつどう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun|[[じつどう]]}} #[[真]]の[[ただしい|正しい]]道。」
2313344
wikitext
text/x-wiki
{{kana-DEFAULTSORT|じつどう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun|[[じつどう]]}}
#[[真]]の[[ただしい|正しい]]道。
n0k08uoydk4vzocnrevlcq2wihamcs7
じつどう
0
601098
2313345
2026-08-09T03:05:40Z
うーむ
129171
ページの作成:「{{kana-DEFAULTSORT}} {{also|しっとう|じっとう}} =={{L|ja}}== ==={{kangokana}}=== {{ja-kangokana|h=y}} *【[[実動]]】実際に活動、運転すること。 *【[[実働]]】実際に仕事で働くこと。 *【[[実道]]】真に正しい道。」
2313345
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
{{also|しっとう|じっとう}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
*【[[実動]]】実際に活動、運転すること。
*【[[実働]]】実際に仕事で働くこと。
*【[[実道]]】真に正しい道。
2zvt3jik5umr52f9i8b7gfheii8ital
はっこん
0
601099
2313368
2026-08-09T05:50:02Z
ちょこれ゚いとみんと
129959
ページの作成:「{{kana-DEFAULTSORT}} =={{L|ja}}== ==={{kangokana}}=== {{ja-kangokana}} {{ja-k|発根|t=植物が根を出すこと。根が出ること。}}」
2313368
wikitext
text/x-wiki
{{kana-DEFAULTSORT}}
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana}}
{{ja-k|発根|t=植物が根を出すこと。根が出ること。}}
89e48040e49fosyus0fycl2ylhcbfvk
ていれん
0
601100
2313369
2026-08-09T05:58:10Z
ちょこれ゚いとみんと
129959
ページの作成:「=={{L|ja}}== ==={{kangokana}}=== {{ja-kangokana|h=y}} {{ja-k|低廉|t=金額が安いこと。また、そのさま。}} {{ja-k|貞廉|t=節操があっていさぎよいこと。また、そのさま。}}」
2313369
wikitext
text/x-wiki
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
{{ja-k|低廉|t=金額が安いこと。また、そのさま。}}
{{ja-k|貞廉|t=節操があっていさぎよいこと。また、そのさま。}}
j4ohkdvsn2hebh5h8loevrsnhlbdp5w
2313370
2313369
2026-08-09T05:58:44Z
ちょこれ゚いとみんと
129959
2313370
wikitext
text/x-wiki
=={{L|ja}}==
==={{kangokana}}===
{{ja-kangokana|h=y}}
{{ja-k|低廉|t=金額が安いこと。また、そのさま。}}
{{ja-k|貞廉|t=節操があって潔いこと。また、そのさま。}}
2lsdy9vh0b8uuh4lyaelws7ob3g5234
貞廉
0
601101
2313371
2026-08-09T06:00:33Z
ちょこれ゚いとみんと
129959
ページの作成:「{{kana-DEFAULTSORT|ていれん}} =={{L|ja}}== ==={{noun}}・{{adjectivenoun}}=== {{ja-noun|[[ていれん]]}} #[[節操]]があって[[いさぎよい|潔い]]こと。また、そのさま。 ===={{conjug}}==== {{日本語ダ活用}}」
2313371
wikitext
text/x-wiki
{{kana-DEFAULTSORT|ていれん}}
=={{L|ja}}==
==={{noun}}・{{adjectivenoun}}===
{{ja-noun|[[ていれん]]}}
#[[節操]]があって[[いさぎよい|潔い]]こと。また、そのさま。
===={{conjug}}====
{{日本語ダ活用}}
oy5wa75e88mzcrbrztrut7k3f006v9u
誚譲
0
601102
2313378
2026-08-09T06:46:08Z
ちょこれ゚いとみんと
129959
ページの作成:「{{kana-DEFAULTSORT|しょうじょう}} =={{L|ja}}== ==={{noun}}=== {{ja-noun-suru|[[しょうじょう]]}} #[[せめる|責め]][[とがめる|咎める]]こと。 #:{{syn|ja|譴責}} ==={{verb}}=== {{ja-verb-suru|しょうじょう}} {{日本語サ変活用}}」
2313378
wikitext
text/x-wiki
{{kana-DEFAULTSORT|しょうじょう}}
=={{L|ja}}==
==={{noun}}===
{{ja-noun-suru|[[しょうじょう]]}}
#[[せめる|責め]][[とがめる|咎める]]こと。
#:{{syn|ja|譴責}}
==={{verb}}===
{{ja-verb-suru|しょうじょう}}
{{日本語サ変活用}}
esxvft0775xgpb9i5j44clnhj48mp5d
テンプレート:ca-conjug
10
601103
2313421
2026-08-09T09:41:31Z
Kuroco2k
84207
こっちの名前で出すことに(やむなく...。)
2313421
wikitext
text/x-wiki
{{#invoke:ca-verb|show}}<noinclude>{{documentation}}[[Category:{{ca}}_テンプレート]]</noinclude>
a5ffjqp9qc11oylqiiwz2j3xdekswgo
2313435
2313421
2026-08-09T10:14:35Z
Kuroco2k
84207
2313435
wikitext
text/x-wiki
<includeonly>{{#invoke:ca-verb|show}}</includeonly><noinclude>{{documentation}}[[Category:{{ca}}_テンプレート]]</noinclude>
jc9z0cevg3x615dx8byyaeq37jk5ez0
テンプレート・トーク:ca-conjug
11
601104
2313436
2026-08-09T10:16:01Z
Kuroco2k
84207
/* エラー */ 新しい節
2313436
wikitext
text/x-wiki
== エラー ==
[[モジュール:inflection utilities]]を治さない限り、活用に接中辞がある項目ではうまくいきません。template:ca-conjの代用として作りましたが、これもうまくいかないので端書きとします。--[[利用者:Kuroco2k|<span style="color:#000000">'''雛宮黒狐'''</span>]]([[利用者‐会話:Kuroco2k|<span style="color:#5a00cc">Talk</span>]]) 2026年8月9日 (日) 10:16 (UTC)
ogb6bf2m61crs6d5e8kqu5dpgststv0
テンプレート:lt-adj-select
10
601105
2313443
2026-08-09T10:45:58Z
Kuroco2k
84207
[[:en:Template:lt-adj-select]]
2313443
wikitext
text/x-wiki
{{#switch: {{{1|all}}}
|all=lt-decl-adj
|po=lt-decl-adj-po
|{{error|Adjective extent {{{1}}} is undefined.}}
}}<noinclude>
{{documentation}}[[カテゴリ:{{lt}}_テンプレート]]
</noinclude>
9y6opxcaf78scrh1n0rlqat99x3ta7p
テンプレート:lt-adj-as-1
10
601106
2313444
2026-08-09T10:46:52Z
Kuroco2k
84207
[[:en:Template:lt-adj-as-1]]
2313444
wikitext
text/x-wiki
{{#invoke:checkparams|error}}<!--
-->{{{{lt-adj-select|{{{e|all}}}}}
<!--non-pronominal-->
<!--absolute-->
<!--nom-->
|1={{{2}}}as
|2={{{2}}}i
|3={{{2}}}a
|4={{{2}}}os
<!--gen-->
|5={{{2}}}o
|6={{{2}}}ų
|7={{{2}}}os
|8={{{2}}}ų
<!--dat-->
|9={{{2}}}am
|10={{{2}}}iems
|11={{{2}}}ai
|12={{{2}}}oms
<!--acc-->
|13={{{2}}}ą
|14={{{2}}}us
|15={{{2}}}ą
|16={{{2}}}as
<!--ins-->
|17={{{2}}}u
|18={{{2}}}ais
|19={{{2}}}a
|20={{{2}}}omis
<!--loc-->
|21={{{2}}}ame
|22={{{2}}}uose
|23={{{2}}}oje
|24={{{2}}}ose
<!--voc-->
|25={{{2}}}as
|26={{{2}}}i
|27={{{2}}}a
|28={{{2}}}os
<!--comparative-->
<!--n-->
|29={{{1}}}èsnis
|30={{{1}}}esnì
|31={{{1}}}èsnė
|32={{{1}}}èsnės
<!--g-->
|33={{{1}}}èsnio
|34={{{1}}}esnių̃
|35={{{1}}}esnė̃s
|36={{{1}}}esnių̃
<!--d-->
|37={{{1}}}esniám
|38={{{1}}}esníems
|39={{{1}}}èsnei
|40={{{1}}}esnė̃ms
<!--a-->
|41={{{1}}}èsnį
|42={{{1}}}esniùs
|43={{{1}}}èsnę
|44={{{1}}}esnès
<!--i-->
|45={{{1}}}esniù
|46={{{1}}}esniaĩs
|47={{{1}}}esnè
|48={{{1}}}esnėmìs
<!--l-->
|49={{{1}}}esniamè
|50={{{1}}}esniuosè
|51={{{1}}}èsnėje
|52={{{1}}}esnėsè
<!--superlative-->
<!--n-->
|53={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusias
|54={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusi
|55={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusia
|56={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusios
<!--g-->
|57={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusio
|58={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusių
|59={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusios
|60={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusių
<!--d-->
|61={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiam
|62={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiems
|63={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiai
|64={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusioms
<!--a-->
|65={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusią
|66={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusius
|67={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusią
|68={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusias
<!--i-->
|69={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiu
|70={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiais
|71={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusia
|72={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiomis
<!--l-->
|73={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiame
|74={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiuose
|75={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusioje
|76={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiose
<!--pronominal-->
<!--absolute-->
<!--n-->
|77={{{1}}}àsis
|78={{{1}}}íeji
|79={{{1}}}óji
|80={{{2}}}osios
<!--g-->
|81={{{2}}}ojo
|82={{{1}}}ų̃jų
|83={{{1}}}õsios
|84={{{1}}}ų̃jų
<!--d-->
|85={{{1}}}ájam
|86={{{1}}}íesiems
|87={{{2}}}ajai
|88={{{1}}}ósioms
<!--a-->
|89={{{2}}}ąjį
|90={{{1}}}úosius
|91={{{2}}}ąją
|92={{{1}}}ą́sias
<!--i-->
|93={{{1}}}úoju
|94={{{1}}}aĩsiais
|95={{{1}}}ą́ja
|96={{{1}}}õsiomis
<!--l-->
|97={{{1}}}ãjame
|98={{{1}}}uõsiuose
|99={{{1}}}õjoje
|100={{{1}}}õsiose
<!--v-->
|101={{{1}}}àsis
|102={{{1}}}íeji
|103={{{1}}}óji
|104={{{2}}}osios
<!--comparative-->
<!--n-->
|105={{{1}}}esnỹsis
|106={{{1}}}esníeji
|107={{{1}}}esnióji
|108={{{1}}}èsniosios
<!--g-->
|109={{{1}}}èsniojo
|110={{{1}}}esnių̃jų
|111={{{1}}}esniõsios
|112={{{1}}}esnių̃jų
<!--d-->
|113={{{1}}}esniájam
|114={{{1}}}esníesiems
|115={{{1}}}èsniajai
|116={{{1}}}esniósioms
<!--a-->
|117={{{1}}}èsnįjį
|118={{{1}}}esniúosius
|119={{{1}}}èsniąją
|120={{{1}}}esnią́sias
<!--i-->
|121={{{1}}}esniúoju
|122={{{1}}}esniaĩsiais
|123={{{1}}}esnią́ja
|124={{{1}}}esniõsiomis
<!--l-->
|125={{{1}}}esniãjame
|126={{{1}}}esniuõsiuose
|127={{{1}}}esniõjoje
|128={{{1}}}esniõsiose
<!--superlative-->
<!--n-->
|129={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiasis
|130={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusieji
|131={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusioji
|132={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiosios
<!--g-->
|133={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiojo
|134={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiųjų
|135={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiosios
|136={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiųjų
<!--d-->
|137={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiajam
|138={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiesiems
|139={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiajai
|140={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiosioms
<!--a-->
|141={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiąjį
|142={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiuosius
|143={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiąją
|144={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiąsias
<!--i-->
|145={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiuoju
|146={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiaisiais
|147={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiąja
|148={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiosiomis
<!--l-->
|149={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiajame
|150={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiuosiuose
|151={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiojoje
|152={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusiosiose
<!--Neuters--->
|153={{{2}}}a
|154={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}aũ
|155={{{1}}}{{#ifeq:{{#invoke:string/templates|pos|{{{1}}}|-1}}|j||i}}áusia
}}<noinclude>
{{documentation}}[[カテゴリ:{{lt}}_テンプレート]]</noinclude>
2gkotz4wpzgb0hxlnrshher67gvz7dk
匽
0
601107
2313450
2026-08-09T11:10:39Z
Kuroco2k
84207
新規作成
2313450
wikitext
text/x-wiki
{{kana-DEFAULTSORT|エン}}
==漢字==
{{kanji|匸|7}}
{{kanji variants|偃=語義1-2|燕=語義1-4|宴=語義2-2|𣈿|𭂾|𭅝}}
===異体字セレクタ===
{{kanjiIVS|ivs=00-02}}
===意義===
#{{q|元韻・上声}}
##[[かくれる|隠れる]]。
##「[[偃]]」の[[古字]](『{{w|漢語大字典}}』掲載)。
##古代の兵器の一種。[[戟]]の一種という。
##「[[燕]]」の[[通字]](『{{w|漢語大字典}}』掲載)。{{w|燕 (春秋)|北燕}}。古代の列国の一つ。
#{{q|元韻・去声}}
##道端の[[かわや|厠]]。
##*[[暗渠]]とする説もある。
##「[[宴]]」の[[通字]](『{{w|漢語大字典}}』掲載)。[[くつろぐ]]、[[宴居]]する。
=={{L|ja}}==
{{ja-kanji|漢音=エン}}
=={{L|zh}}==
[[Category:{{zh}}|yan3]]
[[Category:{{yue}}|yin2]]
[[Category:{{wuu}}|ie2]]
{{zh-han|m=yǎn,yàn|c=jin2|w=1i|w-mini=ie2}}
==={{prov}}===
{{zh-der|匽兵|匽武|匽戟|匽薄|女匽|井匽|匽廁|匽溲|匽溷|匽豬|廁匽|渠匽}}
=={{L|ko}}==
{{ko-han|언|eumhun=[[눕히다|눕힐]] 언}}
=={{コード}}==
{{文字コード|jis=2-20-20|mj={{mjmoji|007825|007826}}|gb=855D|cns=2-2936|big5=CDF4|全={{全字庫|141622}}|ksx=1002-672C|kps=10721-3897}}
{{検字|蒼頡=SAV|四角=7171.4}}
{{字典|新潮漢字=1102/1103|諸橋=2684|新大字典=1468|大字源=896|大漢語林=1079|dj=0347.200|hdz=10085.190|康煕=0155.080|matthews=7356|gy=280.22|ch=207.104|vt=B00271}}
b6jei5gido3pm2n1hph0tudryhzpq9u
send in
0
601108
2313454
2026-08-09T11:27:15Z
M-30722
1202
新規作成
2313454
wikitext
text/x-wiki
{{DEFAULTSORT:sendin}}
=={{L|en}}==
==={{pron}}===
* {{音声|en|en-au-send in.ogg|a=AU}}
==={{verb}}===
{{英語句動詞|send|in}}
#{{おくりがな2|送|おく|る|おくる}}、[[送付]]する、[[提出]]する。
#(軍や警察を)[[派遣]]する。
#{{おくりがな3|招|まね|き|入|い|れる|まねきいれる}}。
==={{anag}}===
* {{anagrams|en|a=deinns|Dennis|Sinden|ends in|insend|sinned}}
kcs3we0x6p0ygr9l649v7c8glf25bju
put in
0
601109
2313459
2026-08-09T11:45:14Z
M-30722
1202
新規作成
2313459
wikitext
text/x-wiki
{{DEFAULTSORT:putin}}
{{also|putin|puțin}}
=={{L|en}}==
==={{verb}}===
{{英語句動詞|put|in}}
#{{タグ|en|他動詞}}{{ふりがな|中|なか}}に{{おくりがな2|入|い|れる|いれる}}、{{おくりがな3|差|さ|し|込|こ|む|さしこむ}}、{{おくりがな3|差|さ|し|入|い|れる|さしいれる}}、[[挿入]]する。
#{{おくりがな3|申|もう|し|込|こ|む|もうしこむ}}、[[提出]]する。
#{{タグ|en|他動詞}}[[寄付]]する。
#{{タグ|en|自動詞|海事|古用法}}[[寄港]]する、[[入港]]する。
#{{タグ|en|他動詞}}[[任命]]する、[[選出]]する。
#{{タグ|en|他動詞}}{{おくりがな3|植|う|え|付|つ|ける|うえつける}}。
#{{タグ|en|他動詞}}[[設置]]する。{{おくりがな3|取|と|り|付|つ|ける|とりつける}}。
#{{タグ|en|他動詞|俗語|AAVE|人を}}{{おくりがな3|傷|きず||付|つ|ける|きずつける}}。
===={{drv}}====
* {{l|en|put-in}}
==={{anag}}===
* {{anagrams|en|a=inptu|Punti|input}}
gl42v2oehvw8m233y3jrin8tks4poim
做爱
0
601110
2313469
2026-08-09T11:55:44Z
M-30722
1202
新規作成
2313469
wikitext
text/x-wiki
=={{L|zh}}==
==={{etym}}===
{{calque|zh|en|make love|sort=zuo4ai4}}か
==={{pron}}===
{{cmn-pron|zuò'ài|z=n}}
{{yue-pron|zou6 oi3|h=n}}
==={{verb}}===
{{zhcharl|做|爱|t=做愛}}
#[[セックス]]する、[[性行為]]をする。
{{zh-cat|zuo4ai4|動詞|離合詞|性行為}}
{{yue-cat|jou6oi3|動詞|離合詞|性行為}}
gujyabw259vzuqmyvu2hf2ygvyr8quw
做愛
0
601111
2313470
2026-08-09T11:56:12Z
M-30722
1202
新規作成
2313470
wikitext
text/x-wiki
=={{L|zh}}==
==={{etym}}===
{{calque|zh|en|make love|sort=zuo4ai4}}か
==={{pron}}===
{{cmn-pron|zuò'ài}}
{{yue-pron|zou6 oi3}}
==={{verb}}===
{{zhcharl|做|愛|s=做爱}}
#[[セックス]]する、[[性行為]]をする。
{{zh-cat|zuo4ai4|動詞|離合詞|性行為}}
{{yue-cat|jou6oi3|動詞|離合詞|性行為}}
iy8kfi0f8rkm9vy937u5y93kuqhfnus
カテゴリ:中国語 英語翻訳借用
14
601112
2313471
2026-08-09T11:58:10Z
M-30722
1202
新規作成
2313471
wikitext
text/x-wiki
<div class="pathnavbox">
* {{Pathnav|カテゴリ|言語|{{zh}}|{{zh}}_語源|disp4=語源|{{zh}}_他言語由来|disp5=他言語由来|{{zh}}_借用語|disp6=借用語|{{zh}}_翻訳借用|disp7=翻訳借用|last={{en}}翻訳借用}}
* {{Pathnav|カテゴリ|言語|{{zh}}|{{zh}}_語源|disp4=語源|{{zh}}_他言語由来|disp5=他言語由来|{{zh}}_借用語|disp6=借用語|{{zh}}_{{en}}借用語|disp7={{en}}借用語|last={{en}}翻訳借用}}
* {{Pathnav|カテゴリ|語源|由来|{{en}}由来|{{en}}借用語|{{en}}翻訳借用|last={{zh}}}}
</div>
[[カテゴリ:{{zh}}_翻訳借用|えいこ]]
[[カテゴリ:{{zh}}_{{en}}借用語|*ほんやく]]
[[カテゴリ:{{en}}翻訳借用|ちゆうこくこ]]
sppus0xnaot52mhoftrj69vbj2ar8tp