Wiktionary
siwiktionary
https://si.wiktionary.org/wiki/%E0%B7%80%E0%B7%92%E0%B6%9A%E0%B7%8A%E0%B7%82%E0%B6%B1%E0%B6%BB%E0%B7%92:%E0%B6%B8%E0%B7%94%E0%B6%BD%E0%B7%8A_%E0%B6%B4%E0%B7%92%E0%B6%A7%E0%B7%94%E0%B7%80
MediaWiki 1.47.0-wmf.5
case-sensitive
මාධ්යය
විශේෂ
සාකච්ඡාව
පරිශීලක
පරිශීලක සාකච්ඡාව
වික්ෂනරි
වික්ෂනරි සාකච්ඡාව
ගොනුව
ගොනුව සාකච්ඡාව
මාධ්යවිකි
මාධ්යවිකි සාකච්ඡාව
සැකිල්ල
සැකිලි සාකච්ඡාව
උදවු
උදවු සාකච්ඡාව
ප්රවර්ගය
ප්රවර්ග සාකච්ඡාව
TimedText
TimedText talk
Module
Module talk
Event
Event talk
හෙළ
0
11425
235591
233640
2026-06-06T12:18:54Z
WrdSrchSi
3305
+ head|si|root + wikitable + ව්යුත්පන්න පද + ප්රවර්ගය
235591
wikitext
text/x-wiki
{{see also|හෙල}}
==සිංහල==
=== නිරුක්තිය 1 ===
{{rfe|si}}
===උච්චාරණය===
* {{IPA|si|/ˈɦeɭə/}}
===නාම පදය===
{{si-noun}}
# [[එළ]]
# [[සුදු]]
# [[සිංහල]]
===නාම ප්රකෘතිය===
{{head|si|root}}
# {{lb|si|ප්රාණවාචී}} {{rfdef|si}}
# {{lb|si|අප්රාණවාචී}} {{rfdef|si}}
# {{lb|si|අප්රාණවාචී}} {{rfdef|si}}
===== වරනැඟීම =====
{| class="wikitable"
|+
|-
!!!ප්රාණවාචී<br>ඒකවචන!!ප්රාණවාචී<br>බහුවචන!!ප්රාණවාචී<br>අනියමාර්ථ!!අප්රාණවාචී<br>ඒකවචන!!අප්රාණවාචී<br>බහුවචන!!අප්රාණවාචී<br>අනියමාර්ථ
|-
| පෙර ||align="center"|[[හෙළයා#නාම පදය|හෙළයා]]||align="center"|[[හෙළයෝ#නාම පදය|හෙළයෝ]]||align="center"|[[හෙළයෙක්#නාම පදය|හෙළයෙක්]]||align="center"|[[හෙළය#නාම පදය|හෙළය]]||||
|-
| කම්, කතු||align="center"|[[හෙළයා#නාම පදය|හෙළයා]]||align="center"|[[හෙළයන්#නාම පදය|හෙළයන්]]||align="center"|[[හෙළයකු#නාම පදය|හෙළයකු]]||||||
|-
| කරණ, අවදි ||||||||||||
|-
| සපදන් ||align="center"|[[හෙළයාට#නාම පදය|හෙළයාට]]||align="center"|[[හෙළයනට#නාම පදය|හෙළයනට]]||align="center"|[[හෙළයකුට#නාම පදය|හෙළයකුට]]||||||
|-
| සබඳ, අදර ||||||||||||
|-
| අලප් ||||align="center"|[[හෙළයෙනි#නාම පදය|හෙළයෙනි]]<br>[[හෙළයිනි#නාම පදය|හෙළයිනි]]?||||||||
|}
====ව්යුත්පන්න පද====
{{top3}}
* {{l|si|හෙළාටුවා#නාම ප්රකෘතිය}}
* {{l|si|හෙළිඳු#නාම ප්රකෘතිය}}
* {{l|si|හෙළබිම|හෙළබිම්}}
{{bottom}}
''ව්යුත්පන්න පද බවට තහවුරු නොකළ යෙදුම්:''
{{top2}}
* {{l|si|හෙළු#නාම ප්රකෘතිය}}
{{bottom}}
=== නිරුක්තිය 2 ===
{{rfe|si}}
===ධාතු ප්රකෘතිය===
{{head|si|root}}
# {{rfdef|si}}
====ආඛ්යාත ක්රියා පද====
{| class="wikitable"
|+
|-
! !!අන්ය පුරුෂ<br>ඒකවචන!!අන්ය පුරුෂ<br>බහුවචන!!උත්තම පුරුෂ<br>ඒකවචන!!උත්තම පුරුෂ<br>බහුවචන
|-
|අනතීත-සකර්මක||[[හෙළයි]]||[[හෙළති]]||[[හෙළමි]]||[[හෙළමු]]
|-
|අතීත-සකර්මක||||||||
|-
|අනතීත-කර්ම කාරක||||||||
|-
|අතීත-කර්ම කාරක||||||||
|-
|}
=== මූලාශ්ර ===
<references/>
* "[https://tipitaka.lk/library/963 හෙළ]", කුමාරණතුංග මුනිදාස, '''''ක්රියා විවරණය''''', — 223 පිටුව
[[ප්රවර්ගය:සිංහල නාම ප්රකෘති]] [[ප්රවර්ගය:සිංහල ධාතු ප්රකෘති]]
d2ii6gb2k9fdsakgh0qnzv1hz9c7tx2
बुध
0
11987
235604
173014
2026-06-06T13:32:40Z
Lee
19
/* සංඥා නාම පදය */
235604
wikitext
text/x-wiki
{{also|बुध्|बोधि|बाध्|बाधा|बाँध}}
== හින්දි ==
[[Image:Mercury in true color.jpg|thumb|right|बुध ग्रह]]
=== නිරුක්තිය ===
{{lbor|hi|sa|बुध}}. Cognate with {{cog|as|বুধ}}, {{cog|bn|বুধ}}, {{cog|gu|બુધ}}, {{cog|kok|बुध}}, {{cog|mr|बुध}}, {{cog|ne|बुध}} {{cog|pa|ਬੁਧ}}.
=== සංඥා නාම පදය ===
{{hi-proper noun|m|ur=بدھ}}
# {{senseid|hi|Q308}}[[Mercury]] (planet)
# {{short for|hi|बुधवार}}
==== වරනැඟීම ====
{{hi-ndecl|<M.sg>}}
=== අමතර අවධානයට ===
{{table:Solar System/hi}}
{{topics|hi|Planets of the Solar System}}
== මරාථි ==
[[Image:Mercury in true color.jpg|thumb|right|बुध ग्रह]]
{{wp|lang=mr}}
=== නිරුක්තිය ===
From {{der|mr|sa|बुध}}. Cognate with {{cog|as|বুধ}}, {{cog|bn|বুধ}}, {{cog|gu|બુધ}}, {{cog|hi|बुध}}, {{cog|kok|बुध}}, {{cog|ne|बुध}} {{cog|pa|ਬੁਧ}}.
=== උච්චාරණය ===
* {{mr-IPA}}
=== නාම පදය ===
{{mr-noun|g=m}}
# [[Mercury]] {{q|planet}}
# {{short for|mr|बुधवार|t=Wednesday}}
=== අමතර අවධානයට ===
{{table:Solar System/mr}}
== සංස්කෘත ==
=== වෙනත් අක්ෂරක්රම ===
{{sa-alt}}
=== නිරුක්තිය ===
Not related to {{m|sa|बुद्ध|t=[[awakened]], [[enlightened]]}} {{etystub|sa}}
=== උච්චාරණය ===
{{sa-IPA|novedic=1}}
=== සංඥා නාම පදය ===
{{sa-proper noun|g=m}}
# {{senseid|sa|Q308}}[[Mercury]] {{gloss|planet}}
==== වරනැඟීම ====
{{sa-decl-noun-m}}
====Descendants====
* {{desc|as|বুধ}}
* {{desc|bn|বুধ}}
* {{desc|gu|બુધ}}
* {{desc|hi|बुध}}
* {{desc|kok|बुध}}
* {{desc|mr|बुध}}
* {{desc|ne|बुध}}
* {{desc|pa|ਬੁਧ}}
* {{desc|my|ဗုဒ္ဓဟူး|bor=1}}
=== අමතර අවධානයට ===
{{table:Solar System/sa}}
{{C|sa|Planets of the Solar System}}
p73c9u02eogfcjupny4v0dugbvtrbk6
भाषा
0
121168
235603
198870
2026-06-06T13:30:47Z
Lee
19
/* නාම පදය */
235603
wikitext
text/x-wiki
{{also|भीषा}}
==Bhojpuri==
=== නිරුක්තිය ===
{{etymon|bho|bor|sa>भाषा>speech|id=language|text=+}}
=== නාම පදය ===
{{bho-noun|g=f}}
# [[භාෂා]]
#: {{uxi|bho|भोजपुरी '''भाषा'''|Bhojpuri '''language'''|tr=bhojapurī '''bhāṣā'''}}
== හින්දි ==
{{wikipedia|lang=hi}}
=== නිරුක්තිය ===
{{etymon|hi|bor|sa>भाषा>speech|id=language|text=+}}
=== උච්චාරණය ===
* {{hi-IPA}}
* {{audio|hi|LL-Q1568 (hin)-QueerEcofeminist-भाषा.wav}}
* {{rhyme|hi|ɑː|s=2}}
* {{hyph|hi|भा|षा}}
=== නාම පදය ===
{{hi-noun|f|ur=بھاشا}}
# [[භාෂා]], [[speech]]
#: {{uxa|hi|संस्कृत बहुत समृद्ध '''भाषा''' है।|t=Sanskrit is a very rich '''language'''.}}
#: {{uxa|hi|वह '''भाषा''' की उत्पत्ति पर खोज कर रहा है।|t=He is doing research on the origins of '''language'''}}
==== වරනැඟීම ====
{{hi-ndecl|<F>}}
==== සමාන පද ====
* {{l|hi|ज़बान}}
* {{l|hi|बोली}}
* {{l|hi|लिसान}}
* {{l|hi|भाखा}}
==== ව්යුත්පන්න යෙදුම් ====
{{rel2|hi|मातृभाषा|परिभाषा|भारतीय आर्य भाषा|भाषांतर|भाषांतरकार|भाषागत|भाषाविज्ञान|भाषावैज्ञानिक|देशभाषा|भाषा-परिवार|राष्ट्रभाषा}}
==== මූලාශ්ර ====
* {{R:Platts}}
== මරාථි ==
{{wikipedia|lang=mr}}
=== නිරුක්තිය ===
{{etymon|mr|bor|sa>भाषा>speech|id=language|text=+}}
=== උච්චාරණය ===
* {{mr-IPA}}
=== නාම පදය ===
{{mr-noun|g=f}}
# [[language]]
#: {{syn|mr|बोली}}
#: {{ux|mr|इंग्रजी एक जागतिक '''भाषा''' आहे.|English is a global '''language'''.}}
==== වරනැඟීම ====
{{mr-noun-ā-f|भाष|bhāṣ}}
==== ව්යුත්පන්න යෙදුම් ====
{{der3|mr|{{l|mr|अधिकृत भाषा|t=[[official language]]}}|{{l|mr|जन्मभाषा}}|{{l|mr|देवभाषा|t=Gods' language}}|{{l|mr|बालभाषा}}|{{l|mr|बोलीभाषा|t=[[colloquial]] [[language]]}}|{{l|mr|भाषाकुळ|t=[[language family]]}}|{{l|mr|भाषाविज्ञान|t=[[linguistics]]}}|{{l|mr|भाषावैज्ञानिक|t=[[linguist]]}}|{{l|mr|भाषाशैली}}|{{l|mr|भाषांतर|t=[[translation]]}}|{{l|mr|भाषांतरकार|t=[[translator]]}}|{{l|mr|मातृभाषा|t=[[mother tongue]]}}|{{l|mr|राज्यभाषा|t=[[state]] [[language]]}}|{{l|mr|राष्ट्रभाषा|t=[[national]] [[language]]}}|{{l|mr|संस्कृत भाषा|t=[[Sanskrit]] [[language]]}}}}
=== මූලාශ්ර ===
* {{R:mr:Berntsen}}
* {{R:mr:Molesworth}}
* {{R:mr:Vaze}}
{{C|mr|Language}}
==Nepali==
=== නිරුක්තිය ===
{{etymon|ne|bor|sa>भाषा>speech|id=language|text=+}}
=== උච්චාරණය ===
* {{ne-IPA}}
=== නාම පදය ===
{{ne-noun}}
# [[language]]
#: {{syn|ne|कुरा}}
==== වරනැඟීම ====
{{ne-decl-noun}}
==Newar==
=== නිරුක්තිය ===
{{etymon|new|bor|sa>भाषा>speech|id=language|text=+}}
=== උච්චාරණය ===
* {{new-IPA}}
=== නාම පදය ===
{{head|new|noun}}
# [[language]]
==Old Gujarati==
=== නිරුක්තිය ===
{{etymon|inc-ogu|bor|sa>भाषा>speech|id=language|text=+}}
=== නාම පදය ===
{{head|inc-ogu|noun|g=f}}
# [[talk]], [[utterance]]
== සංස්කෘත ==
=== වෙනත් අක්ෂරක්රම ===
{{sa-alt}}
=== නිරුක්තිය ===
{{etymon|sa|from|sa>भाष्>speak|id=speech}}
{{sa-root|भाष्|t=to speak}}; further origin {{uncertain|sa|nocap=1}}. Theories include:
* From {{der|sa|ine-pro|*bʰeh₂-|id=speak|t=to speak}}, compare {{m+|la|fās|t=divine law}}. The retroflex ''ṣ'' could either be onomatopoeic or to avoid homonymy with root {{m|sa|भास्|t=to shine}} (compare originally fully homonymous {{m+|en|flower}} and {{m|en|flour}} or {{m+|de|küssen}} and {{m|de|Kissen}}).
* From {{der|sa|ine-pro|*bʰel-|*bʰel-s-|id=sound|t=to sound}}, compare {{cog|lt|balsas|t=voice}} and {{cog|lv|balss|t=voice}}. The retroflexion is in this case due to {{w|Fortunatov's Law}}.<ref>{{R:inc:EWAia|head=''BHAṢ''|vol=2|pages=261f.}}</ref>
=== උච්චාරණය ===
{{sa-IPA|a=1}}
=== නාම පදය ===
{{sa-noun|tr=bhā́ṣā|g=f}}
# [[speech]], [[language]] (especially common, vernacular or vulgar speech, as opposed to Vedic or in later times to Sanskrit, as the refined speech)
# any [[Prakrit]] dialect or a particular group of 5 of them (namely {{m|sa|माहाराष्ट्री}}, {{m|sa|शौरसेनी}}, {{m|sa|मागधी}}, {{m|sa|प्राच्या}} and {{m|sa|अवन्ति}}, also called {{m|sa|पञ्चविधा}})
# [[description]], [[definition]]
# {{lb|sa|legal}} [[accusation]], [[charge]], [[complaint]], [[plaint]]
# name of [[Saraswati]]
# {{lb|sa|music}} name of {{m|sa|रागिणी}}
==== වරනැඟීම ====
{{sa-decl-noun-f|bhā́ṣā}}
==== ව්යුත්පන්න යෙදුම් ====
{{der3|sa
|पालिभाषा
|भाषाकुमुदमञ्जरी
|भाषाकौमुदी
|भाषाचित्रक
|भाषाज्ञ
|भाषानुशासन
|भाषान्तर
|भाषापरिच्छेद
|भाषापाद
|भाषाप्रकाशिका
|भाषामञ्जरी
|भाषारत्न
|भाषार्णव
|भाषालीलावती
|भाषाविवृतिगीता
|भाषावृत्ति
|भाषावृत्त्यर्थवृत्ति
|भाषासम
|भाषासमिति
|देवभाषा
}}
====Descendants====
{{desc-top|Terms inherited from {{l|sa|भाषा}}}}
* Dardic:
*** {{desc|dml||tr=bâṣa|t=language}}
**** {{desc|scl|بݜ|tr=baṣ}}
***** {{desc|dmk||tr=bāṣ|bor=1}}
* {{desctree|pi|bhāsā}}
* {{desc|pra|𑀪𑀸𑀲𑀸}}
** Eastern:
*** {{desc|bn|ভাস}}
*** {{desc|bh|-}}
**** {{desc|mai|भास}}
*** {{desc|ccp|𑄞𑄌𑄴|tr=bhāc}}
** Northern:
*** {{desc|gbm|भाख}}
*** {{desc|kfy|भाश}}
*** {{desc|ne|भास}}
** Insular:
*** {{desc|dv|ބަސް|t=language}}
*** {{desc|si|බහ|t=word, saying}}
** Southern:
*** {{desc|kok|भास}}
** Central:
*** {{desc|hne|भाखा|tr=bhākhā}}
{{desc-bottom}}
{{desc-top|Borrowed terms}}
* {{desc|bor=1|ace|بَهْسَا|tr=bahsa}}
* {{desc|bor=1|as|ভাষা}}
* {{desc|bor=1|bjn|بَهَاسَ|tr=bahasa}}
* {{desc|bor=1|bn|ভাষা}}
* {{desc|bor=1|bew|bahasa}}
* {{desc|bor=1|bug|ᨅᨔ|tr=basa}}
* {{desc|bor=1|cia|bahasa}} / {{l|cia|바하사|tr=bahasa}}
* {{desc|doi||alt=bhāśā|bor=1}}
*: {{desc|doi|भाशा|tr=-|sclb=1}}
*: {{desc|doi|𑠡𑠬𑠧𑠬|tr=-|sclb=1}}
* {{desc|bor=1|hif|भाषा|tr=bhāṣā|bhasa}}
* {{desc|bor=1|gu|ભાષા}}
* {{desc|bor=1|hi|भाषा}}
* {{desc|bor=1|ilo|basa}}
* {{desc|lbor=1|kfr|ભાષા}}
* {{desc|bor=1|kn|ಭಾಷೆ}}
* {{desc|bor=1|mad|بهاس|alt=بَهاسَ|tr=basa}}
* {{desc|bor=1|mdh|bahasah}}
* {{desc|bor=1|mak|ᨅᨔ|tr=basa}}
* {{desctree|bor=1|ms|bahasa|tr=بهاس}}
* {{desc|bor=1|ml|ഭാഷ|alts=1}}
* {{desc|bor=1|mr|भाषा}}
* {{desc|bor=1|mrw|basa}}
* {{desc|bor=1|min|بَاسو|tr=baso}}
* {{desc|bor=1|ne|भाषा}}
* {{desc|bor=1|new|भाषा|tr=bhāṣā}}
* {{desc|bor=1|kxm|พซา}}
* {{desctree|bor=1|kaw|bhāṣa}}
* {{desc|bor=1|or|ଭାଷା}}
* {{desc|bor=1|pa|ਭਾਸ਼ਾ}}
* {{desc|bor=1|si|භාෂාව}}
* {{desc|bor=1|su|ᮘᮞ}}
* {{desc|bor=1|ta|பாசை|alts=1}}
* {{desc|bor=1|tsg|bahasa}}
* {{desc|bor=1|te|భాష}}
* {{desc|bor=1|tcy|ಬಾಸೆ|alts=1}}
* {{desc|bor=1|ur|بھَاشَا}}
* {{desc|bor=1|yka|bahasa}}
* → Proto-Nuristani:
** {{desc|wbk||tr=bāṣ|t=word}}
{{desc-bottom}}
=== මූලාශ්ර ===
<references/>
=== වැඩිදුර් කියවීම සඳහා ===
* {{R:MW|0755}}
* {{R:Apte||1196}}
* {{R:sa:NWS|entry=भाषा}}
* {{R:CDIAL|bhāṣā|hw=1|page=540}}
74jrolwnwxuet4smw1cbk6osw8pdqli
හිතවත්තු
0
131525
235595
208394
2026-06-06T12:50:28Z
WrdSrchSi
3305
+ IPA|si + inflection of|si (replaced inflection of|si)
235595
wikitext
text/x-wiki
==සිංහල==
=== නිරුක්තිය ===
{{etymon|si|id=හිතවත් හු|af|si>හිතවත්#නාම ප්රකෘතිය>ප්රකෘතිය|si>-හු>ප්රත්ය|tree=1}}
''[[හිතවත්#නාම ප්රකෘතිය|හිතවත්]] (ප්රකෘතිය) + [[-හු]] (ප්රත්ය) > හිතවත්හු >'' [[හිතවත්තු]] ''(පූර්ව ව්යඤ්ජන සාම්යය)''
===උච්චාරණය===
* {{IPA|si|/ˈɦitəʋattu/}}
===නාම පදය===
{{head|si|noun form}}
# {{lb|si|ප්රාණවාචී}} {{plural of|si|හිතවත්#නාම ප්රකෘතිය||පෙර විබත්|p}}
rioywcr7e7z25hx7h0nzzrmgz3xrpfo
235596
235595
2026-06-06T12:51:45Z
WrdSrchSi
3305
Fixed: replaced plural of|si|
235596
wikitext
text/x-wiki
==සිංහල==
=== නිරුක්තිය ===
{{etymon|si|id=හිතවත් හු|af|si>හිතවත්#නාම ප්රකෘතිය>ප්රකෘතිය|si>-හු>ප්රත්ය|tree=1}}
''[[හිතවත්#නාම ප්රකෘතිය|හිතවත්]] (ප්රකෘතිය) + [[-හු]] (ප්රත්ය) > හිතවත්හු >'' [[හිතවත්තු]] ''(පූර්ව ව්යඤ්ජන සාම්යය)''
===උච්චාරණය===
* {{IPA|si|/ˈɦitəʋattu/}}
===නාම පදය===
{{head|si|noun form}}
# {{lb|si|ප්රාණවාචී}} {{inflection of|si|හිතවත්#නාම ප්රකෘතිය||පෙර විබත්|p}}
2am4t35dpqonxl1l665dmndmf2kmohl
ඇකුත්
0
139073
235601
225007
2026-06-06T13:17:15Z
WrdSrchSi
3305
/*ක්රියා පද*/ + lb|si
235601
wikitext
text/x-wiki
==සිංහල==
===වෙනත් ආකාර===
* {{l|si|ඇක්මි#ක්රියා පද}}
* {{l|si|ඇකුතු#ක්රියා පද}}
* {{l|si|ඇකුත#ක්රියා පද}}
===උච්චාරණය===
* {{IPA|si|/ˈækut/}}
===ක්රියා පද===
{{head|si|verb forms}}
# {{lb|si|සකර්මක|අකර්මක}} {{alternative form of|si|ඇක්මුණු}}
=== නාම විශේෂණ පදය ===
{{si-adj}}
# {{rfdef|si}}
#:* මහ විජේබා රජු, ''[https://si.wikipedia.org/wiki/%E0%B6%B4%E0%B6%B1%E0%B7%8F%E0%B6%9A%E0%B6%A9%E0%B7%94%E0%B7%80_%E0%B6%AD%E0%B6%B9_%E0%B7%83%E0%B6%B1%E0%B7%8A%E0%B6%B1%E0%B7%83 පනාකඩුව තඹ සන්නස]'', ක්රි.ව. 11 වන සියවස
#:*: ''පුසැ '''ඇකුත් ඇකුත්''' තන්හි මඟමින් ඇසිරෙන විපකුන් කෙරෙහි වළගා ක(ත?)න්හි තන්හි''
[[ප්රවර්ගය: සිංහල ආඛ්යාත ක්රියා පද]]
sa6bv0p8j1maxazlpp4hv89g09hy6ww
ඇක්මුණු
0
142169
235602
231674
2026-06-06T13:17:58Z
WrdSrchSi
3305
+ වෙනත් ආකාර
235602
wikitext
text/x-wiki
==සිංහල==
===වෙනත් ආකාර===
* {{l|si|ඇක්මි#ක්රියා පද}} ''(සකර්මක, අකර්මක සඳහා පමණි.)''
* {{l|si|ඇකුතු#ක්රියා පද}} ''(සකර්මක, අකර්මක සඳහා පමණි.)''
* {{l|si|ඇකුත්#ක්රියා පද}} ''(සකර්මක, අකර්මක සඳහා පමණි.)''
* {{l|si|ඇකුත#ක්රියා පද}} ''(සකර්මක, අකර්මක සඳහා පමණි.)''
===උච්චාරණය===
* {{IPA|si|/ˈækmuɳu/}}
===ක්රියා පද===
{{head|si|verb forms|head=ඇක්මුණු|අනතීත-සකර්මක, අනතීත-අකර්මක, අනතීත-කර්ම කාරක අන්ය පුරුෂ බහුවචන|ඇක්මෙති}}
# {{lb|si|සකර්මක}} {{infl of|si|ඇක්මේ#ක්රියා පද||අතීත|අන්ය පුරුෂ|බහුවචන|ආඛ්යාත ක්රියා}}
# {{lb|si|අකර්මක}} {{infl of|si|ඇක්මේ#ක්රියා පද||අතීත|අන්ය පුරුෂ|බහුවචන|ආඛ්යාත ක්රියා}}
# {{infl of|si|ඇක්මේ#ක්රියා පද||අතීත|කර්ම කාරක|අන්ය පුරුෂ|බහුවචන|ආඛ්යාත ක්රියා}}
[[ප්රවර්ගය: සිංහල ආඛ්යාත ක්රියා පද]]
40aztun484qtsqt21909jy8cetlkmzp
ඉක්මුණු
0
142521
235599
232448
2026-06-06T13:08:51Z
WrdSrchSi
3305
+ IPA|si + head|si|verb forms|head= + infl of|si + ප්රවර්ගය
235599
wikitext
text/x-wiki
== සිංහල ==
===වෙනත් ආකාර===
* {{l|si|ඉක්මි#ක්රියා පද|ඉක්මි}} ''(සකර්මක, අකර්මක සඳහා පමණි.)''
* {{l|si|ඉකුතු#ක්රියා පද|ඉකුතු}} ''(සකර්මක, අකර්මක සඳහා පමණි.)''
* {{l|si|ඉකුත්#ක්රියා පද|ඉකුත්}} ''(සකර්මක, අකර්මක සඳහා පමණි.)''
* {{l|si|ඉකුත#ක්රියා පද|ඉකුත}} ''(සකර්මක, අකර්මක සඳහා පමණි.)''
===උච්චාරණය===
* {{IPA|si|/ˈikmuɳu/}}
===ක්රියා පද===
{{head|si|verb forms|head=ඉක්මුණු|අනතීත-සකර්මක, අනතීත-අකර්මක, අනතීත-කර්ම කාරක අන්ය පුරුෂ බහුවචන|ඉක්මෙති}}
# {{lb|si|සකර්මක}} {{infl of|si|ඉක්මේ#ක්රියා පද||අතීත|අන්ය පුරුෂ|බහුවචන|ආඛ්යාත ක්රියා}}
# {{lb|si|අකර්මක}} {{infl of|si|ඉක්මේ#ක්රියා පද||අතීත|අන්ය පුරුෂ|බහුවචන|ආඛ්යාත ක්රියා}}
# {{infl of|si|ඉක්මේ#ක්රියා පද||අතීත|කර්ම කාරක|අන්ය පුරුෂ|බහුවචන|ආඛ්යාත ක්රියා}}
[[ප්රවර්ගය: සිංහල ආඛ්යාත ක්රියා පද]]
dss3z4vt0njkpzsnsk2kj5vf8n2pwcz
හිවලුන්
0
143392
235593
233757
2026-06-06T12:39:11Z
WrdSrchSi
3305
+ etymon|si + IPA|si + example sentences
235593
wikitext
text/x-wiki
==සිංහල==
=== නිරුක්තිය ===
{{etymon|si|id=හිවල් උන්|af|si>හිවල්#නාම ප්රකෘතිය>ප්රකෘතිය|si>-උන්>ප්රත්ය|tree=1}}
''[[හිවල්#නාම ප්රකෘතිය|හිවල්]] (ප්රකෘතිය) + [[-උන්]] (ප්රත්ය) >'' [[හිවලුන්]]
===උච්චාරණය===
* {{IPA|si|/ˈɦiʋəlun/}}
=== නාම පදය ===
{{head|si|noun form}}
# {{lb|si|ප්රාණවාචී|පුරුෂ ලිංග}} {{inflection of|si|හිවල්#නාම ප්රකෘතිය||කම් විබත්|p}}
#: ''{{{2|හේ සතකු මස් කන '''හිවලුන්''' නිරික්සී.}}}''
# {{lb|si|ප්රාණවාචී|පුරුෂ ලිංග}} {{inflection of|si|හිවල්#නාම ප්රකෘතිය||කතු විබත්|p}}
#: ''{{{2|'''හිවලුන්''' විසින් සතෙක් ලුහුබැඳිණි.}}}''
6motbka9v06m0t0p2wuicey6vksfoge
හිතැතියකු
0
143476
235594
233866
2026-06-06T12:43:45Z
WrdSrchSi
3305
+ IPA|si + head|si|noun form + inflection of|si
235594
wikitext
text/x-wiki
==සිංහල==
=== නිරුක්තිය ===
{{rfe|si}}
===උච්චාරණය===
* {{IPA|si|/ˈɦitætijəku/}}
===නාම පදය===
{{head|si|noun form}}
# {{lb|si|ප්රාණවාචී}} {{inflection of|si|හිතැති#නාම ප්රකෘතිය||කම් විබත්|අනියමාර්ථ}}
# {{lb|si|ප්රාණවාචී}} {{inflection of|si|හිතැති#නාම ප්රකෘතිය||කතු විබත්|අනියමාර්ථ}}
dsh7h1d5v2rzfc70jus1q34cgu6od6w
හෙළයකුට
0
144176
235592
2026-06-06T12:22:24Z
WrdSrchSi
3305
Page created: + IPA|si + head|si|noun form + inflection of|si
235592
wikitext
text/x-wiki
==සිංහල==
=== නිරුක්තිය ===
{{rfe|si}}
===උච්චාරණය===
* {{IPA|si|/ˈɦeɭəjəkuʈə/}}
===නාම පදය===
{{head|si|noun form}}
# {{lb|si|ප්රාණවාචී}} {{inflection of|si|හෙළ#නාම ප්රකෘතිය||සපදන් විබත්|අනියමාර්ථ}}
ccw6db6rg0pcq3v10d23czrwxvh8fxp
හිතවතුන්
0
144177
235597
2026-06-06T12:55:31Z
WrdSrchSi
3305
Page created: + etymon|si + IPA|si + head|si|noun form + inflection of|si
235597
wikitext
text/x-wiki
==සිංහල==
=== නිරුක්තිය ===
{{etymon|si|id=හිතවත් උන්|af|si>හිතවත්#නාම ප්රකෘතිය>ප්රකෘතිය|si>-උන්>ප්රත්ය|tree=1}}
''[[හිතවත්#නාම ප්රකෘතිය|හිතවත්]] (ප්රකෘතිය) + [[-උන්]] (ප්රත්ය) >'' [[හිතවතුන්]]
===උච්චාරණය===
* {{IPA|si|/ˈɦitəʋətun/}}
===නාම පදය===
{{head|si|noun form}}
# {{lb|si|ප්රාණවාචී}} {{inflection of|si|හිතවත්#නාම ප්රකෘතිය||කම් විබත්|p}}
# {{lb|si|ප්රාණවාචී}} {{inflection of|si|හිතවත්#නාම ප්රකෘතිය||කතු විබත්|p}}
nru919ckpiym9vgjewb9fmj9mlqeloe
ඉකුත්
0
144178
235598
2026-06-06T13:02:27Z
WrdSrchSi
3305
Page created: + වෙනත් ආකාර + IPA|si + alternative form of|si + si-adj + example
235598
wikitext
text/x-wiki
==සිංහල==
===වෙනත් ආකාර===
* {{l|si|ඉක්මි#ක්රියා පද}}
* {{l|si|ඉකුතු#ක්රියා පද}}
* {{l|si|ඉකුත#ක්රියා පද}}
===උච්චාරණය===
* {{IPA|si|/ˈikut/}}
===ක්රියා පද===
{{head|si|verb forms}}
# {{alternative form of|si|ඉක්මුණු}}
=== නාම විශේෂණ පදය ===
{{si-adj}}
# {{rfdef|si}}
#: ''{{{2|'''ඉකුත්''' බදාදා}}}''
[[ප්රවර්ගය: සිංහල ආඛ්යාත ක්රියා පද]]
taotokrcml0kw3t8mombcuf555b96jl
235600
235598
2026-06-06T13:10:48Z
WrdSrchSi
3305
/* ක්රියා පද */ + lb|si
235600
wikitext
text/x-wiki
==සිංහල==
===වෙනත් ආකාර===
* {{l|si|ඉක්මි#ක්රියා පද}}
* {{l|si|ඉකුතු#ක්රියා පද}}
* {{l|si|ඉකුත#ක්රියා පද}}
===උච්චාරණය===
* {{IPA|si|/ˈikut/}}
===ක්රියා පද===
{{head|si|verb forms}}
# {{lb|si|සකර්මක|අකර්මක}} {{alternative form of|si|ඉක්මුණු}}
=== නාම විශේෂණ පදය ===
{{si-adj}}
# {{rfdef|si}}
#: ''{{{2|'''ඉකුත්''' බදාදා}}}''
[[ප්රවර්ගය: සිංහල ආඛ්යාත ක්රියා පද]]
hxnoaut1czaay1zmql5y0hx9v9cv8v6
Module:Sund-translit
828
144179
235605
2025-05-11T17:59:37Z
en>Fenakhay
0
Fenakhay moved page [[Module:su-translit]] to [[Module:Sund-translit]] without leaving a redirect
235605
Scribunto
text/plain
local export = {}
local consonants = {
['ᮊ']='k', ['ᮌ']='g', ['ᮍ']='ng', ['ᮎ']='c', ['ᮏ']='j', ['ᮑ']='ny',
['ᮒ']='t', ['ᮓ']='d', ['ᮔ']='n', ['ᮕ']='p', ['ᮘ']='b', ['ᮙ']='m',
['ᮚ']='y', ['ᮛ']='r', ['ᮜ']='l', ['ᮝ']='w', ['ᮞ']='s', ['ᮠ']='h',
['ᮖ']='f', ['ᮋ']='q', ['ᮗ']='v', ['ᮟ']='x', ['ᮐ']='z', ['ᮮ']='kh', ['ᮯ']='sy',
}
local diacritics = {
['ᮤ']= 'i' , ['ᮥ']='u' , ['ᮦ']='é' , ['ᮧ']='o' , ['ᮨ']='e' , ['ᮩ']='eu' ,
['ᮺ']='-a' , ['᮫']='' , ['᮪']='' ,
}
local special = {
['ᮬ']='m' , ['ᮭ']='w' , ['ᮡ']='y' , ['ᮢ']='r' , ['ᮣ']='l' ,
}
local nonconsonants = {
-- vowels
['ᮃ']='a' , ['ᮆ']='é' , ['ᮄ']='i' , ['ᮇ']='o' , ['ᮅ']='u' , ['ᮈ']='e' , ['ᮉ']='eu' , ['ᮻ']='reu' , ['ᮼ']='leu' ,
-- aditional characters
['|']='', -- digit pipe bar
['ᮀ']='ng',
['ᮁ']='r',
['ᮂ']='h',
['ᮾ']='k',
['ᮿ']='m',
-- digits
['᮰'] = '0', ['᮱'] = '1', ['᮲'] = '2', ['᮳'] = '3', ['᮴'] = '4',
['᮵'] = '5', ['᮶'] = '6', ['᮷'] = '7', ['᮸'] = '8', ['᮹'] = '9',
}
-- translit any words or phrases
function export.tr(text, lang, sc)
text = mw.ustring.gsub(
text,
'([ᮊᮌᮍᮎᮏᮑᮒᮓᮔᮕᮘᮙᮚᮛᮜᮝᮞᮠᮖᮋᮗᮟᮐᮮᮯ])'..
'([ᮬᮭᮡᮢᮣ]?)' ..
'([ᮤᮥᮦᮧᮨᮩᮺ ᮫᮪]?)',
function(c, s, d)
if s == "" then
if d == "" then
return consonants[c] .. 'a'
else
return consonants[c] .. (diacritics[d] or d)
end
else
if d == "" then
return consonants[c] .. (special[s] or s) .. 'a'
else
return consonants[c] .. (special[s] or s) .. (diacritics[d] or d)
end
end
end)
text = mw.ustring.gsub(text, '.', nonconsonants)
return text
end
return export
8kqpl220czqpldp2dhbfjklftbb0xr5
235606
235605
2026-06-06T13:33:44Z
Lee
19
[[:en:Module:Sund-translit]] වෙතින් එක් සංශෝධනයක්
235605
Scribunto
text/plain
local export = {}
local consonants = {
['ᮊ']='k', ['ᮌ']='g', ['ᮍ']='ng', ['ᮎ']='c', ['ᮏ']='j', ['ᮑ']='ny',
['ᮒ']='t', ['ᮓ']='d', ['ᮔ']='n', ['ᮕ']='p', ['ᮘ']='b', ['ᮙ']='m',
['ᮚ']='y', ['ᮛ']='r', ['ᮜ']='l', ['ᮝ']='w', ['ᮞ']='s', ['ᮠ']='h',
['ᮖ']='f', ['ᮋ']='q', ['ᮗ']='v', ['ᮟ']='x', ['ᮐ']='z', ['ᮮ']='kh', ['ᮯ']='sy',
}
local diacritics = {
['ᮤ']= 'i' , ['ᮥ']='u' , ['ᮦ']='é' , ['ᮧ']='o' , ['ᮨ']='e' , ['ᮩ']='eu' ,
['ᮺ']='-a' , ['᮫']='' , ['᮪']='' ,
}
local special = {
['ᮬ']='m' , ['ᮭ']='w' , ['ᮡ']='y' , ['ᮢ']='r' , ['ᮣ']='l' ,
}
local nonconsonants = {
-- vowels
['ᮃ']='a' , ['ᮆ']='é' , ['ᮄ']='i' , ['ᮇ']='o' , ['ᮅ']='u' , ['ᮈ']='e' , ['ᮉ']='eu' , ['ᮻ']='reu' , ['ᮼ']='leu' ,
-- aditional characters
['|']='', -- digit pipe bar
['ᮀ']='ng',
['ᮁ']='r',
['ᮂ']='h',
['ᮾ']='k',
['ᮿ']='m',
-- digits
['᮰'] = '0', ['᮱'] = '1', ['᮲'] = '2', ['᮳'] = '3', ['᮴'] = '4',
['᮵'] = '5', ['᮶'] = '6', ['᮷'] = '7', ['᮸'] = '8', ['᮹'] = '9',
}
-- translit any words or phrases
function export.tr(text, lang, sc)
text = mw.ustring.gsub(
text,
'([ᮊᮌᮍᮎᮏᮑᮒᮓᮔᮕᮘᮙᮚᮛᮜᮝᮞᮠᮖᮋᮗᮟᮐᮮᮯ])'..
'([ᮬᮭᮡᮢᮣ]?)' ..
'([ᮤᮥᮦᮧᮨᮩᮺ ᮫᮪]?)',
function(c, s, d)
if s == "" then
if d == "" then
return consonants[c] .. 'a'
else
return consonants[c] .. (diacritics[d] or d)
end
else
if d == "" then
return consonants[c] .. (special[s] or s) .. 'a'
else
return consonants[c] .. (special[s] or s) .. (diacritics[d] or d)
end
end
end)
text = mw.ustring.gsub(text, '.', nonconsonants)
return text
end
return export
8kqpl220czqpldp2dhbfjklftbb0xr5
Module:Sund-translit/testcases/documentation
828
144180
235607
2025-05-11T18:00:17Z
en>Fenakhay
0
235607
wikitext
text/x-wiki
This is the unit-testing module for [[Module:Sund-translit]].
{{#invoke:Sund-translit/testcases|run_tests|differs_at=1}}
oebp0epw9zkshuobjn5znpsu4vkszur
235608
235607
2026-06-06T13:34:05Z
Lee
19
[[:en:Module:Sund-translit/testcases/documentation]] වෙතින් එක් සංශෝධනයක්
235607
wikitext
text/x-wiki
This is the unit-testing module for [[Module:Sund-translit]].
{{#invoke:Sund-translit/testcases|run_tests|differs_at=1}}
oebp0epw9zkshuobjn5znpsu4vkszur
Module:Sund-translit/testcases
828
144181
235609
2025-05-11T18:00:05Z
en>Fenakhay
0
235609
Scribunto
text/plain
-- Unit tests for [[Module:Sund-translit]]. Refresh page to run tests.
local tests = require('Module:UnitTests')
local su_translit = require('Module:Sund-translit')
function tests:check_translit(Sund, roman)
self:equals('<span class="Sund" lang="su">[[' .. Sund .. '#Sundanese|' .. Sund .. ']]</span>', su_translit.tr(Sund, 'su', 'Sund'), roman)
end
function tests:test_translit_sundanese()
self:check_translit('ᮃᮜᮥᮔᮺᮌᮥᮀ', 'alun-agung')
self:check_translit('ᮞ᮪ᮝᮛ', 'swara')
self:check_translit('ᮍᮜᮌᮨᮔ', 'ngalagena')
self:check_translit('ᮛᮛᮀᮊᮨᮔ᮪', 'rarangken')
self:check_translit('|᮲᮰᮱᮵|', '2015')
self:check_translit('ᮃᮊ᮪ᮞᮛ', 'aksara')
self:check_translit('ᮃᮀᮊ', 'angka')
self:check_translit('ᮓᮜᮤᮀᮓᮤᮀ', 'dalingding')
self:check_translit('ᮃᮍᮤᮔ᮪', 'angin')
self:check_translit('ᮌᮥᮔ᮪ᮒᮤᮀ', 'gunting')
self:check_translit('ᮓᮓᮝᮥᮠᮔ᮪', 'dadawuhan')
self:check_translit('ᮒᮩᮊ᮪ᮒᮩᮊ᮪', 'teukteuk')
self:check_translit('ᮃᮔᮾ', 'anak')
self:check_translit('ᮄᮊᮣᮤᮙ᮪', 'iklim')
end
return tests
g5gdb54l9100gtq5taz7q9617jwh5l3
235610
235609
2026-06-06T13:34:08Z
Lee
19
[[:en:Module:Sund-translit/testcases]] වෙතින් එක් සංශෝධනයක්
235609
Scribunto
text/plain
-- Unit tests for [[Module:Sund-translit]]. Refresh page to run tests.
local tests = require('Module:UnitTests')
local su_translit = require('Module:Sund-translit')
function tests:check_translit(Sund, roman)
self:equals('<span class="Sund" lang="su">[[' .. Sund .. '#Sundanese|' .. Sund .. ']]</span>', su_translit.tr(Sund, 'su', 'Sund'), roman)
end
function tests:test_translit_sundanese()
self:check_translit('ᮃᮜᮥᮔᮺᮌᮥᮀ', 'alun-agung')
self:check_translit('ᮞ᮪ᮝᮛ', 'swara')
self:check_translit('ᮍᮜᮌᮨᮔ', 'ngalagena')
self:check_translit('ᮛᮛᮀᮊᮨᮔ᮪', 'rarangken')
self:check_translit('|᮲᮰᮱᮵|', '2015')
self:check_translit('ᮃᮊ᮪ᮞᮛ', 'aksara')
self:check_translit('ᮃᮀᮊ', 'angka')
self:check_translit('ᮓᮜᮤᮀᮓᮤᮀ', 'dalingding')
self:check_translit('ᮃᮍᮤᮔ᮪', 'angin')
self:check_translit('ᮌᮥᮔ᮪ᮒᮤᮀ', 'gunting')
self:check_translit('ᮓᮓᮝᮥᮠᮔ᮪', 'dadawuhan')
self:check_translit('ᮒᮩᮊ᮪ᮒᮩᮊ᮪', 'teukteuk')
self:check_translit('ᮃᮔᮾ', 'anak')
self:check_translit('ᮄᮊᮣᮤᮙ᮪', 'iklim')
end
return tests
g5gdb54l9100gtq5taz7q9617jwh5l3
සිංහාසනය
0
144182
235611
2026-06-06T13:40:49Z
Lee
19
'== සිංහල == === නිරුක්තිය === {{rfe|si}} === නාම පදය === {{si-noun}} # {{rfdef|si}} <!-- ==== පරිවර්තන ==== {{trans-top|පරිවර්තන}} * ඉංග්රීසි: {{t|en|<<ඉංග්රීසි වචනය>>}} {{trans-bottom}} === අමතර අවධානයට === * {{l|si|<<ආශ්රිත පවතින වෙනත් ව...' යොදමින් නව පිටුවක් තනන ලදි
235611
wikitext
text/x-wiki
== සිංහල ==
=== නිරුක්තිය ===
{{rfe|si}}
=== නාම පදය ===
{{si-noun}}
# {{rfdef|si}}
<!--
==== පරිවර්තන ====
{{trans-top|පරිවර්තන}}
* ඉංග්රීසි: {{t|en|<<ඉංග්රීසි වචනය>>}}
{{trans-bottom}}
=== අමතර අවධානයට ===
* {{l|si|<<ආශ්රිත පවතින වෙනත් වචන>>}}
-->
37g9s13iio6w9i2yw7aw46v28viw7h4
පිරික්සීමි
0
144183
235612
2026-06-06T15:07:19Z
WrdSrchSi
3305
Page created: + IPA|si + head|si|verb forms + infl of|si + ප්රවර්ගය
235612
wikitext
text/x-wiki
==සිංහල==
===උච්චාරණය===
* {{IPA|si|/ˈpiriksiːmi/}}
===ක්රියා පද===
{{head|si|verb forms|අනතීත-සකර්මක උත්තම ඒකවචන|පිරික්සමි#ක්රියා පද|අතීත-කර්ම කාරක උත්තම ඒකවචන|පිරික්සිණිමි#ක්රියා පද}}
# {{lb|si|සකර්මක}} {{infl of|si|පිරික්සයි#ක්රියා පද||අතීත|උත්තම පුරුෂ|ඒකවචන|ආඛ්යාත ක්රියා}}
[[ප්රවර්ගය: සිංහල ආඛ්යාත ක්රියා පද]]
d8lzed4fczlc5gu2y0ehx0gugni6w1o
පිරික්සෙමි
0
144184
235613
2026-06-06T15:12:07Z
WrdSrchSi
3305
Page created: + IPA|si + head|si|verb forms|head= + infl of|si + example sentence + ප්රවර්ගය
235613
wikitext
text/x-wiki
==සිංහල==
===උච්චාරණය===
* {{IPA|si|/ˈpiriksemi/}}
===ක්රියා පද===
{{head|si|verb forms|head=පිරික්සෙමි|අනතීත-සකර්මක උත්තම ඒකවචන|පිරික්සමි#ක්රියා පද|අතීත-කර්ම කාරක උත්තම ඒකවචන|පිරික්සිණිමි#ක්රියා පද}}
# {{infl of|si|පිරික්සයි#ක්රියා පද||අනතීත|කර්ම කාරක|උත්තම පුරුෂ|ඒකවචන|ආඛ්යාත ක්රියා}}
#: ''{{{2|මම උන් විසින් '''පිරික්සෙමි'''.}}}''
[[ප්රවර්ගය: සිංහල ආඛ්යාත ක්රියා පද]]
5t8pryfnsa4ksenirfh2hhsqoch3krw
wulfesheafod
0
144185
235614
2026-06-07T02:24:49Z
Lee
19
නිර්මාණය
235614
wikitext
text/x-wiki
== පුරාතන ඉංග්රීසි ==
=== නාම පදය ===
{{en-noun}}
# {{rfdef|en}}
11dnm5t3ywko0bdlsx61ojbbu4hcr7r
235615
235614
2026-06-07T02:26:16Z
Lee
19
235615
wikitext
text/x-wiki
== පුරාතන ඉංග්රීසි ==
=== නාම පදය ===
{{ang-noun}}
# {{rfdef|ang}}
sio8refs2mu244p7744h67ao7zlamal
235616
235615
2026-06-07T02:26:50Z
Lee
19
235616
wikitext
text/x-wiki
== පුරාතන ඉංග්රීසි ==
=== නිරුක්තිය ===
{{rfe|ang}}
=== නාම පදය ===
{{ang-noun}}
# {{rfdef|ang}}
n7y75v8n21mrfqidos3cxwadk56qs0t
outlaw
0
144186
235617
2026-04-22T22:17:44Z
en>Netizen3102
0
/* Verb */ archive
235617
wikitext
text/x-wiki
{{also|Outlaw|-out-law}}
==English==
{{wp}}
[[File:Tim Pollard as Robin Hood.jpg|thumb|right|Robin Hood, an '''outlaw''' in English folklore.]]
[[File:Wanted Jesse James.jpg|thumb|right|A wanted poster for Jesse James, an American '''outlaw'''.]]
===Etymology===
From {{inh|en|enm|outlawe}}, {{m|enm|outlagh}}, {{m|enm|utlaȝe}}, from {{inh|en|ang|ūtlaga|t=outlaw}}, borrowed from {{der|en|non|útlagi|t=outlaw, fugitive}}, equivalent to {{af|en|out-|law}}. Cognate with {{cog|is|útlagi|t=outlaw}}.
===Pronunciation===
* {{IPA|en|/ˈaʊt.lɔː/|a=UK}}
** {{rhymes|en|aʊtlɔː|s=2}}
* {{IPA|en|/ˈaʊt.lɔ/|a=US}}
* {{IPA|en|/ˈaʊt.lɑ/|a=cot-caught}}
* {{IPA|en|/ˈæɔt.loː/|a=AU}}
** {{audio|en|En-au-outlaw.ogg|a=AU}}
===Noun===
{{en-noun}}
# {{senseid|en|fugitive}} A [[fugitive]] from the [[law]].
#* {{quote-book|en|year=1956|author=w:C. S. Lewis|title=w:The Last Battle|publisher=Collins|year_published=1998|chapter=5
|passage=“I am going to a certain tower, one of three that were built in my grandsire’s time to guard Lantern Waste against certain perilous '''outlaws''' who dwelled there in his day. {{...}}"}}
# {{senseid|en|criminal}} {{lb|en|history}} A [[criminal]] who is excluded from normal [[legal]] [[rights]]; one who can be [[kill]]ed [[at will]] without legal [[penalty]].
# {{senseid|en|person who operates outside established norms}} A person who operates outside established [[norms]].
#: {{ux|en|The main character in the play was a bit of an '''outlaw''' who refused to shake hands or say thank you.}}
# {{senseid|en|wild animal}} A [[wild]] or [[violent]] [[animal]], such as a [[horse]].
# {{lb|en|humorous}} An [[in-law]]: a relative by marriage.
# {{lb|en|humorous}} One who would be an [[in-law]] except that the marriage-like relationship is unofficial.
# {{senseid|en|prostitute}} {{lb|en|slang}} A [[prostitute]] who works [[alone]], without a [[pimp]].
#* {{quote-text|en|year=1977|author=Joseph Julian|title=Social Problems|page=463
|passage=Without a pimp, she was an "'''outlaw'''," likely to be harassed, or threatened with assault or robbery on the street.}}
#* {{quote-text|en|year=2010|author=Lawrence Block|title=Eight Million Ways To Die
|passage=She was an '''outlaw'''. Chance is doing some double-checking to see if she had a pimp nobody knew about, but it doesn't look likely.}}
====Synonyms====
* {{sense|fugitive}} {{l|en|absconder}}, {{l|en|fugitive}}
* {{sense|criminal}} {{l|en|bandit}}, {{l|en|wolf's head}}
* {{sense|person who operates outside established norms}} {{l|en|anti-hero}}, {{l|en|deviant}}
====Hypernyms====
* {{sense|criminal}} {{see thesaurus|en|criminal}}
* {{sense|prostitute}} {{see thesaurus|en|prostitute}}
====Derived terms====
{{col|en|outlawdom|outlawism|outlawness|outlawry|outlaw state
|outlaw country|outlawish}}
====Translations====
{{trans-top-see|a fugitive from the law|fugitive|bandit}}
* Bulgarian: {{t+|bg|беглец|m}}
* Chinese:
*: Mandarin: {{t+|cmn|逃犯|tr=táofàn}}, {{t+|cmn|亡命徒|tr=wángmìngtú}}
* Danish: {{t+|da|fredløs|c}}
* Dutch: {{t+|nl|vogelvrije}}
* Esperanto: {{t|eo|eksterleĝulo}}, {{t|eo|eksterleĝulino}}
* Estonian: {{t|et|lindprii}}
* Finnish: {{t+|fi|lainsuojaton}}
* French: {{t+|fr|hors-la-loi}}
* Galician: {{t|gl|gallofo|m}}, {{t|gl|foraxido|m}}
* German: {{t+|de|Verfemter|m}} {{qualifier|rare}}, {{t+|de|Outlaw|m}}, {{t+|de|Gesetzloser|m}}
* Greek: {{t+|el|παράνομος|m}}, {{t+|el|φυγάς|m}}
* Hungarian: {{t|hu|törvényen kívüli}}
* Icelandic: {{t|is|útlagi|m}}, {{t|is|útilegumaður}}
* Italian: {{t+|it|fuorilegge|m}}
* Japanese: {{t+|ja|逃亡者|tr=とうぼうしゃ, tōbōsha}}, {{t|ja|逃亡犯|tr=とうぼうはん, tōbōhan}}, {{t+|ja|逃走者|tr=とうそうしゃ, tōsōsha}}, {{t|ja|逃走犯|tr=とうそうはん, tōsōhan}}
* Latin: {{t|la|proscriptus|m}}
* Macedonian: {{t|mk|бе́галец|m}}, {{t|mk|одметник|m}}
* Māori: {{t|mi|tangata hara}}
* Norman: {{t|nrf|proscrit|m}}
* Old English: {{t|ang|ūtlaga|m}}
* Portuguese: {{t|pt|fora de lei|m|f}}, {{t|pt|fora da lei|m|f}}, {{t+|pt|foragido|m}}
* Romanian: {{t+|ro|fugar|m}}
* Russian: {{t+|ru|престу́пник|m}}, {{t+|ru|престу́пница|f}}, {{t+|ru|разбо́йник|m}}, {{t+|ru|разбо́йница|f}}
* Serbo-Croatian:
*: Latin: {{t+|sh|razbojnik|m}}, {{t+|sh|odmetnik|m}}, {{t|sh|izopćenik|m}}
* Spanish: {{t+|es|forajido|m}}
* Swedish: {{t+|sv|bandit|c}}
* Tagalog: {{t|tl|taunlabas}}
* Welsh: {{t|cy|gŵr deol|m}}
{{trans-bottom}}
{{trans-top|person without legal rights}}
* Danish: {{t+|da|fredløs|c}}
* Dutch: {{t+|nl|vogelvrije}}
* Finnish: {{t+|fi|lainsuojaton}}
* German: {{t+|de|Ächtung}}
* Middle English: {{t|enm|outlawe}}
* Romanian: {{t|ro|persoană fără de lege|f}}
* Russian: {{t+|ru|изго́й|m}}, {{t+|ru|изгна́нник|m}}, {{t+|ru|изгна́нница|f}}, {{t+|ru|отве́рженный|m}}, {{t+|ru|отверженный|f|alt=отве́рженная}}
* Spanish: {{t+|es|proscripto|m}}, {{t+|es|proscrito|m}}
* Swedish: {{t+|sv|fredlös|c}}
{{trans-bottom}}
{{trans-top|wild horse}}
* Bulgarian: {{t|bg|мустанг|m}}
* Chinese:
*: Mandarin: {{t+|cmn|野馬|tr=yěmǎ}}
* Finnish: {{t+|fi|villihevonen}}
* Greek: {{t|el|αγριάλογο|n}}
* Macedonian: {{t|mk|му́станг|m}}
* Russian: {{t|ru|[[дикий|ди́кая]] [[ло́шадь]]|f}}
{{trans-bottom}}
===See also===
* {{l|en|scofflaw}}
===Verb===
{{en-verb}}
# {{lb|en|transitive}} To [[declare]] [[illegal]].
# {{lb|en|transitive}} To [[place]] a [[ban]] upon.
#* {{quote-journal|en|date=2016-08-15|url=http://www.bbc.co.uk/news/uk-37080682|title='Zombie knives' ban to come into force|work=w:BBC News|passage=The legal change in England and Wales will '''outlaw''' selling, manufacturing, renting or importing zombie knives.|archiveurl=https://web.archive.org/web/20230830180246/https://www.bbc.com/news/uk-37080682}}
#* {{quote-journal|en|author=Michael Fanone|title=Opinion: Here’s the reason people tell me they want to buy an AR-15. And it’s simply ludicrous|magazine=w:CNN|url=https://www.cnn.com/2022/06/05/opinions/guns-ar-15-uvalde-school-shooting-fanone/index.html|date=2022-06-05|passage=And '''outlawing''' these AR-15s would not require confiscating them from people who already have them. Once you’ve made these weapons illegal, anyone found with one would be subject to arrest, since possession of these weapons would be a crime. I think it’s likely that you would see a lot of people opting to turn them in.|archiveurl=https://web.archive.org/web/20230830045650/https://www.cnn.com/2022/06/05/opinions/guns-ar-15-uvalde-school-shooting-fanone/index.html}}
# {{lb|en|transitive}} To make or declare (a person) an outlaw.
#* {{quote-book|en|title=The Saga of Erik the Red|translator=John Sephton|year=1880|text=Eirik and his people were '''outlawed''' at Thorsnes Thing.}}
#* {{quote-journal|en|date=11 Feb 78|volume=5|number=31|journal=Gay Community News|page=5|title=Controversy and Boycott Must Continue|author=Donald Cameron Scot|text=AB has now gone beyond her original stance against gays as teachers and is now advocating a ''federal law'' to '''outlaw''' gays, a law which would override state law in the 19 states which have consenting adults sex laws.}}
# {{lb|en|transitive}} To [[remove]] from [[legal]] [[jurisdiction]] or [[enforcement]].
#: {{ux|en|to '''outlaw''' a debt or claim}}
# To [[deprive]] of legal [[force]].
#* {{RQ:Fuller Worthies of England|passage=our English common law was '''outlawed''' in those parts.}}
====Translations====
{{trans-top|to declare illegal}}
* Bulgarian: {{t|bg|обявявам извън закона}}
* Chinese:
*: Mandarin: {{t|cmn|[[宣告]][[非法]]|tr=xuāngào fēifǎ}}
* Danish: {{t|da|kriminalisere}}
* Finnish: {{t|fi|[[julistaa]] [[laittomaksi]]}}, {{t+|fi|kieltää}}
* German: {{t+|de|ächten}}
* Icelandic: {{t|is|útlægja}}
* Old English: {{t|ang|ūtlagian}}
* Russian: {{t|ru|[[объявля́ть]] [[вне]] [[закон|зако́на]]|impf}}
* Spanish: {{t+|es|ilegalizar}}
* Swedish: {{t+|sv|kriminalisera}}
{{trans-bottom}}
{{trans-top|to place a ban on}}
* Bulgarian: {{t|bg|острахирам}}
* Danish: {{t|da|banlyse}}
* German: {{t+|de|verbannen}}
* Icelandic: {{t|is|útlægja}}
* Old English: {{t|ang|ūtlagian}}
* Swedish: {{t+|sv|bannlysa}}
{{trans-bottom}}
====See also====
* {{l|en|criminalize}}
* {{l|en|felonize}}
* {{l|en|misdemeanorize}}
===Further reading===
* {{R:Webster 1913}}
* {{R:Century 1911}}
* {{R:OneLook}}
{{C|en|Crime|People|Prostitution|Stock characters}}
6o5n6cg4mzem6x4309ta38ilm49x8mo
235618
235617
2026-06-07T02:29:10Z
Lee
19
[[:en:outlaw]] වෙතින් එක් සංශෝධනයක්
235617
wikitext
text/x-wiki
{{also|Outlaw|-out-law}}
==English==
{{wp}}
[[File:Tim Pollard as Robin Hood.jpg|thumb|right|Robin Hood, an '''outlaw''' in English folklore.]]
[[File:Wanted Jesse James.jpg|thumb|right|A wanted poster for Jesse James, an American '''outlaw'''.]]
===Etymology===
From {{inh|en|enm|outlawe}}, {{m|enm|outlagh}}, {{m|enm|utlaȝe}}, from {{inh|en|ang|ūtlaga|t=outlaw}}, borrowed from {{der|en|non|útlagi|t=outlaw, fugitive}}, equivalent to {{af|en|out-|law}}. Cognate with {{cog|is|útlagi|t=outlaw}}.
===Pronunciation===
* {{IPA|en|/ˈaʊt.lɔː/|a=UK}}
** {{rhymes|en|aʊtlɔː|s=2}}
* {{IPA|en|/ˈaʊt.lɔ/|a=US}}
* {{IPA|en|/ˈaʊt.lɑ/|a=cot-caught}}
* {{IPA|en|/ˈæɔt.loː/|a=AU}}
** {{audio|en|En-au-outlaw.ogg|a=AU}}
===Noun===
{{en-noun}}
# {{senseid|en|fugitive}} A [[fugitive]] from the [[law]].
#* {{quote-book|en|year=1956|author=w:C. S. Lewis|title=w:The Last Battle|publisher=Collins|year_published=1998|chapter=5
|passage=“I am going to a certain tower, one of three that were built in my grandsire’s time to guard Lantern Waste against certain perilous '''outlaws''' who dwelled there in his day. {{...}}"}}
# {{senseid|en|criminal}} {{lb|en|history}} A [[criminal]] who is excluded from normal [[legal]] [[rights]]; one who can be [[kill]]ed [[at will]] without legal [[penalty]].
# {{senseid|en|person who operates outside established norms}} A person who operates outside established [[norms]].
#: {{ux|en|The main character in the play was a bit of an '''outlaw''' who refused to shake hands or say thank you.}}
# {{senseid|en|wild animal}} A [[wild]] or [[violent]] [[animal]], such as a [[horse]].
# {{lb|en|humorous}} An [[in-law]]: a relative by marriage.
# {{lb|en|humorous}} One who would be an [[in-law]] except that the marriage-like relationship is unofficial.
# {{senseid|en|prostitute}} {{lb|en|slang}} A [[prostitute]] who works [[alone]], without a [[pimp]].
#* {{quote-text|en|year=1977|author=Joseph Julian|title=Social Problems|page=463
|passage=Without a pimp, she was an "'''outlaw'''," likely to be harassed, or threatened with assault or robbery on the street.}}
#* {{quote-text|en|year=2010|author=Lawrence Block|title=Eight Million Ways To Die
|passage=She was an '''outlaw'''. Chance is doing some double-checking to see if she had a pimp nobody knew about, but it doesn't look likely.}}
====Synonyms====
* {{sense|fugitive}} {{l|en|absconder}}, {{l|en|fugitive}}
* {{sense|criminal}} {{l|en|bandit}}, {{l|en|wolf's head}}
* {{sense|person who operates outside established norms}} {{l|en|anti-hero}}, {{l|en|deviant}}
====Hypernyms====
* {{sense|criminal}} {{see thesaurus|en|criminal}}
* {{sense|prostitute}} {{see thesaurus|en|prostitute}}
====Derived terms====
{{col|en|outlawdom|outlawism|outlawness|outlawry|outlaw state
|outlaw country|outlawish}}
====Translations====
{{trans-top-see|a fugitive from the law|fugitive|bandit}}
* Bulgarian: {{t+|bg|беглец|m}}
* Chinese:
*: Mandarin: {{t+|cmn|逃犯|tr=táofàn}}, {{t+|cmn|亡命徒|tr=wángmìngtú}}
* Danish: {{t+|da|fredløs|c}}
* Dutch: {{t+|nl|vogelvrije}}
* Esperanto: {{t|eo|eksterleĝulo}}, {{t|eo|eksterleĝulino}}
* Estonian: {{t|et|lindprii}}
* Finnish: {{t+|fi|lainsuojaton}}
* French: {{t+|fr|hors-la-loi}}
* Galician: {{t|gl|gallofo|m}}, {{t|gl|foraxido|m}}
* German: {{t+|de|Verfemter|m}} {{qualifier|rare}}, {{t+|de|Outlaw|m}}, {{t+|de|Gesetzloser|m}}
* Greek: {{t+|el|παράνομος|m}}, {{t+|el|φυγάς|m}}
* Hungarian: {{t|hu|törvényen kívüli}}
* Icelandic: {{t|is|útlagi|m}}, {{t|is|útilegumaður}}
* Italian: {{t+|it|fuorilegge|m}}
* Japanese: {{t+|ja|逃亡者|tr=とうぼうしゃ, tōbōsha}}, {{t|ja|逃亡犯|tr=とうぼうはん, tōbōhan}}, {{t+|ja|逃走者|tr=とうそうしゃ, tōsōsha}}, {{t|ja|逃走犯|tr=とうそうはん, tōsōhan}}
* Latin: {{t|la|proscriptus|m}}
* Macedonian: {{t|mk|бе́галец|m}}, {{t|mk|одметник|m}}
* Māori: {{t|mi|tangata hara}}
* Norman: {{t|nrf|proscrit|m}}
* Old English: {{t|ang|ūtlaga|m}}
* Portuguese: {{t|pt|fora de lei|m|f}}, {{t|pt|fora da lei|m|f}}, {{t+|pt|foragido|m}}
* Romanian: {{t+|ro|fugar|m}}
* Russian: {{t+|ru|престу́пник|m}}, {{t+|ru|престу́пница|f}}, {{t+|ru|разбо́йник|m}}, {{t+|ru|разбо́йница|f}}
* Serbo-Croatian:
*: Latin: {{t+|sh|razbojnik|m}}, {{t+|sh|odmetnik|m}}, {{t|sh|izopćenik|m}}
* Spanish: {{t+|es|forajido|m}}
* Swedish: {{t+|sv|bandit|c}}
* Tagalog: {{t|tl|taunlabas}}
* Welsh: {{t|cy|gŵr deol|m}}
{{trans-bottom}}
{{trans-top|person without legal rights}}
* Danish: {{t+|da|fredløs|c}}
* Dutch: {{t+|nl|vogelvrije}}
* Finnish: {{t+|fi|lainsuojaton}}
* German: {{t+|de|Ächtung}}
* Middle English: {{t|enm|outlawe}}
* Romanian: {{t|ro|persoană fără de lege|f}}
* Russian: {{t+|ru|изго́й|m}}, {{t+|ru|изгна́нник|m}}, {{t+|ru|изгна́нница|f}}, {{t+|ru|отве́рженный|m}}, {{t+|ru|отверженный|f|alt=отве́рженная}}
* Spanish: {{t+|es|proscripto|m}}, {{t+|es|proscrito|m}}
* Swedish: {{t+|sv|fredlös|c}}
{{trans-bottom}}
{{trans-top|wild horse}}
* Bulgarian: {{t|bg|мустанг|m}}
* Chinese:
*: Mandarin: {{t+|cmn|野馬|tr=yěmǎ}}
* Finnish: {{t+|fi|villihevonen}}
* Greek: {{t|el|αγριάλογο|n}}
* Macedonian: {{t|mk|му́станг|m}}
* Russian: {{t|ru|[[дикий|ди́кая]] [[ло́шадь]]|f}}
{{trans-bottom}}
===See also===
* {{l|en|scofflaw}}
===Verb===
{{en-verb}}
# {{lb|en|transitive}} To [[declare]] [[illegal]].
# {{lb|en|transitive}} To [[place]] a [[ban]] upon.
#* {{quote-journal|en|date=2016-08-15|url=http://www.bbc.co.uk/news/uk-37080682|title='Zombie knives' ban to come into force|work=w:BBC News|passage=The legal change in England and Wales will '''outlaw''' selling, manufacturing, renting or importing zombie knives.|archiveurl=https://web.archive.org/web/20230830180246/https://www.bbc.com/news/uk-37080682}}
#* {{quote-journal|en|author=Michael Fanone|title=Opinion: Here’s the reason people tell me they want to buy an AR-15. And it’s simply ludicrous|magazine=w:CNN|url=https://www.cnn.com/2022/06/05/opinions/guns-ar-15-uvalde-school-shooting-fanone/index.html|date=2022-06-05|passage=And '''outlawing''' these AR-15s would not require confiscating them from people who already have them. Once you’ve made these weapons illegal, anyone found with one would be subject to arrest, since possession of these weapons would be a crime. I think it’s likely that you would see a lot of people opting to turn them in.|archiveurl=https://web.archive.org/web/20230830045650/https://www.cnn.com/2022/06/05/opinions/guns-ar-15-uvalde-school-shooting-fanone/index.html}}
# {{lb|en|transitive}} To make or declare (a person) an outlaw.
#* {{quote-book|en|title=The Saga of Erik the Red|translator=John Sephton|year=1880|text=Eirik and his people were '''outlawed''' at Thorsnes Thing.}}
#* {{quote-journal|en|date=11 Feb 78|volume=5|number=31|journal=Gay Community News|page=5|title=Controversy and Boycott Must Continue|author=Donald Cameron Scot|text=AB has now gone beyond her original stance against gays as teachers and is now advocating a ''federal law'' to '''outlaw''' gays, a law which would override state law in the 19 states which have consenting adults sex laws.}}
# {{lb|en|transitive}} To [[remove]] from [[legal]] [[jurisdiction]] or [[enforcement]].
#: {{ux|en|to '''outlaw''' a debt or claim}}
# To [[deprive]] of legal [[force]].
#* {{RQ:Fuller Worthies of England|passage=our English common law was '''outlawed''' in those parts.}}
====Translations====
{{trans-top|to declare illegal}}
* Bulgarian: {{t|bg|обявявам извън закона}}
* Chinese:
*: Mandarin: {{t|cmn|[[宣告]][[非法]]|tr=xuāngào fēifǎ}}
* Danish: {{t|da|kriminalisere}}
* Finnish: {{t|fi|[[julistaa]] [[laittomaksi]]}}, {{t+|fi|kieltää}}
* German: {{t+|de|ächten}}
* Icelandic: {{t|is|útlægja}}
* Old English: {{t|ang|ūtlagian}}
* Russian: {{t|ru|[[объявля́ть]] [[вне]] [[закон|зако́на]]|impf}}
* Spanish: {{t+|es|ilegalizar}}
* Swedish: {{t+|sv|kriminalisera}}
{{trans-bottom}}
{{trans-top|to place a ban on}}
* Bulgarian: {{t|bg|острахирам}}
* Danish: {{t|da|banlyse}}
* German: {{t+|de|verbannen}}
* Icelandic: {{t|is|útlægja}}
* Old English: {{t|ang|ūtlagian}}
* Swedish: {{t+|sv|bannlysa}}
{{trans-bottom}}
====See also====
* {{l|en|criminalize}}
* {{l|en|felonize}}
* {{l|en|misdemeanorize}}
===Further reading===
* {{R:Webster 1913}}
* {{R:Century 1911}}
* {{R:OneLook}}
{{C|en|Crime|People|Prostitution|Stock characters}}
6o5n6cg4mzem6x4309ta38ilm49x8mo
235667
235618
2026-06-07T05:16:04Z
Pinthura
2424
යොමු තොරතුරු පරිවර්තනය
235667
wikitext
text/x-wiki
{{also|Outlaw|-out-law}}
== ඉංග්රීසි ==
{{wp}}
[[File:Tim Pollard as Robin Hood.jpg|thumb|right|Robin Hood, an '''outlaw''' in English folklore.]]
[[File:Wanted Jesse James.jpg|thumb|right|A wanted poster for Jesse James, an American '''outlaw'''.]]
=== නිරුක්තිය ===
From {{inh|en|enm|outlawe}}, {{m|enm|outlagh}}, {{m|enm|utlaȝe}}, from {{inh|en|ang|ūtlaga|t=outlaw}}, borrowed from {{der|en|non|útlagi|t=outlaw, fugitive}}, equivalent to {{af|en|out-|law}}. Cognate with {{cog|is|útlagi|t=outlaw}}.
=== උච්චාරණය ===
* {{IPA|en|/ˈaʊt.lɔː/|a=UK}}
** {{rhymes|en|aʊtlɔː|s=2}}
* {{IPA|en|/ˈaʊt.lɔ/|a=US}}
* {{IPA|en|/ˈaʊt.lɑ/|a=cot-caught}}
* {{IPA|en|/ˈæɔt.loː/|a=AU}}
** {{audio|en|En-au-outlaw.ogg|a=AU}}
=== නාම පදය ===
{{en-noun}}
# {{senseid|en|fugitive}} A [[fugitive]] from the [[law]].
#* {{quote-book|en|year=1956|author=w:C. S. Lewis|title=w:The Last Battle|publisher=Collins|year_published=1998|chapter=5
|passage=“I am going to a certain tower, one of three that were built in my grandsire’s time to guard Lantern Waste against certain perilous '''outlaws''' who dwelled there in his day. {{...}}"}}
# {{senseid|en|criminal}} {{lb|en|history}} A [[criminal]] who is excluded from normal [[legal]] [[rights]]; one who can be [[kill]]ed [[at will]] without legal [[penalty]].
# {{senseid|en|person who operates outside established norms}} A person who operates outside established [[norms]].
#: {{ux|en|The main character in the play was a bit of an '''outlaw''' who refused to shake hands or say thank you.}}
# {{senseid|en|wild animal}} A [[wild]] or [[violent]] [[animal]], such as a [[horse]].
# {{lb|en|humorous}} An [[in-law]]: a relative by marriage.
# {{lb|en|humorous}} One who would be an [[in-law]] except that the marriage-like relationship is unofficial.
# {{senseid|en|prostitute}} {{lb|en|slang}} A [[prostitute]] who works [[alone]], without a [[pimp]].
#* {{quote-text|en|year=1977|author=Joseph Julian|title=Social Problems|page=463
|passage=Without a pimp, she was an "'''outlaw'''," likely to be harassed, or threatened with assault or robbery on the street.}}
#* {{quote-text|en|year=2010|author=Lawrence Block|title=Eight Million Ways To Die
|passage=She was an '''outlaw'''. Chance is doing some double-checking to see if she had a pimp nobody knew about, but it doesn't look likely.}}
==== සමාන පද ====
* {{sense|fugitive}} {{l|en|absconder}}, {{l|en|fugitive}}
* {{sense|criminal}} {{l|en|bandit}}, {{l|en|wolf's head}}
* {{sense|person who operates outside established norms}} {{l|en|anti-hero}}, {{l|en|deviant}}
====Hypernyms====
* {{sense|criminal}} {{see thesaurus|en|criminal}}
* {{sense|prostitute}} {{see thesaurus|en|prostitute}}
==== ව්යුත්පන්න යෙදුම් ====
{{col|en|outlawdom|outlawism|outlawness|outlawry|outlaw state
|outlaw country|outlawish}}
==== පරිවර්තන ====
{{trans-top-see|a fugitive from the law|fugitive|bandit}}
* Bulgarian: {{t+|bg|беглец|m}}
* Chinese:
*: Mandarin: {{t+|cmn|逃犯|tr=táofàn}}, {{t+|cmn|亡命徒|tr=wángmìngtú}}
* Danish: {{t+|da|fredløs|c}}
* Dutch: {{t+|nl|vogelvrije}}
* Esperanto: {{t|eo|eksterleĝulo}}, {{t|eo|eksterleĝulino}}
* Estonian: {{t|et|lindprii}}
* Finnish: {{t+|fi|lainsuojaton}}
* French: {{t+|fr|hors-la-loi}}
* Galician: {{t|gl|gallofo|m}}, {{t|gl|foraxido|m}}
* German: {{t+|de|Verfemter|m}} {{qualifier|rare}}, {{t+|de|Outlaw|m}}, {{t+|de|Gesetzloser|m}}
* Greek: {{t+|el|παράνομος|m}}, {{t+|el|φυγάς|m}}
* Hungarian: {{t|hu|törvényen kívüli}}
* Icelandic: {{t|is|útlagi|m}}, {{t|is|útilegumaður}}
* Italian: {{t+|it|fuorilegge|m}}
* Japanese: {{t+|ja|逃亡者|tr=とうぼうしゃ, tōbōsha}}, {{t|ja|逃亡犯|tr=とうぼうはん, tōbōhan}}, {{t+|ja|逃走者|tr=とうそうしゃ, tōsōsha}}, {{t|ja|逃走犯|tr=とうそうはん, tōsōhan}}
* Latin: {{t|la|proscriptus|m}}
* Macedonian: {{t|mk|бе́галец|m}}, {{t|mk|одметник|m}}
* Māori: {{t|mi|tangata hara}}
* Norman: {{t|nrf|proscrit|m}}
* Old English: {{t|ang|ūtlaga|m}}
* Portuguese: {{t|pt|fora de lei|m|f}}, {{t|pt|fora da lei|m|f}}, {{t+|pt|foragido|m}}
* Romanian: {{t+|ro|fugar|m}}
* Russian: {{t+|ru|престу́пник|m}}, {{t+|ru|престу́пница|f}}, {{t+|ru|разбо́йник|m}}, {{t+|ru|разбо́йница|f}}
* Serbo-Croatian:
*: Latin: {{t+|sh|razbojnik|m}}, {{t+|sh|odmetnik|m}}, {{t|sh|izopćenik|m}}
* Spanish: {{t+|es|forajido|m}}
* Swedish: {{t+|sv|bandit|c}}
* Tagalog: {{t|tl|taunlabas}}
* Welsh: {{t|cy|gŵr deol|m}}
{{trans-bottom}}
{{trans-top|person without legal rights}}
* Danish: {{t+|da|fredløs|c}}
* Dutch: {{t+|nl|vogelvrije}}
* Finnish: {{t+|fi|lainsuojaton}}
* German: {{t+|de|Ächtung}}
* Middle English: {{t|enm|outlawe}}
* Romanian: {{t|ro|persoană fără de lege|f}}
* Russian: {{t+|ru|изго́й|m}}, {{t+|ru|изгна́нник|m}}, {{t+|ru|изгна́нница|f}}, {{t+|ru|отве́рженный|m}}, {{t+|ru|отверженный|f|alt=отве́рженная}}
* Spanish: {{t+|es|proscripto|m}}, {{t+|es|proscrito|m}}
* Swedish: {{t+|sv|fredlös|c}}
{{trans-bottom}}
{{trans-top|wild horse}}
* Bulgarian: {{t|bg|мустанг|m}}
* Chinese:
*: Mandarin: {{t+|cmn|野馬|tr=yěmǎ}}
* Finnish: {{t+|fi|villihevonen}}
* Greek: {{t|el|αγριάλογο|n}}
* Macedonian: {{t|mk|му́станг|m}}
* Russian: {{t|ru|[[дикий|ди́кая]] [[ло́шадь]]|f}}
{{trans-bottom}}
=== අමතර අවධානයට ===
* {{l|en|scofflaw}}
=== ක්රියා පදය ===
{{en-verb}}
# {{lb|en|transitive}} To [[declare]] [[illegal]].
# {{lb|en|transitive}} To [[place]] a [[ban]] upon.
#* {{quote-journal|en|date=2016-08-15|url=http://www.bbc.co.uk/news/uk-37080682|title='Zombie knives' ban to come into force|work=w:BBC News|passage=The legal change in England and Wales will '''outlaw''' selling, manufacturing, renting or importing zombie knives.|archiveurl=https://web.archive.org/web/20230830180246/https://www.bbc.com/news/uk-37080682}}
#* {{quote-journal|en|author=Michael Fanone|title=Opinion: Here’s the reason people tell me they want to buy an AR-15. And it’s simply ludicrous|magazine=w:CNN|url=https://www.cnn.com/2022/06/05/opinions/guns-ar-15-uvalde-school-shooting-fanone/index.html|date=2022-06-05|passage=And '''outlawing''' these AR-15s would not require confiscating them from people who already have them. Once you’ve made these weapons illegal, anyone found with one would be subject to arrest, since possession of these weapons would be a crime. I think it’s likely that you would see a lot of people opting to turn them in.|archiveurl=https://web.archive.org/web/20230830045650/https://www.cnn.com/2022/06/05/opinions/guns-ar-15-uvalde-school-shooting-fanone/index.html}}
# {{lb|en|transitive}} To make or declare (a person) an outlaw.
#* {{quote-book|en|title=The Saga of Erik the Red|translator=John Sephton|year=1880|text=Eirik and his people were '''outlawed''' at Thorsnes Thing.}}
#* {{quote-journal|en|date=11 Feb 78|volume=5|number=31|journal=Gay Community News|page=5|title=Controversy and Boycott Must Continue|author=Donald Cameron Scot|text=AB has now gone beyond her original stance against gays as teachers and is now advocating a ''federal law'' to '''outlaw''' gays, a law which would override state law in the 19 states which have consenting adults sex laws.}}
# {{lb|en|transitive}} To [[remove]] from [[legal]] [[jurisdiction]] or [[enforcement]].
#: {{ux|en|to '''outlaw''' a debt or claim}}
# To [[deprive]] of legal [[force]].
#* {{RQ:Fuller Worthies of England|passage=our English common law was '''outlawed''' in those parts.}}
==== පරිවර්තන ====
{{trans-top|to declare illegal}}
* Bulgarian: {{t|bg|обявявам извън закона}}
* Chinese:
*: Mandarin: {{t|cmn|[[宣告]][[非法]]|tr=xuāngào fēifǎ}}
* Danish: {{t|da|kriminalisere}}
* Finnish: {{t|fi|[[julistaa]] [[laittomaksi]]}}, {{t+|fi|kieltää}}
* German: {{t+|de|ächten}}
* Icelandic: {{t|is|útlægja}}
* Old English: {{t|ang|ūtlagian}}
* Russian: {{t|ru|[[объявля́ть]] [[вне]] [[закон|зако́на]]|impf}}
* Spanish: {{t+|es|ilegalizar}}
* Swedish: {{t+|sv|kriminalisera}}
{{trans-bottom}}
{{trans-top|to place a ban on}}
* Bulgarian: {{t|bg|острахирам}}
* Danish: {{t|da|banlyse}}
* German: {{t+|de|verbannen}}
* Icelandic: {{t|is|útlægja}}
* Old English: {{t|ang|ūtlagian}}
* Swedish: {{t+|sv|bannlysa}}
{{trans-bottom}}
==== අමතර අවධානයට ====
* {{l|en|criminalize}}
* {{l|en|felonize}}
* {{l|en|misdemeanorize}}
=== වැඩිදුර් කියවීම සඳහා ===
* {{R:Webster 1913}}
* {{R:Century 1911}}
* {{R:OneLook}}
{{C|en|Crime|People|Prostitution|Stock characters}}
3mqjjtexaojn0uqrvwsf3iuyevcs5tp
outlaws
0
144187
235619
2024-06-02T22:51:18Z
en>WingerBot
0
replace <* {{audio|en|LL-Q1860 (eng)-Wodencafe-outlaws.wav|Audio (US)}}> with <* {{audio|en|LL-Q1860 (eng)-Wodencafe-outlaws.wav|a=US}}> (clean up audio captions)
235619
wikitext
text/x-wiki
==English==
===Pronunciation===
* {{audio|en|LL-Q1860 (eng)-Wodencafe-outlaws.wav|a=US}}
===Noun===
{{head|en|noun form}}
# {{plural of|en|outlaw}}
===Verb===
{{head|en|verb form}}
# {{infl of|en|outlaw||s-verb-form}}
0pt664015enj240lpkt7ls7ceayt91z
235620
235619
2026-06-07T02:29:15Z
Lee
19
[[:en:outlaws]] වෙතින් එක් සංශෝධනයක්
235619
wikitext
text/x-wiki
==English==
===Pronunciation===
* {{audio|en|LL-Q1860 (eng)-Wodencafe-outlaws.wav|a=US}}
===Noun===
{{head|en|noun form}}
# {{plural of|en|outlaw}}
===Verb===
{{head|en|verb form}}
# {{infl of|en|outlaw||s-verb-form}}
0pt664015enj240lpkt7ls7ceayt91z
235666
235620
2026-06-07T05:15:54Z
Pinthura
2424
යොමු තොරතුරු පරිවර්තනය
235666
wikitext
text/x-wiki
== ඉංග්රීසි ==
=== උච්චාරණය ===
* {{audio|en|LL-Q1860 (eng)-Wodencafe-outlaws.wav|a=US}}
=== නාම පදය ===
{{head|en|noun form}}
# {{plural of|en|outlaw}}
=== ක්රියා පදය ===
{{head|en|verb form}}
# {{infl of|en|outlaw||s-verb-form}}
czxlgex4utenfrwgxae4le9b9dwf65r
සැකිල්ල:ang-noun
10
144188
235621
2026-04-15T09:11:13Z
en>Surjection
0
Changed protection settings for "[[Template:ang-noun]]": Highly visible template/module ([Edit=Allow only autopatrollers] (indefinite) [Move=Allow only autopatrollers] (indefinite))
235621
wikitext
text/x-wiki
{{#invoke:ang-headword|show|nouns}}<noinclude>{{documentation}}</noinclude>
o34yz291seqb0o8y1ogrfmuyq3ve1j0
235622
235621
2026-06-07T04:50:43Z
Lee
19
[[:en:Template:ang-noun]] වෙතින් එක් සංශෝධනයක්
235621
wikitext
text/x-wiki
{{#invoke:ang-headword|show|nouns}}<noinclude>{{documentation}}</noinclude>
o34yz291seqb0o8y1ogrfmuyq3ve1j0
සැකිල්ල:ang-noun/documentation
10
144189
235623
2025-07-06T05:20:32Z
en>WingerBot
0
use {{hwcat}} instead of manual headword-line categorization, misc cleanups (manually assisted)
235623
wikitext
text/x-wiki
{{documentation subpage}}
==Usage==
; <code>head=</code>
: Use this to specify alternative display (for diacritics, etc.). Default is <nowiki>{{PAGENAME}}</nowiki>.
; <code>1=</code>
: The gender (''m'', ''f'', ''n'' etc.). See [[Module:gender and number]].
; <code>2=</code>
: Plural form. No default, only appears when specified. This can contain macrons, they are removed automatically from the linked page name.
; <code>pl2=</code>
: The second plural form. No default, only appears when specified.
'''Example:''' (''on page [[dran#Old English|dran]]'')
{{temp|ang-noun|head{{=}}drān|m|drāne|pl2{{=}}drāna}}
''this gives:''
{{ang-noun|head=drān|m|drāne|pl2=drāna}}
{{hwcat}}
kiq5nuago812czdbi7kee0sxroz8bku
235624
235623
2026-06-07T04:51:12Z
Lee
19
[[:en:Template:ang-noun/documentation]] වෙතින් එක් සංශෝධනයක්
235623
wikitext
text/x-wiki
{{documentation subpage}}
==Usage==
; <code>head=</code>
: Use this to specify alternative display (for diacritics, etc.). Default is <nowiki>{{PAGENAME}}</nowiki>.
; <code>1=</code>
: The gender (''m'', ''f'', ''n'' etc.). See [[Module:gender and number]].
; <code>2=</code>
: Plural form. No default, only appears when specified. This can contain macrons, they are removed automatically from the linked page name.
; <code>pl2=</code>
: The second plural form. No default, only appears when specified.
'''Example:''' (''on page [[dran#Old English|dran]]'')
{{temp|ang-noun|head{{=}}drān|m|drāne|pl2{{=}}drāna}}
''this gives:''
{{ang-noun|head=drān|m|drāne|pl2=drāna}}
{{hwcat}}
kiq5nuago812czdbi7kee0sxroz8bku
Module:ang-headword
828
144190
235625
2025-11-21T23:14:08Z
en>Benwing2
0
don't add reconstructed terms to 'reconstructed POS' per [[Wiktionary:Beer_parlour/2025/November#categories_like_Category:Latin_reconstructed_nouns]]
235625
Scribunto
text/plain
local export = {}
local pos_functions = {}
local lang = require("Module:languages").getByCode("ang")
local insert = table.insert
local remove = table.remove
local function get_plaintext(...)
get_plaintext = require("Module:utilities").get_plaintext
return get_plaintext(...)
end
local function track(page)
require("Module:debug").track("ang-headword/" .. page)
return true
end
local function glossary_link(anchor, text)
text = text or anchor
return "[[Appendix:Glossary#" .. anchor .. "|" .. text .. "]]"
end
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
local NAMESPACE = mw.title.getCurrentTitle().nsText
-- unused
-- local PAGENAME = mw.loadData("Module:headword/data").pagename
local iparams = {
[1] = {required = true},
["def"] = true,
["suff_type"] = true,
}
local iargs = require("Module:parameters").process(frame.args, iparams)
local args = frame:getParent().args
local poscat = iargs[1]
local def = iargs.def
local suff_type = iargs.suff_type
local postype = nil
if suff_type then
postype = poscat .. "-" .. suff_type
else
postype = poscat
end
local data = {
lang = lang,
heads = {},
genders = {},
inflections = {},
categories = {},
no_redundant_head_cat = true, -- we want the headword specified to specify whether it has long vowels
}
if poscat == "suffixes" then
insert(data.categories, "Old English " .. suff_type .. "-forming suffixes")
end
if pos_functions[postype] then
local new_poscat = pos_functions[postype](def, args, data)
if new_poscat then
poscat = new_poscat
end
end
data.pos_category = poscat
return require("Module:headword").full_headword(data)
end
local function validate_genders(genders)
for _, gspec in ipairs(genders) do
local g = gspec.spec
if g ~= "m" and g ~= "f" and g ~= "n" and g ~= "m-p" and g ~= "f-p" and g ~= "n-p" and g ~= "?" then
error("Invalid gender: " .. g)
end
end
end
pos_functions["nouns"] = function(def, args, data)
local params = {
["head"] = {list = true},
["id"] = true,
[1] = {type = "genders", list = "g", flatten = true, disallow_holes = true},
["g"] = {alias_of = 1, list = false},
[2] = {list = "pl", disallow_holes = true},
}
local args = require("Module:parameters").process(args, params)
data.heads = args.head
data.id = args.id
validate_genders(args[1])
data.genders = args[1]
local pl = args[2]
if pl[1] then
pl.label = "nominative plural"
insert(data.inflections, pl)
end
end
pos_functions["proper nouns"] = pos_functions["nouns"]
pos_functions["verbs"] = function(def, args, data)
local params = {
[1] = {alias_of = "head", list = false},
["head"] = {list = true},
["id"] = true,
}
local args = require("Module:parameters").process(args, params)
data.heads = args.head
data.id = args.id
end
local function adjectives(pos, def, args, data)
local list = {list = true}
local params = {
[1] = {alias_of = "head", list = false},
["head"] = list,
["comp"] = list,
[2] = {alias_of = "comp", list = false},
["sup"] = list,
[3] = {alias_of = "sup", list = false},
["adv"] = list,
["indecl"] = {type = "boolean"},
["id"] = true,
}
local args = require("Module:parameters").process(args, params)
data.heads = args.head
data.id = args.id
if args.indecl then
insert(data.inflections, {label = glossary_link("indeclinable")})
end
local comp = args.comp
if #comp > 0 then
comp.label = "comparative"
insert(data.inflections, comp)
end
local sup = args.sup
if #sup > 0 then
sup.label = "superlative"
insert(data.inflections, sup)
end
if #args.adv > 0 then
args.adv.label = "adverb"
insert(data.inflections, args.adv)
end
end
pos_functions["adjectives"] = function(def, args, data)
return adjectives("adjectives", def, args, data)
end
pos_functions["participles"] = function(def, args, data)
return adjectives("participles", def, args, data)
end
pos_functions["determiners"] = function(def, args, data)
return adjectives("determiners", def, args, data)
end
pos_functions["pronouns"] = function(def, args, data)
return adjectives("pronouns", def, args, data)
end
pos_functions["suffixes-adjective"] = function(def, args, data)
return adjectives("suffixes", def, args, data)
end
pos_functions["numerals-adjective"] = function(def, args, data)
return adjectives("numerals", def, args, data)
end
pos_functions["adverbs"] = function(def, args, data)
local list = {list = true}
local params = {
[1] = {alias_of = "head", list = false},
[2] = {alias_of = "comp", list = false},
[3] = {alias_of = "sup", list = false},
["head"] = list,
["comp"] = list,
["sup"] = list,
["id"] = true,
}
local args = require("Module:parameters").process(args, params)
data.heads = args.head
data.id = args.id
local comp, sup
if args.comp[1] == "-" then
comp = "-"
elseif #args.comp > 0 then
args.comp.label = glossary_link("comparative")
comp = args.comp
end
if args.comp[1] == "-" or args.sup[1] == "-" then
sup = "-"
elseif #args.sup > 0 then
args.sup.label = glossary_link("superlative")
sup = args.sup
end
if comp == "-" then
insert(data.inflections, {label = "not " .. glossary_link("comparable")})
insert(data.categories, "Old English uncomparable adverbs")
else
insert(data.inflections, comp)
end
if sup == "-" then
if comp ~= "-" then
insert(data.inflections, {label = "no " .. glossary_link("superlative")})
end
else
insert(data.inflections, sup)
end
end
pos_functions["suffixes-adverb"] = pos_functions["adverbs"]
local function get_forms(forms)
if #forms == 0 then
return nil
end
local i, attested = 1, false
while true do
local form = forms[i]
if form == nil then
return forms, attested
elseif form == "-" then
remove(forms, i)
else
if not (attested or get_plaintext(form):sub(1, 1) == "*") then
attested = true
end
i = i + 1
end
end
end
local function degree(pos, deg, other_arg, other_label, args, data)
local boolean = {type = "boolean"}
local list = {list = true}
local params = {
[1] = {alias_of = "head", list = false},
["head"] = list,
["positive"] = list,
[other_arg] = list,
["indecl"] = boolean,
["id"] = true,
}
local args = require("Module:parameters").process(args, params)
data.heads = args.head
data.id = args.id
if args.indecl then
insert(data.inflections, {label = glossary_link("indeclinable")})
end
local positive, positive_attested = get_forms(args.positive)
if positive then
if not positive_attested then
insert(data.categories, "Old English " .. deg .. "-only " .. pos)
end
if #positive > 0 then
args.positive.label = "positive"
insert(data.inflections, args.positive)
else
insert(data.inflections, {label = "no positive form"})
end
end
local other = get_forms(args[other_arg])
if other then
if #other > 0 then
args[other_arg].label = other_label
insert(data.inflections, args[other_arg])
else
insert(data.inflections, {label = "no " .. other_label .. " form"})
end
end
-- If a lemma, return the primary part of speech ("adjectives" or
-- "adverbs"), so that the term is categorized in "Old English adjectives"
-- or "Old English adverbs". Otherwise, return nothing, so that the term
-- goes in the relevant non-lemma category (e.g. "Old English comparative
-- adjectives"), and into "Old English non-lemma forms".
if positive and not positive_attested then
return pos
end
end
pos_functions["comparative adjectives"] = function(def, args, data)
return degree("adjectives", "comparative", "sup", "superlative", args, data)
end
pos_functions["superlative adjectives"] = function(def, args, data)
return degree("adjectives", "superlative", "comp", "comparative", args, data)
end
pos_functions["comparative adverbs"] = function(def, args, data)
return degree("adverbs", "comparative", "sup", "superlative", args, data)
end
pos_functions["superlative adverbs"] = function(def, args, data)
return degree("adverbs", "superlative", "comp", "comparative", args, data)
end
local function non_lemma_forms(def, args, data)
local params = {
[1] = {required = true, default = def}, -- headword or cases
["head"] = {list = true, require_index = true},
["g"] = {list = true},
["id"] = true,
}
local args = require("Module:parameters").process(args, params)
local heads = {args[1]}
for _, head in ipairs(args.head) do
insert(heads, head)
end
data.heads = heads
data.genders = args.g
data.id = args.id
end
pos_functions["noun forms"] = non_lemma_forms
pos_functions["proper noun forms"] = non_lemma_forms
pos_functions["pronoun forms"] = non_lemma_forms
pos_functions["verb forms"] = non_lemma_forms
pos_functions["adjective forms"] = non_lemma_forms
pos_functions["participle forms"] = non_lemma_forms
pos_functions["determiner forms"] = non_lemma_forms
pos_functions["numeral forms"] = non_lemma_forms
pos_functions["suffix forms"] = non_lemma_forms
return export
8rm183yhaougjiapgy1o5zen3ojx6oa
235626
235625
2026-06-07T04:52:02Z
Lee
19
[[:en:Module:ang-headword]] වෙතින් එක් සංශෝධනයක්
235625
Scribunto
text/plain
local export = {}
local pos_functions = {}
local lang = require("Module:languages").getByCode("ang")
local insert = table.insert
local remove = table.remove
local function get_plaintext(...)
get_plaintext = require("Module:utilities").get_plaintext
return get_plaintext(...)
end
local function track(page)
require("Module:debug").track("ang-headword/" .. page)
return true
end
local function glossary_link(anchor, text)
text = text or anchor
return "[[Appendix:Glossary#" .. anchor .. "|" .. text .. "]]"
end
-- The main entry point.
-- This is the only function that can be invoked from a template.
function export.show(frame)
local NAMESPACE = mw.title.getCurrentTitle().nsText
-- unused
-- local PAGENAME = mw.loadData("Module:headword/data").pagename
local iparams = {
[1] = {required = true},
["def"] = true,
["suff_type"] = true,
}
local iargs = require("Module:parameters").process(frame.args, iparams)
local args = frame:getParent().args
local poscat = iargs[1]
local def = iargs.def
local suff_type = iargs.suff_type
local postype = nil
if suff_type then
postype = poscat .. "-" .. suff_type
else
postype = poscat
end
local data = {
lang = lang,
heads = {},
genders = {},
inflections = {},
categories = {},
no_redundant_head_cat = true, -- we want the headword specified to specify whether it has long vowels
}
if poscat == "suffixes" then
insert(data.categories, "Old English " .. suff_type .. "-forming suffixes")
end
if pos_functions[postype] then
local new_poscat = pos_functions[postype](def, args, data)
if new_poscat then
poscat = new_poscat
end
end
data.pos_category = poscat
return require("Module:headword").full_headword(data)
end
local function validate_genders(genders)
for _, gspec in ipairs(genders) do
local g = gspec.spec
if g ~= "m" and g ~= "f" and g ~= "n" and g ~= "m-p" and g ~= "f-p" and g ~= "n-p" and g ~= "?" then
error("Invalid gender: " .. g)
end
end
end
pos_functions["nouns"] = function(def, args, data)
local params = {
["head"] = {list = true},
["id"] = true,
[1] = {type = "genders", list = "g", flatten = true, disallow_holes = true},
["g"] = {alias_of = 1, list = false},
[2] = {list = "pl", disallow_holes = true},
}
local args = require("Module:parameters").process(args, params)
data.heads = args.head
data.id = args.id
validate_genders(args[1])
data.genders = args[1]
local pl = args[2]
if pl[1] then
pl.label = "nominative plural"
insert(data.inflections, pl)
end
end
pos_functions["proper nouns"] = pos_functions["nouns"]
pos_functions["verbs"] = function(def, args, data)
local params = {
[1] = {alias_of = "head", list = false},
["head"] = {list = true},
["id"] = true,
}
local args = require("Module:parameters").process(args, params)
data.heads = args.head
data.id = args.id
end
local function adjectives(pos, def, args, data)
local list = {list = true}
local params = {
[1] = {alias_of = "head", list = false},
["head"] = list,
["comp"] = list,
[2] = {alias_of = "comp", list = false},
["sup"] = list,
[3] = {alias_of = "sup", list = false},
["adv"] = list,
["indecl"] = {type = "boolean"},
["id"] = true,
}
local args = require("Module:parameters").process(args, params)
data.heads = args.head
data.id = args.id
if args.indecl then
insert(data.inflections, {label = glossary_link("indeclinable")})
end
local comp = args.comp
if #comp > 0 then
comp.label = "comparative"
insert(data.inflections, comp)
end
local sup = args.sup
if #sup > 0 then
sup.label = "superlative"
insert(data.inflections, sup)
end
if #args.adv > 0 then
args.adv.label = "adverb"
insert(data.inflections, args.adv)
end
end
pos_functions["adjectives"] = function(def, args, data)
return adjectives("adjectives", def, args, data)
end
pos_functions["participles"] = function(def, args, data)
return adjectives("participles", def, args, data)
end
pos_functions["determiners"] = function(def, args, data)
return adjectives("determiners", def, args, data)
end
pos_functions["pronouns"] = function(def, args, data)
return adjectives("pronouns", def, args, data)
end
pos_functions["suffixes-adjective"] = function(def, args, data)
return adjectives("suffixes", def, args, data)
end
pos_functions["numerals-adjective"] = function(def, args, data)
return adjectives("numerals", def, args, data)
end
pos_functions["adverbs"] = function(def, args, data)
local list = {list = true}
local params = {
[1] = {alias_of = "head", list = false},
[2] = {alias_of = "comp", list = false},
[3] = {alias_of = "sup", list = false},
["head"] = list,
["comp"] = list,
["sup"] = list,
["id"] = true,
}
local args = require("Module:parameters").process(args, params)
data.heads = args.head
data.id = args.id
local comp, sup
if args.comp[1] == "-" then
comp = "-"
elseif #args.comp > 0 then
args.comp.label = glossary_link("comparative")
comp = args.comp
end
if args.comp[1] == "-" or args.sup[1] == "-" then
sup = "-"
elseif #args.sup > 0 then
args.sup.label = glossary_link("superlative")
sup = args.sup
end
if comp == "-" then
insert(data.inflections, {label = "not " .. glossary_link("comparable")})
insert(data.categories, "Old English uncomparable adverbs")
else
insert(data.inflections, comp)
end
if sup == "-" then
if comp ~= "-" then
insert(data.inflections, {label = "no " .. glossary_link("superlative")})
end
else
insert(data.inflections, sup)
end
end
pos_functions["suffixes-adverb"] = pos_functions["adverbs"]
local function get_forms(forms)
if #forms == 0 then
return nil
end
local i, attested = 1, false
while true do
local form = forms[i]
if form == nil then
return forms, attested
elseif form == "-" then
remove(forms, i)
else
if not (attested or get_plaintext(form):sub(1, 1) == "*") then
attested = true
end
i = i + 1
end
end
end
local function degree(pos, deg, other_arg, other_label, args, data)
local boolean = {type = "boolean"}
local list = {list = true}
local params = {
[1] = {alias_of = "head", list = false},
["head"] = list,
["positive"] = list,
[other_arg] = list,
["indecl"] = boolean,
["id"] = true,
}
local args = require("Module:parameters").process(args, params)
data.heads = args.head
data.id = args.id
if args.indecl then
insert(data.inflections, {label = glossary_link("indeclinable")})
end
local positive, positive_attested = get_forms(args.positive)
if positive then
if not positive_attested then
insert(data.categories, "Old English " .. deg .. "-only " .. pos)
end
if #positive > 0 then
args.positive.label = "positive"
insert(data.inflections, args.positive)
else
insert(data.inflections, {label = "no positive form"})
end
end
local other = get_forms(args[other_arg])
if other then
if #other > 0 then
args[other_arg].label = other_label
insert(data.inflections, args[other_arg])
else
insert(data.inflections, {label = "no " .. other_label .. " form"})
end
end
-- If a lemma, return the primary part of speech ("adjectives" or
-- "adverbs"), so that the term is categorized in "Old English adjectives"
-- or "Old English adverbs". Otherwise, return nothing, so that the term
-- goes in the relevant non-lemma category (e.g. "Old English comparative
-- adjectives"), and into "Old English non-lemma forms".
if positive and not positive_attested then
return pos
end
end
pos_functions["comparative adjectives"] = function(def, args, data)
return degree("adjectives", "comparative", "sup", "superlative", args, data)
end
pos_functions["superlative adjectives"] = function(def, args, data)
return degree("adjectives", "superlative", "comp", "comparative", args, data)
end
pos_functions["comparative adverbs"] = function(def, args, data)
return degree("adverbs", "comparative", "sup", "superlative", args, data)
end
pos_functions["superlative adverbs"] = function(def, args, data)
return degree("adverbs", "superlative", "comp", "comparative", args, data)
end
local function non_lemma_forms(def, args, data)
local params = {
[1] = {required = true, default = def}, -- headword or cases
["head"] = {list = true, require_index = true},
["g"] = {list = true},
["id"] = true,
}
local args = require("Module:parameters").process(args, params)
local heads = {args[1]}
for _, head in ipairs(args.head) do
insert(heads, head)
end
data.heads = heads
data.genders = args.g
data.id = args.id
end
pos_functions["noun forms"] = non_lemma_forms
pos_functions["proper noun forms"] = non_lemma_forms
pos_functions["pronoun forms"] = non_lemma_forms
pos_functions["verb forms"] = non_lemma_forms
pos_functions["adjective forms"] = non_lemma_forms
pos_functions["participle forms"] = non_lemma_forms
pos_functions["determiner forms"] = non_lemma_forms
pos_functions["numeral forms"] = non_lemma_forms
pos_functions["suffix forms"] = non_lemma_forms
return export
8rm183yhaougjiapgy1o5zen3ojx6oa
සැකිල්ල:ang-decl-noun-a-n
10
144191
235627
2025-11-13T18:55:35Z
en>AutoDooz
0
no existing calls with bad parameters, throw error instead of warning to avoid future misuse
235627
wikitext
text/x-wiki
{{#invoke:checkparams|error}}<!-- Validate template parameters
-->{{ang-decl-noun<!--
-->|type=strong ''a''-stem<!--
-->|1={{{nomsg|{{{1}}}}}}<!--
-->|3={{{nomsg|{{{1}}}}}}<!--
-->|5={{{1}}}{{#if:{{{vowel|}}}||e}}s<!--
-->|7={{{datsg|{{{1}}}{{#if:{{{vowel|}}}||e}}}}}<!--
-->|2={{#if:{{{short|}}}|{{{2|{{{1}}}}}}{{#if:{{{vowel|}}}||u}}|{{{nomsg|{{{2|{{{1}}}}}}}}}}}<!--
-->|4={{#if:{{{short|}}}|{{{2|{{{1}}}}}}{{#if:{{{vowel|}}}||u}}|{{{nomsg|{{{2|{{{1}}}}}}}}}}}<!--
-->|6={{{2|{{{1}}}}}}{{#if:{{{vowel|}}}|n}}a<!--
-->|8={{{2|{{{1}}}}}}{{#if:{{{vowel|}}}||u}}m{{#if:{{{vowel|}}}|,{{{2|{{{1}}}}}}um}}<!--
-->|num={{{num|}}}<!--
-->|title={{{title|}}}<!--
-->}}<!--
-->{{cln|ang|neuter a-stem nouns}}<!--
--><noinclude>{{documentation}}</noinclude>
7lekjiluuj7dd7p3vflzj1f7a4envzy
235628
235627
2026-06-07T04:54:24Z
Lee
19
[[:en:Template:ang-decl-noun-a-n]] වෙතින් එක් සංශෝධනයක්
235627
wikitext
text/x-wiki
{{#invoke:checkparams|error}}<!-- Validate template parameters
-->{{ang-decl-noun<!--
-->|type=strong ''a''-stem<!--
-->|1={{{nomsg|{{{1}}}}}}<!--
-->|3={{{nomsg|{{{1}}}}}}<!--
-->|5={{{1}}}{{#if:{{{vowel|}}}||e}}s<!--
-->|7={{{datsg|{{{1}}}{{#if:{{{vowel|}}}||e}}}}}<!--
-->|2={{#if:{{{short|}}}|{{{2|{{{1}}}}}}{{#if:{{{vowel|}}}||u}}|{{{nomsg|{{{2|{{{1}}}}}}}}}}}<!--
-->|4={{#if:{{{short|}}}|{{{2|{{{1}}}}}}{{#if:{{{vowel|}}}||u}}|{{{nomsg|{{{2|{{{1}}}}}}}}}}}<!--
-->|6={{{2|{{{1}}}}}}{{#if:{{{vowel|}}}|n}}a<!--
-->|8={{{2|{{{1}}}}}}{{#if:{{{vowel|}}}||u}}m{{#if:{{{vowel|}}}|,{{{2|{{{1}}}}}}um}}<!--
-->|num={{{num|}}}<!--
-->|title={{{title|}}}<!--
-->}}<!--
-->{{cln|ang|neuter a-stem nouns}}<!--
--><noinclude>{{documentation}}</noinclude>
7lekjiluuj7dd7p3vflzj1f7a4envzy
සැකිල්ල:ang-decl-noun-a-n/documentation
10
144192
235629
2013-11-20T20:22:53Z
en>Rua
0
Created page with "{{documentation subpage}} {{documentation needed}}<!-- Replace this with a short description of the purpose of the template, and how to use it. --> <includeonly> Category:Ol..."
235629
wikitext
text/x-wiki
{{documentation subpage}}
{{documentation needed}}<!-- Replace this with a short description of the purpose of the template, and how to use it. -->
<includeonly>
[[Category:Old English noun inflection-table templates|a-n]]
</includeonly>
eg8cs255qv5map6k5dv0ek101ick65p
235630
235629
2026-06-07T04:55:54Z
Lee
19
[[:en:Template:ang-decl-noun-a-n/documentation]] වෙතින් එක් සංශෝධනයක්
235629
wikitext
text/x-wiki
{{documentation subpage}}
{{documentation needed}}<!-- Replace this with a short description of the purpose of the template, and how to use it. -->
<includeonly>
[[Category:Old English noun inflection-table templates|a-n]]
</includeonly>
eg8cs255qv5map6k5dv0ek101ick65p
සැකිල්ල:ang-decl-noun
10
144193
235631
2024-04-27T12:31:29Z
en>SurjectionBot
0
Protected "[[Template:ang-decl-noun]]": (bot) automatically protect highly visible templates/modules (reference score: 1999+ >= 1000) ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite))
235631
wikitext
text/x-wiki
{{#invoke:ang-noun|make_table}}<!--
--><noinclude>{{documentation}}</noinclude>
hs3z8byefav9f7spfhd975yslulzz9v
235632
235631
2026-06-07T05:00:20Z
Lee
19
[[:en:Template:ang-decl-noun]] වෙතින් එක් සංශෝධනයක්
235631
wikitext
text/x-wiki
{{#invoke:ang-noun|make_table}}<!--
--><noinclude>{{documentation}}</noinclude>
hs3z8byefav9f7spfhd975yslulzz9v
සැකිල්ල:ang-decl-noun/documentation
10
144194
235633
2021-09-25T12:21:04Z
en>Winthrop23
0
235633
wikitext
text/x-wiki
{{documentation subpage}}
===Usage===
This template is designed to show the full inflection of Old English nouns, including proper nouns. It should be used directly under the ====Declension==== header. It takes the following parameters
; {{para|1}}
: Nominative singular
; {{para|2}}
: Nominative plural
; {{para|3}}
: Accusative singular
; {{para|4}}
: Accusative plural
; {{para|5}}
: Genitive singular
; {{para|6}}
: Genitive plural
; {{para|7}}
: Dative singular
; {{para|8}}
: Dative plural
; {{para|g|opt=1}} or {{para|gender|opt=1}}
: Gender (<code>m</code>, <code>f</code> or <code>n</code>)
; {{para|num|opt=1}}
: Number restriction (<code>sg</code> or <code>pl</code>)
Multiple forms can be specified by separating them with a comma, and they will be properly linked. Thus, wikilinks (<nowiki>[[]]</nowiki>) should not be used.
===See also===
* [[:Category:Old English noun inflection-table templates]]
<includeonly>
[[Category:Old English noun inflection-table templates| ]]
</includeonly>
nlxqfq7rz9oyv23pea7gy7ev7iqd52d
235634
235633
2026-06-07T05:00:40Z
Lee
19
[[:en:Template:ang-decl-noun/documentation]] වෙතින් එක් සංශෝධනයක්
235633
wikitext
text/x-wiki
{{documentation subpage}}
===Usage===
This template is designed to show the full inflection of Old English nouns, including proper nouns. It should be used directly under the ====Declension==== header. It takes the following parameters
; {{para|1}}
: Nominative singular
; {{para|2}}
: Nominative plural
; {{para|3}}
: Accusative singular
; {{para|4}}
: Accusative plural
; {{para|5}}
: Genitive singular
; {{para|6}}
: Genitive plural
; {{para|7}}
: Dative singular
; {{para|8}}
: Dative plural
; {{para|g|opt=1}} or {{para|gender|opt=1}}
: Gender (<code>m</code>, <code>f</code> or <code>n</code>)
; {{para|num|opt=1}}
: Number restriction (<code>sg</code> or <code>pl</code>)
Multiple forms can be specified by separating them with a comma, and they will be properly linked. Thus, wikilinks (<nowiki>[[]]</nowiki>) should not be used.
===See also===
* [[:Category:Old English noun inflection-table templates]]
<includeonly>
[[Category:Old English noun inflection-table templates| ]]
</includeonly>
nlxqfq7rz9oyv23pea7gy7ev7iqd52d
සැකිල්ල:ang-decl-noun/sandbox
10
144195
235635
2024-08-26T10:30:19Z
en>Feondulf
0
235635
wikitext
text/x-wiki
{{#invoke:ang-noun/sandbox|make_table}}<!--
--><noinclude>{{documentation}}</noinclude>
hviu6r7gsoamlhskijebm07nmyttppj
235636
235635
2026-06-07T05:01:00Z
Lee
19
[[:en:Template:ang-decl-noun/sandbox]] වෙතින් එක් සංශෝධනයක්
235635
wikitext
text/x-wiki
{{#invoke:ang-noun/sandbox|make_table}}<!--
--><noinclude>{{documentation}}</noinclude>
hviu6r7gsoamlhskijebm07nmyttppj
සැකිල්ල:ang-prep
10
144196
235637
2025-09-05T15:14:30Z
en>AutoDooz
0
no existing calls with bad parameters, throw error instead of warning to avoid future misuse
235637
wikitext
text/x-wiki
{{#invoke:checkparams|error}}<!-- Validate template parameters
-->{{head|ang|preposition|head={{{head|}}}|sort={{{sort|}}}}}<!--
--><noinclude>{{documentation}}</noinclude>
8256ywpjfw4n6ce37ihil688b4lw5h0
235638
235637
2026-06-07T05:01:19Z
Lee
19
[[:en:Template:ang-prep]] වෙතින් එක් සංශෝධනයක්
235637
wikitext
text/x-wiki
{{#invoke:checkparams|error}}<!-- Validate template parameters
-->{{head|ang|preposition|head={{{head|}}}|sort={{{sort|}}}}}<!--
--><noinclude>{{documentation}}</noinclude>
8256ywpjfw4n6ce37ihil688b4lw5h0
සැකිල්ල:ang-prep/documentation
10
144197
235639
2025-07-06T05:20:34Z
en>WingerBot
0
use {{hwcat}} instead of manual headword-line categorization, misc cleanups (manually assisted)
235639
wikitext
text/x-wiki
{{documentation subpage}}
{{documentation needed}}<!-- Replace this with a short description of the purpose of the template, and how to use it. -->
{{hwcat}}
f8u1ebax0fek1lf9jgky9pqli0yk03y
235640
235639
2026-06-07T05:01:42Z
Lee
19
[[:en:Template:ang-prep/documentation]] වෙතින් එක් සංශෝධනයක්
235639
wikitext
text/x-wiki
{{documentation subpage}}
{{documentation needed}}<!-- Replace this with a short description of the purpose of the template, and how to use it. -->
{{hwcat}}
f8u1ebax0fek1lf9jgky9pqli0yk03y
සැකිල්ල:ang-IPA
10
144198
235641
2026-04-15T08:27:25Z
en>Surjection
0
Changed protection settings for "[[Template:ang-IPA]]": Highly visible template/module ([Edit=Allow only autopatrollers] (indefinite) [Move=Allow only autopatrollers] (indefinite))
235641
wikitext
text/x-wiki
{{#invoke:ang-pron|show}}<!--
--><noinclude>{{documentation}}</noinclude>
8aw7mdvw7f3l2c8uvckwwljw3is47gn
235642
235641
2026-06-07T05:02:02Z
Lee
19
[[:en:Template:ang-IPA]] වෙතින් එක් සංශෝධනයක්
235641
wikitext
text/x-wiki
{{#invoke:ang-pron|show}}<!--
--><noinclude>{{documentation}}</noinclude>
8aw7mdvw7f3l2c8uvckwwljw3is47gn
සැකිල්ල:ang-IPA/documentation
10
144199
235643
2023-10-03T00:28:30Z
en>WingerBot
0
clean up pronunciation template categories (manually assisted)
235643
wikitext
text/x-wiki
{{documentation subpage}}
This template automatically generates pronunciation for Old English words, relying on [[Module:ang-pron]].
'''NOTE: This documentation is incomplete. Please contact [[User:Benwing2]] for questions.'''
==Usage==
Generally, you should supply the regular spelling of the word in {{para|1}}, properly marked up in lower case, with macrons for long vowels, and ċ ġ ċġ sċ for soft versions of these consonants. The module will automatically attempt to generate stress in the correct places, taking into account known prefixes and the {{para|pos}} parameter (see below). In addition, the following symbols can be used:
* acute accent on a vowel to override the position of primary stress (e.g. á ī́ ḗa)
* grave accent to add secondary stress (e.g. à ī̀ ḕa)
* circumflex to force no stress on the word or prefix, for example in a compound (e.g. â ī̂ ē̂a)
* <code>.</code> (period) to force a syllable boundary
* <code>-</code> (hyphen) to force a prefix/word or word/word boundary in a compound word; the result will be displayed as a single word but the consonants on either side treated as if they occurred at the beginning/end of the word
* <code>+</code> (plus) is the opposite of <code>-</code>; it forces a prefix/word or word/word boundary to '''NOT''' occur when it otherwise would
* <code><</code> (less-than) to indicate a boundary between a prefix and the main stem; this is similar to <code>-</code> but the prefix will always be unstressed
* <code>></code> (greater-than) to indicate a boundary between the main stem and a suffix; this is similar to <code>-</code> but the suffix will always be unstressed
* <code>[C]</code> (a single char between brackets) to force a particular allophone of {{IPAchar|/θ s f ɡ x i/}} (see below)
For optimal results, you may need to specify the part of speech using {{para|pos}}, either {{para|pos|noun}}, {{para|pos|adj}} (equivalent to {{para|pos|noun}}), {{para|pos|verb}}, or {{para|pos|verbal}} (for participles, verbal nouns in {{m|ang|-ing}}/{{m|ang|-ung}}, and words formed from participles or verbal nouns by adding {{m|ang|-nes}} or variants, {{m|ang|-līċ}} or {{m|ang|-līċe}}). The part of speech determines the recognized prefixes (see below) and the handling of those prefixes. Specifically, prefixes attached to verbs normally have no stress or secondary stress, while prefixes attached to nouns normally have primary stress, with the exception of {{m|ang|ġe-}}, {{m|ang|be-}} and {{m|ang|for-}}. Words with part of speech <code>verbal</code> behave like verbs except with respect to the prefix {{m|ang|un-}}, which bears primary stress in "verbals" but is unstressed in verbs.
===Parameters===
; {{para|1}}, {{para|2}}, etc.
: One or more respelled words or phrases, for which pronunciation will be generated.
; {{para|pos}}
: Part of speech (see above). This controls the handling of prefixes. Normally, this does not need to be specified, as it is autodetected.
; {{para|ann}}
: If specified, add a boldface "annotation" before the generated pronunciation(s). This should be used when there are multiple pronunciations listed in an etymology section that differ in macrons and/or presence or absence of ''ċ'' or ''ġ''. See {{m|ang|gripe}}/{{m|ang|grīpe}} for an example. The annotation identifies the spelling of the particular pronunciation(s) listed to the right. If {{para|ann|1}} is given, the annotation is generated from the respelling, with special respelling characters and stress accents removed. If any other value is given, it is used directly.
==Prefixes and suffixes==
The module will automatically recognize and split off common prefixes and suffixes. "Split off" means that a strong morpheme boundary will be inserted between the prefix/suffix and main component. This causes /f/, /g/, /s/, /þ/, /x/ next to the boundary to be treated as if they are at the beginning or end of a word, and ensures that the main component gets its own stress independently of the prefixes and suffixes (secondary stress a prefix has primary stress, otherwise primary stress). Multiple stacked prefixes/suffixes will be correctly split off if they occur.
The prefixes and suffixes that are recognized, and their stress behavior, depend on the inferred or explicitly specified part of speech of the word. There are three basic parts of speech used for this purpose: <code>noun</code> (which includes adjectives and other parts of speech besides verbs), <code>verb</code>, and <code>verbal</code>. "Verbals" include participles in {{m|ang|-ed}}, {{m|ang|-od}} or {{m|ang|-en}} and verbal nouns in {{m|ang|-ing}} or {{m|ang|-ung}}, as well as words formed from participles or verbal nouns by adding {{m|ang|-nes}} or variants, {{m|ang|-līċ}} or {{m|ang|-līċe}}. Examples of the latter are {{m|ang|ābroþennes}}, {{m|ang|āberendlīċ}}, and {{m|ang|ġetācniġendlīce}}. "Verbals" are treated as verbs for the purpose of prefix separation and stress assignment except in the case of {{m|ang|un-}}, where nouns and verbals get primary stress on the prefix while verbs get secondary stress on the prefix.
Normally you do not need to specify the part of speech explicitly. It is inferred based on the following rules:
* Words ending in ''-an'', ''-ān'', ''-ōn'', ''-ēon'', and ''-enne'' are inferred to be verbs.
* Words ending in ''-end'', ''-ende'', ''-ed'', ''-od'', ''-en'', ''-ing'', ''-ung'', or words ending one of these suffixes followed by one or more occurrences of any of the suffixes ''-l[iī][ċc]'', ''-l[iī][ċc]e'', ''-n[eiy]s'' or ''-n[eiy]ss'' (e.g. {{m|ang|ācennedlīċ||native}}, {{m|ang|tōmearcodnes||description}} and {{m|ang|unġedafenlīcnes||unfitness, inconvenience}}) are inferred to be verbals.
* All other words are inferred to be nouns.
Prefixes are not recognized in some circumstances, specifically:
* Some prefixes are only recognized for certain parts of speech (see table below).
* Some prefixes have a restriction that they can't be directly followed by ''a'', ''o'', ''ā'' or ''ō'' (this applies in particular to prefixes ending in ''-e'', such as {{m|ang|ġe-}}, and prevents e.g. {{m|ang|ġearwian}} or {{m|ang|beofor}} from being recognized as containing a prefix).
* Prefixes with any special characters or accents in them aren't recognized.
* Prefixes aren't recognized if directly followed by <code>+</code> (which indicates a non-boundary).
* Prefixes aren't recognized if not followed by at least one vowel (hence {{m|ang|betst}} is not recognized as containing {{m|ang|be-}} and {{m|ang|ford}} is not recognized as containing {{m|ang|for-}}).
* Prefixes aren't recognized if not followed by at least three letters (hence {{m|ang|inne}} is not recognized as containing {{m|ang|in-}}).
* Prefixes aren't recognized if directly followed by a cluster of consonants that are not an allowed word onset (hence {{m|ang|āxian}} is not recognized as containing {{m|ang|ā-}}, because ''x-'' is not a valid onset; likewise {{m|ang|bennian}} and {{m|ang|bercan}} are not recognized as containing {{m|ang|be-}}).
* Prefixes aren't recognized if directly followed by one or more consonants plus an explicit syllable division marker <code>.</code> (since splitting off the prefix would result in a syllable with no vowels).
Suffixes aren't recognized in similar circumstances, specifically:
* Some suffixes are only recognized for certain parts of speech (see table below).
* Suffixes with any special characters or accents in them aren't recognized.
* Suffixes aren't recognized if directly preceded by <code>+</code> (which indicates a non-boundary).
* Suffixes aren't recognized if not preceded by at least one vowel.
* Suffixes aren't recognized if the preceding text ends in an explicit syllable division marker <code>.</code> followed by at least one consonant (since splitting off the suffix would result in a syllable with no vowels).
The following is the complete list of prefixes recognized as of Dec 15, 2019:
{|class="wikitable"
! Prefix !! Verb/verbal behavior !! Noun behavior !! Notes
|-
| {{m|ang|ā-}} || no stress || primary stress ||
|-
| {{m|ang|æt-}} || no stress || (unrecognized) ||
|-
| {{m|ang|æfter-}} || secondary stress || primary stress ||
|-
| {{m|ang|and-}} || no stress || primary stress ||
|-
| {{m|ang|an-}} || no stress || primary stress ||
|-
| {{m|ang|be-}} || no stress || no stress || not when followed by ''a'', ''o'', ''ā'' or ''ō''
|-
| {{m|ang|bī-}} || (unrecognized) || primary stress ||
|-
| {{m|ang|ed-}} || no stress || primary stress ||
|-
| {{m|ang|fore-}} || no stress || primary stress || not when followed by ''a'', ''o'', ''ā'' or ''ō''
|-
| {{m|ang|forþ-}} || no stress || primary stress || also {{m|ang|forð-}}
|-
| {{m|ang|for-}} || no stress || no stress ||
|-
| {{m|ang|fram-}} || no stress || primary stress ||
|-
| {{m|ang|ġeond-}} || no stress || (unrecognized) ||
|-
| {{m|ang|ġe-}} || no stress || no stress || not when followed by ''a'', ''o'', ''ā'' or ''ō''
|-
| {{m|ang|in-}} || no stress || primary stress ||
|-
| {{m|ang|mis-}} || no stress || (unrecognized) ||
|-
| {{m|ang|ofer-}} || secondary stress || primary stress ||
|-
| {{m|ang|of-}} || no stress || primary stress ||
|-
| {{m|ang|on-}} || no stress || primary stress ||
|-
| {{m|ang|or-}} || (unrecognized) || primary stress ||
|-
| {{m|ang|oþ-}} || no stress || (unrecognized) || also {{m|ang|oð-}}
|-
| {{m|ang|stēop-}} || (unrecognized) || primary stress ||
|-
| {{m|ang|tō-}} || no stress || primary stress ||
|-
| {{m|ang|under-}} || secondary stress || primary stress ||
|-
| {{m|ang|un-}} || no stress || primary stress || primary stress in verbals
|-
| {{m|ang|up-}} || no stress || primary stress ||
|-
| {{m|ang|ūt-}} || no stress || primary stress ||
|-
| {{m|ang|ūþ-}} || (unrecognized) || primary stress || also {{m|ang|ūð-}}
|-
| {{m|ang|wiþer-}} || secondary stress || primary stress || also {{m|ang|wiðer-}} and corresponding variants with ''ƿ''
|-
| {{m|ang|wiþ-}} || no stress || (unrecognized) || also {{m|ang|wið-}} and corresponding variants with ''ƿ''
|-
| {{m|ang|ymb-}} || no stress || primary stress ||
|-
| {{m|ang|þurh-}} || no stress || primary stress || also {{m|ang|ðurh-}}
|}
Note the general pattern where prefixes are stressed as nouns but unstressed as verbs (where multisyllabic prefixes generally get secondary stress), and the fact that {{m|ang|be-}}, {{m|ang|for-}}, and {{m|ang|ġe-}} are exceptions in that they never receive stress. When stress is assigned to a multisyllabic prefix, it goes on the first syllable.
The following is the complete list of suffixes recognized as of Dec 15, 2019:
{|class="wikitable"
! Prefix !! Verb/verbal behavior !! Noun behavior !! Notes
|-
| {{m|ang|-bǣre}} || (unrecognized) || secondary stress ||
|-
| {{m|ang|-fæst}} || (unrecognized) || secondary stress ||
|-
| {{m|ang|-feald}} || (unrecognized) || secondary stress ||
|-
| {{m|ang|-ful}}, {{m|ang|-full}} || (unrecognized) || no stress ||
|-
| {{m|ang|-lēas}} || (unrecognized) || secondary stress ||
|-
| {{m|ang|-līċ}}, {{m|ang|-līc}}, {{m|ang|-liċ}}, {{m|ang|-lic}} || no stress || no stress ||
|-
| {{m|ang|-līċe}} || secondary stress || secondary stress ||
|-
| {{m|ang|-nes}}, {{m|ang|-ness}}, {{m|ang|-nis}}, {{m|ang|-nys}} || no stress || no stress ||
|-
| {{m|ang|-sum}} || (unrecognized) || no stress ||
|}
==Explicit allophones==
Occasionally you will need to force a particular allophone of a multi-allophone phoneme such as {{IPAchar|/s/}} to appear. An example is verbs ending in ''-sian''. These are special-cased to have the {{IPAchar|[s]}} allophone even following a voiced sound, which applies in most cases, but {{m|ang|clǣnsian||to cleanse}} and derivatives are exceptions, and have {{IPAchar|[z]}}. To force this, use a respelling with ''[z]'', e.g. ''clǣn[z]ian''.
Another example is verbs ending in ''-rian''. If directly preceded by a short front vowel, it is assumed to be weak class I and have phonemic /j/ for written ''i''. However, some verbs of this form are weak class II (e.g. {{m|ang|beterian}}), and are pronounced with phonemic /i/. To force this, use a respelling with ''[i]'', e.g. ''be+ter[i]an'' (we also need the ''+'' symbol to prevent ''be-'' from being interpreted as a prefix). The following explicit-allophone symbols are currently recognized:
* <code>[þ]</code> (voiceless allophone of {{IPAchar|/θ/}})
* <code>[ð]</code> (voiced allophone of {{IPAchar|/θ/}})
* <code>[s]</code> (voiceless allophone of {{IPAchar|/s/}})
* <code>[z]</code> (voiced allophone of {{IPAchar|/s/}})
* <code>[f]</code> (voiceless allophone of {{IPAchar|/f/}})
* <code>[v]</code> (voiced allophone of {{IPAchar|/f/}})
* <code>[g]</code> (stop allophone of {{IPAchar|/ɡ/}})
* <code>[ɣ]</code> (fricative allophone of {{IPAchar|/ɡ/}})
* <code>[x]</code> (velar fricative allophone of {{IPAchar|/x/}})
* <code>[ç]</code> (palatal fricative allophone of {{IPAchar|/x/}})
* <code>[h]</code> (glottal fricative allophone of {{IPAchar|/x/}})
* <code>[i]</code> (interpretation of written ''i'' as {{IPAchar|/i/}} not {{IPAchar|/j/}})
There is no <code>[j]</code>; use ''ġ'' to force a {{IPAchar|/j/}}.
<includeonly>
[[Category:Old English pronunciation templates|IPA]]
</includeonly>
2ulza2rrqqwiut6nv3pxbwlo2nd6ud3
235644
235643
2026-06-07T05:02:27Z
Lee
19
[[:en:Template:ang-IPA/documentation]] වෙතින් එක් සංශෝධනයක්
235643
wikitext
text/x-wiki
{{documentation subpage}}
This template automatically generates pronunciation for Old English words, relying on [[Module:ang-pron]].
'''NOTE: This documentation is incomplete. Please contact [[User:Benwing2]] for questions.'''
==Usage==
Generally, you should supply the regular spelling of the word in {{para|1}}, properly marked up in lower case, with macrons for long vowels, and ċ ġ ċġ sċ for soft versions of these consonants. The module will automatically attempt to generate stress in the correct places, taking into account known prefixes and the {{para|pos}} parameter (see below). In addition, the following symbols can be used:
* acute accent on a vowel to override the position of primary stress (e.g. á ī́ ḗa)
* grave accent to add secondary stress (e.g. à ī̀ ḕa)
* circumflex to force no stress on the word or prefix, for example in a compound (e.g. â ī̂ ē̂a)
* <code>.</code> (period) to force a syllable boundary
* <code>-</code> (hyphen) to force a prefix/word or word/word boundary in a compound word; the result will be displayed as a single word but the consonants on either side treated as if they occurred at the beginning/end of the word
* <code>+</code> (plus) is the opposite of <code>-</code>; it forces a prefix/word or word/word boundary to '''NOT''' occur when it otherwise would
* <code><</code> (less-than) to indicate a boundary between a prefix and the main stem; this is similar to <code>-</code> but the prefix will always be unstressed
* <code>></code> (greater-than) to indicate a boundary between the main stem and a suffix; this is similar to <code>-</code> but the suffix will always be unstressed
* <code>[C]</code> (a single char between brackets) to force a particular allophone of {{IPAchar|/θ s f ɡ x i/}} (see below)
For optimal results, you may need to specify the part of speech using {{para|pos}}, either {{para|pos|noun}}, {{para|pos|adj}} (equivalent to {{para|pos|noun}}), {{para|pos|verb}}, or {{para|pos|verbal}} (for participles, verbal nouns in {{m|ang|-ing}}/{{m|ang|-ung}}, and words formed from participles or verbal nouns by adding {{m|ang|-nes}} or variants, {{m|ang|-līċ}} or {{m|ang|-līċe}}). The part of speech determines the recognized prefixes (see below) and the handling of those prefixes. Specifically, prefixes attached to verbs normally have no stress or secondary stress, while prefixes attached to nouns normally have primary stress, with the exception of {{m|ang|ġe-}}, {{m|ang|be-}} and {{m|ang|for-}}. Words with part of speech <code>verbal</code> behave like verbs except with respect to the prefix {{m|ang|un-}}, which bears primary stress in "verbals" but is unstressed in verbs.
===Parameters===
; {{para|1}}, {{para|2}}, etc.
: One or more respelled words or phrases, for which pronunciation will be generated.
; {{para|pos}}
: Part of speech (see above). This controls the handling of prefixes. Normally, this does not need to be specified, as it is autodetected.
; {{para|ann}}
: If specified, add a boldface "annotation" before the generated pronunciation(s). This should be used when there are multiple pronunciations listed in an etymology section that differ in macrons and/or presence or absence of ''ċ'' or ''ġ''. See {{m|ang|gripe}}/{{m|ang|grīpe}} for an example. The annotation identifies the spelling of the particular pronunciation(s) listed to the right. If {{para|ann|1}} is given, the annotation is generated from the respelling, with special respelling characters and stress accents removed. If any other value is given, it is used directly.
==Prefixes and suffixes==
The module will automatically recognize and split off common prefixes and suffixes. "Split off" means that a strong morpheme boundary will be inserted between the prefix/suffix and main component. This causes /f/, /g/, /s/, /þ/, /x/ next to the boundary to be treated as if they are at the beginning or end of a word, and ensures that the main component gets its own stress independently of the prefixes and suffixes (secondary stress a prefix has primary stress, otherwise primary stress). Multiple stacked prefixes/suffixes will be correctly split off if they occur.
The prefixes and suffixes that are recognized, and their stress behavior, depend on the inferred or explicitly specified part of speech of the word. There are three basic parts of speech used for this purpose: <code>noun</code> (which includes adjectives and other parts of speech besides verbs), <code>verb</code>, and <code>verbal</code>. "Verbals" include participles in {{m|ang|-ed}}, {{m|ang|-od}} or {{m|ang|-en}} and verbal nouns in {{m|ang|-ing}} or {{m|ang|-ung}}, as well as words formed from participles or verbal nouns by adding {{m|ang|-nes}} or variants, {{m|ang|-līċ}} or {{m|ang|-līċe}}. Examples of the latter are {{m|ang|ābroþennes}}, {{m|ang|āberendlīċ}}, and {{m|ang|ġetācniġendlīce}}. "Verbals" are treated as verbs for the purpose of prefix separation and stress assignment except in the case of {{m|ang|un-}}, where nouns and verbals get primary stress on the prefix while verbs get secondary stress on the prefix.
Normally you do not need to specify the part of speech explicitly. It is inferred based on the following rules:
* Words ending in ''-an'', ''-ān'', ''-ōn'', ''-ēon'', and ''-enne'' are inferred to be verbs.
* Words ending in ''-end'', ''-ende'', ''-ed'', ''-od'', ''-en'', ''-ing'', ''-ung'', or words ending one of these suffixes followed by one or more occurrences of any of the suffixes ''-l[iī][ċc]'', ''-l[iī][ċc]e'', ''-n[eiy]s'' or ''-n[eiy]ss'' (e.g. {{m|ang|ācennedlīċ||native}}, {{m|ang|tōmearcodnes||description}} and {{m|ang|unġedafenlīcnes||unfitness, inconvenience}}) are inferred to be verbals.
* All other words are inferred to be nouns.
Prefixes are not recognized in some circumstances, specifically:
* Some prefixes are only recognized for certain parts of speech (see table below).
* Some prefixes have a restriction that they can't be directly followed by ''a'', ''o'', ''ā'' or ''ō'' (this applies in particular to prefixes ending in ''-e'', such as {{m|ang|ġe-}}, and prevents e.g. {{m|ang|ġearwian}} or {{m|ang|beofor}} from being recognized as containing a prefix).
* Prefixes with any special characters or accents in them aren't recognized.
* Prefixes aren't recognized if directly followed by <code>+</code> (which indicates a non-boundary).
* Prefixes aren't recognized if not followed by at least one vowel (hence {{m|ang|betst}} is not recognized as containing {{m|ang|be-}} and {{m|ang|ford}} is not recognized as containing {{m|ang|for-}}).
* Prefixes aren't recognized if not followed by at least three letters (hence {{m|ang|inne}} is not recognized as containing {{m|ang|in-}}).
* Prefixes aren't recognized if directly followed by a cluster of consonants that are not an allowed word onset (hence {{m|ang|āxian}} is not recognized as containing {{m|ang|ā-}}, because ''x-'' is not a valid onset; likewise {{m|ang|bennian}} and {{m|ang|bercan}} are not recognized as containing {{m|ang|be-}}).
* Prefixes aren't recognized if directly followed by one or more consonants plus an explicit syllable division marker <code>.</code> (since splitting off the prefix would result in a syllable with no vowels).
Suffixes aren't recognized in similar circumstances, specifically:
* Some suffixes are only recognized for certain parts of speech (see table below).
* Suffixes with any special characters or accents in them aren't recognized.
* Suffixes aren't recognized if directly preceded by <code>+</code> (which indicates a non-boundary).
* Suffixes aren't recognized if not preceded by at least one vowel.
* Suffixes aren't recognized if the preceding text ends in an explicit syllable division marker <code>.</code> followed by at least one consonant (since splitting off the suffix would result in a syllable with no vowels).
The following is the complete list of prefixes recognized as of Dec 15, 2019:
{|class="wikitable"
! Prefix !! Verb/verbal behavior !! Noun behavior !! Notes
|-
| {{m|ang|ā-}} || no stress || primary stress ||
|-
| {{m|ang|æt-}} || no stress || (unrecognized) ||
|-
| {{m|ang|æfter-}} || secondary stress || primary stress ||
|-
| {{m|ang|and-}} || no stress || primary stress ||
|-
| {{m|ang|an-}} || no stress || primary stress ||
|-
| {{m|ang|be-}} || no stress || no stress || not when followed by ''a'', ''o'', ''ā'' or ''ō''
|-
| {{m|ang|bī-}} || (unrecognized) || primary stress ||
|-
| {{m|ang|ed-}} || no stress || primary stress ||
|-
| {{m|ang|fore-}} || no stress || primary stress || not when followed by ''a'', ''o'', ''ā'' or ''ō''
|-
| {{m|ang|forþ-}} || no stress || primary stress || also {{m|ang|forð-}}
|-
| {{m|ang|for-}} || no stress || no stress ||
|-
| {{m|ang|fram-}} || no stress || primary stress ||
|-
| {{m|ang|ġeond-}} || no stress || (unrecognized) ||
|-
| {{m|ang|ġe-}} || no stress || no stress || not when followed by ''a'', ''o'', ''ā'' or ''ō''
|-
| {{m|ang|in-}} || no stress || primary stress ||
|-
| {{m|ang|mis-}} || no stress || (unrecognized) ||
|-
| {{m|ang|ofer-}} || secondary stress || primary stress ||
|-
| {{m|ang|of-}} || no stress || primary stress ||
|-
| {{m|ang|on-}} || no stress || primary stress ||
|-
| {{m|ang|or-}} || (unrecognized) || primary stress ||
|-
| {{m|ang|oþ-}} || no stress || (unrecognized) || also {{m|ang|oð-}}
|-
| {{m|ang|stēop-}} || (unrecognized) || primary stress ||
|-
| {{m|ang|tō-}} || no stress || primary stress ||
|-
| {{m|ang|under-}} || secondary stress || primary stress ||
|-
| {{m|ang|un-}} || no stress || primary stress || primary stress in verbals
|-
| {{m|ang|up-}} || no stress || primary stress ||
|-
| {{m|ang|ūt-}} || no stress || primary stress ||
|-
| {{m|ang|ūþ-}} || (unrecognized) || primary stress || also {{m|ang|ūð-}}
|-
| {{m|ang|wiþer-}} || secondary stress || primary stress || also {{m|ang|wiðer-}} and corresponding variants with ''ƿ''
|-
| {{m|ang|wiþ-}} || no stress || (unrecognized) || also {{m|ang|wið-}} and corresponding variants with ''ƿ''
|-
| {{m|ang|ymb-}} || no stress || primary stress ||
|-
| {{m|ang|þurh-}} || no stress || primary stress || also {{m|ang|ðurh-}}
|}
Note the general pattern where prefixes are stressed as nouns but unstressed as verbs (where multisyllabic prefixes generally get secondary stress), and the fact that {{m|ang|be-}}, {{m|ang|for-}}, and {{m|ang|ġe-}} are exceptions in that they never receive stress. When stress is assigned to a multisyllabic prefix, it goes on the first syllable.
The following is the complete list of suffixes recognized as of Dec 15, 2019:
{|class="wikitable"
! Prefix !! Verb/verbal behavior !! Noun behavior !! Notes
|-
| {{m|ang|-bǣre}} || (unrecognized) || secondary stress ||
|-
| {{m|ang|-fæst}} || (unrecognized) || secondary stress ||
|-
| {{m|ang|-feald}} || (unrecognized) || secondary stress ||
|-
| {{m|ang|-ful}}, {{m|ang|-full}} || (unrecognized) || no stress ||
|-
| {{m|ang|-lēas}} || (unrecognized) || secondary stress ||
|-
| {{m|ang|-līċ}}, {{m|ang|-līc}}, {{m|ang|-liċ}}, {{m|ang|-lic}} || no stress || no stress ||
|-
| {{m|ang|-līċe}} || secondary stress || secondary stress ||
|-
| {{m|ang|-nes}}, {{m|ang|-ness}}, {{m|ang|-nis}}, {{m|ang|-nys}} || no stress || no stress ||
|-
| {{m|ang|-sum}} || (unrecognized) || no stress ||
|}
==Explicit allophones==
Occasionally you will need to force a particular allophone of a multi-allophone phoneme such as {{IPAchar|/s/}} to appear. An example is verbs ending in ''-sian''. These are special-cased to have the {{IPAchar|[s]}} allophone even following a voiced sound, which applies in most cases, but {{m|ang|clǣnsian||to cleanse}} and derivatives are exceptions, and have {{IPAchar|[z]}}. To force this, use a respelling with ''[z]'', e.g. ''clǣn[z]ian''.
Another example is verbs ending in ''-rian''. If directly preceded by a short front vowel, it is assumed to be weak class I and have phonemic /j/ for written ''i''. However, some verbs of this form are weak class II (e.g. {{m|ang|beterian}}), and are pronounced with phonemic /i/. To force this, use a respelling with ''[i]'', e.g. ''be+ter[i]an'' (we also need the ''+'' symbol to prevent ''be-'' from being interpreted as a prefix). The following explicit-allophone symbols are currently recognized:
* <code>[þ]</code> (voiceless allophone of {{IPAchar|/θ/}})
* <code>[ð]</code> (voiced allophone of {{IPAchar|/θ/}})
* <code>[s]</code> (voiceless allophone of {{IPAchar|/s/}})
* <code>[z]</code> (voiced allophone of {{IPAchar|/s/}})
* <code>[f]</code> (voiceless allophone of {{IPAchar|/f/}})
* <code>[v]</code> (voiced allophone of {{IPAchar|/f/}})
* <code>[g]</code> (stop allophone of {{IPAchar|/ɡ/}})
* <code>[ɣ]</code> (fricative allophone of {{IPAchar|/ɡ/}})
* <code>[x]</code> (velar fricative allophone of {{IPAchar|/x/}})
* <code>[ç]</code> (palatal fricative allophone of {{IPAchar|/x/}})
* <code>[h]</code> (glottal fricative allophone of {{IPAchar|/x/}})
* <code>[i]</code> (interpretation of written ''i'' as {{IPAchar|/i/}} not {{IPAchar|/j/}})
There is no <code>[j]</code>; use ''ġ'' to force a {{IPAchar|/j/}}.
<includeonly>
[[Category:Old English pronunciation templates|IPA]]
</includeonly>
2ulza2rrqqwiut6nv3pxbwlo2nd6ud3
Module:ang-pron
828
144200
235645
2024-06-09T07:36:53Z
en>Benwing2
0
capturing_split() renamed to split()
235645
Scribunto
text/plain
--[=[
Implementation of pronunciation-generation module from spelling for
Old English.
Author: Benwing
Generally, the user should supply the spelling, properly marked up with
macrons for long vowels, and ċ ġ ċġ sċ for soft versions of these consonants.
In addition, the following symbols can be used:
-- acute accent on a vowel to override the position of primary stress
-- (in a diphthong, put it over the first vowel)
-- grave accent to add secondary stress
-- circumflex to force no stress on the word or prefix (e.g. in a compound)
-- . (period) to force a syllable boundary
-- - (hyphen) to force a prefix/word or word/word boundary in a compound word;
-- the result will be displayed as a single word but the consonants on
-- either side treated as if they occurred at the beginning/end of the word
-- + (plus) is the opposite of -; it forces a prefix/word or word/word boundary
-- to *NOT* occur when it otherwise would
-- _ (underscore) to force the letters on either side to be interpreted
-- independently, when the combination of the two would normally have a
-- special meaning
FIXME:
1. Implement < and > which works like - but don't trigger secondary stress
(< after a prefix, > before a suffix) (DONE)
2. Recognize -lēas and -l[iī][cċ] as suffixes. (DONE)
2b. Recognize -fæst, -ful, -full as suffixes (so no voicing of initial
fricative). (DONE)
3. If explicit syllable boundary in cluster after prefix, don't recognize as
prefix (hence ġeddung could be written ġed.dung, bedreda bed.reda) (DONE)
4. Two bugs in swīþfèrhþ: missing initial stress, front h should be back (DONE)
5. Check Urszag's code changes for /h/. (DONE)
6. Bug in wasċan; probably sċ between vowels should be ʃʃ (DONE)
7. Bug in ġeddung, doesn't have allowed onset with ġe-ddung (DONE)
8. āxiġendlīc -- x is not an allowed onset (DONE)
9. Handle prefixes/suffixes denoted with initial/final hyphen -- shouldn't
trigger automatic stress when multisyllabic. (DONE)
10. Don't remove user-specified accents on monosyllabic words. (DONE)
11. Final -þu/-þo after a consonant should always be voiceless (but should be
overridable). (DONE; OVERRIDABLE THROUGH "EXPLICIT ALLOPHONE" NOTATION)
12. Fricative voiced between voiced sounds even across prefix/compound
boundary when before (but not after) the boundary. (DONE)
13. Fricative between unstressed vowels should be voiceless (e.g. adesa);
maybe only after the stress? (DONE)
14. Resonant after fricative/stop in a given syllable should be rendered
as syllabic (e.g. ādl [ˈɑːdl̩], botm [botm̥], bōsm, bēacn [ˈbæːɑ̯kn̩];
also -mn e.g stemn /ˈstemn̩/. (DONE, BUT REVERSED)
15. Add aġēn- and onġēan- prefixes with secondary stress for verbs.
(WILL NOT DO)
16. and- (and maybe all others) should be unstressed as verbal prefix.
andswarian is an exception. (DONE)
17. Support multiple pronunciations as separate numbered params. (DONE)
17b. Additional specifiers should follow each pronun as PRONUN<K:V,K2:V2,...>.
This includes the current pos=.
18. Double hh should be pronounced as [xː]. (DONE)
19. Add -bǣre as a suffix with secondary stress. (DONE)
20. Add -līċ(e), lī[cċ]nes(s) as suffixes with secondary stress. -lī[cċ]nes(s)
should behave like -līċ(e) in that what's before is checked to determine
the pos. (DONE)
21. -lēasnes should be a recognized suffix with secondary stress. (DONE)
22. Fix handling of crinċġan, dynċġe, should behave as if ċ isn't there. (DONE)
23. Rewrite to use [[Module:ang-common]]. (DONE)
24. Ignore final period/question mark/exclamation point. (DONE)
25. Implement pos=verbal for handling un-. (DONE)
26. Simplify geminate consonants within a single syllable. (DONE)
27. Implement "explicit allophone" notation, e.g. [s] [z]. (DONE)
28. ''-sian'' should be voiceless in verbs. (DONE)
29. ''-rian'' should have /j/ after short vowels in verbs. (DONE)
30. BUG: Secondary stress not getting applied in ''-lēas'' (see [[aldorleas]]).
QUESTIONS:
1. Should /an/, /on/ be pronounced [ɒn]? Same for /am/, /om/. [NO]
2. Should final /ɣ/ be rendered as [x]? [NO]
3. Should word-final double consonants be simplified in phonetic representation?
Maybe also syllable-final except obstruents before [lr]? [YES]
4. Should we use /x/ instead of /h/? [YES]
5. Should we recognize from- along with fram-? [NO]
6. Should we recognize bi- along with be-? (danger of false positives) [NO]
7. Should fricative be voiced before voicd sound across word boundary?
(dæġes ēage [ˈdæːjez ˈæːɑ̯ɣe]?) [NO]
8. Ask about pronunciation of bræġn, is the n syllabic? It's given as
/ˈbræjn̩/. Similarly, seġl given as /ˈsejl̩/. [NO; HUNDWINE AND URSZAG DISAGREE]
9. Ask about pronunciation of ġeond-, can it be either [eo] or [o]? [UNCLEAR]
10. Is final -ol pronounced [ul] e.g regol [ˈreɣul]? Hundwine has created
entries this way. What about final -oc etc.? [NO]
11. Is final -ian pronounced [jan] or [ian]? Cf. sċyldigian given as
{{IPA|ang|/ˈʃyldiɣiɑn/|/ˈʃyldiɣjɑn/}}. What about spyrian given as /ˈspyr.jɑn/?
[-ian in weak II verbs, -jan in weak I verbs]
12. seht given as /seçt/ but sehtlian given as /ˈsextliɑn/. Which one is
correct? [ç]
13. Final -liċ or -līċ, with or without secondary stress?
14. Should we special-case -sian [sian]? Then we need support for [z] notation
to override phonetics.
]=]
local strutils = require("Module:string utilities")
local m_table = require("Module:table")
local m_IPA = require("Module:IPA")
local lang = require("Module:languages").getByCode("ang")
local com = require("Module:ang-common")
local u = require("Module:string/char")
local rsubn = mw.ustring.gsub
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local rgsplit = mw.text.gsplit
local ulen = mw.ustring.len
local ulower = mw.ustring.lower
-- version of rsubn() that discards all but the first return value
local function rsub(term, foo, bar, n)
local retval = rsubn(term, foo, bar, n)
return retval
end
-- like str:gsub() but discards all but the first return value
local function gsub(term, foo, bar, n)
local retval = term:gsub(foo, bar, n)
return retval
end
local export = {}
-- When auto-generating primary and secondary stress accents, we use these
-- special characters, and later convert to normal IPA accent marks, so
-- we can distinguish auto-generated stress from user-specified stress.
local AUTOACUTE = u(0xFFF0)
local AUTOGRAVE = u(0xFFF1)
-- When the user uses the "explicit allophone" notation such as [z] or [ç] to
-- force a particular allophone, we internally convert that notation into a
-- single special character.
local EXPLICIT_TH = u(0xFFF2)
local EXPLICIT_DH = u(0xFFF3)
local EXPLICIT_S = u(0xFFF4)
local EXPLICIT_Z = u(0xFFF5)
local EXPLICIT_F = u(0xFFF6)
local EXPLICIT_V = u(0xFFF7)
local EXPLICIT_G = u(0xFFF8)
local EXPLICIT_GH = u(0xFFF9)
local EXPLICIT_H = u(0xFFFA)
local EXPLICIT_X = u(0xFFFB)
local EXPLICIT_C = u(0xFFFC)
local EXPLICIT_I = u(0xFFFD)
local explicit_cons = EXPLICIT_TH .. EXPLICIT_DH .. EXPLICIT_S .. EXPLICIT_Z ..
EXPLICIT_F .. EXPLICIT_V .. EXPLICIT_G .. EXPLICIT_GH .. EXPLICIT_H ..
EXPLICIT_X .. EXPLICIT_C
-- Map "explicit allophone" notation into special char. See above.
local char_to_explicit_char = {
["þ"] = EXPLICIT_TH,
["ð"] = EXPLICIT_DH,
["s"] = EXPLICIT_S,
["z"] = EXPLICIT_Z,
["f"] = EXPLICIT_F,
["v"] = EXPLICIT_V,
["g"] = EXPLICIT_G,
["ɣ"] = EXPLICIT_GH,
["h"] = EXPLICIT_H,
["x"] = EXPLICIT_X,
["ç"] = EXPLICIT_C,
["i"] = EXPLICIT_I,
}
-- Map "explicit allophone" notation into normal spelling, for supporting ann=.
local char_to_spelling = {
["þ"] = "þ",
["ð"] = "þ",
["s"] = "s",
["z"] = "s",
["f"] = "f",
["v"] = "f",
["g"] = "g",
["ɣ"] = "g",
["h"] = "h",
["x"] = "h",
["ç"] = "h",
["i"] = "i",
}
-- Map "explicit allophone" notation into phonemes, for phonemic output.
local explicit_char_to_phonemic = {
[EXPLICIT_TH] = "θ",
[EXPLICIT_DH] = "θ",
[EXPLICIT_S] = "s",
[EXPLICIT_Z] = "s",
[EXPLICIT_F] = "f",
[EXPLICIT_V] = "f",
[EXPLICIT_G] = "ɡ", -- IPA ɡ!
[EXPLICIT_GH] = "ɡ", -- IPA ɡ!
[EXPLICIT_H] = "x",
[EXPLICIT_X] = "x",
[EXPLICIT_C] = "x",
[EXPLICIT_I] = "i",
}
-- Map "explicit allophone" notation into IPA phones, for phonetic output.
local explicit_char_to_phonetic = {
[EXPLICIT_TH] = "θ",
[EXPLICIT_DH] = "ð",
[EXPLICIT_S] = "s",
[EXPLICIT_Z] = "z",
[EXPLICIT_F] = "f",
[EXPLICIT_V] = "v",
[EXPLICIT_G] = "ɡ", -- IPA ɡ!
[EXPLICIT_GH] = "ɣ",
[EXPLICIT_H] = "h",
[EXPLICIT_X] = "x",
[EXPLICIT_C] = "ç",
[EXPLICIT_I] = "i",
}
local accent = com.MACRON .. com.ACUTE .. com.GRAVE .. com.CFLEX .. AUTOACUTE .. AUTOGRAVE
local accent_c = "[" .. accent .. "]"
local stress_accent = com.ACUTE .. com.GRAVE .. com.CFLEX .. AUTOACUTE .. AUTOGRAVE
local stress_accent_c = "[" .. stress_accent .. "]"
local back_vowel = "aɑou"
local front_vowel = "eiyæœø" .. EXPLICIT_I
local vowel = back_vowel .. front_vowel
local vowel_or_accent = vowel .. accent
local vowel_c = "[" .. vowel .. "]"
local vowel_or_accent_c = "[" .. vowel_or_accent .. "]"
local non_vowel_c = "[^" .. vowel .. "]"
local front_vowel_c = "[" .. front_vowel .. "]"
-- The following include both IPA symbols and letters (including regular g and IPA ɡ)
-- so it can be used at any step of the process.
local obstruent = "bcċçdfgɡɣhkpqstvxzþðθʃʒ" .. explicit_cons
local resonant = "lmnŋrɫ"
local glide = "ġjwƿ"
local cons = obstruent .. resonant .. glide
local cons_c = "[" .. cons .. "]"
local voiced_sound = vowel .. "lrmnwjbdɡ" -- WARNING, IPA ɡ used here
-- These rules operate in order, and apply to the actual spelling,
-- after (1) macron decomposition, (2) syllable and prefix splitting,
-- (3) placement of primary and secondary stresses at the beginning
-- of the syllable. Each syllable will be separated either by ˈ
-- (if the following syllable is stressed), by ˌ (if the following
-- syllable has secondary stress), or by . (otherwise). In addition,
-- morpheme boundaries where the consonants on either side should be
-- treated as at the beginning/end of word (i.e. between prefix and
-- word, or between words in a compound word) will be marked with ⁀
-- before the syllable separator, and the beginning and end of text
-- will be marked by ⁀⁀. The output of this is fed into phonetic_rules,
-- and then is used to generate the displayed phonemic pronunciation
-- by removing ⁀ symbols.
local phonemic_rules = {
{com.MACRON, "ː"},
{"eoː", "oː"}, -- e.g. ġeōmor
{"eaː", "aː"},
{"[ei]ː?[aeo]", {
-- Alternative notation for short diphthongs: iu̯, eo̯, æɑ̯
-- Alternative notation for long diphthongs: iːu̯, eːo̯, æːɑ̯
["ea"] = "æ͜ɑ",
["eːa"] = "æ͜ɑː",
["eo"] = "e͜o",
["eːo"] = "e͜oː",
["io"] = "i͜u",
["iːo"] = "i͜uː",
["ie"] = "i͜y",
["iːe"] = "i͜yː",
}},
-- sċ between vowels when at the beginning of a syllable should be ʃ.ʃ
{"(" .. vowel_c .. "ː?)([.ˈˌ]?)sċ(" .. vowel_c .. ")", "%1ʃ%2ʃ%3"},
-- other sċ should be ʃ; note that sċ divided between syllables becomes s.t͡ʃ
{"sċ", "ʃ"},
-- x between vowels when at the beginning of a syllable should be k.s;
-- remaining x handled below
{"(" .. vowel_c .. "ː?)([.ˈˌ]?)x(" .. vowel_c .. ")", "%1k%2s%3"},
-- z between vowels when at the beginning of a syllable should be t.s;
-- remaining z handled below
{"(" .. vowel_c .. "ː?)([.ˈˌ]?)z(" .. vowel_c .. ")", "%1t%2s%3"},
-- short front vowel + -rian, -riend, -rienne, -riende in verb or verbal is
-- rendered with /j/; we need to carefully change the syllable structure
-- when doing this
{"(" .. front_vowel_c .. ")%.ri%.(an⁀)", "%1r.ġ%2", {"verb"}},
{"(" .. front_vowel_c .. ")%.ri%.(end⁀)", "%1r.ġ%2", {"verb", "verbal"}},
{"(" .. front_vowel_c .. ")%.ri%.(en%.[nd]e⁀)", "%1r.ġ%2", {"verb", "verbal"}},
{"nċ([.ˈˌ]?)ġ", "n%1j"},
{"ċ([.ˈˌ]?)ġ", "j%1j"},
{"c([.ˈˌ]?)g", "g%1g"},
{"ċ([.ˈˌ]?)ċ", "t%1t͡ʃ"},
{".", {
["ċ"] = "t͡ʃ",
["c"] = "k",
["ġ"] = "j",
["h"] = "x",
["þ"] = "θ",
["ð"] = "θ",
["ƿ"] = "w",
["x"] = "ks",
["z"] = "ts",
["g"] = "ɡ", -- map to IPA ɡ
["a"] = "ɑ",
["œ"] = "ø",
}},
}
local fricative_to_voiced = {
["f"] = "v",
["s"] = "z",
["θ"] = "ð",
}
local fricative_to_unvoiced = {
["v"] = "f",
["z"] = "s",
["ð"] = "θ",
}
-- These rules operate in order, on the output of phonemic_rules.
-- The output of this is used to generate the displayed phonemic
-- pronunciation by removing ⁀ symbols.
local phonetic_rules = {
-- Fricative voicing between voiced sounds. Note, the following operates
-- across a ⁀ boundary for a fricative before the boundary but not after.
{"([" .. voiced_sound .. "][ː.ˈˌ]*)([fsθ])([ː.ˈˌ⁀]*[" .. voiced_sound .. "])",
function(s1, c, s2)
return s1 .. fricative_to_voiced[c] .. s2
end
},
-- Fricative between unstressed vowels should be devoiced.
-- Note that unstressed syllables are preceded by . while stressed
-- syllables are preceded by a stress mark.
{"(%.[^.⁀][" .. vowel .. com.DOUBLE_BREVE_BELOW .. "ː]*%.)([vzð])",
function(s1, c)
return s1 .. fricative_to_unvoiced[c]
end
},
-- Final -sian, -siend, -sienne, -siende (and variants such as -siġan,
-- -siġend, etc.) in verb or verbal is rendered with [s]; clǣnsian will
-- have to be special-cased with ''[z]''
{"(" .. cons_c .. "ː?" .. "%.)z(i%.j?ɑn⁀)", "%1s%2", {"verb"}},
{"(" .. cons_c .. "ː?" .. "%.)z(i%.j?end⁀)", "%1s%2", {"verb", "verbal"}},
{"(" .. cons_c .. "ː?" .. "%.)z(i%.j?en%.[nd]e⁀)", "%1s%2", {"verb", "verbal"}},
-- Final unstressed -þu/-þo after a consonant should be devoiced.
{"(" .. cons_c .. "ː?" .. "%.)ð([uo]⁀)",
function(s1, s2)
return s1 .. "θ" .. s2
end
},
{"x[wnlr]", {
["xw"] = "ʍ",
["xl"] = "l̥",
["xn"] = "n̥",
["xr"] = "r̥",
}},
-- Note, the following will not operate across a ⁀ boundary.
{"n([.ˈˌ]?[ɡk])", "ŋ%1"}, -- WARNING, IPA ɡ used here
{"n([.ˈˌ]?)j", "n%1d͡ʒ"},
{"j([.ˈˌ]?)j", "d%1d͡ʒ"},
{"([^x][⁀.ˈˌ])x", "%1h"}, -- [h] occurs as a syllable-initial allophone
{"(" .. front_vowel_c .. ")x", "%1ç"}, -- [ç] occurs after front vowels
-- An IPA ɡ after a word/prefix boundary, after another ɡ or after n
-- (previously converted to ŋ in this circumstance) should remain as ɡ,
-- while all other ɡ's should be converted to ɣ except that word-final ɡ
-- becomes x. We do this by converting the ɡ's that should remain to regular
-- g (which should never occur otherwise), convert the remaining IPA ɡ's to ɣ
-- or x, and then convert the regular g's back to IPA ɡ.
{"ɡ([.ˈˌ]?)ɡ", "g%1g"}, -- WARNING, IPA ɡ on the left, regular g on the right
{"([ŋ⁀])([.ˈˌ]?)ɡ", "%1%2g"}, -- WARNING, IPA ɡ on the left, regular g on the right
{"ɡ", "ɣ"},
{"g", "ɡ"}, -- WARNING, regular g on the left, IPA ɡ on the right
{"l([.ˈˌ]?)l", "ɫ%1ɫ"},
{"r([.ˈˌ]?)r", "rˠ%1rˠ"},
{"l([.ˈˌ]?" .. cons_c .. ")", "ɫ%1"},
{"r([.ˈˌ]?" .. cons_c .. ")", "rˠ%1"},
-- Geminate consonants within a single syllable are pronounced singly.
-- Does not apply e.g. to ''ǣttren'', which will be divided as ''ǣt.tren''.
{"(" .. cons_c .. ")%1", "%1"},
{"rˠrˠ", "rˠ"},
-- [In the sequence vowel + obstruent + resonant in a single syllable,
-- the resonant should become syllabic, e.g. ādl [ˈɑːdl̩], blōstm [bloːstm̩],
-- fæþm [fæðm̩], bēacn [ˈbæːɑ̯kn̩]. We allow anything but a syllable or word
-- boundary betweent the vowel and the obstruent.] [BASED ON INPUT FROM
-- [[User:Urszag]], I'VE DECIDE AGAINST THIS]
-- {"(" .. vowel_c .. "[^.ˈˌ⁀]*[" .. obstruent .. "]ː?[" .. resonant .. "])", "%1" .. com.SYLLABIC},
-- also -mn e.g stemn /ˈstemn̩/; same for m + other resonants except m
-- {"(" .. vowel_c .. "[^.ˈˌ⁀]*mː?[lnŋrɫ])", "%1" .. com.SYLLABIC},
{".", explicit_char_to_phonetic},
}
local function apply_rules(word, rules, pos)
for _, rule in ipairs(rules) do
local allowed_pos = rule[3]
if not allowed_pos or m_table.contains(allowed_pos, pos) then
word = rsub(word, rule[1], rule[2])
end
end
return word
end
local function lookup_stress_spec(stress_spec, pos)
return stress_spec[pos] or (pos == "verbal" and stress_spec["verb"]) or nil
end
local function split_on_word_boundaries(word, pos)
local retparts = {}
local parts = strutils.split(word, "([<>%-])")
local i = 1
local saw_primary_stress = false
while i <= #parts do
local split_part = false
local insert_position = #retparts + 1
if parts[i + 1] ~= "<" and parts[i - 1] ~= ">" then
-- Split off any prefixes.
while true do
local broke_prefix = false
for _, prefixspec in ipairs(com.prefixes) do
local prefix_pattern = prefixspec[1]
local stress_spec = prefixspec[2]
local pos_stress = lookup_stress_spec(stress_spec, pos)
local prefix, rest = rmatch(parts[i], "^(" .. prefix_pattern .. ")(.*)$")
if prefix then
if not pos_stress then
-- prefix not recognized for this POS, don't split here
elseif stress_spec.restriction and not rfind(rest, stress_spec.restriction) then
-- restriction not met, don't split here
elseif rfind(rest, "^%+") then
-- explicit non-boundary here, so don't split here
elseif not rfind(rest, vowel_c) then
-- no vowels, don't split here
elseif rfind(rest, "^..?$") then
-- only two letters, unlikely to be a word, probably an ending, so don't split
-- here
else
local initial_cluster, after_cluster = rmatch(rest, "^(" .. non_vowel_c .. "*)(.-)$")
if rfind(initial_cluster, "..") and (
not (com.onsets_2[initial_cluster] or com.secondary_onsets_2[initial_cluster] or
com.onsets_3[initial_cluster])) then
-- initial cluster isn't a possible onset, don't split here
elseif rfind(initial_cluster, "^x") then
-- initial cluster isn't a possible onset, don't split here
elseif rfind(after_cluster, "^" .. vowel_c .. "$") then
-- remainder is a cluster + short vowel,
-- unlikely to be a word so don't split here
else
-- break the word in two; next iteration we process
-- the rest, which may need breaking again
parts[i] = rest
if pos_stress == "unstressed" then
-- don't do anything
elseif pos_stress == "secstressed" or (saw_primary_stress and pos_stress == "stressed") then
prefix = rsub(prefix, "(" .. vowel_c .. ")", "%1" .. AUTOGRAVE, 1)
elseif pos_stress == "stressed" then
prefix = rsub(prefix, "(" .. vowel_c .. ")", "%1" .. AUTOACUTE, 1)
saw_primary_stress = true
else
error("Unrecognized stress spec for pos=" .. pos .. ", prefix=" .. prefix .. ": " .. pos_stress)
end
table.insert(retparts, insert_position, prefix)
insert_position = insert_position + 1
broke_prefix = true
break
end
end
end
end
if not broke_prefix then
break
end
end
-- Now do the same for suffixes.
while true do
local broke_suffix = false
for _, suffixspec in ipairs(com.suffixes) do
local suffix_pattern = suffixspec[1]
local stress_spec = suffixspec[2]
local pos_stress = lookup_stress_spec(stress_spec, pos)
local rest, suffix = rmatch(parts[i], "^(.-)(" .. suffix_pattern .. ")$")
if suffix then
if not pos_stress then
-- suffix not recognized for this POS, don't split here
elseif stress_spec.restriction and not rfind(rest, stress_spec.restriction) then
-- restriction not met, don't split here
elseif rfind(rest, "%+$") then
-- explicit non-boundary here, so don't split here
elseif not rfind(rest, vowel_c) then
-- no vowels, don't split here
else
local before_cluster, final_cluster = rmatch(rest, "^(.-)(" .. non_vowel_c .. "*)$")
if rfind(final_cluster, "%..") then
-- syllable division within or before final
-- cluster, don't split here
else
-- break the word in two; next iteration we process
-- the rest, which may need breaking again
parts[i] = rest
if pos_stress == "unstressed" then
-- don't do anything
elseif pos_stress == "secstressed" then
suffix = rsub(suffix, "(" .. vowel_c .. ")", "%1" .. AUTOGRAVE, 1)
elseif pos_stress == "stressed" then
error("Primary stress not allowed for suffixes (suffix=" .. suffix .. ")")
else
error("Unrecognized stress spec for pos=" .. pos .. ", suffix=" .. suffix .. ": " .. pos_stress)
end
table.insert(retparts, insert_position, suffix)
broke_suffix = true
break
end
end
end
end
if not broke_suffix then
break
end
end
end
local acc = rfind(parts[i], "(" .. stress_accent_c .. ")")
if acc == com.CFLEX then
-- remove circumflex but don't accent
parts[i] = gsub(parts[i], com.CFLEX, "")
elseif acc == com.ACUTE or acc == AUTOACUTE then
saw_primary_stress = true
elseif not acc and parts[i + 1] ~= "<" and parts[i - 1] ~= ">" then
-- Add primary or secondary stress on the part; primary stress if no primary
-- stress yet, otherwise secondary stress.
acc = saw_primary_stress and AUTOGRAVE or AUTOACUTE
saw_primary_stress = true
parts[i] = rsub(parts[i], "(" .. vowel_c .. ")", "%1" .. acc, 1)
end
table.insert(retparts, insert_position, parts[i])
i = i + 2
end
-- remove any +, which has served its purpose
for i, part in ipairs(retparts) do
retparts[i] = gsub(part, "%+", "")
end
return retparts
end
local function break_vowels(vowelseq)
local function check_empty(char)
if char ~= "" then
error("Something wrong, non-vowel '" .. char .. "' seen in vowel sequence '" .. vowelseq .. "'")
end
end
local vowels = {}
local chars = strutils.split(vowelseq, "(" .. vowel_c .. accent_c .. "*)")
local i = 1
while i <= #chars do
if i % 2 == 1 then
check_empty(chars[i])
i = i + 1
else
if i < #chars - 1 and com.diphthongs[
rsub(chars[i], stress_accent_c, "") .. rsub(chars[i + 2], stress_accent_c, "")
] then
check_empty(chars[i + 1])
table.insert(vowels, chars[i] .. chars[i + 2])
i = i + 3
else
table.insert(vowels, chars[i])
i = i + 1
end
end
end
return vowels
end
-- Break a word into alternating C and V components where a C component is a run
-- of zero or more consonants and a V component in a single vowel or dipthong.
-- There will always be an odd number of components, where all odd-numbered
-- components (starting from 1) are C components and all even-numbered components
-- are V components.
local function break_into_c_and_v_components(word)
local cons_vowel = strutils.split(word, "(" .. vowel_or_accent_c .. "+)")
local components = {}
for i = 1, #cons_vowel do
if i % 2 == 1 then
table.insert(components, cons_vowel[i])
else
local vowels = break_vowels(cons_vowel[i])
for j = 1, #vowels do
if j == 1 then
table.insert(components, vowels[j])
else
table.insert(components, "")
table.insert(components, vowels[j])
end
end
end
end
return components
end
local function split_into_syllables(word)
local cons_vowel = break_into_c_and_v_components(word)
if #cons_vowel == 1 then
return cons_vowel
end
for i = 1, #cons_vowel do
if i % 2 == 1 then
-- consonant
local cluster = cons_vowel[i]
local len = ulen(cluster)
if i == 1 then
cons_vowel[i + 1] = cluster .. cons_vowel[i + 1]
elseif i == #cons_vowel then
cons_vowel[i - 1] = cons_vowel[i - 1] .. cluster
elseif rfind(cluster, "%.") then
local before_break, after_break = rmatch(cluster, "^(.-)%.(.*)$")
cons_vowel[i - 1] = cons_vowel[i - 1] .. before_break
cons_vowel[i + 1] = after_break .. cons_vowel[i + 1]
elseif len == 0 then
-- do nothing
elseif len == 1 then
cons_vowel[i + 1] = cluster .. cons_vowel[i + 1]
elseif len == 2 then
local c1, c2 = rmatch(cluster, "^(.)(.)$")
if c1 == "s" and c2 == "ċ" then
cons_vowel[i + 1] = "sċ" .. cons_vowel[i + 1]
else
cons_vowel[i - 1] = cons_vowel[i - 1] .. c1
cons_vowel[i + 1] = c2 .. cons_vowel[i + 1]
end
else
-- check for onset_3 preceded by consonant(s).
local first, last3 = rmatch(cluster, "^(.-)(...)$")
if #first > 0 and com.onsets_3[last3] then
cons_vowel[i - 1] = cons_vowel[i - 1] .. first
cons_vowel[i + 1] = last3 .. cons_vowel[i + 1]
else
local first, last2 = rmatch(cluster, "^(.-)(..)$")
if com.onsets_2[last2] or (com.secondary_onsets_2[last2] and not first:find("[lr]$")) then
cons_vowel[i - 1] = cons_vowel[i - 1] .. first
cons_vowel[i + 1] = last2 .. cons_vowel[i + 1]
else
local first, last = rmatch(cluster, "^(.-)(.)$")
cons_vowel[i - 1] = cons_vowel[i - 1] .. first
cons_vowel[i + 1] = last .. cons_vowel[i + 1]
end
end
end
end
end
local retval = {}
for i = 1, #cons_vowel do
if i % 2 == 0 then
-- remove any stray periods.
table.insert(retval, rsub(cons_vowel[i], "%.", ""))
end
end
return retval
end
-- Combine syllables into a word, moving stress markers (acute/grave) to the
-- beginning of the syllable.
local function combine_syllables_moving_stress(syllables, no_auto_stress)
local modified_syls = {}
for i, syl in ipairs(syllables) do
if syl:find(com.ACUTE) or syl:find(AUTOACUTE) and not no_auto_stress then
syl = "ˈ" .. syl
elseif syl:find(com.GRAVE) or syl:find(AUTOGRAVE) and not no_auto_stress then
syl = "ˌ" .. syl
elseif i > 1 then
syl = "." .. syl
end
syl = rsub(syl, stress_accent_c, "")
table.insert(modified_syls, syl)
end
return table.concat(modified_syls)
end
-- Combine word parts (split-off prefixes, suffixes or parts of a compound word)
-- into a single word. Separate parts with ⁀ and the put ⁀⁀ at word boundaries.
local function combine_parts(parts)
local text = {}
for i, part in ipairs(parts) do
if i > 1 and not rfind(part, "^[ˈˌ]") then
-- Need a syllable boundary if there isn't a stress marker.
table.insert(text, "." .. part)
else
table.insert(text, part)
end
end
return "⁀⁀" .. table.concat(text, "⁀") .. "⁀⁀"
end
local function transform_word(word, pos, no_auto_stress)
word = com.decompose(word)
local parts = split_on_word_boundaries(word, pos)
for i, part in ipairs(parts) do
local syllables = split_into_syllables(part)
parts[i] = combine_syllables_moving_stress(syllables,
no_auto_stress or (#parts == 1 and #syllables == 1))
end
return combine_parts(parts)
end
local function default_pos(word, pos)
if not pos then
-- verbs in -an/-ōn/-ēon, inflected infinitives in -enne
if rfind(word, "[aāō]n$") or rfind(word, "ēon$") or rfind(word, "enne$") then
pos = "verb"
else
-- adjectives in -līċ, adverbs in -līċe and nouns in -nes can follow
-- nouns or participles (which are "verbal"); truncate the ending
-- and check what precedes
word = rsub(word, "^(.*" .. vowel_c .. ".*)l[iī][cċ]e?$", "%1")
word = rsub(word, "^(.*" .. vowel_c .. ".*)n[eiy]ss?$", "%1")
-- participles in -end(e)/-en/-ed/-od, verbal nouns in -ing/-ung
if rfind(word, "ende?$") or rfind(word, "[eo]d$") or rfind(word, "en$")
or rfind(word, "[iu]ng$") then
pos = "verbal"
else
pos = "noun"
end
end
elseif pos == "adj" or pos == "adjective" then
pos = "noun"
elseif pos ~= "noun" and pos ~= "verb" and pos ~= "verbal" then
error("Unrecognized part of speech: " .. pos)
end
return pos
end
local function generate_phonemic_word(word, pos)
word = gsub(word, "[.!?]$", "")
word = rsub(word, "%[(.)%]", char_to_explicit_char)
pos = default_pos(word, pos)
local is_prefix_suffix
if word:find("^%-") or word:find("%-$") then
is_prefix_suffix = true
word = gsub(word, "^%-?(.-)%-?$", "%1")
end
word = transform_word(word, pos, is_prefix_suffix)
word = apply_rules(word, phonemic_rules, pos)
return word, pos
end
function export.phonemic(text, pos)
if type(text) == "table" then
pos = text.args["pos"]
text = text[1]
end
local result = {}
text = ulower(text)
for word in rgsplit(text, " ") do
local phonemic, respos = generate_phonemic_word(word, pos)
table.insert(result, phonemic)
end
result = table.concat(result, " ")
result = rsub(result, ".", explicit_char_to_phonemic)
return gsub(result, "⁀", "")
end
function export.phonetic(text, pos)
if type(text) == "table" then
pos = text.args["pos"]
text = text[1]
end
local result = {}
text = ulower(text)
for word in rgsplit(text, " ") do
local phonemic, respos = generate_phonemic_word(word, pos)
word = apply_rules(phonemic, phonetic_rules, respos)
table.insert(result, word)
end
return gsub(table.concat(result, " "), "⁀", "")
end
function export.show(frame)
local parent_args = frame:getParent().args
local params = {
[1] = { required = true, default = "hlǣf-dīġe", list = true },
["pos"] = {},
["ann"] = {},
}
local args = require("Module:parameters").process(parent_args, params)
local IPA_args = {}
for _, arg in ipairs(args[1]) do
local phonemic = export.phonemic(arg, args.pos)
local phonetic = export.phonetic(arg, args.pos)
table.insert(IPA_args, {pron = '/' .. phonemic .. '/'})
if phonemic ~= phonetic then
table.insert(IPA_args, {pron = '[' .. phonetic .. ']'})
end
end
local anntext
if args.ann == "1" then
anntext = {}
for _, arg in ipairs(args[1]) do
-- remove all spelling markup except ġ/ċ and macrons
arg = rsub(com.decompose(arg), "[%-+._<>" .. com.ACUTE .. com.GRAVE .. com.CFLEX .. "]", "")
arg = rsub(arg, "%[(.)%]", char_to_spelling)
m_table.insertIfNot(anntext, "'''" .. arg .. "'''")
end
anntext = table.concat(anntext, ", ") .. ": "
elseif args.ann then
anntext = "'''" .. args.ann .. "''': "
else
anntext = ""
end
return anntext .. m_IPA.format_IPA_full { lang = lang, items = IPA_args }
end
return export
7xwigi7qyvreir6ly33p8y0byzjjvk0
235646
235645
2026-06-07T05:03:22Z
Lee
19
[[:en:Module:ang-pron]] වෙතින් එක් සංශෝධනයක්
235645
Scribunto
text/plain
--[=[
Implementation of pronunciation-generation module from spelling for
Old English.
Author: Benwing
Generally, the user should supply the spelling, properly marked up with
macrons for long vowels, and ċ ġ ċġ sċ for soft versions of these consonants.
In addition, the following symbols can be used:
-- acute accent on a vowel to override the position of primary stress
-- (in a diphthong, put it over the first vowel)
-- grave accent to add secondary stress
-- circumflex to force no stress on the word or prefix (e.g. in a compound)
-- . (period) to force a syllable boundary
-- - (hyphen) to force a prefix/word or word/word boundary in a compound word;
-- the result will be displayed as a single word but the consonants on
-- either side treated as if they occurred at the beginning/end of the word
-- + (plus) is the opposite of -; it forces a prefix/word or word/word boundary
-- to *NOT* occur when it otherwise would
-- _ (underscore) to force the letters on either side to be interpreted
-- independently, when the combination of the two would normally have a
-- special meaning
FIXME:
1. Implement < and > which works like - but don't trigger secondary stress
(< after a prefix, > before a suffix) (DONE)
2. Recognize -lēas and -l[iī][cċ] as suffixes. (DONE)
2b. Recognize -fæst, -ful, -full as suffixes (so no voicing of initial
fricative). (DONE)
3. If explicit syllable boundary in cluster after prefix, don't recognize as
prefix (hence ġeddung could be written ġed.dung, bedreda bed.reda) (DONE)
4. Two bugs in swīþfèrhþ: missing initial stress, front h should be back (DONE)
5. Check Urszag's code changes for /h/. (DONE)
6. Bug in wasċan; probably sċ between vowels should be ʃʃ (DONE)
7. Bug in ġeddung, doesn't have allowed onset with ġe-ddung (DONE)
8. āxiġendlīc -- x is not an allowed onset (DONE)
9. Handle prefixes/suffixes denoted with initial/final hyphen -- shouldn't
trigger automatic stress when multisyllabic. (DONE)
10. Don't remove user-specified accents on monosyllabic words. (DONE)
11. Final -þu/-þo after a consonant should always be voiceless (but should be
overridable). (DONE; OVERRIDABLE THROUGH "EXPLICIT ALLOPHONE" NOTATION)
12. Fricative voiced between voiced sounds even across prefix/compound
boundary when before (but not after) the boundary. (DONE)
13. Fricative between unstressed vowels should be voiceless (e.g. adesa);
maybe only after the stress? (DONE)
14. Resonant after fricative/stop in a given syllable should be rendered
as syllabic (e.g. ādl [ˈɑːdl̩], botm [botm̥], bōsm, bēacn [ˈbæːɑ̯kn̩];
also -mn e.g stemn /ˈstemn̩/. (DONE, BUT REVERSED)
15. Add aġēn- and onġēan- prefixes with secondary stress for verbs.
(WILL NOT DO)
16. and- (and maybe all others) should be unstressed as verbal prefix.
andswarian is an exception. (DONE)
17. Support multiple pronunciations as separate numbered params. (DONE)
17b. Additional specifiers should follow each pronun as PRONUN<K:V,K2:V2,...>.
This includes the current pos=.
18. Double hh should be pronounced as [xː]. (DONE)
19. Add -bǣre as a suffix with secondary stress. (DONE)
20. Add -līċ(e), lī[cċ]nes(s) as suffixes with secondary stress. -lī[cċ]nes(s)
should behave like -līċ(e) in that what's before is checked to determine
the pos. (DONE)
21. -lēasnes should be a recognized suffix with secondary stress. (DONE)
22. Fix handling of crinċġan, dynċġe, should behave as if ċ isn't there. (DONE)
23. Rewrite to use [[Module:ang-common]]. (DONE)
24. Ignore final period/question mark/exclamation point. (DONE)
25. Implement pos=verbal for handling un-. (DONE)
26. Simplify geminate consonants within a single syllable. (DONE)
27. Implement "explicit allophone" notation, e.g. [s] [z]. (DONE)
28. ''-sian'' should be voiceless in verbs. (DONE)
29. ''-rian'' should have /j/ after short vowels in verbs. (DONE)
30. BUG: Secondary stress not getting applied in ''-lēas'' (see [[aldorleas]]).
QUESTIONS:
1. Should /an/, /on/ be pronounced [ɒn]? Same for /am/, /om/. [NO]
2. Should final /ɣ/ be rendered as [x]? [NO]
3. Should word-final double consonants be simplified in phonetic representation?
Maybe also syllable-final except obstruents before [lr]? [YES]
4. Should we use /x/ instead of /h/? [YES]
5. Should we recognize from- along with fram-? [NO]
6. Should we recognize bi- along with be-? (danger of false positives) [NO]
7. Should fricative be voiced before voicd sound across word boundary?
(dæġes ēage [ˈdæːjez ˈæːɑ̯ɣe]?) [NO]
8. Ask about pronunciation of bræġn, is the n syllabic? It's given as
/ˈbræjn̩/. Similarly, seġl given as /ˈsejl̩/. [NO; HUNDWINE AND URSZAG DISAGREE]
9. Ask about pronunciation of ġeond-, can it be either [eo] or [o]? [UNCLEAR]
10. Is final -ol pronounced [ul] e.g regol [ˈreɣul]? Hundwine has created
entries this way. What about final -oc etc.? [NO]
11. Is final -ian pronounced [jan] or [ian]? Cf. sċyldigian given as
{{IPA|ang|/ˈʃyldiɣiɑn/|/ˈʃyldiɣjɑn/}}. What about spyrian given as /ˈspyr.jɑn/?
[-ian in weak II verbs, -jan in weak I verbs]
12. seht given as /seçt/ but sehtlian given as /ˈsextliɑn/. Which one is
correct? [ç]
13. Final -liċ or -līċ, with or without secondary stress?
14. Should we special-case -sian [sian]? Then we need support for [z] notation
to override phonetics.
]=]
local strutils = require("Module:string utilities")
local m_table = require("Module:table")
local m_IPA = require("Module:IPA")
local lang = require("Module:languages").getByCode("ang")
local com = require("Module:ang-common")
local u = require("Module:string/char")
local rsubn = mw.ustring.gsub
local rfind = mw.ustring.find
local rmatch = mw.ustring.match
local rsplit = mw.text.split
local rgsplit = mw.text.gsplit
local ulen = mw.ustring.len
local ulower = mw.ustring.lower
-- version of rsubn() that discards all but the first return value
local function rsub(term, foo, bar, n)
local retval = rsubn(term, foo, bar, n)
return retval
end
-- like str:gsub() but discards all but the first return value
local function gsub(term, foo, bar, n)
local retval = term:gsub(foo, bar, n)
return retval
end
local export = {}
-- When auto-generating primary and secondary stress accents, we use these
-- special characters, and later convert to normal IPA accent marks, so
-- we can distinguish auto-generated stress from user-specified stress.
local AUTOACUTE = u(0xFFF0)
local AUTOGRAVE = u(0xFFF1)
-- When the user uses the "explicit allophone" notation such as [z] or [ç] to
-- force a particular allophone, we internally convert that notation into a
-- single special character.
local EXPLICIT_TH = u(0xFFF2)
local EXPLICIT_DH = u(0xFFF3)
local EXPLICIT_S = u(0xFFF4)
local EXPLICIT_Z = u(0xFFF5)
local EXPLICIT_F = u(0xFFF6)
local EXPLICIT_V = u(0xFFF7)
local EXPLICIT_G = u(0xFFF8)
local EXPLICIT_GH = u(0xFFF9)
local EXPLICIT_H = u(0xFFFA)
local EXPLICIT_X = u(0xFFFB)
local EXPLICIT_C = u(0xFFFC)
local EXPLICIT_I = u(0xFFFD)
local explicit_cons = EXPLICIT_TH .. EXPLICIT_DH .. EXPLICIT_S .. EXPLICIT_Z ..
EXPLICIT_F .. EXPLICIT_V .. EXPLICIT_G .. EXPLICIT_GH .. EXPLICIT_H ..
EXPLICIT_X .. EXPLICIT_C
-- Map "explicit allophone" notation into special char. See above.
local char_to_explicit_char = {
["þ"] = EXPLICIT_TH,
["ð"] = EXPLICIT_DH,
["s"] = EXPLICIT_S,
["z"] = EXPLICIT_Z,
["f"] = EXPLICIT_F,
["v"] = EXPLICIT_V,
["g"] = EXPLICIT_G,
["ɣ"] = EXPLICIT_GH,
["h"] = EXPLICIT_H,
["x"] = EXPLICIT_X,
["ç"] = EXPLICIT_C,
["i"] = EXPLICIT_I,
}
-- Map "explicit allophone" notation into normal spelling, for supporting ann=.
local char_to_spelling = {
["þ"] = "þ",
["ð"] = "þ",
["s"] = "s",
["z"] = "s",
["f"] = "f",
["v"] = "f",
["g"] = "g",
["ɣ"] = "g",
["h"] = "h",
["x"] = "h",
["ç"] = "h",
["i"] = "i",
}
-- Map "explicit allophone" notation into phonemes, for phonemic output.
local explicit_char_to_phonemic = {
[EXPLICIT_TH] = "θ",
[EXPLICIT_DH] = "θ",
[EXPLICIT_S] = "s",
[EXPLICIT_Z] = "s",
[EXPLICIT_F] = "f",
[EXPLICIT_V] = "f",
[EXPLICIT_G] = "ɡ", -- IPA ɡ!
[EXPLICIT_GH] = "ɡ", -- IPA ɡ!
[EXPLICIT_H] = "x",
[EXPLICIT_X] = "x",
[EXPLICIT_C] = "x",
[EXPLICIT_I] = "i",
}
-- Map "explicit allophone" notation into IPA phones, for phonetic output.
local explicit_char_to_phonetic = {
[EXPLICIT_TH] = "θ",
[EXPLICIT_DH] = "ð",
[EXPLICIT_S] = "s",
[EXPLICIT_Z] = "z",
[EXPLICIT_F] = "f",
[EXPLICIT_V] = "v",
[EXPLICIT_G] = "ɡ", -- IPA ɡ!
[EXPLICIT_GH] = "ɣ",
[EXPLICIT_H] = "h",
[EXPLICIT_X] = "x",
[EXPLICIT_C] = "ç",
[EXPLICIT_I] = "i",
}
local accent = com.MACRON .. com.ACUTE .. com.GRAVE .. com.CFLEX .. AUTOACUTE .. AUTOGRAVE
local accent_c = "[" .. accent .. "]"
local stress_accent = com.ACUTE .. com.GRAVE .. com.CFLEX .. AUTOACUTE .. AUTOGRAVE
local stress_accent_c = "[" .. stress_accent .. "]"
local back_vowel = "aɑou"
local front_vowel = "eiyæœø" .. EXPLICIT_I
local vowel = back_vowel .. front_vowel
local vowel_or_accent = vowel .. accent
local vowel_c = "[" .. vowel .. "]"
local vowel_or_accent_c = "[" .. vowel_or_accent .. "]"
local non_vowel_c = "[^" .. vowel .. "]"
local front_vowel_c = "[" .. front_vowel .. "]"
-- The following include both IPA symbols and letters (including regular g and IPA ɡ)
-- so it can be used at any step of the process.
local obstruent = "bcċçdfgɡɣhkpqstvxzþðθʃʒ" .. explicit_cons
local resonant = "lmnŋrɫ"
local glide = "ġjwƿ"
local cons = obstruent .. resonant .. glide
local cons_c = "[" .. cons .. "]"
local voiced_sound = vowel .. "lrmnwjbdɡ" -- WARNING, IPA ɡ used here
-- These rules operate in order, and apply to the actual spelling,
-- after (1) macron decomposition, (2) syllable and prefix splitting,
-- (3) placement of primary and secondary stresses at the beginning
-- of the syllable. Each syllable will be separated either by ˈ
-- (if the following syllable is stressed), by ˌ (if the following
-- syllable has secondary stress), or by . (otherwise). In addition,
-- morpheme boundaries where the consonants on either side should be
-- treated as at the beginning/end of word (i.e. between prefix and
-- word, or between words in a compound word) will be marked with ⁀
-- before the syllable separator, and the beginning and end of text
-- will be marked by ⁀⁀. The output of this is fed into phonetic_rules,
-- and then is used to generate the displayed phonemic pronunciation
-- by removing ⁀ symbols.
local phonemic_rules = {
{com.MACRON, "ː"},
{"eoː", "oː"}, -- e.g. ġeōmor
{"eaː", "aː"},
{"[ei]ː?[aeo]", {
-- Alternative notation for short diphthongs: iu̯, eo̯, æɑ̯
-- Alternative notation for long diphthongs: iːu̯, eːo̯, æːɑ̯
["ea"] = "æ͜ɑ",
["eːa"] = "æ͜ɑː",
["eo"] = "e͜o",
["eːo"] = "e͜oː",
["io"] = "i͜u",
["iːo"] = "i͜uː",
["ie"] = "i͜y",
["iːe"] = "i͜yː",
}},
-- sċ between vowels when at the beginning of a syllable should be ʃ.ʃ
{"(" .. vowel_c .. "ː?)([.ˈˌ]?)sċ(" .. vowel_c .. ")", "%1ʃ%2ʃ%3"},
-- other sċ should be ʃ; note that sċ divided between syllables becomes s.t͡ʃ
{"sċ", "ʃ"},
-- x between vowels when at the beginning of a syllable should be k.s;
-- remaining x handled below
{"(" .. vowel_c .. "ː?)([.ˈˌ]?)x(" .. vowel_c .. ")", "%1k%2s%3"},
-- z between vowels when at the beginning of a syllable should be t.s;
-- remaining z handled below
{"(" .. vowel_c .. "ː?)([.ˈˌ]?)z(" .. vowel_c .. ")", "%1t%2s%3"},
-- short front vowel + -rian, -riend, -rienne, -riende in verb or verbal is
-- rendered with /j/; we need to carefully change the syllable structure
-- when doing this
{"(" .. front_vowel_c .. ")%.ri%.(an⁀)", "%1r.ġ%2", {"verb"}},
{"(" .. front_vowel_c .. ")%.ri%.(end⁀)", "%1r.ġ%2", {"verb", "verbal"}},
{"(" .. front_vowel_c .. ")%.ri%.(en%.[nd]e⁀)", "%1r.ġ%2", {"verb", "verbal"}},
{"nċ([.ˈˌ]?)ġ", "n%1j"},
{"ċ([.ˈˌ]?)ġ", "j%1j"},
{"c([.ˈˌ]?)g", "g%1g"},
{"ċ([.ˈˌ]?)ċ", "t%1t͡ʃ"},
{".", {
["ċ"] = "t͡ʃ",
["c"] = "k",
["ġ"] = "j",
["h"] = "x",
["þ"] = "θ",
["ð"] = "θ",
["ƿ"] = "w",
["x"] = "ks",
["z"] = "ts",
["g"] = "ɡ", -- map to IPA ɡ
["a"] = "ɑ",
["œ"] = "ø",
}},
}
local fricative_to_voiced = {
["f"] = "v",
["s"] = "z",
["θ"] = "ð",
}
local fricative_to_unvoiced = {
["v"] = "f",
["z"] = "s",
["ð"] = "θ",
}
-- These rules operate in order, on the output of phonemic_rules.
-- The output of this is used to generate the displayed phonemic
-- pronunciation by removing ⁀ symbols.
local phonetic_rules = {
-- Fricative voicing between voiced sounds. Note, the following operates
-- across a ⁀ boundary for a fricative before the boundary but not after.
{"([" .. voiced_sound .. "][ː.ˈˌ]*)([fsθ])([ː.ˈˌ⁀]*[" .. voiced_sound .. "])",
function(s1, c, s2)
return s1 .. fricative_to_voiced[c] .. s2
end
},
-- Fricative between unstressed vowels should be devoiced.
-- Note that unstressed syllables are preceded by . while stressed
-- syllables are preceded by a stress mark.
{"(%.[^.⁀][" .. vowel .. com.DOUBLE_BREVE_BELOW .. "ː]*%.)([vzð])",
function(s1, c)
return s1 .. fricative_to_unvoiced[c]
end
},
-- Final -sian, -siend, -sienne, -siende (and variants such as -siġan,
-- -siġend, etc.) in verb or verbal is rendered with [s]; clǣnsian will
-- have to be special-cased with ''[z]''
{"(" .. cons_c .. "ː?" .. "%.)z(i%.j?ɑn⁀)", "%1s%2", {"verb"}},
{"(" .. cons_c .. "ː?" .. "%.)z(i%.j?end⁀)", "%1s%2", {"verb", "verbal"}},
{"(" .. cons_c .. "ː?" .. "%.)z(i%.j?en%.[nd]e⁀)", "%1s%2", {"verb", "verbal"}},
-- Final unstressed -þu/-þo after a consonant should be devoiced.
{"(" .. cons_c .. "ː?" .. "%.)ð([uo]⁀)",
function(s1, s2)
return s1 .. "θ" .. s2
end
},
{"x[wnlr]", {
["xw"] = "ʍ",
["xl"] = "l̥",
["xn"] = "n̥",
["xr"] = "r̥",
}},
-- Note, the following will not operate across a ⁀ boundary.
{"n([.ˈˌ]?[ɡk])", "ŋ%1"}, -- WARNING, IPA ɡ used here
{"n([.ˈˌ]?)j", "n%1d͡ʒ"},
{"j([.ˈˌ]?)j", "d%1d͡ʒ"},
{"([^x][⁀.ˈˌ])x", "%1h"}, -- [h] occurs as a syllable-initial allophone
{"(" .. front_vowel_c .. ")x", "%1ç"}, -- [ç] occurs after front vowels
-- An IPA ɡ after a word/prefix boundary, after another ɡ or after n
-- (previously converted to ŋ in this circumstance) should remain as ɡ,
-- while all other ɡ's should be converted to ɣ except that word-final ɡ
-- becomes x. We do this by converting the ɡ's that should remain to regular
-- g (which should never occur otherwise), convert the remaining IPA ɡ's to ɣ
-- or x, and then convert the regular g's back to IPA ɡ.
{"ɡ([.ˈˌ]?)ɡ", "g%1g"}, -- WARNING, IPA ɡ on the left, regular g on the right
{"([ŋ⁀])([.ˈˌ]?)ɡ", "%1%2g"}, -- WARNING, IPA ɡ on the left, regular g on the right
{"ɡ", "ɣ"},
{"g", "ɡ"}, -- WARNING, regular g on the left, IPA ɡ on the right
{"l([.ˈˌ]?)l", "ɫ%1ɫ"},
{"r([.ˈˌ]?)r", "rˠ%1rˠ"},
{"l([.ˈˌ]?" .. cons_c .. ")", "ɫ%1"},
{"r([.ˈˌ]?" .. cons_c .. ")", "rˠ%1"},
-- Geminate consonants within a single syllable are pronounced singly.
-- Does not apply e.g. to ''ǣttren'', which will be divided as ''ǣt.tren''.
{"(" .. cons_c .. ")%1", "%1"},
{"rˠrˠ", "rˠ"},
-- [In the sequence vowel + obstruent + resonant in a single syllable,
-- the resonant should become syllabic, e.g. ādl [ˈɑːdl̩], blōstm [bloːstm̩],
-- fæþm [fæðm̩], bēacn [ˈbæːɑ̯kn̩]. We allow anything but a syllable or word
-- boundary betweent the vowel and the obstruent.] [BASED ON INPUT FROM
-- [[User:Urszag]], I'VE DECIDE AGAINST THIS]
-- {"(" .. vowel_c .. "[^.ˈˌ⁀]*[" .. obstruent .. "]ː?[" .. resonant .. "])", "%1" .. com.SYLLABIC},
-- also -mn e.g stemn /ˈstemn̩/; same for m + other resonants except m
-- {"(" .. vowel_c .. "[^.ˈˌ⁀]*mː?[lnŋrɫ])", "%1" .. com.SYLLABIC},
{".", explicit_char_to_phonetic},
}
local function apply_rules(word, rules, pos)
for _, rule in ipairs(rules) do
local allowed_pos = rule[3]
if not allowed_pos or m_table.contains(allowed_pos, pos) then
word = rsub(word, rule[1], rule[2])
end
end
return word
end
local function lookup_stress_spec(stress_spec, pos)
return stress_spec[pos] or (pos == "verbal" and stress_spec["verb"]) or nil
end
local function split_on_word_boundaries(word, pos)
local retparts = {}
local parts = strutils.split(word, "([<>%-])")
local i = 1
local saw_primary_stress = false
while i <= #parts do
local split_part = false
local insert_position = #retparts + 1
if parts[i + 1] ~= "<" and parts[i - 1] ~= ">" then
-- Split off any prefixes.
while true do
local broke_prefix = false
for _, prefixspec in ipairs(com.prefixes) do
local prefix_pattern = prefixspec[1]
local stress_spec = prefixspec[2]
local pos_stress = lookup_stress_spec(stress_spec, pos)
local prefix, rest = rmatch(parts[i], "^(" .. prefix_pattern .. ")(.*)$")
if prefix then
if not pos_stress then
-- prefix not recognized for this POS, don't split here
elseif stress_spec.restriction and not rfind(rest, stress_spec.restriction) then
-- restriction not met, don't split here
elseif rfind(rest, "^%+") then
-- explicit non-boundary here, so don't split here
elseif not rfind(rest, vowel_c) then
-- no vowels, don't split here
elseif rfind(rest, "^..?$") then
-- only two letters, unlikely to be a word, probably an ending, so don't split
-- here
else
local initial_cluster, after_cluster = rmatch(rest, "^(" .. non_vowel_c .. "*)(.-)$")
if rfind(initial_cluster, "..") and (
not (com.onsets_2[initial_cluster] or com.secondary_onsets_2[initial_cluster] or
com.onsets_3[initial_cluster])) then
-- initial cluster isn't a possible onset, don't split here
elseif rfind(initial_cluster, "^x") then
-- initial cluster isn't a possible onset, don't split here
elseif rfind(after_cluster, "^" .. vowel_c .. "$") then
-- remainder is a cluster + short vowel,
-- unlikely to be a word so don't split here
else
-- break the word in two; next iteration we process
-- the rest, which may need breaking again
parts[i] = rest
if pos_stress == "unstressed" then
-- don't do anything
elseif pos_stress == "secstressed" or (saw_primary_stress and pos_stress == "stressed") then
prefix = rsub(prefix, "(" .. vowel_c .. ")", "%1" .. AUTOGRAVE, 1)
elseif pos_stress == "stressed" then
prefix = rsub(prefix, "(" .. vowel_c .. ")", "%1" .. AUTOACUTE, 1)
saw_primary_stress = true
else
error("Unrecognized stress spec for pos=" .. pos .. ", prefix=" .. prefix .. ": " .. pos_stress)
end
table.insert(retparts, insert_position, prefix)
insert_position = insert_position + 1
broke_prefix = true
break
end
end
end
end
if not broke_prefix then
break
end
end
-- Now do the same for suffixes.
while true do
local broke_suffix = false
for _, suffixspec in ipairs(com.suffixes) do
local suffix_pattern = suffixspec[1]
local stress_spec = suffixspec[2]
local pos_stress = lookup_stress_spec(stress_spec, pos)
local rest, suffix = rmatch(parts[i], "^(.-)(" .. suffix_pattern .. ")$")
if suffix then
if not pos_stress then
-- suffix not recognized for this POS, don't split here
elseif stress_spec.restriction and not rfind(rest, stress_spec.restriction) then
-- restriction not met, don't split here
elseif rfind(rest, "%+$") then
-- explicit non-boundary here, so don't split here
elseif not rfind(rest, vowel_c) then
-- no vowels, don't split here
else
local before_cluster, final_cluster = rmatch(rest, "^(.-)(" .. non_vowel_c .. "*)$")
if rfind(final_cluster, "%..") then
-- syllable division within or before final
-- cluster, don't split here
else
-- break the word in two; next iteration we process
-- the rest, which may need breaking again
parts[i] = rest
if pos_stress == "unstressed" then
-- don't do anything
elseif pos_stress == "secstressed" then
suffix = rsub(suffix, "(" .. vowel_c .. ")", "%1" .. AUTOGRAVE, 1)
elseif pos_stress == "stressed" then
error("Primary stress not allowed for suffixes (suffix=" .. suffix .. ")")
else
error("Unrecognized stress spec for pos=" .. pos .. ", suffix=" .. suffix .. ": " .. pos_stress)
end
table.insert(retparts, insert_position, suffix)
broke_suffix = true
break
end
end
end
end
if not broke_suffix then
break
end
end
end
local acc = rfind(parts[i], "(" .. stress_accent_c .. ")")
if acc == com.CFLEX then
-- remove circumflex but don't accent
parts[i] = gsub(parts[i], com.CFLEX, "")
elseif acc == com.ACUTE or acc == AUTOACUTE then
saw_primary_stress = true
elseif not acc and parts[i + 1] ~= "<" and parts[i - 1] ~= ">" then
-- Add primary or secondary stress on the part; primary stress if no primary
-- stress yet, otherwise secondary stress.
acc = saw_primary_stress and AUTOGRAVE or AUTOACUTE
saw_primary_stress = true
parts[i] = rsub(parts[i], "(" .. vowel_c .. ")", "%1" .. acc, 1)
end
table.insert(retparts, insert_position, parts[i])
i = i + 2
end
-- remove any +, which has served its purpose
for i, part in ipairs(retparts) do
retparts[i] = gsub(part, "%+", "")
end
return retparts
end
local function break_vowels(vowelseq)
local function check_empty(char)
if char ~= "" then
error("Something wrong, non-vowel '" .. char .. "' seen in vowel sequence '" .. vowelseq .. "'")
end
end
local vowels = {}
local chars = strutils.split(vowelseq, "(" .. vowel_c .. accent_c .. "*)")
local i = 1
while i <= #chars do
if i % 2 == 1 then
check_empty(chars[i])
i = i + 1
else
if i < #chars - 1 and com.diphthongs[
rsub(chars[i], stress_accent_c, "") .. rsub(chars[i + 2], stress_accent_c, "")
] then
check_empty(chars[i + 1])
table.insert(vowels, chars[i] .. chars[i + 2])
i = i + 3
else
table.insert(vowels, chars[i])
i = i + 1
end
end
end
return vowels
end
-- Break a word into alternating C and V components where a C component is a run
-- of zero or more consonants and a V component in a single vowel or dipthong.
-- There will always be an odd number of components, where all odd-numbered
-- components (starting from 1) are C components and all even-numbered components
-- are V components.
local function break_into_c_and_v_components(word)
local cons_vowel = strutils.split(word, "(" .. vowel_or_accent_c .. "+)")
local components = {}
for i = 1, #cons_vowel do
if i % 2 == 1 then
table.insert(components, cons_vowel[i])
else
local vowels = break_vowels(cons_vowel[i])
for j = 1, #vowels do
if j == 1 then
table.insert(components, vowels[j])
else
table.insert(components, "")
table.insert(components, vowels[j])
end
end
end
end
return components
end
local function split_into_syllables(word)
local cons_vowel = break_into_c_and_v_components(word)
if #cons_vowel == 1 then
return cons_vowel
end
for i = 1, #cons_vowel do
if i % 2 == 1 then
-- consonant
local cluster = cons_vowel[i]
local len = ulen(cluster)
if i == 1 then
cons_vowel[i + 1] = cluster .. cons_vowel[i + 1]
elseif i == #cons_vowel then
cons_vowel[i - 1] = cons_vowel[i - 1] .. cluster
elseif rfind(cluster, "%.") then
local before_break, after_break = rmatch(cluster, "^(.-)%.(.*)$")
cons_vowel[i - 1] = cons_vowel[i - 1] .. before_break
cons_vowel[i + 1] = after_break .. cons_vowel[i + 1]
elseif len == 0 then
-- do nothing
elseif len == 1 then
cons_vowel[i + 1] = cluster .. cons_vowel[i + 1]
elseif len == 2 then
local c1, c2 = rmatch(cluster, "^(.)(.)$")
if c1 == "s" and c2 == "ċ" then
cons_vowel[i + 1] = "sċ" .. cons_vowel[i + 1]
else
cons_vowel[i - 1] = cons_vowel[i - 1] .. c1
cons_vowel[i + 1] = c2 .. cons_vowel[i + 1]
end
else
-- check for onset_3 preceded by consonant(s).
local first, last3 = rmatch(cluster, "^(.-)(...)$")
if #first > 0 and com.onsets_3[last3] then
cons_vowel[i - 1] = cons_vowel[i - 1] .. first
cons_vowel[i + 1] = last3 .. cons_vowel[i + 1]
else
local first, last2 = rmatch(cluster, "^(.-)(..)$")
if com.onsets_2[last2] or (com.secondary_onsets_2[last2] and not first:find("[lr]$")) then
cons_vowel[i - 1] = cons_vowel[i - 1] .. first
cons_vowel[i + 1] = last2 .. cons_vowel[i + 1]
else
local first, last = rmatch(cluster, "^(.-)(.)$")
cons_vowel[i - 1] = cons_vowel[i - 1] .. first
cons_vowel[i + 1] = last .. cons_vowel[i + 1]
end
end
end
end
end
local retval = {}
for i = 1, #cons_vowel do
if i % 2 == 0 then
-- remove any stray periods.
table.insert(retval, rsub(cons_vowel[i], "%.", ""))
end
end
return retval
end
-- Combine syllables into a word, moving stress markers (acute/grave) to the
-- beginning of the syllable.
local function combine_syllables_moving_stress(syllables, no_auto_stress)
local modified_syls = {}
for i, syl in ipairs(syllables) do
if syl:find(com.ACUTE) or syl:find(AUTOACUTE) and not no_auto_stress then
syl = "ˈ" .. syl
elseif syl:find(com.GRAVE) or syl:find(AUTOGRAVE) and not no_auto_stress then
syl = "ˌ" .. syl
elseif i > 1 then
syl = "." .. syl
end
syl = rsub(syl, stress_accent_c, "")
table.insert(modified_syls, syl)
end
return table.concat(modified_syls)
end
-- Combine word parts (split-off prefixes, suffixes or parts of a compound word)
-- into a single word. Separate parts with ⁀ and the put ⁀⁀ at word boundaries.
local function combine_parts(parts)
local text = {}
for i, part in ipairs(parts) do
if i > 1 and not rfind(part, "^[ˈˌ]") then
-- Need a syllable boundary if there isn't a stress marker.
table.insert(text, "." .. part)
else
table.insert(text, part)
end
end
return "⁀⁀" .. table.concat(text, "⁀") .. "⁀⁀"
end
local function transform_word(word, pos, no_auto_stress)
word = com.decompose(word)
local parts = split_on_word_boundaries(word, pos)
for i, part in ipairs(parts) do
local syllables = split_into_syllables(part)
parts[i] = combine_syllables_moving_stress(syllables,
no_auto_stress or (#parts == 1 and #syllables == 1))
end
return combine_parts(parts)
end
local function default_pos(word, pos)
if not pos then
-- verbs in -an/-ōn/-ēon, inflected infinitives in -enne
if rfind(word, "[aāō]n$") or rfind(word, "ēon$") or rfind(word, "enne$") then
pos = "verb"
else
-- adjectives in -līċ, adverbs in -līċe and nouns in -nes can follow
-- nouns or participles (which are "verbal"); truncate the ending
-- and check what precedes
word = rsub(word, "^(.*" .. vowel_c .. ".*)l[iī][cċ]e?$", "%1")
word = rsub(word, "^(.*" .. vowel_c .. ".*)n[eiy]ss?$", "%1")
-- participles in -end(e)/-en/-ed/-od, verbal nouns in -ing/-ung
if rfind(word, "ende?$") or rfind(word, "[eo]d$") or rfind(word, "en$")
or rfind(word, "[iu]ng$") then
pos = "verbal"
else
pos = "noun"
end
end
elseif pos == "adj" or pos == "adjective" then
pos = "noun"
elseif pos ~= "noun" and pos ~= "verb" and pos ~= "verbal" then
error("Unrecognized part of speech: " .. pos)
end
return pos
end
local function generate_phonemic_word(word, pos)
word = gsub(word, "[.!?]$", "")
word = rsub(word, "%[(.)%]", char_to_explicit_char)
pos = default_pos(word, pos)
local is_prefix_suffix
if word:find("^%-") or word:find("%-$") then
is_prefix_suffix = true
word = gsub(word, "^%-?(.-)%-?$", "%1")
end
word = transform_word(word, pos, is_prefix_suffix)
word = apply_rules(word, phonemic_rules, pos)
return word, pos
end
function export.phonemic(text, pos)
if type(text) == "table" then
pos = text.args["pos"]
text = text[1]
end
local result = {}
text = ulower(text)
for word in rgsplit(text, " ") do
local phonemic, respos = generate_phonemic_word(word, pos)
table.insert(result, phonemic)
end
result = table.concat(result, " ")
result = rsub(result, ".", explicit_char_to_phonemic)
return gsub(result, "⁀", "")
end
function export.phonetic(text, pos)
if type(text) == "table" then
pos = text.args["pos"]
text = text[1]
end
local result = {}
text = ulower(text)
for word in rgsplit(text, " ") do
local phonemic, respos = generate_phonemic_word(word, pos)
word = apply_rules(phonemic, phonetic_rules, respos)
table.insert(result, word)
end
return gsub(table.concat(result, " "), "⁀", "")
end
function export.show(frame)
local parent_args = frame:getParent().args
local params = {
[1] = { required = true, default = "hlǣf-dīġe", list = true },
["pos"] = {},
["ann"] = {},
}
local args = require("Module:parameters").process(parent_args, params)
local IPA_args = {}
for _, arg in ipairs(args[1]) do
local phonemic = export.phonemic(arg, args.pos)
local phonetic = export.phonetic(arg, args.pos)
table.insert(IPA_args, {pron = '/' .. phonemic .. '/'})
if phonemic ~= phonetic then
table.insert(IPA_args, {pron = '[' .. phonetic .. ']'})
end
end
local anntext
if args.ann == "1" then
anntext = {}
for _, arg in ipairs(args[1]) do
-- remove all spelling markup except ġ/ċ and macrons
arg = rsub(com.decompose(arg), "[%-+._<>" .. com.ACUTE .. com.GRAVE .. com.CFLEX .. "]", "")
arg = rsub(arg, "%[(.)%]", char_to_spelling)
m_table.insertIfNot(anntext, "'''" .. arg .. "'''")
end
anntext = table.concat(anntext, ", ") .. ": "
elseif args.ann then
anntext = "'''" .. args.ann .. "''': "
else
anntext = ""
end
return anntext .. m_IPA.format_IPA_full { lang = lang, items = IPA_args }
end
return export
7xwigi7qyvreir6ly33p8y0byzjjvk0
Module:ang-pron/testcases/documentation
828
144201
235647
2024-03-06T04:44:05Z
en>WingerBot
0
remove unnecessary categorization now handled automatically by [[Module:documentation]] and [[Module:module categorization]] (manually assisted)
235647
wikitext
text/x-wiki
{{#invoke:ang-pron/testcases|run_tests}}
hbfkw6nf3tnf5tnvii0xrjvyux6k16j
235648
235647
2026-06-07T05:03:43Z
Lee
19
[[:en:Module:ang-pron/testcases/documentation]] වෙතින් එක් සංශෝධනයක්
235647
wikitext
text/x-wiki
{{#invoke:ang-pron/testcases|run_tests}}
hbfkw6nf3tnf5tnvii0xrjvyux6k16j
Module:ang-pron/testcases
828
144202
235649
2026-05-09T13:37:21Z
en>Urszag
0
235649
Scribunto
text/plain
local tests = require "Module:UnitTests"
local m_IPA = require "Module:ang-pron"
local gline = require("Module:string/gline")
local lang = require("Module:languages").getByCode("ang")
local function tag_IPA(phonemic)
return function (IPA)
if phonemic then
IPA = '/' .. IPA .. '/'
else
IPA = '[' .. IPA .. ']'
end
return '<span class="IPA">' .. IPA .. '</span>'
end
end
local function remove_diacritics(term)
term = mw.ustring.toNFD(term)
return term:gsub("\204[\128-\191]", "") -- codepoints U+300-33F
end
local function link(term)
return '<span class="Latn" lang="ang">[[' .. remove_diacritics(term) .. "#Old English|" .. term
.. ']]</span>'
end
local phonemic_options = { display = tag_IPA(true), show_difference = true }
function tests:check_phonemic(spelling, respelling, expected, transcription_options)
local pos = transcription_options.pos
self:equals(link(spelling) ..
(spelling ~= respelling and (" (respelled " .. require("Module:script_utilities").tag_text(respelling, lang) .. ")" ) or "") ..
(pos and ", pos=" .. pos or ""),
m_IPA.phonemic(respelling, pos), expected, phonemic_options)
end
local phonetic_options = { display = tag_IPA(false), show_difference = true }
function tests:check_phonetic(spelling, respelling, expected, transcription_options)
local pos = transcription_options.pos
self:equals(link(spelling) ..
(spelling ~= respelling and (" (respelled " .. require("Module:script_utilities").tag_text(respelling, lang) .. ")" ) or "") ..
(pos and ", pos=" .. pos or ""),
m_IPA.phonetic(respelling, pos), expected, phonetic_options)
end
-- Tab-separated words used in [[Module:ang-pron/testcases]]:
-- word, phonemic transcription, part of speech.
-- The word can be in the form `spelling:respelling` for words needing respelling.
-- The part of speech and preceding tab can be omitted.
local phonemic_examples = [[
habban ˈxɑb.bɑn verb
ēaġe ˈæ͜ɑː.je
senġan ˈsen.jɑn verb
eċġ ejj noun
ālīefan ɑːˈli͜yː.fɑn
oferdōn ˌo.ferˈdoːn
æx æks noun
beforan beˈfo.rɑn
āsāƿan ɑːˈsɑː.wɑn verb
ġeong:ġung junɡ
sċeolde:sċolde ˈʃol.de
sċeadu:sċadu ˈʃɑ.du noun
ġeolu ˈje͜o.lu
sellan ˈsel.lɑn verb
feallan ˈfæ͜ɑl.lɑn verb
wasċan ˈwɑʃ.ʃɑn -- In some existing transcriptions, gemination of /ʃ/ is only phonetic.
husċ xuʃ
foresċēawung fo.reˈʃæ͜ɑː.wunɡ
ġeddung ˈjed.dunɡ
unġewintred:un-ġewintred ˈun.jeˌwin.tred
fleaxen ˈflæ͜ɑk.sen
edcwician:ed<cwician edˈkwi.ki.ɑn
ān ɑːn
ān and twēntiġ ɑːn ɑnd ˈtweːn.tij
ā́n and twēntiġ ˈɑːn ɑnd ˈtweːn.tij
bēacniendlīċ:bēacni.endlīċ ˈbæ͜ɑːk.ni.end.liːt͡ʃ
bedul:bédul ˈbe.dul
beorhtost ˈbe͜orx.tost
ġeāgniendlīċ:ġe<āg.ni.endlīċ jeˈɑːɡ.ni.end.liːt͡ʃ
-estre es.tre
aldorlēas ˈɑl.dorˌlæ͜ɑːs
unclǣne ˈunˌklæː.ne -- un- before nouns and adjectives is stressed
undōn unˈdoːn -- un- before verbs is unstressed
unġesewenlīċ ˈun.jeˌse.wen.liːt͡ʃ -- un- before "verbals" is stressed
]]
-- Same as above, but for phonetic (not phonemic) transcription.
local phonetic_examples = [[
habban ˈhɑb.bɑn
senġan ˈsen.d͡ʒɑn verb
senċġan ˈsen.d͡ʒɑn
eċġ ed͡ʒ noun
ālīefan ɑːˈli͜yː.vɑn
oferdōn ˌo.verˈdoːn
æx æks noun
beforan beˈfo.rɑn
ġeong:ġung juŋɡ
sċeolde:sċolde ˈʃoɫ.de
sellan ˈseɫ.ɫɑn verb -- Should maybe have clear l (ˈsel.lɑn), because e is not diphthongized to eo.
feallan ˈfæ͜ɑɫ.ɫɑn verb
hēafdes ˈhæ͜ɑːv.des noun
siġehrēþiġ:siġe-hrēþiġ ˈsi.jeˌr̥eː.ðij
swīþferhþ:swī́þfèrhþ ˈswiːθˌferˠxθ
miht miçt noun
beorht be͜orˠxt
nēah næ͜ɑːx
rihte ˈriç.te
dryht dryçt
sċyhhan ˈʃyç.çɑn --comparison to other velars suggests h was palatalized to ç by original following j
fȳhtan ˈfyːç.tɑn
hliehhan ˈl̥i͜yç.çɑn
hlihhan ˈl̥iç.çɑn
feohtan ˈfe͜ox.tɑn verb
herian ˈher.jɑn --etymological r.j does not cause breaking, implying r was not velarized here
feorr fe͜orˠ
fæþm fæðm
wīnġeard:wīn-ġeard ˈwiːnˌjæ͜ɑrˠd noun
wynsum ˈwyn.sum
ċearfull ˈt͡ʃæ͜ɑr.fuɫ
wyrgþu ˈwyrˠɣ.θu
ālīefednes ɑːˈli͜yː.ved.nes verb
pohha ˈpox.xɑ
adesa ˈɑ.de.sɑ
hlǣfdīġe:hlǣf-dīġe ˈl̥æːvˌdiː.je
ǣttren ˈæːt.tren
sċeacga:sċacga ˈʃɑɡ.ɡɑ
drūsian ˈdruː.zi.ɑn --s would be voiced here because the word is from *drūsijaną
hālsian ˈhɑːɫ.si.ɑn --s thought to be voiceless here because the word is contracted (from PG hailisōną)
clǣnsian:clǣn[z]ian ˈklæːn.zi.ɑn --exception with voicing despite contraction
]]
local function parse(examples)
examples = examples:gsub("%s*%-%-[^\n]*", "")
local parsed_examples = {}
for line in gline(examples, "BLANK") do
local word, phonemic, POS = line:match "^([^\t]+)\t([^\t]+)\t?(.*)"
local spelling, respelling = word:match "^(.*):(.*)$"
spelling = spelling or word
respelling = respelling or word
if POS == "" then
POS = nil
end
table.insert(parsed_examples, { spelling, respelling, phonemic, { pos = POS }})
end
return parsed_examples
end
function tests:test_phonemic()
self:iterate(parse(phonemic_examples), "check_phonemic")
end
function tests:test_phonetic()
self:iterate(parse(phonetic_examples), "check_phonetic")
end
return tests
ngky5e6zdtuxz4pu263paqibot4eg7b
235650
235649
2026-06-07T05:03:47Z
Lee
19
[[:en:Module:ang-pron/testcases]] වෙතින් එක් සංශෝධනයක්
235649
Scribunto
text/plain
local tests = require "Module:UnitTests"
local m_IPA = require "Module:ang-pron"
local gline = require("Module:string/gline")
local lang = require("Module:languages").getByCode("ang")
local function tag_IPA(phonemic)
return function (IPA)
if phonemic then
IPA = '/' .. IPA .. '/'
else
IPA = '[' .. IPA .. ']'
end
return '<span class="IPA">' .. IPA .. '</span>'
end
end
local function remove_diacritics(term)
term = mw.ustring.toNFD(term)
return term:gsub("\204[\128-\191]", "") -- codepoints U+300-33F
end
local function link(term)
return '<span class="Latn" lang="ang">[[' .. remove_diacritics(term) .. "#Old English|" .. term
.. ']]</span>'
end
local phonemic_options = { display = tag_IPA(true), show_difference = true }
function tests:check_phonemic(spelling, respelling, expected, transcription_options)
local pos = transcription_options.pos
self:equals(link(spelling) ..
(spelling ~= respelling and (" (respelled " .. require("Module:script_utilities").tag_text(respelling, lang) .. ")" ) or "") ..
(pos and ", pos=" .. pos or ""),
m_IPA.phonemic(respelling, pos), expected, phonemic_options)
end
local phonetic_options = { display = tag_IPA(false), show_difference = true }
function tests:check_phonetic(spelling, respelling, expected, transcription_options)
local pos = transcription_options.pos
self:equals(link(spelling) ..
(spelling ~= respelling and (" (respelled " .. require("Module:script_utilities").tag_text(respelling, lang) .. ")" ) or "") ..
(pos and ", pos=" .. pos or ""),
m_IPA.phonetic(respelling, pos), expected, phonetic_options)
end
-- Tab-separated words used in [[Module:ang-pron/testcases]]:
-- word, phonemic transcription, part of speech.
-- The word can be in the form `spelling:respelling` for words needing respelling.
-- The part of speech and preceding tab can be omitted.
local phonemic_examples = [[
habban ˈxɑb.bɑn verb
ēaġe ˈæ͜ɑː.je
senġan ˈsen.jɑn verb
eċġ ejj noun
ālīefan ɑːˈli͜yː.fɑn
oferdōn ˌo.ferˈdoːn
æx æks noun
beforan beˈfo.rɑn
āsāƿan ɑːˈsɑː.wɑn verb
ġeong:ġung junɡ
sċeolde:sċolde ˈʃol.de
sċeadu:sċadu ˈʃɑ.du noun
ġeolu ˈje͜o.lu
sellan ˈsel.lɑn verb
feallan ˈfæ͜ɑl.lɑn verb
wasċan ˈwɑʃ.ʃɑn -- In some existing transcriptions, gemination of /ʃ/ is only phonetic.
husċ xuʃ
foresċēawung fo.reˈʃæ͜ɑː.wunɡ
ġeddung ˈjed.dunɡ
unġewintred:un-ġewintred ˈun.jeˌwin.tred
fleaxen ˈflæ͜ɑk.sen
edcwician:ed<cwician edˈkwi.ki.ɑn
ān ɑːn
ān and twēntiġ ɑːn ɑnd ˈtweːn.tij
ā́n and twēntiġ ˈɑːn ɑnd ˈtweːn.tij
bēacniendlīċ:bēacni.endlīċ ˈbæ͜ɑːk.ni.end.liːt͡ʃ
bedul:bédul ˈbe.dul
beorhtost ˈbe͜orx.tost
ġeāgniendlīċ:ġe<āg.ni.endlīċ jeˈɑːɡ.ni.end.liːt͡ʃ
-estre es.tre
aldorlēas ˈɑl.dorˌlæ͜ɑːs
unclǣne ˈunˌklæː.ne -- un- before nouns and adjectives is stressed
undōn unˈdoːn -- un- before verbs is unstressed
unġesewenlīċ ˈun.jeˌse.wen.liːt͡ʃ -- un- before "verbals" is stressed
]]
-- Same as above, but for phonetic (not phonemic) transcription.
local phonetic_examples = [[
habban ˈhɑb.bɑn
senġan ˈsen.d͡ʒɑn verb
senċġan ˈsen.d͡ʒɑn
eċġ ed͡ʒ noun
ālīefan ɑːˈli͜yː.vɑn
oferdōn ˌo.verˈdoːn
æx æks noun
beforan beˈfo.rɑn
ġeong:ġung juŋɡ
sċeolde:sċolde ˈʃoɫ.de
sellan ˈseɫ.ɫɑn verb -- Should maybe have clear l (ˈsel.lɑn), because e is not diphthongized to eo.
feallan ˈfæ͜ɑɫ.ɫɑn verb
hēafdes ˈhæ͜ɑːv.des noun
siġehrēþiġ:siġe-hrēþiġ ˈsi.jeˌr̥eː.ðij
swīþferhþ:swī́þfèrhþ ˈswiːθˌferˠxθ
miht miçt noun
beorht be͜orˠxt
nēah næ͜ɑːx
rihte ˈriç.te
dryht dryçt
sċyhhan ˈʃyç.çɑn --comparison to other velars suggests h was palatalized to ç by original following j
fȳhtan ˈfyːç.tɑn
hliehhan ˈl̥i͜yç.çɑn
hlihhan ˈl̥iç.çɑn
feohtan ˈfe͜ox.tɑn verb
herian ˈher.jɑn --etymological r.j does not cause breaking, implying r was not velarized here
feorr fe͜orˠ
fæþm fæðm
wīnġeard:wīn-ġeard ˈwiːnˌjæ͜ɑrˠd noun
wynsum ˈwyn.sum
ċearfull ˈt͡ʃæ͜ɑr.fuɫ
wyrgþu ˈwyrˠɣ.θu
ālīefednes ɑːˈli͜yː.ved.nes verb
pohha ˈpox.xɑ
adesa ˈɑ.de.sɑ
hlǣfdīġe:hlǣf-dīġe ˈl̥æːvˌdiː.je
ǣttren ˈæːt.tren
sċeacga:sċacga ˈʃɑɡ.ɡɑ
drūsian ˈdruː.zi.ɑn --s would be voiced here because the word is from *drūsijaną
hālsian ˈhɑːɫ.si.ɑn --s thought to be voiceless here because the word is contracted (from PG hailisōną)
clǣnsian:clǣn[z]ian ˈklæːn.zi.ɑn --exception with voicing despite contraction
]]
local function parse(examples)
examples = examples:gsub("%s*%-%-[^\n]*", "")
local parsed_examples = {}
for line in gline(examples, "BLANK") do
local word, phonemic, POS = line:match "^([^\t]+)\t([^\t]+)\t?(.*)"
local spelling, respelling = word:match "^(.*):(.*)$"
spelling = spelling or word
respelling = respelling or word
if POS == "" then
POS = nil
end
table.insert(parsed_examples, { spelling, respelling, phonemic, { pos = POS }})
end
return parsed_examples
end
function tests:test_phonemic()
self:iterate(parse(phonemic_examples), "check_phonemic")
end
function tests:test_phonetic()
self:iterate(parse(phonetic_examples), "check_phonetic")
end
return tests
ngky5e6zdtuxz4pu263paqibot4eg7b
Module:ang-pron/documentation
828
144203
235651
2024-03-06T07:15:03Z
en>WingerBot
0
remove unnecessary categorization now handled automatically by [[Module:documentation]] and [[Module:module categorization]], and/or use {{module cat}} (manually assisted)
235651
wikitext
text/x-wiki
This module generates IPA for Old English words. There are three entry points:
* <code>show</code> directly implements [[Template:ang-IPA]], and is meant to be called from that template.
* <code>phonemic()</code> generates the raw phonemic IPA for Old English text.
* <code>phonetic()</code> generates the raw phonetic IPA for Old English text.
Test cases can be found in [[Module:ang-pron/testcases]].
The primary documentation for this module can be found in the documentation for [[Template:ang-IPA]].
8d3k7khv4ehzp10fa4qhlai71wkw3yn
235652
235651
2026-06-07T05:03:50Z
Lee
19
[[:en:Module:ang-pron/documentation]] වෙතින් එක් සංශෝධනයක්
235651
wikitext
text/x-wiki
This module generates IPA for Old English words. There are three entry points:
* <code>show</code> directly implements [[Template:ang-IPA]], and is meant to be called from that template.
* <code>phonemic()</code> generates the raw phonemic IPA for Old English text.
* <code>phonetic()</code> generates the raw phonetic IPA for Old English text.
Test cases can be found in [[Module:ang-pron/testcases]].
The primary documentation for this module can be found in the documentation for [[Template:ang-IPA]].
8d3k7khv4ehzp10fa4qhlai71wkw3yn
Module:ang-common
828
144204
235653
2024-04-27T09:09:03Z
en>SurjectionBot
0
Protected "[[Module:ang-common]]": (bot) automatically protect highly visible templates/modules (reference score: 2000+ >= 1000) ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite))
235653
Scribunto
text/plain
--[=[
Common utilities and definitions used by various Old English modules.
Author: Benwing
]=]
local m_table = require("Module:table")
local u = require("Module:string/char")
local rsubn = mw.ustring.gsub
-- version of rsubn() that discards all but the first return value
local function rsub(term, foo, bar, n)
local retval = rsubn(term, foo, bar, n)
return retval
end
local export = {}
export.ACUTE = u(0x0301)
export.GRAVE = u(0x0300)
export.CFLEX = u(0x0302)
export.MACRON = u(0x0304)
export.DOTABOVE = u(0x0307)
export.SYLLABIC = u(0x0329)
export.CEDILLA = u(0x0327)
export.DOUBLE_BREVE_BELOW = u(0x035C)
local accent = export.MACRON .. export.ACUTE .. export.GRAVE .. export.CFLEX
local recomposer = {
["g" .. export.DOTABOVE] = "ġ",
["G" .. export.DOTABOVE] = "Ġ",
["c" .. export.DOTABOVE] = "ċ",
["C" .. export.DOTABOVE] = "Ċ",
-- used in "explicit allophone" notation in [[Module:ang-pron]]
["c" .. export.CEDILLA] = "ç",
["C" .. export.CEDILLA] = "Ç",
}
-- Decompose macron, acute, grave, circumflex, but leave alone ġ, ċ and uppercase equiv
function export.decompose(text)
text = mw.ustring.toNFD(text)
text = rsub(text, ".[" .. export.DOTABOVE .. "]", recomposer)
return text
end
-- We use the following syllable-splitting algorithm.
-- (1) A single consonant goes with the following syllable.
-- (2) Two consonants are split down the middle.
-- (3) For three or more consonants, check for clusters ending in
-- onsets_3 then onsets_2, with at least one preceding consonant.
-- If so, split between the onset and the preceding consonant(s).
-- (4) Check similarly for secondary_onsets_2. If seen, then check
-- the preceding consonant; if it's not an l or r, split before
-- the onset.
-- (5) Otherwise, split before the last consonant (i.e. the last
-- consonant goes with the following syllable, and all preceding
-- consonants go with the preceding syllable).
export.onsets_2 = m_table.listToSet({
"pr", "pl",
"br", "bl",
"tr", "tw",
"dr", "dw",
"cr", "cl", "cw", --skip "cn"
"kr", "kl", "kw", --skip "kn"
"gr", "gl", -- skip "gn"
"sm", "sn", "sl", "sw",
"sp",
"st",
"sc", "sk", "sċ",
"fr", "fl", --skip "fn",
"þr", "þw",
"ðr", "ðw",
"hr", "hl", "hw", -- skip "hn"
"wr", "wl",
})
export.secondary_onsets_2 = m_table.listToSet({
"cn", "kn",
"gn",
"fn",
"hn",
})
export.onsets_3 = m_table.listToSet({
"spr", "spl",
"str",
"scr", "skr", "sċr",
})
export.diphthongs = m_table.listToSet({
"ea", export.decompose("ēa"), export.decompose("eā"),
"eo", export.decompose("ēo"), export.decompose("eō"),
"io", export.decompose("īo"), export.decompose("iō"),
"ie", export.decompose("īe"), export.decompose("iē"),
})
export.prefixes = {
{export.decompose("ā"), {verb = "unstressed", noun = "stressed"}},
{"æt", {verb = "unstressed"}},
{"æfter", {verb = "secstressed", noun = "stressed"}}, -- not very common
{"and", {verb = "unstressed", noun = "stressed"}},
{"an", {verb = "unstressed", noun = "stressed"}},
{"be", {verb = "unstressed", noun = "unstressed", restriction = "^[^" .. accent .. "ao]"}},
{export.decompose("bī"), {noun = "stressed"}},
{"ed", {verb = "unstressed", noun = "stressed"}}, -- not very common
{"fore", {verb = "unstressed", noun = "stressed", restriction = "^[^" .. accent .. "ao]"}},
{"for[þð]", {verb = "unstressed", noun = "stressed"}},
{"for", {verb = "unstressed", noun = "unstressed"}},
{"fram", {verb = "unstressed", noun = "stressed"}}, -- not very common
-- following is rare as a noun, mostly from verbal forms
{"ġeond", {verb = "unstressed"}},
{"ġe", {verb = "unstressed", noun = "unstressed", restriction = "^[^" .. accent .. "ao]"}},
{"in", {verb = "unstressed", noun = "stressed"}}, -- not very common
{"mis", {verb = "unstressed"}},
{"ofer", {verb = "secstressed", noun = "stressed"}},
{"of", {verb = "unstressed", noun = "stressed"}},
{"on", {verb = "unstressed", noun = "stressed"}},
{"or", {noun = "stressed"}},
{"o[þð]", {verb = "unstressed"}},
{export.decompose("stēop"), {noun = "stressed"}},
{export.decompose("tō"), {verb = "unstressed", noun = "stressed"}},
{"under", {verb = "secstressed", noun = "stressed"}},
{"un", {verb = "unstressed", noun = "stressed", verbal = "stressed"}}, -- uncommon as verb
{"up", {verb = "unstressed", noun = "stressed"}},
{export.decompose("ūt"), {verb = "unstressed", noun = "stressed"}},
{export.decompose("ū[þð]"), {noun = "stressed"}},
{"[wƿ]i[þð]er", {verb = "secstressed", noun = "stressed"}},
{"[wƿ]i[þð]", {verb = "unstressed"}},
{"ymb", {verb = "unstressed", noun = "stressed"}},
{"[þð]urh", {verb = "unstressed", noun = "stressed"}},
}
export.suffixes = {
{export.decompose("bǣre"), {noun = "secstressed"}},
{"fæst", {noun = "secstressed"}},
{"feald", {noun = "secstressed"}},
{"full?", {noun = "unstressed"}},
{export.decompose("lēas"), {noun = "secstressed"}},
-- These can be "verbal" if following a verbal past participle or similar
{export.decompose("līċe"), {noun = "secstressed", verb = "secstressed"}},
-- ī is decomposed into two chars so can't combine into [īi]
{export.decompose("li[ċc]"), {noun = "unstressed", verb = "unstressed"}},
{export.decompose("lī[ċc]"), {noun = "unstressed", verb = "unstressed"}},
{"n[eiy]ss?", {noun = "unstressed", verb = "unstressed"}},
{"sum", {noun = "unstressed"}},
}
return export
fc79ypblk4nipwsalhix5guv4evn5wg
235654
235653
2026-06-07T05:04:54Z
Lee
19
[[:en:Module:ang-common]] වෙතින් එක් සංශෝධනයක්
235653
Scribunto
text/plain
--[=[
Common utilities and definitions used by various Old English modules.
Author: Benwing
]=]
local m_table = require("Module:table")
local u = require("Module:string/char")
local rsubn = mw.ustring.gsub
-- version of rsubn() that discards all but the first return value
local function rsub(term, foo, bar, n)
local retval = rsubn(term, foo, bar, n)
return retval
end
local export = {}
export.ACUTE = u(0x0301)
export.GRAVE = u(0x0300)
export.CFLEX = u(0x0302)
export.MACRON = u(0x0304)
export.DOTABOVE = u(0x0307)
export.SYLLABIC = u(0x0329)
export.CEDILLA = u(0x0327)
export.DOUBLE_BREVE_BELOW = u(0x035C)
local accent = export.MACRON .. export.ACUTE .. export.GRAVE .. export.CFLEX
local recomposer = {
["g" .. export.DOTABOVE] = "ġ",
["G" .. export.DOTABOVE] = "Ġ",
["c" .. export.DOTABOVE] = "ċ",
["C" .. export.DOTABOVE] = "Ċ",
-- used in "explicit allophone" notation in [[Module:ang-pron]]
["c" .. export.CEDILLA] = "ç",
["C" .. export.CEDILLA] = "Ç",
}
-- Decompose macron, acute, grave, circumflex, but leave alone ġ, ċ and uppercase equiv
function export.decompose(text)
text = mw.ustring.toNFD(text)
text = rsub(text, ".[" .. export.DOTABOVE .. "]", recomposer)
return text
end
-- We use the following syllable-splitting algorithm.
-- (1) A single consonant goes with the following syllable.
-- (2) Two consonants are split down the middle.
-- (3) For three or more consonants, check for clusters ending in
-- onsets_3 then onsets_2, with at least one preceding consonant.
-- If so, split between the onset and the preceding consonant(s).
-- (4) Check similarly for secondary_onsets_2. If seen, then check
-- the preceding consonant; if it's not an l or r, split before
-- the onset.
-- (5) Otherwise, split before the last consonant (i.e. the last
-- consonant goes with the following syllable, and all preceding
-- consonants go with the preceding syllable).
export.onsets_2 = m_table.listToSet({
"pr", "pl",
"br", "bl",
"tr", "tw",
"dr", "dw",
"cr", "cl", "cw", --skip "cn"
"kr", "kl", "kw", --skip "kn"
"gr", "gl", -- skip "gn"
"sm", "sn", "sl", "sw",
"sp",
"st",
"sc", "sk", "sċ",
"fr", "fl", --skip "fn",
"þr", "þw",
"ðr", "ðw",
"hr", "hl", "hw", -- skip "hn"
"wr", "wl",
})
export.secondary_onsets_2 = m_table.listToSet({
"cn", "kn",
"gn",
"fn",
"hn",
})
export.onsets_3 = m_table.listToSet({
"spr", "spl",
"str",
"scr", "skr", "sċr",
})
export.diphthongs = m_table.listToSet({
"ea", export.decompose("ēa"), export.decompose("eā"),
"eo", export.decompose("ēo"), export.decompose("eō"),
"io", export.decompose("īo"), export.decompose("iō"),
"ie", export.decompose("īe"), export.decompose("iē"),
})
export.prefixes = {
{export.decompose("ā"), {verb = "unstressed", noun = "stressed"}},
{"æt", {verb = "unstressed"}},
{"æfter", {verb = "secstressed", noun = "stressed"}}, -- not very common
{"and", {verb = "unstressed", noun = "stressed"}},
{"an", {verb = "unstressed", noun = "stressed"}},
{"be", {verb = "unstressed", noun = "unstressed", restriction = "^[^" .. accent .. "ao]"}},
{export.decompose("bī"), {noun = "stressed"}},
{"ed", {verb = "unstressed", noun = "stressed"}}, -- not very common
{"fore", {verb = "unstressed", noun = "stressed", restriction = "^[^" .. accent .. "ao]"}},
{"for[þð]", {verb = "unstressed", noun = "stressed"}},
{"for", {verb = "unstressed", noun = "unstressed"}},
{"fram", {verb = "unstressed", noun = "stressed"}}, -- not very common
-- following is rare as a noun, mostly from verbal forms
{"ġeond", {verb = "unstressed"}},
{"ġe", {verb = "unstressed", noun = "unstressed", restriction = "^[^" .. accent .. "ao]"}},
{"in", {verb = "unstressed", noun = "stressed"}}, -- not very common
{"mis", {verb = "unstressed"}},
{"ofer", {verb = "secstressed", noun = "stressed"}},
{"of", {verb = "unstressed", noun = "stressed"}},
{"on", {verb = "unstressed", noun = "stressed"}},
{"or", {noun = "stressed"}},
{"o[þð]", {verb = "unstressed"}},
{export.decompose("stēop"), {noun = "stressed"}},
{export.decompose("tō"), {verb = "unstressed", noun = "stressed"}},
{"under", {verb = "secstressed", noun = "stressed"}},
{"un", {verb = "unstressed", noun = "stressed", verbal = "stressed"}}, -- uncommon as verb
{"up", {verb = "unstressed", noun = "stressed"}},
{export.decompose("ūt"), {verb = "unstressed", noun = "stressed"}},
{export.decompose("ū[þð]"), {noun = "stressed"}},
{"[wƿ]i[þð]er", {verb = "secstressed", noun = "stressed"}},
{"[wƿ]i[þð]", {verb = "unstressed"}},
{"ymb", {verb = "unstressed", noun = "stressed"}},
{"[þð]urh", {verb = "unstressed", noun = "stressed"}},
}
export.suffixes = {
{export.decompose("bǣre"), {noun = "secstressed"}},
{"fæst", {noun = "secstressed"}},
{"feald", {noun = "secstressed"}},
{"full?", {noun = "unstressed"}},
{export.decompose("lēas"), {noun = "secstressed"}},
-- These can be "verbal" if following a verbal past participle or similar
{export.decompose("līċe"), {noun = "secstressed", verb = "secstressed"}},
-- ī is decomposed into two chars so can't combine into [īi]
{export.decompose("li[ċc]"), {noun = "unstressed", verb = "unstressed"}},
{export.decompose("lī[ċc]"), {noun = "unstressed", verb = "unstressed"}},
{"n[eiy]ss?", {noun = "unstressed", verb = "unstressed"}},
{"sum", {noun = "unstressed"}},
}
return export
fc79ypblk4nipwsalhix5guv4evn5wg
Module:ang-noun
828
144205
235655
2024-11-30T12:36:18Z
en>Theknightwho
0
Bugfix error.
235655
Scribunto
text/plain
local m_links = require("Module:links")
local strutils = require("Module:string utilities")
local lang = require("Module:languages").getByCode("ang")
local export = {}
local cases = { "nom", "acc", "gen", "dat" }
local numbers = { "sg", "pl" }
local slots_to_accel_form = {}
for _, case in ipairs(cases) do
for _, number in ipairs(numbers) do
slots_to_accel_form[case .. "_" .. number] = case .. "|" .. number
end
end
local slots_to_args = {
nom_sg = 1,
nom_pl = 2,
acc_sg = 3,
acc_pl = 4,
gen_sg = 5,
gen_pl = 6,
dat_sg = 7,
dat_pl = 8,
}
function export.make_table(frame)
local parent_args = frame:getParent().args
local params = {
["title"] = {}, -- To be removed.
["type"] = {},
["width"] = {},
["style"] = {},
["num"] = {},
["g"] = {},
["gender"] = {alias_of = "g"},
}
for slot, arg in pairs(slots_to_args) do
params[arg] = {list = slot}
end
local args = require("Module:parameters").process(parent_args, params)
local table_args = {
style = args.style == "right" and "float:right; clear:right;" or "",
width = args.width or "30",
}
local accel_lemma_sg = args[slots_to_args.nom_sg][1]
local accel_lemma_pl = args[slots_to_args.nom_pl][1]
local accel_lemma =
accel_lemma_sg and accel_lemma_sg ~= "—" and accel_lemma_sg ~= "-" and accel_lemma_sg:gsub(",.*", "") or
accel_lemma_pl and accel_lemma_pl ~= "—" and accel_lemma_pl ~= "-" and accel_lemma_pl:gsub(",.*", "") or
nil
for slot, accel_form in pairs(slots_to_accel_form) do
local form_args = args[slots_to_args[slot]]
if #form_args == 0 then
form_args = {"—"}
end
local forms = {}
for _, form_arg in ipairs(form_args) do
for _, form in ipairs(mw.text.split(form_arg, ", *")) do
table.insert(forms, form)
end
end
local table_arg = {}
for _, form in ipairs(forms) do
table.insert(table_arg, form == "—" and form or m_links.full_link{
lang = lang, term = form, accel = {
form = accel_form,
lemma = accel_lemma,
}
})
table_args[slot] = table.concat(table_arg, ", ")
end
end
if args.num == "pl" then
table_args.nom_sg = "—"
table_args.acc_sg = "—"
table_args.gen_sg = "—"
table_args.dat_sg = "—"
elseif args.num == "sg" then
table_args.nom_pl = "—"
table_args.acc_pl = "—"
table_args.gen_pl = "—"
table_args.dat_pl = "—"
end
local type = ''
if args["type"] then
type = type .. (args["type"]:gsub("^%l", string.upper))
end
if args.g then
type = type .. " (" .. (
args.g == "m" and "masculine" or
args.g == "f" and "feminine" or
args.g == "n" and "neuter" or
error("Unrecognized gender '" .. args.g .. "'")
) .. ")"
end
type = type .. ':'
local table = type .. (type and '\n')
table = table .. mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-top',
args = {
title = '-',
palette = 'indigo'
}
}
table = table .. [=[
!
! singular
! plural
|-
! [[nominative case|nominative]]
| {nom_sg}
| {nom_pl}
|-
! [[accusative case|accusative]]
| {acc_sg}
| {acc_pl}
|-
! [[genitive case|genitive]]
| {gen_sg}
| {gen_pl}
|-
! [[dative case|dative]]
| {dat_sg}
| {dat_pl}
]=]
table = table .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' }
return strutils.format(table, table_args)
end
return export
-- For Vim, so we get 4-space tabs
-- vim: set ts=4 sw=4 noet:
6q4c38268gm7fgsaauxkaywf80rjzyw
235656
235655
2026-06-07T05:05:54Z
Lee
19
[[:en:Module:ang-noun]] වෙතින් එක් සංශෝධනයක්
235655
Scribunto
text/plain
local m_links = require("Module:links")
local strutils = require("Module:string utilities")
local lang = require("Module:languages").getByCode("ang")
local export = {}
local cases = { "nom", "acc", "gen", "dat" }
local numbers = { "sg", "pl" }
local slots_to_accel_form = {}
for _, case in ipairs(cases) do
for _, number in ipairs(numbers) do
slots_to_accel_form[case .. "_" .. number] = case .. "|" .. number
end
end
local slots_to_args = {
nom_sg = 1,
nom_pl = 2,
acc_sg = 3,
acc_pl = 4,
gen_sg = 5,
gen_pl = 6,
dat_sg = 7,
dat_pl = 8,
}
function export.make_table(frame)
local parent_args = frame:getParent().args
local params = {
["title"] = {}, -- To be removed.
["type"] = {},
["width"] = {},
["style"] = {},
["num"] = {},
["g"] = {},
["gender"] = {alias_of = "g"},
}
for slot, arg in pairs(slots_to_args) do
params[arg] = {list = slot}
end
local args = require("Module:parameters").process(parent_args, params)
local table_args = {
style = args.style == "right" and "float:right; clear:right;" or "",
width = args.width or "30",
}
local accel_lemma_sg = args[slots_to_args.nom_sg][1]
local accel_lemma_pl = args[slots_to_args.nom_pl][1]
local accel_lemma =
accel_lemma_sg and accel_lemma_sg ~= "—" and accel_lemma_sg ~= "-" and accel_lemma_sg:gsub(",.*", "") or
accel_lemma_pl and accel_lemma_pl ~= "—" and accel_lemma_pl ~= "-" and accel_lemma_pl:gsub(",.*", "") or
nil
for slot, accel_form in pairs(slots_to_accel_form) do
local form_args = args[slots_to_args[slot]]
if #form_args == 0 then
form_args = {"—"}
end
local forms = {}
for _, form_arg in ipairs(form_args) do
for _, form in ipairs(mw.text.split(form_arg, ", *")) do
table.insert(forms, form)
end
end
local table_arg = {}
for _, form in ipairs(forms) do
table.insert(table_arg, form == "—" and form or m_links.full_link{
lang = lang, term = form, accel = {
form = accel_form,
lemma = accel_lemma,
}
})
table_args[slot] = table.concat(table_arg, ", ")
end
end
if args.num == "pl" then
table_args.nom_sg = "—"
table_args.acc_sg = "—"
table_args.gen_sg = "—"
table_args.dat_sg = "—"
elseif args.num == "sg" then
table_args.nom_pl = "—"
table_args.acc_pl = "—"
table_args.gen_pl = "—"
table_args.dat_pl = "—"
end
local type = ''
if args["type"] then
type = type .. (args["type"]:gsub("^%l", string.upper))
end
if args.g then
type = type .. " (" .. (
args.g == "m" and "masculine" or
args.g == "f" and "feminine" or
args.g == "n" and "neuter" or
error("Unrecognized gender '" .. args.g .. "'")
) .. ")"
end
type = type .. ':'
local table = type .. (type and '\n')
table = table .. mw.getCurrentFrame():expandTemplate{
title = 'inflection-table-top',
args = {
title = '-',
palette = 'indigo'
}
}
table = table .. [=[
!
! singular
! plural
|-
! [[nominative case|nominative]]
| {nom_sg}
| {nom_pl}
|-
! [[accusative case|accusative]]
| {acc_sg}
| {acc_pl}
|-
! [[genitive case|genitive]]
| {gen_sg}
| {gen_pl}
|-
! [[dative case|dative]]
| {dat_sg}
| {dat_pl}
]=]
table = table .. mw.getCurrentFrame():expandTemplate{ title = 'inflection-table-bottom' }
return strutils.format(table, table_args)
end
return export
-- For Vim, so we get 4-space tabs
-- vim: set ts=4 sw=4 noet:
6q4c38268gm7fgsaauxkaywf80rjzyw
Module:ang-noun/documentation
828
144206
235657
2024-03-06T05:39:27Z
en>WingerBot
0
remove unnecessary categorization now handled automatically by [[Module:documentation]] and [[Module:module categorization]] (manually assisted)
235657
wikitext
text/x-wiki
{{documentation needed}}<!-- Replace this with a short description of the purpose of the module, and how to use it. -->
htv9bx6p31m48q39zcc87mucqafkwrv
235658
235657
2026-06-07T05:07:03Z
Lee
19
[[:en:Module:ang-noun/documentation]] වෙතින් එක් සංශෝධනයක්
235657
wikitext
text/x-wiki
{{documentation needed}}<!-- Replace this with a short description of the purpose of the module, and how to use it. -->
htv9bx6p31m48q39zcc87mucqafkwrv
ප්රවර්ගය:පුරාතන ඉංග්රීසි නාම පද වරනැගීම්-වගු සැකිලි
14
144207
235659
2026-06-07T05:08:41Z
Pinthura
2424
සේවා: [[:[[en:Category:Old English noun inflection-table templates]]]] තුළ තිබූ පෙළ මෙහි ඇතුළු කිරීම.
235659
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235660
235659
2026-06-07T05:08:51Z
Pinthura
2424
Pinthura විසින් [[ප්රවර්ගය:Old English noun inflection-table templates]] සිට [[ප්රවර්ගය:පුරාතන ඉංග්රීසි නාම පද වරනැගීම්-වගු සැකිලි]] වෙත පිටුව ගෙන යන ලදී: සේවා: නව ප්රවර්ග නාමය වෙත ගෙනයාම.
235659
wikitext
text/x-wiki
{{auto cat}}
eomzlm5v4j7ond1phrju7cnue91g5qx
235662
235660
2026-06-07T05:09:01Z
Pinthura
2424
සේවා: ඉංග්රීසි ව්යාපෘතිය වෙත සබැඳියක් එක් කිරීම.
235662
wikitext
text/x-wiki
{{auto cat}}
[[en:Category:Old English noun inflection-table templates]]
12d3ei3ce5wwzsooa8avu0zmmmzkdfw
ප්රවර්ගය:Old English noun inflection-table templates
14
144208
235661
2026-06-07T05:08:52Z
Pinthura
2424
Pinthura විසින් [[ප්රවර්ගය:Old English noun inflection-table templates]] සිට [[ප්රවර්ගය:පුරාතන ඉංග්රීසි නාම පද වරනැගීම්-වගු සැකිලි]] වෙත පිටුව ගෙන යන ලදී: සේවා: නව ප්රවර්ග නාමය වෙත ගෙනයාම.
235661
wikitext
text/x-wiki
#යළියොමුව [[:ප්රවර්ගය:පුරාතන ඉංග්රීසි නාම පද වරනැගීම්-වගු සැකිලි]]
75tytodjnd0zm6x4m44n8l87uzc3rsm
235663
235661
2026-06-07T05:09:11Z
Pinthura
2424
සේවා: යළියොමුව, මෘදු ප්රවර්ග යළියොමුවක් බවට හැරවීම.
235663
wikitext
text/x-wiki
{{category redirect|පුරාතන ඉංග්රීසි නාම පද වරනැගීම්-වගු සැකිලි}}
m4xpo86hef0o8tn40ed7azq9u5ts67k
ප්රවර්ගය:Old English නාම පද වරනැගීම්-වගු සැකිලි
14
144209
235664
2026-06-07T05:09:21Z
Pinthura
2424
සේවා: මෘදු ප්රවර්ග යළියොමුවක් නිර්මාණය.
235664
wikitext
text/x-wiki
{{category redirect|පුරාතන ඉංග්රීසි නාම පද වරනැගීම්-වගු සැකිලි}}
m4xpo86hef0o8tn40ed7azq9u5ts67k
ප්රවර්ගය:පුරාතන ඉංග්රීසි noun inflection-table templates
14
144210
235665
2026-06-07T05:09:31Z
Pinthura
2424
සේවා: මෘදු ප්රවර්ග යළියොමුවක් නිර්මාණය.
235665
wikitext
text/x-wiki
{{category redirect|පුරාතන ඉංග්රීසි නාම පද වරනැගීම්-වගු සැකිලි}}
m4xpo86hef0o8tn40ed7azq9u5ts67k
නිරික්සීමි
0
144211
235668
2026-06-07T11:17:38Z
WrdSrchSi
3305
Page created: + IPA|si + head|si|verb forms + infl of|si + example sentence + ප්රවර්ගය
235668
wikitext
text/x-wiki
==සිංහල==
===උච්චාරණය===
* {{IPA|si|/ˈniriksiːmi/}}
===ක්රියා පද===
{{head|si|verb forms|අනතීත-සකර්මක උත්තම ඒකවචන|නිරික්සමි#ක්රියා පද|අතීත-කර්ම කාරක උත්තම ඒකවචන|නිරික්සිණිමි#ක්රියා පද}}
# {{lb|si|සකර්මක}} {{infl of|si|නිරික්සයි#ක්රියා පද||අතීත|උත්තම පුරුෂ|ඒකවචන|ආඛ්යාත ක්රියා}}
#: ''{{{2|මම ඊයේ තෙලික්සුවෙන් තරු '''නිරික්සීමි'''.}}}''
[[ප්රවර්ගය: සිංහල ආඛ්යාත ක්රියා පද]]
oxhma30ivgd2yxqqbwrsruzqzjgjpdz
නිරික්සිණිමි
0
144212
235669
2026-06-07T11:22:26Z
WrdSrchSi
3305
Page created: + IPA|si + head|si|verb forms + infl of|si + example sentence + ප්රවර්ගය
235669
wikitext
text/x-wiki
==සිංහල==
===උච්චාරණය===
* {{IPA|si|/ˈniriksiɳimi/}}
===ක්රියා පද===
{{head|si|verb forms|අනතීත-සකර්මක උත්තම ඒකවචන|නිරික්සමි#ක්රියා පද|අනතීත-කර්ම කාරක උත්තම ඒකවචන|නිරික්සෙමි#ක්රියා පද}}
# {{infl of|si|නිරික්සයි||අතීත|කර්ම කාරක|උත්තම පුරුෂ|ඒකවචන|ආඛ්යාත ක්රියා}}
#: ''{{{2|මම ඊයේ නිරික්සුවන් විසින් '''නිරික්සිණිමි'''.}}}''
[[ප්රවර්ගය: සිංහල ආඛ්යාත ක්රියා පද]]
nrjn9c55b3hyw5pzzr1tag70jjsenkd
නිරික්සෙමි
0
144213
235670
2026-06-07T11:29:04Z
WrdSrchSi
3305
Page created: + IPA|si + head|si|verb forms + infl of|si + example sentence + ප්රවර්ගය
235670
wikitext
text/x-wiki
==සිංහල==
===උච්චාරණය===
* {{IPA|si|/ˈniriksemi/}}
===ක්රියා පද===
{{head|si|verb forms|head=නිරික්සෙමි|අනතීත-සකර්මක උත්තම ඒකවචන|නිරික්සමි#ක්රියා පද|අතීත-කර්ම කාරක උත්තම ඒකවචන|නිරික්සිණිමි#ක්රියා පද}}
# {{infl of|si|නිරික්සයි#ක්රියා පද||අනතීත|කර්ම කාරක|උත්තම පුරුෂ|ඒකවචන|ආඛ්යාත ක්රියා}}
#: ''{{{2|මම නිරික්සුවන් විසින් '''නිරික්සෙමි'''.)}}}''
[[ප්රවර්ගය: සිංහල ආඛ්යාත ක්රියා පද]]
q3kjizulgus92svl1ktywqkmqa8183m
235673
235670
2026-06-07T11:39:15Z
WrdSrchSi
3305
/* ක්රියා පද */ Fixed.
235673
wikitext
text/x-wiki
==සිංහල==
===උච්චාරණය===
* {{IPA|si|/ˈniriksemi/}}
===ක්රියා පද===
{{head|si|verb forms|head=නිරික්සෙමි|අනතීත-සකර්මක උත්තම ඒකවචන|නිරික්සමි#ක්රියා පද|අතීත-කර්ම කාරක උත්තම ඒකවචන|නිරික්සිණිමි#ක්රියා පද}}
# {{infl of|si|නිරික්සයි#ක්රියා පද||අනතීත|කර්ම කාරක|උත්තම පුරුෂ|ඒකවචන|ආඛ්යාත ක්රියා}}
#: ''{{{2|මම නිරික්සුවන් විසින් '''නිරික්සෙමි'''.}}}''
[[ප්රවර්ගය: සිංහල ආඛ්යාත ක්රියා පද]]
0q6w21xb1b4xg839wi018fbev7ukuyx
සුවික්සීමි
0
144214
235671
2026-06-07T11:34:50Z
WrdSrchSi
3305
Page created: + IPA|si + head|si|verb forms + infl of|si + example sentence + ප්රවර්ගය
235671
wikitext
text/x-wiki
==සිංහල==
===උච්චාරණය===
* {{IPA|si|/ˈsuʋiksiːmi/}}
===ක්රියා පද===
{{head|si|verb forms|අනතීත-සකර්මක උත්තම ඒකවචන|සුවික්සමි#ක්රියා පද|අතීත-කර්ම කාරක උත්තම ඒකවචන|සුවික්සිණිමි#ක්රියා පද}}
# {{lb|si|සකර්මක}} {{infl of|si|සුවික්සයි#ක්රියා පද||අතීත|උත්තම පුරුෂ|ඒකවචන|ආඛ්යාත ක්රියා}}
#: ''{{{2|මම ඔවුන් වැඩ '''සුවික්සීමි'''.}}}''
[[ප්රවර්ගය: සිංහල ආඛ්යාත ක්රියා පද]]
5myetrj62mdor7thm65490x5usylkrt
සුවික්සිණිමි
0
144215
235672
2026-06-07T11:37:51Z
WrdSrchSi
3305
Page created: + IPA|si + head|si|verb forms + infl of|si + example sentence + ප්රවර්ගය
235672
wikitext
text/x-wiki
==සිංහල==
===උච්චාරණය===
* {{IPA|si|/ˈsuʋiksiɳimi/}}
===ක්රියා පද===
{{head|si|verb forms|අනතීත-සකර්මක උත්තම ඒකවචන|සුවික්සමි#ක්රියා පද|අනතීත-කර්ම කාරක උත්තම ඒකවචන|සුවික්සෙමි#ක්රියා පද}}
# {{infl of|si|සුවික්සයි||අතීත|කර්ම කාරක|උත්තම පුරුෂ|ඒකවචන|ආඛ්යාත ක්රියා}}
#: ''{{{2|මම ඊයේ සුවික්සුවන් විසින් '''සුවික්සිණිමි'''.}}}''
[[ප්රවර්ගය: සිංහල ආඛ්යාත ක්රියා පද]]
h001y8n17l45bpkzegocxl8jes5y5zh
සුවික්සෙමි
0
144216
235674
2026-06-07T11:41:50Z
WrdSrchSi
3305
Page created: + IPA|si + head|si|verb forms + infl of|si + example sentence + ප්රවර්ගය
235674
wikitext
text/x-wiki
==සිංහල==
===උච්චාරණය===
* {{IPA|si|/ˈsuʋiksemi/}}
===ක්රියා පද===
{{head|si|verb forms|head=සුවික්සෙමි|අනතීත-සකර්මක උත්තම ඒකවචන|සුවික්සමි#ක්රියා පද|අතීත-කර්ම කාරක උත්තම ඒකවචන|සුවික්සිණිමි#ක්රියා පද}}
# {{infl of|si|සුවික්සයි#ක්රියා පද||අනතීත|කර්ම කාරක|උත්තම පුරුෂ|ඒකවචන|ආඛ්යාත ක්රියා}}
#: ''{{{2|මම සුවික්සුවන් විසින් '''සුවික්සෙමි'''.}}}''
[[ප්රවර්ගය: සිංහල ආඛ්යාත ක්රියා පද]]
23fqj3u5gaq3obikc4s1bz02ex6h6b4