Wiktionary
thwiktionary
https://th.wiktionary.org/wiki/%E0%B8%A7%E0%B8%B4%E0%B8%81%E0%B8%B4%E0%B8%9E%E0%B8%88%E0%B8%99%E0%B8%B2%E0%B8%99%E0%B8%B8%E0%B8%81%E0%B8%A3%E0%B8%A1:%E0%B8%AB%E0%B8%99%E0%B9%89%E0%B8%B2%E0%B8%AB%E0%B8%A5%E0%B8%B1%E0%B8%81
MediaWiki 1.47.0-wmf.17
case-sensitive
สื่อ
พิเศษ
พูดคุย
ผู้ใช้
คุยกับผู้ใช้
วิกิพจนานุกรม
คุยเรื่องวิกิพจนานุกรม
ไฟล์
คุยเรื่องไฟล์
มีเดียวิกิ
คุยเรื่องมีเดียวิกิ
แม่แบบ
คุยเรื่องแม่แบบ
วิธีใช้
คุยเรื่องวิธีใช้
หมวดหมู่
คุยเรื่องหมวดหมู่
ภาคผนวก
คุยเรื่องภาคผนวก
ดัชนี
คุยเรื่องดัชนี
สัมผัส
คุยเรื่องสัมผัส
อรรถาภิธาน
คุยเรื่องอรรถาภิธาน
TimedText
TimedText talk
มอดูล
คุยเรื่องมอดูล
Event
Event talk
ช
0
8945
5759152
2695214
2026-08-26T21:09:09Z
~2026-46796-18
19447
/* ภาษาไทย */
5759152
wikitext
text/x-wiki
{{character info}}
{{also/auto}}
== ภาษาร่วม ==
=== การออกเสียง ===
* (''พยัญชนะต้น'') {{IPA|mul|/t͡ɕʰ-/}}
* (''พยัญชนะสะกด'') {{IPA|mul|/-t̚/}}
=== ตัวอักษร ===
{{mul-letter}}
# พยัญชนะในอักษรไทย ใช้แทนเสียง /t͡ɕʰ/ หรือเสียงที่ใกล้เคียงเช่น /ɟ/, /ʝ/, /ɕ/, /t͡ʃʰ/, /t͡ʃʼ/, /ʃ/, /ʒ/, /ʄ/
== ภาษาขจขชชึึย ==
{{wp}}
=== รากศัพท์ 1 ===
==== รูปแบบอื่น ====
* {{q|ลายสือไทย}} [[ไฟล์:ช laisuethai.png|x24px|text-bottom|class=skin-invert-image|alt=ช]]
* {{alt|th|-..-||รหัสมอร์ส}}
* {{q|อักษรเบรลล์}} {{l|mul|⠬}}
==== การออกเสียง ====
{{th-pron|ชอ|ชอ-ช้าง}}
==== ตัวอักษร ====
{{th-letter}}
# [[พยัญชนะ]][[ตัว]][[ที่]] 10 [[เรียก]][[ว่า]] ช [[ช้าง]] [[เป็น]][[อักษรต่ำ]] [[ใช้]][[เป็น]][[พยัญชนะต้น]] [[และ]][[เป็น]][[ตัวสะกด]][[ใน]][[มาตรากด]][[หรือ]][[แม่กด]] [[เช่น]] [[ราช]] [[คช]] [[กริช]] [[แซนด์วิช]]
=== รากศัพท์ 2 ===
ย่อมาจาก{{der|th|pi|ชลน||ไฟ}}
==== การออกเสียง ====
{{th-pron|ชะ}}
==== คำนาม ====
{{th-noun}}
# [[ชื่อ]][[คณะฉันท์]] [[มี]][[ลหุ]]-[[ครุ]]-[[ลหุ]] [[เรียก]][[ว่า]] ช คณะ
== ภาษาบาลี ==
===ปัจจัย===
{{head|pi|ปัจจัย}}
# [[เกิด]] (ใช้ประกอบท้ายคำบางคำ)
#: {{ux|th|ปงฺกช|[[บงกช]], เกิดในเปลือกตม หมายถึง [[บัว]]}}
#: {{ux|th|วาริช|เกิดในน้ำ หมายถึง [[ปลา]]}}
#: {{ux|th|ทฺวิช|[[ทวิช]], เกิด 2 ครั้ง หมายถึง [[พราหมณ์]], [[นก]]}}
qs4fv9ly2tn3bar7hx3zyrnozo4l4ng
5759153
5759152
2026-08-26T21:15:56Z
~2026-46796-18
19447
/* ภาษาขจขชชึึย */
5759153
wikitext
text/x-wiki
{{character info}}
{{also/auto}}
== ภาษาร่วม ==
=== การออกเสียง ===
* (''พยัญชนะต้น'') {{IPA|mul|/t͡ɕʰ-/}}
* (''พยัญชนะสะกด'') {{IPA|mul|/-t̚/}}
=== ตัวอักษร ===
{{mul-letter}}
# พยัญชนะในอักษรไทย ใช้แทนเสียง /t͡ɕʰ/ หรือเสียงที่ใกล้เคียงเช่น /ɟ/, /ʝ/, /ɕ/, /t͡ʃʰ/, /t͡ʃʼ/, /ʃ/, /ʒ/, /ʄ/
== ภาษาขจขชชึึยึึุถคถจขุุุุใจ ==
{{wp}}
=== รากศัพท์ 1 ===
==== รูปแบบอื่น ====
* {{q|ลายสือไทย}} [[ไฟล์:ช laisuethai.png|x24px|text-bottom|class=skin-invert-image|alt=ช]]
* {{alt|th|-..-||รหัสมอร์ส}}
* {{q|อักษรเบรลล์}} {{l|mul|⠬}}
==== การออกเสียงลฃ0 ====
==== ตัวอักษร ====
{{th-letter}}
# [[พยัญชนะ]][[ตัว]][[ที่]] 10 [[เรียก]][[ว่า]] ช [[ช้าง]] [[เป็น]][[อักษรต่ำ]] [[ใช้]][[เป็น]][[พยัญชนะต้น]] [[และ]][[เป็น]][[ตัวสะกด]][[ใน]][[มาตรากด]][[หรือ]][[แม่กด]] [[เช่น]] [[ราช]] [[คช]] [[กริช]] [[แซนด์วิช]]
=== รากศัพท์ 2 ===
ย่อมาจาก{{der|th|pi|ชลน||ไฟ}}
==== การออกเสียง ====
{{th-pron|ชะ}}
==== คำนาม ====
{{th-noun}}
# [[ชื่อ]][[คณะฉันท์]] [[มี]][[ลหุ]]-[[ครุ]]-[[ลหุ]] [[เรียก]][[ว่า]] ช คณะ
== ภาษาบาลี ==
===ปัจจัย===
{{head|pi|ปัจจัย}}
# [[เกิด]] (ใช้ประกอบท้ายคำบางคำ)
#: {{ux|th|ปงฺกช|[[บงกช]], เกิดในเปลือกตม หมายถึง [[บัว]]}}
#: {{ux|th|วาริช|เกิดในน้ำ หมายถึง [[ปลา]]}}
#: {{ux|th|ทฺวิช|[[ทวิช]], เกิด 2 ครั้ง หมายถึง [[พราหมณ์]], [[นก]]}}
tce2va65hlk9lr7shqz5sd8polrvltr
5759154
5759153
2026-08-26T21:32:31Z
Alifshinobi
397
ย้อนการแก้ไขโดย [[Special:Contributions/~2026-46796-18|~2026-46796-18]] ([[User talk:~2026-46796-18|คุย]]) ไปยังรุ่นแก้ไขล่าสุดโดย [[User:Octahedron80|Octahedron80]]
2695214
wikitext
text/x-wiki
{{character info}}
{{also/auto}}
== ภาษาร่วม ==
=== การออกเสียง ===
* (''พยัญชนะต้น'') {{IPA|mul|/t͡ɕʰ-/}}
* (''พยัญชนะสะกด'') {{IPA|mul|/-t̚/}}
=== ตัวอักษร ===
{{mul-letter}}
# พยัญชนะในอักษรไทย ใช้แทนเสียง /t͡ɕʰ/ หรือเสียงที่ใกล้เคียงเช่น /ɟ/, /ʝ/, /ɕ/, /t͡ʃʰ/, /t͡ʃʼ/, /ʃ/, /ʒ/, /ʄ/
== ภาษาไทย ==
{{wp}}
=== รากศัพท์ 1 ===
==== รูปแบบอื่น ====
* {{q|ลายสือไทย}} [[ไฟล์:ช laisuethai.png|x24px|text-bottom|class=skin-invert-image|alt=ช]]
* {{alt|th|-..-||รหัสมอร์ส}}
* {{q|อักษรเบรลล์}} {{l|mul|⠬}}
==== การออกเสียง ====
{{th-pron|ชอ|ชอ-ช้าง}}
==== ตัวอักษร ====
{{th-letter}}
# [[พยัญชนะ]][[ตัว]][[ที่]] 10 [[เรียก]][[ว่า]] ช [[ช้าง]] [[เป็น]][[อักษรต่ำ]] [[ใช้]][[เป็น]][[พยัญชนะต้น]] [[และ]][[เป็น]][[ตัวสะกด]][[ใน]][[มาตรากด]][[หรือ]][[แม่กด]] [[เช่น]] [[ราช]] [[คช]] [[กริช]] [[แซนด์วิช]]
=== รากศัพท์ 2 ===
ย่อมาจาก{{der|th|pi|ชลน||ไฟ}}
==== การออกเสียง ====
{{th-pron|ชะ}}
==== คำนาม ====
{{th-noun}}
# [[ชื่อ]][[คณะฉันท์]] [[มี]][[ลหุ]]-[[ครุ]]-[[ลหุ]] [[เรียก]][[ว่า]] ช คณะ
== ภาษาบาลี ==
===ปัจจัย===
{{head|pi|ปัจจัย}}
# [[เกิด]] (ใช้ประกอบท้ายคำบางคำ)
#: {{ux|th|ปงฺกช|[[บงกช]], เกิดในเปลือกตม หมายถึง [[บัว]]}}
#: {{ux|th|วาริช|เกิดในน้ำ หมายถึง [[ปลา]]}}
#: {{ux|th|ทฺวิช|[[ทวิช]], เกิด 2 ครั้ง หมายถึง [[พราหมณ์]], [[นก]]}}
j5sne36aex4u4u7flllw4fy1xy45ltw
นอน
0
33342
5759165
5627229
2026-08-27T11:12:58Z
Ai Ku Karng
17824
5759165
wikitext
text/x-wiki
== ภาษาไทย ==
=== รากศัพท์ ===
{{inh+|th|tai-pro|*nwɯːnᴬ}}; ร่วมเชื้อสายกับ{{cog|nod|ᨶᩬᩁ}}, {{cog|kkh|ᨶᩬᩁ}}, {{cog|lo|ນອນ}}, {{cog|khb|ᦓᦸᧃ}}, {{cog|blt|ꪙꪮꪙ}}, {{cog|twh|ꪙꪮꪙ}}, {{cog|shn|ၼွၼ်း}}, {{cog|tdd|ᥘᥩᥢᥰ}} หรือ {{m|tdd|ᥢᥩᥢᥰ}}, {{cog|aio|ꩫွꩫ်}}, {{cog|phk|ꩫွꩫ်}}, {{cog|aho|𑜃𑜨𑜃𑜫}}, {{cog|zhn|noanz}}
=== การออกเสียง ===
{{th-pron|นอน}}
=== คำกริยา ===
{{th-verb}}
# {{lb|th|อกรรม}} [[เอน]][[ตัว]][[ลง]][[กับ]][[พื้น]][[หรือ]][[ที่]][[ใด]] ๆ
# [[อาการ]]ที่[[สัตว์]]เอนตัวลงกับพื้น[[เพื่อ]][[พักผ่อน]]เป็นต้นหรือ[[ยืน]][[หลับ]][[อยู่]]กับที่
# อาการที่[[ทำ]][[ให้]][[ของ]][[สูง]] ๆ [[ทอด]]ลง
#: {{ux|th|เอาเสานอนลง}}
# อาการที่[[พรรณไม้]][[บาง]][[ชนิด]] เช่น [[จามจุรี]] [[ผัก]][[กระเฉด]] [[ไมยราบ]] [[หลุบ]][[ใบ]][[ใน]][[เวลา]][[ใกล้]][[จะ]][[สิ้น]][[แสง]][[ตะวัน]]
# {{lb|th|ปาก|สแลง}} [[มี]][[เพศสัมพันธ์]]
==== คำแปลภาษาอื่น ====
{{trans-top|เอนตัวลงกับพื้นเพื่อพักผ่อน}}
* คำเมือง: {{t+|nod|ᨶᩬᩁ}}
* ไทใหญ่: {{t+|shn|ၼွၼ်း}}
* ฝรั่งเศส: {{t+|fr|dormir}}
* พม่า: {{t+|my|အိပ်}}
* ลาว: {{t+|lo|ນອນ}}
* สเปน: {{t+|es|dormir}}
* อังกฤษ: {{t+|en|sleep|tr=สลีป}}
{{trans-bottom}}
=== คำคุณศัพท์ ===
{{th-adj|-}}
# [[ลักษณะ]]ที่[[ตรงข้าม]]กับ ยืน หรือ [[ตั้ง]]
#: {{ux|th|แนวนอน}}
#: {{ux|th|แปนอน}}
== ภาษาญ้อ ==
=== รากศัพท์ ===
{{inh+|nyw|tai-pro|*nwɯːnᴬ}}; ร่วมเชื้อสายกับ{{cog|th|นอน}}, {{cog|lo|ນອນ}}, {{cog|nod|ᨶᩬᩁ}}, {{cog|kkh|ᨶᩬᩁ}}, {{cog|khb|ᦓᦸᧃ}}, {{cog|blt|ꪙꪮꪙ}}, {{cog|twh|ꪙꪮꪙ}}, {{cog|shn|ၼွၼ်း}}, {{cog|tdd|ᥘᥩᥢᥰ}} หรือ {{m|tdd|ᥢᥩᥢᥰ}}, {{cog|aio|ꩫွꩫ်}}, {{cog|phk|ꩫွꩫ်}}, {{cog|aho|𑜃𑜨𑜃𑜫}}, {{cog|skb|นู๊น}}, {{cog|za|ninz}}, {{cog|zhn|noanz}}
=== การออกเสียง ===
* {{IPA|nyw|/nɔːn˨˨/|a=สว่างแดนดิน}}
=== คำกริยา ===
{{nyw-verb}}
# [[นอน]]
== ภาษาคำเมือง ==
=== การออกเสียง ===
* {{IPA|nod|/nɔːn˧˧/|a=เชียงใหม่}}
=== คำกริยา ===
{{nod-verb}}
# {{lb|nod|อกรรม}} {{alternative form of|nod|ᨶᩬᩁ}}
8qbgp97ma02acva8ncnjqarwe3m2ey0
มอดูล:Jpan-headword
828
37729
5759155
5759139
2026-08-27T00:44:37Z
Octahedron80
267
5759155
Scribunto
text/plain
local m_ja = require("Module:ja")
local m_ja_ruby = require("Module:ja-ruby")
local m_str_utils = require("Module:string utilities")
local byteoffset = mw.ustring.byteoffset
local concat = table.concat
local gsplit = m_str_utils.gsplit
local insert = table.insert
local kana_to_romaji = require("Module:Hrkt-translit").tr
local max_index = require("Module:table").maxIndex
local moraify = m_ja.moraify
local remove = table.remove
local ugmatch = mw.ustring.gmatch
local ugsub = m_str_utils.gsub
local ulen = m_str_utils.len
local ulower = m_str_utils.lower
local umatch = mw.ustring.match
local usub = m_str_utils.sub
local export = {}
local pos_functions = {}
local range = mw.loadData('Module:ja/data/range')
local Jpan = require("Module:scripts").getByCode("Jpan")
local function remove_links(text)
return (text:gsub("%[%[[^|%]]-|", "")
:gsub("%[%[", "")
:gsub("%]%]", ""))
end
local function assign_kana_to_kanji(head, kana, pagename, template_name)
-- TODO: uses deprecated module
local m_tu = require'Module:template utilities'
local kanji_pos = {[0] = {nil, 0}}
local head_nolink = {}
local link_border = 0
local function insert_kanji_pos(substr)
insert(head_nolink, substr)
for p1, w1 in ugmatch(substr, '()([々' .. range.kanji .. '])') do
p1 = byteoffset(substr, p1) + link_border
insert(kanji_pos, {p1, p1 + w1:len() - 1})
end
end
for p1, p2, w1 in m_tu.gfind_bracket(head, {['%[%['] = ']]'}) do
insert_kanji_pos(head:sub(link_border + 1, p1 - 1))
local p_pipe = w1:find'|' or 2
link_border = p1 + p_pipe - 1
insert_kanji_pos(w1:sub(p_pipe + 1, -3))
link_border = p2
end
insert_kanji_pos(head:sub(link_border + 1))
head_nolink = concat(head_nolink)
local pagetext = mw.title.new(pagename):getContent()
if not pagetext then return head, kana end
local non_kanji = {}
local last_kanji = 1
for p1 in ugmatch(head_nolink, '[々' .. range.kanji .. ']()') do
insert(non_kanji, usub(head_nolink, last_kanji, p1 - 2))
last_kanji = p1
end
insert(non_kanji, usub(head_nolink, last_kanji))
for kanjitab in pagetext:gmatch('(){{%s*' .. template_name) do
kanjitab = select(3, m_tu.find_bracket(pagetext, m_tu.brackets_temp, kanjitab))
if not kanjitab then error('ill-formed [[t:' .. template_name:gsub('%%', '') .. ']] syntax') end
kanjitab = m_tu.parse_temp(kanjitab)
local readings = {}
local readings_len = {}
for i = 1, max_index(kanjitab.args) do
local r_i = kanjitab.args[i] or ''
local r_o = kanjitab.args['o' .. i] or ''
if kanjitab.args['k' .. i] then
readings[i] = kanjitab.args['k' .. i] .. r_o
readings_len[i] = tonumber(r_i:match'^%s*%D*(%d*)%s*$') or 1
else
local r_kana, r_len = r_i:match'^%s*(%D*)(%d*)%s*$'
readings[i] = r_kana .. r_o
readings_len[i] = tonumber(r_len) or 1
end
end
local kana_decom = {}
local reading_id = 1
local reading_len = 1
for i = 1, #non_kanji - 1 do
if reading_len <= 1 then
reading_len = readings_len[reading_id] or 1
insert(kana_decom, non_kanji[i])
insert(kana_decom, readings[reading_id])
reading_id = reading_id + 1
else
reading_len = reading_len - 1
end
end
insert(kana_decom, non_kanji[#non_kanji])
local function strip_nonkana(str, repl)
return ugsub(str, '[^' .. range.kana .. ']+', repl) or nil
end
local xeno_reading = {strip_nonkana(kana, ''):match('^' .. strip_nonkana(concat(kana_decom), '(.-)') .. '$')}
if #xeno_reading > 0 then
local head_decom = {}
reading_id = 1
reading_len = 1
for i = 1, #non_kanji - 1 do
if reading_len <= 1 then
reading_len = readings_len[reading_id] or 1
insert(head_decom, head:sub(kanji_pos[i - 1][2] + 1, kanji_pos[i][1] - 1))
insert(head_decom, head:sub(kanji_pos[i][1], kanji_pos[i + reading_len - 1][2]))
reading_id = reading_id + 1
else
reading_len = reading_len - 1
end
end
insert(head_decom, head:sub(kanji_pos[#non_kanji - 1][2] + 1))
if #head_decom ~= #kana_decom then error('number of parameters in [[t:' .. template_name:gsub('%%', '') .. ']] is incorrect') end
local n_xeno_reading = 0
for i = 1, #kana_decom, 2 do
kana_decom[i] = ugsub(kana_decom[i], '[^' .. range.kana .. ']+', function()
n_xeno_reading = n_xeno_reading + 1
if xeno_reading[n_xeno_reading] == '' then return nil
else return xeno_reading[n_xeno_reading] end
end)
end
return concat(head_decom, '%'), concat(kana_decom, '%')
end
end
return head, kana
end
local en_grades = {
"ระดับ 1", "ระดับ 2", "ระดับ 3",
"ระดับ 4", "ระดับ 5", "ระดับ 6",
"ระดับมัธยมศึกษา", "จิมเมโย", "เฮียวไงจิ"
}
local aliases = {
['transitive']='tr', ['trans']='tr', ['สกรรม']='tr',
['intransitive']='in', ['intrans']='in', ['intr']='in', ['อกรรม']='in',
['godan']='1', ['ichidan']='2', ['irregular']='irr',
['โกดัง']='1', ['อิจิดัง']='2', ['ไม่ปรกติ']='irr'
}
local adverbs_optional_tag = 'optionally '
local adverbs_optional_aliases = {
['to']='と', ['と']='と', ['ト']='と',
['ni']='に', ['に']='に', ['ニ']='に',
}
local adverbs_optional_links = {
['と']='[[と#ภาษาญี่ปุ่น:_adverbs|と]]',
['に']='[[に]]',
}
local function formatting_adjustments(rom, kana, pos_category)
-- hyphens for prefixes, suffixes, and counters (classifiers)
if pos_category == "อุปสรรค" then
rom = rom:gsub('%-?$', '-')
elseif pos_category == "ปัจจัย" or pos_category == "รูปปัจจัย" or pos_category == "คำลักษณนาม" then
rom = rom:gsub('^%-?', '-')
elseif pos_category == "คำวิสามานยนาม" and not kana:match'%^' then -- automatic caps for proper nouns, if not already specified
rom = ugsub(ugsub(rom, '%f[^%s%c%p]%l', string.uupper), "%w'%u", ulower) -- no caps after medial apostrophes
end
return rom
end
local function kana_to_romaji_with_pos_format(kana, data, args)
if data.headword.pos_category == "combining forms" or data.headword.pos_category == "เครื่องหมายวรรคตอน" or data.headword.pos_category == "เครื่องหมายซ้ำ" then
return "-"
end
local rom = remove_links(kana_to_romaji(kana, data.lang_code))
-- make adjustments for -u verbs and -i adjectives
if args['infl'] == '1' or args['infl'] == '1s' or args['infl'] == 'godan' then
rom = rom:gsub('ō$', 'ou'):gsub('ū$', 'uu')
elseif args['infl'] == 'i' or args['infl'] == 'is' or args['infl'] == 'い' then
rom = rom:gsub('ī$', 'ii')
end
return formatting_adjustments(rom, kana, data.headword.pos_category)
end
local function iterate_rare_chars(text)
local ch, i
return function()
repeat
ch, i = umatch(text, "([" .. range.kana .. range.kana_graph .. "!-/:-@%[\\-`×△○◎。-〠〶〷〻-〽・·゠=~][゙゚]*)()", i)
until not (ch and umatch(ch, "^[ぁ-ちっつて-ろんァ-チッツテ-ロンヲ-゚]$"))
return ch
end
end
local function historical_kana(data, hist_kana, modern_kana)
-- Disallow historical kana for kana and morae, as there's no one-to-one correspondence.
local pos = data.headword.pos_category
if pos == "พยางค์" or pos == "คานะ" or pos == "มอรา" then
error(("Cannot specify historical kana for %s."):format(pos))
end
local hist_kana_no_formatting = hist_kana:gsub("[%^%-%. %%]+", "")
local rare_chars, lang_name, hc = {}, data.lang_name, data.headword.categories
for ch in iterate_rare_chars(hist_kana_no_formatting) do
if not (modern_kana and modern_kana:find(ch)) then
rare_chars[ch] = true
end
end
for _, mora in ipairs(moraify((ugsub(hist_kana_no_formatting, "[^" .. range.kana .. "]+", " ")))) do
if not (mora:gsub(" +", ""):match("^.?[\128-\191]*$") or (modern_kana and modern_kana:find(mora))) then
rare_chars[mora] = true
end
end
for ch in pairs(rare_chars) do
insert(hc, lang_name .. " terms historically spelled with " .. ch)
end
insert(data.info_hist, require("Module:ja-link").link({
lang = data.headword.lang,
lemma = hist_kana,
tr = formatting_adjustments(
remove_links(kana_to_romaji(hist_kana, data.lang_code, nil, {hist = true})),
hist_kana,
pos
),
}, {
face = "head",
disableSelfLink = true,
}))
end
local function detect_pagename_kana(data, digraphs)
local pagename = data.pagename
-- Exclude "&" and "@", which are part of %p (e.g. リズム&ブルース).
local function remove_kana(m)
return m:match("[&@]") or ""
end
if ugsub(pagename, '[%p%s%c' .. range.hiragana .. (digraphs and "ゟ" or "") .. ']', remove_kana) == "" then
return 'hira'
elseif ugsub(pagename, '[%p%s%c' .. range.katakana .. (digraphs and "ヿ" or "") .. ']', remove_kana) == "" then
return 'kata'
elseif ugsub(pagename, '[%p%s%c' .. range.kana .. (digraphs and "ゟヿ" or "") .. ']', remove_kana) == "" then
return 'both'
end
end
-- go through args and build inflections by finding whatever kanas were given to us
local function format_headword(args, data)
local pagename, kanas, lang_name = data.pagename, data.kanas, data.lang_name
data.pagename_kana = detect_pagename_kana(data)
if args[1][1] and not args[1][1]:match'[\128-\255]' then
-- filter out POS designations
remove(args[1], 1)
end
local linked_translit = data.headword.lang:link_tr(Jpan)
local suru_ending, rom_suru_ending
if data.headword.pos_category == "คำกริยา する" then
suru_ending = "[[する]]"
rom_suru_ending = linked_translit and " [[suru]]" or " suru"
else
suru_ending, rom_suru_ending = "", ""
end
if data.pagename_kana then -- pure-kana-title entry
if #args.head > 0 or args.head.default then
insert(data.headword.categories, lang_name .. " terms with redundant head parameter")
end
-- {{ja-xxx}} vs {{ja-xxx|こ.うし}} vs {{ja-xxx|コウシ}} in [[こうし]]
if not args[1][1] then
args[1][1] = pagename
elseif remove_links(args[1][1]:gsub("[%^%-%. %%]+", "")) ~= pagename then
insert(args[1], 1, pagename)
end
for i, k in ipairs(args[1]) do
insert(data.headword.heads, {
term = k:gsub("[%^%-%. %%]+", "") .. suru_ending,
tr = '-',
l = args.label[i] and {args.label[i]} or nil,
})
end
for i = 1, math.max(args.rom.maxindex, 1) do
local rom = args.rom[i] or args.rom.default or kana_to_romaji_with_pos_format(args[1][1], data, args)
if not data.headword.heads[i] then
data.headword.heads[i] = {term = data.headword.heads[i-1].term}
end
if rom == "-" then
data.headword.heads[i].tr = "-"
elseif linked_translit then
data.headword.heads[i].tr = "[[" .. rom .. "]]" .. rom_suru_ending
else
data.headword.heads[i].tr = rom .. rom_suru_ending
end
if not data.inflection_base.form then
data.inflection_base.form = remove_links(args[i][1]:gsub("[%^%-%. %%]+", "")) .. suru_ending
data.inflection_base.romaji = rom .. rom_suru_ending
end
end
kanas[1] = pagename
if args.hist[1] then
historical_kana(data, args.hist[1], args[1][1])
end
else -- non-pure-kana-title entry
if #args[1] == 0 and not (data.headword.pos_category == "เครื่องหมายวรรคตอน" or data.headword.pos_category == "เครื่องหมายซ้ำ" or data.headword.pos_category == "สัญลักษณ์") then
error("Kana form is required.")
end
if args.head.default == pagename then
insert(data.headword.categories, lang_name .. " terms with redundant head parameter")
end
local rom_repetition_final = {}
for i, k in ipairs(args[1]) do
local rom_auto = kana_to_romaji_with_pos_format(k, data, args)
local head = args.head[i] or args.head.default or pagename
if args.head[i] == pagename then
insert(data.headword.categories, lang_name .. " terms with redundant head parameter")
end
local head_for_ruby, kana_for_ruby
if ulen(head) > 1 and head:match'%%' == nil and k:match'%%' == nil then
head_for_ruby, kana_for_ruby = assign_kana_to_kanji(head, k, pagename, data.lang_code .. '%-kanjitab')
else
head_for_ruby, kana_for_ruby = head, k
end
local format_table = m_ja_ruby.parse_text(head_for_ruby, kana_for_ruby, {
try = 'force',
try_force_limit = 10000,
})
local kana_bare = remove_links(k:gsub("[%^%-%. %%]+", ""))
local rom = args.rom[i] or args.rom.default or rom_auto
head = {
term = m_ja_ruby.to_wiki(format_table, {
break_link = true,
}):gsub('<rt>(..-)</rt>', "<rt>[[" .. kana_bare .."|%1]]</rt>") .. suru_ending,
l = args.label[i] and {args.label[i]} or nil,
}
if rom == "-" or rom_repetition_final[rom] then
head.tr = "-"
elseif linked_translit then
head.tr = "[[" .. rom .. "]]" .. rom_suru_ending
else
head.tr = rom .. rom_suru_ending
end
insert(data.headword.heads, head)
rom_repetition_final[rom] = true
insert(kanas, kana_bare)
if args.hist[i] then
historical_kana(data, args.hist[i], k)
end
if not data.inflection_base.form then
data.inflection_base.form = remove_links(m_ja_ruby.to_markup(format_table)) .. suru_ending
data.inflection_base.romaji = rom .. rom_suru_ending
end
end
local first_reading, multiple = kanas[1]
if not first_reading then
return
end
first_reading = ulower(kana_to_romaji(first_reading, data.lang_code)):gsub("%%", "")
for i = 2, #kanas do
if ulower(kana_to_romaji(kanas[i], data.lang_code)):gsub("%%", "") ~= first_reading then
multiple = true
break
end
end
if not multiple then
local lang_code = data.lang_code
local content = mw.title.getCurrentTitle():getContent()
local loc1, loc2 = content:find("%f[^%z%s]==%s*" .. lang_name:gsub("%-", "%%%-") .. "%s*==()")
loc2 = content:find("%f[^%z%s]==[^\n=]+==", loc2)
if loc1 then
content = content:sub(loc1, loc2)
for template in require("Module:template parser").find_templates(content) do
local name, reading = template:get_name()
if (
name == lang_code .. "-head" or
name == lang_code .. "-pos"
) then
reading = template:get_arguments()[2]
if reading ~= nil then
reading = remove_links(reading):gsub("%%", "")
end
elseif (
name == lang_code .. "-noun" or
name == lang_code .. "-verb" or
name == lang_code .. "-adj" or
name == lang_code .. "-phrase" or
name == lang_code .. "-verb form" or
name == lang_code .. "-verb-suru"
) then
reading = template:get_arguments()[1]
if reading ~= nil then
reading = remove_links(reading):gsub("%%", "")
end
elseif name == lang_code .. "-see" then
reading = template:get_arguments()[1]
if reading ~= nil then
reading = remove_links(reading):gsub("%%", "")
end
-- if umatch(reading, "[^" .. range.kana .. "]") then
-- TODO: check linked page
-- end
end
if reading and ulower(kana_to_romaji(reading, lang_code)):gsub("%%", "") ~= first_reading then
multiple = true
end
end
end
end
if multiple then
insert(data.headword.categories, lang_name .. " terms with multiple readings")
end
end
end
local function add_transitivity(data, tr)
local categories, lang_name = data.headword.categories, data.lang_name
tr = aliases[tr] or tr
if tr == "tr" then
insert(data.info_mid, 'สกรรม')
insert(categories, "คำสกรรมกริยา" .. lang_name)
elseif tr == "in" then
insert(data.info_mid, 'อกรรม')
insert(categories, "คำอกรรมกริยา" .. lang_name)
elseif tr == "both" then
insert(data.info_mid, 'สกรรมหรืออกรรม')
insert(categories, "คำสกรรมกริยา" .. lang_name)
insert(categories, "คำอกรรมกริยา" .. lang_name)
else
insert(categories, "คำกริยา" .. lang_name .. "ที่ไม่มีสกรรมลักษณะ")
end
end
local function get_final(lemma, data)
--return kana_to_romaji(remove(moraify(m_ja_ruby.to_ruby(m_ja_ruby.parse_markup(lemma)))), data.lang_code)
return remove(moraify(m_ja_ruby.to_ruby(m_ja_ruby.parse_markup(lemma))))
end
local function add_language_fragment(t, lang_name)
for k, v in ipairs(t) do
t[k] = v:gsub("%[%[([^]#]*)%]%]", function (s)
return "[[" .. s .. "#" .. lang_name .. "|" .. s .. "]]"
end)
end
end
local function add_inflections(data, inflection_type, cat_suffix)
local lang_name = data.lang_name
local lemma = data.inflection_base.form
local romaji = data.inflection_base.romaji
inflection_type = aliases[inflection_type] or inflection_type
local function replace_suffix(lemma_from, lemma_to, romaji_from, romaji_to)
-- e.g. 持って来る, lemma = "[持](も)って来(く)る"
-- lemma_from = "くる", lemma_to = {"き","きた"}
add_language_fragment(lemma_to, lang_name)
add_language_fragment(romaji_to, lang_name)
local result = {}
local pattern_from, n_from = lemma_from:gsub('.[\128-\191]*', function(c)
return '[' .. c .. m_ja.hira_to_kata(c) .. ']([^' .. range.kana .. ']*)'
end)
pattern_from = pattern_from .. '$'
-- "[くク]([^kana range]*)[るル]([^kana range]*)$"
for i_lemma_to, s_lemma_to in ipairs(lemma_to) do
local n_to = 0
local pattern_to = s_lemma_to:gsub('.[\128-\191]*', function(c)
if n_to < n_from then
n_to = n_to + 1
return c .. "%" .. n_to
else
return c
end
end)
for i = n_to + 1, n_from do
pattern_to = pattern_to .. "%" .. i
end
-- "き%1%2", "き%1た%2"
local lemma_inflected, success = ugsub(lemma, pattern_from, pattern_to)
if success == 0 then
return
end
local romaji_inflected
romaji_inflected, success = romaji:gsub(romaji_from .. "$", romaji_to[i_lemma_to])
if success == 0 then
romaji_inflected, success = romaji:gsub("%[%[" .. romaji_from .. "%]%]$", "[[" .. romaji_to[i_lemma_to] .. "]]")
if success == 0 then
return
end
end
insert(result, {lemma = lemma_inflected, romaji = romaji_inflected})
end
return result -- {{lemma="[持](も)って来(き)",romaji="motteki"},{lemma="[持](も)って来(き)た",romaji="mottekita"}}
end
local function insert_form(label, ...)
-- label = "stem" or "past" etc.
-- ... = {lemma=...,romaji=...},{lemma=...,romaji=...}
local labeled_forms = {label = label}
for _, v in ipairs{...} do
local table_form = m_ja_ruby.parse_markup(v.lemma)
local form_term = m_ja_ruby.to_wiki(table_form)
if not form_term:find'%[%[.+%]%]' then
form_term = '[[' .. m_ja_ruby.to_text(table_form) .. '#' .. lang_name .. '|' .. form_term .. ']]'
end
insert(labeled_forms, {
term = form_term,
tr = v.romaji,
})
end
insert(data.headword.inflections, labeled_forms)
end
local inflected_forms
if data.lang_code == 'ja' then
if inflection_type == '1' or inflection_type == '1s' then
insert(data.info_mid, '<abbr title="การผันรูปโกดัง (กลุ่ม 1)">โกดัง</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. "โกดัง" .. lang_name)
local romaji = data.inflection_base.romaji
if cat_suffix == "คำกริยา" then
local final = get_final(lemma, data)
insert(data.headword.categories, cat_suffix .. "โกดัง" .. lang_name .. "ที่ลงท้ายด้วย -" .. final)
if final == "る" then
if umatch(romaji, "[iIīĪ]ru$") then
insert(data.headword.categories, cat_suffix .. "โกดัง" .. lang_name .. "ที่ลงท้ายด้วย -ぃる")
elseif umatch(romaji, "[eEēĒ]ru$") then
insert(data.headword.categories, cat_suffix .. "โกดัง" .. lang_name .. "ที่ลงท้ายด้วย -ぇる")
end
end
end
end
if inflection_type == '1' then
inflected_forms =
replace_suffix('く', {'き', 'いた'}, 'ku', {'ki', 'ita'}) or
replace_suffix('ぐ', {'ぎ', 'いだ'}, 'gu', {'gi', 'ida'}) or
replace_suffix('す', {'し', 'した'}, 'su', {'shi', 'shita'}) or
replace_suffix('つ', {'ち', 'った'}, 'tsu', {'chi', 'tta'}) or
replace_suffix('ぬ', {'に', 'んだ'}, 'nu', {'ni', 'nda'}) or
replace_suffix('ぶ', {'び', 'んだ'}, 'bu', {'bi', 'nda'}) or
replace_suffix('む', {'み', 'んだ'}, 'mu', {'mi', 'nda'}) or
replace_suffix('る', {'り', 'った'}, 'ru', {'ri', 'tta'}) or
replace_suffix('う', {'い', 'った'}, 'u', {'i', 'tta'})
if inflected_forms then
insert_form('ต้นเค้าศัพท์', inflected_forms[1])
insert_form('อดีตกาล', inflected_forms[2])
else
require'Module:debug'.track'Jpan-headword/inflection failed/ja'
end
else
inflected_forms =
replace_suffix('る', {'り', 'った', 'い'}, 'ru', {'ri', 'tta', 'i'}) or --くださる
replace_suffix('いく', {'いき', 'いった'}, 'iku', {'iki', 'itta'}) or --行く
replace_suffix('う', {'い', 'うた'}, 'ou', {'oi', 'ōta'}) --問う
if inflected_forms then
insert_form('ต้นเค้าศัพท์', inflected_forms[1], inflected_forms[3])
insert_form('อดีตกาล', inflected_forms[2])
else
require'Module:debug'.track'Jpan-headword/inflection failed/ja'
end
end
elseif inflection_type == '2' then
insert(data.info_mid, '<abbr title="การผันรูปอิจิดัง (กลุ่ม 2)">อิจิดัง</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. "อิจิดัง" .. lang_name)
local romaji = data.inflection_base.romaji
if umatch(romaji, "[iIīĪ]ru$") then
insert(data.headword.categories, cat_suffix .. "คามิอิจิดัง" .. lang_name)
elseif umatch(romaji, "[eEēĒ]ru$") then
insert(data.headword.categories, cat_suffix .. "ชิโมอิจิดัง" .. lang_name)
else
insert(data.headword.categories, cat_suffix .. "ไม่ปรกติ" .. lang_name)
end
end
inflected_forms = replace_suffix('る', {'', 'た'}, 'ru', {'', 'ta'})
if inflected_forms then
insert_form('ต้นเค้าศัพท์', inflected_forms[1])
insert_form('อดีตกาล', inflected_forms[2])
else
require'Module:debug'.track'Jpan-headword/inflection failed/ja'
end
elseif inflection_type == 'suru' then
insert(data.info_mid, '<abbr title="การผันรูปซูรุ (กลุ่ม 3)">ซูรุ</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. " する " .. lang_name)
end
inflected_forms =
replace_suffix('する', {'し', 'した'}, 'suru', {'shi', 'shita'}) or
replace_suffix('ずる', {'じ', 'じた'}, 'zuru', {'ji', 'jita'})
if inflected_forms then
insert_form('ต้นเค้าศัพท์', inflected_forms[1])
insert_form('อดีตกาล', inflected_forms[2])
else
require'Module:debug'.track'Jpan-headword/inflection failed/ja'
end
elseif inflection_type == 'kuru' then
insert(data.info_mid, '<abbr title="การผันรูปคูรุ (กลุ่ม 3)">คูรุ</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. " 来る " .. lang_name)
end
inflected_forms = replace_suffix('くる', {'き', 'きた'}, 'kuru', {'ki', 'kita'})
if inflected_forms then
insert_form('ต้นเค้าศัพท์', inflected_forms[1])
insert_form('อดีตกาล', inflected_forms[2])
else
require'Module:debug'.track'Jpan-headword/inflection failed/ja'
end
elseif inflection_type == 'i' or inflection_type == 'い' then
insert(data.info_mid, '<abbr title="การผันรูป-อิ (ชนิด 1)">-อิ</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. " -い " .. lang_name)
end
inflected_forms = replace_suffix('い', {'く'}, 'i', {'ku'})
if inflected_forms then
insert_form('คำกริยาวิเศษณ์', inflected_forms[1])
else
require'Module:debug'.track'Jpan-headword/inflection failed/ja'
end
elseif inflection_type == 'is' then
insert(data.info_mid, '<abbr title="การผันรูป-อิ (ชนิด 1)">-อิ</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. " -い " .. lang_name)
end
inflected_forms = replace_suffix('いい', {'よく'}, 'ii', {'yoku'})
if inflected_forms then
insert_form('คำกริยาวิเศษณ์', inflected_forms[1])
else
require'Module:debug'.track'Jpan-headword/inflection failed/ja'
end
elseif inflection_type == 'na' or inflection_type == 'な' then
insert(data.info_mid, '<abbr title="การผันรูป-นะ (ชนิด 1)">-นะ</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. " -な " .. lang_name)
end
inflected_forms = replace_suffix('', {'[[な]]', '[[に]]'}, '', {' [[na]]', ' [[ni]]'})
insert_form('หน่วยนาม', inflected_forms[1])
insert_form('คำกริยาวิเศษณ์', inflected_forms[2])
elseif inflection_type == "yo" then
insert(data.info_mid, '<abbr title="การผันรูปโยดัง (คลาสสิก)"><sup><small>†</small></sup>โยดัง</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. "โยดัง" .. lang_name)
insert(data.headword.categories, cat_suffix .. "โยดัง" .. lang_name .. "ที่ลงท้ายด้วย -" .. get_final(lemma, data))
end
elseif inflection_type == "kami ni" then
insert(data.info_mid, '<abbr title="การผันรูปคามินิดัง (คลาสสิก)"><sup><small>†</small></sup>นิดัง</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. "นิดัง" .. lang_name)
insert(data.headword.categories, cat_suffix .. "คามินิดัง" .. lang_name)
end
elseif inflection_type == "shimo ni" then
insert(data.info_mid, '<abbr title="การผันรูปชิโมนิดัง (คลาสสิก)"><sup><small>†</small></sup>นิดัง</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. "นิดัง" .. lang_name)
insert(data.headword.categories, cat_suffix .. "ชิโมนิดัง" .. lang_name)
end
elseif inflection_type == "rahen" then
insert(data.info_mid, '<abbr title="การผันรูป-ริ พิเศษ (คลาสสิก)"><sup><small>†</small></sup>-ริ</abbr>')
elseif inflection_type == "sahen" then
insert(data.info_mid, '<abbr title="การผันรูป-เซะ พิเศษ (คลาสสิก)"><sup><small>†</small></sup>-เซะ</abbr>')
elseif inflection_type == "kahen" then
insert(data.info_mid, '<abbr title="การผันรูป-โกะ พิเศษ (คลาสสิก)"><sup><small>†</small></sup>-โกะ</abbr>')
elseif inflection_type == "nahen" then
insert(data.info_mid, '<abbr title="การผันรูป-ง พิเศษ (คลาสสิก)"><sup><small>†</small></sup>-ง</abbr>')
elseif inflection_type == "nari" or inflection_type == "なり" then
insert(data.info_mid, '<abbr title="การผันรูป-นาริ (คลาสสิก)"><sup><small>†</small></sup>-นาริ</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. " -なり " .. lang_name)
end
elseif inflection_type == 'tari' or inflection_type == 'たり' then
insert(data.info_mid, '<abbr title="การผันรูป-ตาริ (คลาสสิก)"><sup><small>†</small></sup>-ตาริ</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. " -たり " .. lang_name)
end
inflected_forms = replace_suffix('', {'[[とした]]', '[[たる]]', '[[と]]', '[[として]]'}, '', {' [[to shita]]', ' [[taru]]', ' [[to]]', ' [[to shite]]'})
insert_form('หน่วยนาม', inflected_forms[1], inflected_forms[2])
insert_form('คำกริยาวิเศษณ์', inflected_forms[3], inflected_forms[4])
elseif inflection_type == "ku" or inflection_type == "く" then
insert(data.info_mid, '<abbr title="การผันรูป-กุ (คลาสสิก)"><sup><small>†</small></sup>-กุ</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. " -く " .. lang_name)
end
elseif inflection_type == "shiku" or inflection_type == "しく" then
insert(data.info_mid, '<abbr title="การผันรูป-ชิกุ (คลาสสิก)"><sup><small>†</small></sup>-ชิกุ</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. " -しく " .. lang_name)
end
elseif inflection_type == "ka" or inflection_type == "か" then
insert(data.info_mid, '<abbr title="การผันรูป-กะ (ภาษาถิ่น)"><sup><small>†</small></sup>-กะ</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. " -か " .. lang_name)
end
elseif inflection_type and inflection_type:len() > adverbs_optional_tag:len() and inflection_type:sub(1, adverbs_optional_tag:len()) == adverbs_optional_tag then
local adverbs_optional_list = inflection_type:sub(adverbs_optional_tag:len() + 1)
for option in gsplit(adverbs_optional_list, ':') do
local normalized_option = adverbs_optional_aliases[option]
if not normalized_option then
error('unrecognized adverb opt= argument: "' .. option .. '"')
end
local normalized_option_romaji = kana_to_romaji(normalized_option, data.lang_code)
local normalized_option_link = adverbs_optional_links[normalized_option]
inflected_forms = replace_suffix('', {normalized_option_link}, '', {' [[' .. normalized_option_romaji .. ']]'})
insert_form('optionally as', inflected_forms[1])
if cat_suffix then
insert(data.headword.categories, lang_name .. " " .. cat_suffix .. " optionally taking " .. normalized_option .. "-" .. normalized_option_romaji)
end
end
elseif inflection_type == 'irr' then
insert(data.info_mid, 'ไม่ปรกติ')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. "ไม่ปรกติ" .. lang_name)
end
elseif inflection_type == '-' or inflection_type == 'un' then
insert(data.info_mid, 'ผันรูปไม่ได้')
end
--elseif data.lang_code == 'ryu' then ...
end
end
local function add_categories(data)
local lang_name = data.lang_name
local pagename = data.pagename
local tc = data.headword.categories
-- adds category [langname] terms spelled with jōyō kanji or [langname] terms spelled with non-jōyō kanji
-- (if it contains any kanji)
local number_of_kanji = 0
for c in ugmatch(pagename, "[" .. range.kanji .. "々〻]") do
number_of_kanji = number_of_kanji + 1
if c ~= "々" and c ~= "〻" then -- Not a kanji for the purposes of categorisation.
insert(tc, ("ศัพท์" .. lang_name .. "ที่สะกดด้วยคันจิ%s"):format(en_grades[m_ja.kanji_grade(c)]))
end
end
if umatch(pagename, "[々〻ゝゞヽヾ]") and ulen(pagename) > 1 then
insert(tc, "คำซ้ำ" .. lang_name)
end
-- categorize by number of kanji
if number_of_kanji ~= 0 then
insert(tc, ("ศัพท์" .. lang_name .. "ที่มีคันจิ %s ตัว"):format(number_of_kanji))
-- single-kanji terms
if ulen(pagename) == 1 then
insert(tc, "ศัพท์" .. lang_name .. "ที่สะกดด้วย " .. pagename)
insert(tc, "ศัพท์" .. lang_name .. "ที่มีคันจิ 1 ตัวเท่านั้น")
end
end
-- categorize by the script of the pagename or specific characters contained in it
-- if pagename is hiragana or katakana
if detect_pagename_kana(data, true) == 'hira' then insert(tc, "ฮิรางานะ" .. lang_name) end
if detect_pagename_kana(data, true) == 'kata' then insert(data.katakana_category, "คาตากานะ" .. lang_name) end
local p, n = ugsub(pagename, '[' .. range.kana .. range.kanji .. range.ideograph .. range.kana_graph .. range.punctuation .. ']+', '')
if p ~= '' and n > 0 then insert(tc, "ศัพท์" .. lang_name .. "ที่เขียนด้วยอักษรหลายชนิด") end
local pos = data.headword.pos_category
local rare_chars = {}
for ch in iterate_rare_chars(pagename) do
rare_chars[ch] = true
end
-- Categorise yōon, but exclude kana and mora entries, since they can't be spelled with themselves.
-- FIXME: allow kana categories for morae.
if not (pos == "พยางค์" or pos == "คานะ" or pos == "มอรา") then
for _, mora in ipairs(moraify((ugsub(pagename, "[^" .. range.kana .. "]+", " ")))) do
if not mora:gsub(" +", ""):match("^.?[\128-\191]*$") then
rare_chars[mora] = true
end
end
end
for ch in pairs(rare_chars) do
insert(tc, "ศัพท์" .. lang_name .. "ที่สะกดด้วย " .. ch)
end
if (
pos ~= "สุภาษิต" and
pos ~= "วลี" and
umatch(ugsub(pagename, "[" .. range.katakana .. "]+", ""), "[" .. range.hiragana .. "]") and
umatch(ugsub(pagename, "[" .. range.hiragana .. "]+", ""), "[" .. range.katakana .. "]")
) then
insert(tc, "ศัพท์" .. lang_name .. "ที่สะกดด้วยคานะผสม")
end
end
pos_functions["คำกริยา"] = function(args, data)
add_transitivity(data, args["tr"])
add_inflections(data, args["infl"], 'คำกริยา')
end
pos_functions["ปัจจัย"] = function(args, data)
add_inflections(data, args["infl"])
end
pos_functions["คำกริยาช่วย"] = function(args, data)
insert(data.headword.categories, "คำกริยาช่วย" .. data.lang_name)
add_inflections(data, args["infl"])
data.headword.pos_category = "คำกริยา"
end
pos_functions["คำกริยา する"] = function(args, data)
add_transitivity(data, args["tr"])
add_inflections(data, 'suru', 'คำกริยา')
data.headword.pos_category = "คำกริยา"
end
pos_functions["คำคุณศัพท์"] = function(args, data)
add_inflections(data, args["infl"], 'คำคุณศัพท์')
end
pos_functions["คำนาม"] = function(args, data)
-- the counter (classifier) parameter, only relevant for nouns
local counter = args["count"] or ""
if counter == "-" then
insert(data.headword.inflections, {label = "นับไม่ได้"})
elseif counter ~= "" then
insert(data.headword.inflections, {label = "คำลักษณนาม", counter})
end
end
pos_functions["คำกริยาวิเศษณ์"] = function(args, data)
local opt = args["opt"]
if opt then
opt = adverbs_optional_tag .. opt
end
add_inflections(data, opt, 'คำกริยาวิเศษณ์')
end
--[==[
Generate categories by pagename, also optionally by POS
Also for use in soft redirect pages ([[Module:ja-see]]).
Sortkey is not provided.
data = {
pagename = ..., -- (required)
lang = ..., -- (required) language object
categories = {}, -- (required) receive categories
katakana_category = {}, -- (required) receive katakana-sorted categories
pos = ..., "noun", "verb", etc. no POS categories if not given
}
]==]
function export.cat(data)
--data.lang_name = data.lang:getCanonicalName()
data.lang_name = data.lang:getCategoryName()
data.pagename_kana = detect_pagename_kana(data)
if data.pos then
--local pos = data.pos:gsub('x$', 'xe') .. 's'
--insert(data.categories, data.lang_name .. ' ' .. pos)
--insert(data.categories, data.lang_name .. ' ' .. require'Module:headword'.pos_lemma_or_nonlemma(pos, true) .. 's')
local pos = data.pos
insert(data.categories, pos .. data.lang_name)
insert(data.categories, require'Module:headword'.pos_lemma_or_nonlemma(pos, true) .. data.lang_name)
end
data.headword = {categories = data.categories}
add_categories(data)
end
--[==[
The main entry point.
This is the only function that can be invoked from a template.
]==]
function export.show(frame)
local poscat = frame.args[2] or frame.args[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
-- หมวดหมู่เป็นภาษาไทย
local poscat_th = require("Module:th-utilities").th_pos(poscat)
local alias_of_hist = {alias_of = 'hist', list = false}
local alias_of_infl = {alias_of = "infl"}
local list = {list = true}
local list_allow_holes_separate_no_index = {list = true, allow_holes = true, separate_no_index = true}
local params = {
[1] = list,
['rom'] = list_allow_holes_separate_no_index,
['head'] = list_allow_holes_separate_no_index,
['label'] = {list = true, allow_holes = true},
['hist'] = list, ['hhira'] = alias_of_hist, ['hkata'] = alias_of_hist,
['tr'] = true,
['infl'] = true, ['type'] = alias_of_infl, ['decl'] = alias_of_infl,
['opt'] = true,
['count'] = true,
['sort'] = true,
['pagename'] = true,
}
-- For backwards compatibility with uses of {{ja-syllable}} with the script parameter.
if poscat_th == "พยางค์" then
params["sc"] = true
end
local args = require('Module:parameters').process(frame:getParent().args, params)
local data = {
headword = {
pos_category = poscat_th,
categories = {},
heads = {},
no_redundant_head_cat = true,
inflections = {},
genders = {'m'}, -- placeholder
nogendercat = true,
},
--custom info
pagename = args.pagename or mw.loadData("Module:headword/data").pagename,
pagename_kana = nil, -- "hira" "kata" "both", nil
lang_code = frame.args[1],
lang_name = nil, -- "Japanese", "Okinawan" ...
katakana_category = {},
info_mid = {}, -- "godan", "intransitive" ...
info_hist = {}, -- historical kana
inflection_base = {}, -- base of inflections
kanas = {}, -- kana id
}
data.headword.lang = require("Module:languages").getByCode(data.lang_code)
--data.lang_name = data.headword.lang:getCanonicalName()
data.lang_name = data.headword.lang:getCategoryName()
-- sort out all the kanas and do the romanization business
format_headword(args, data)
-- add certain inflections and categories for adjectives, verbs, nouns, or adverbs
if pos_functions[poscat_th] then
pos_functions[poscat_th](args, data)
end
-- categories
add_categories(data)
local sort_base = args.sort or data.kanas[1] or data.pagename
data.headword.sort_key = data.headword.lang:makeSortKey(sort_base)
local katakana_category = #data.katakana_category > 0 and
require("Module:utilities").format_categories(
data.katakana_category,
data.headword.lang,
nil,
sort_base,
nil,
require("Module:scripts").getByCode("Kana")
) or ""
-- output
local i_kanas = 0
return katakana_category .. require('Module:headword').full_headword(data.headword):gsub('<span class="gender">.-</span>', function()
return (#data.info_hist > 0 and '<sup>←' .. concat(data.info_hist, ' or ') .. '<sup>[[w:Historical kana orthography|?]]</sup></sup>' or '') .. ('<i>' .. concat(data.info_mid, ' ') .. '</i>')
end):gsub('<strong .->.-</strong>', function(m0)
i_kanas = i_kanas + 1
if data.kanas[i_kanas] then
return m0
end
end)
end
return export
i9eb6q26a2zkr9vmjzldebn9ztmk86h
5759156
5759155
2026-08-27T00:51:42Z
Octahedron80
267
5759156
Scribunto
text/plain
local m_ja = require("Module:ja")
local m_ja_ruby = require("Module:ja-ruby")
local m_str_utils = require("Module:string utilities")
local byteoffset = mw.ustring.byteoffset
local concat = table.concat
local gsplit = m_str_utils.gsplit
local insert = table.insert
local kana_to_romaji = require("Module:Hrkt-translit").tr
local max_index = require("Module:table").maxIndex
local moraify = m_ja.moraify
local remove = table.remove
local ugmatch = mw.ustring.gmatch
local ugsub = m_str_utils.gsub
local ulen = m_str_utils.len
local ulower = m_str_utils.lower
local umatch = mw.ustring.match
local usub = m_str_utils.sub
local export = {}
local pos_functions = {}
local range = mw.loadData('Module:ja/data/range')
local Jpan = require("Module:scripts").getByCode("Jpan")
local function remove_links(text)
return (text:gsub("%[%[[^|%]]-|", "")
:gsub("%[%[", "")
:gsub("%]%]", ""))
end
local function assign_kana_to_kanji(head, kana, pagename, template_name)
-- TODO: uses deprecated module
local m_tu = require'Module:template utilities'
local kanji_pos = {[0] = {nil, 0}}
local head_nolink = {}
local link_border = 0
local function insert_kanji_pos(substr)
insert(head_nolink, substr)
for p1, w1 in ugmatch(substr, '()([々' .. range.kanji .. '])') do
p1 = byteoffset(substr, p1) + link_border
insert(kanji_pos, {p1, p1 + w1:len() - 1})
end
end
for p1, p2, w1 in m_tu.gfind_bracket(head, {['%[%['] = ']]'}) do
insert_kanji_pos(head:sub(link_border + 1, p1 - 1))
local p_pipe = w1:find'|' or 2
link_border = p1 + p_pipe - 1
insert_kanji_pos(w1:sub(p_pipe + 1, -3))
link_border = p2
end
insert_kanji_pos(head:sub(link_border + 1))
head_nolink = concat(head_nolink)
local pagetext = mw.title.new(pagename):getContent()
if not pagetext then return head, kana end
local non_kanji = {}
local last_kanji = 1
for p1 in ugmatch(head_nolink, '[々' .. range.kanji .. ']()') do
insert(non_kanji, usub(head_nolink, last_kanji, p1 - 2))
last_kanji = p1
end
insert(non_kanji, usub(head_nolink, last_kanji))
for kanjitab in pagetext:gmatch('(){{%s*' .. template_name) do
kanjitab = select(3, m_tu.find_bracket(pagetext, m_tu.brackets_temp, kanjitab))
if not kanjitab then error('ill-formed [[t:' .. template_name:gsub('%%', '') .. ']] syntax') end
kanjitab = m_tu.parse_temp(kanjitab)
local readings = {}
local readings_len = {}
for i = 1, max_index(kanjitab.args) do
local r_i = kanjitab.args[i] or ''
local r_o = kanjitab.args['o' .. i] or ''
if kanjitab.args['k' .. i] then
readings[i] = kanjitab.args['k' .. i] .. r_o
readings_len[i] = tonumber(r_i:match'^%s*%D*(%d*)%s*$') or 1
else
local r_kana, r_len = r_i:match'^%s*(%D*)(%d*)%s*$'
readings[i] = r_kana .. r_o
readings_len[i] = tonumber(r_len) or 1
end
end
local kana_decom = {}
local reading_id = 1
local reading_len = 1
for i = 1, #non_kanji - 1 do
if reading_len <= 1 then
reading_len = readings_len[reading_id] or 1
insert(kana_decom, non_kanji[i])
insert(kana_decom, readings[reading_id])
reading_id = reading_id + 1
else
reading_len = reading_len - 1
end
end
insert(kana_decom, non_kanji[#non_kanji])
local function strip_nonkana(str, repl)
return ugsub(str, '[^' .. range.kana .. ']+', repl) or nil
end
local xeno_reading = {strip_nonkana(kana, ''):match('^' .. strip_nonkana(concat(kana_decom), '(.-)') .. '$')}
if #xeno_reading > 0 then
local head_decom = {}
reading_id = 1
reading_len = 1
for i = 1, #non_kanji - 1 do
if reading_len <= 1 then
reading_len = readings_len[reading_id] or 1
insert(head_decom, head:sub(kanji_pos[i - 1][2] + 1, kanji_pos[i][1] - 1))
insert(head_decom, head:sub(kanji_pos[i][1], kanji_pos[i + reading_len - 1][2]))
reading_id = reading_id + 1
else
reading_len = reading_len - 1
end
end
insert(head_decom, head:sub(kanji_pos[#non_kanji - 1][2] + 1))
if #head_decom ~= #kana_decom then error('number of parameters in [[t:' .. template_name:gsub('%%', '') .. ']] is incorrect') end
local n_xeno_reading = 0
for i = 1, #kana_decom, 2 do
kana_decom[i] = ugsub(kana_decom[i], '[^' .. range.kana .. ']+', function()
n_xeno_reading = n_xeno_reading + 1
if xeno_reading[n_xeno_reading] == '' then return nil
else return xeno_reading[n_xeno_reading] end
end)
end
return concat(head_decom, '%'), concat(kana_decom, '%')
end
end
return head, kana
end
local en_grades = {
"ระดับ 1", "ระดับ 2", "ระดับ 3",
"ระดับ 4", "ระดับ 5", "ระดับ 6",
"ระดับมัธยมศึกษา", "จิมเมโย", "เฮียวไงจิ"
}
local aliases = {
['transitive']='tr', ['trans']='tr', ['สกรรม']='tr',
['intransitive']='in', ['intrans']='in', ['intr']='in', ['อกรรม']='in',
['godan']='1', ['ichidan']='2', ['irregular']='irr',
['โกดัง']='1', ['อิจิดัง']='2', ['ไม่ปรกติ']='irr'
}
local adverbs_optional_tag = 'optionally '
local adverbs_optional_aliases = {
['to']='と', ['と']='と', ['ト']='と',
['ni']='に', ['に']='に', ['ニ']='に',
}
local adverbs_optional_links = {
['と']='[[と#ภาษาญี่ปุ่น:_adverbs|と]]',
['に']='[[に]]',
}
local function formatting_adjustments(rom, kana, pos_category)
-- hyphens for prefixes, suffixes, and counters (classifiers)
if pos_category == "อุปสรรค" then
rom = rom:gsub('%-?$', '-')
elseif pos_category == "ปัจจัย" or pos_category == "รูปปัจจัย" or pos_category == "คำลักษณนาม" then
rom = rom:gsub('^%-?', '-')
elseif pos_category == "คำวิสามานยนาม" and not kana:match'%^' then -- automatic caps for proper nouns, if not already specified
rom = ugsub(ugsub(rom, '%f[^%s%c%p]%l', string.uupper), "%w'%u", ulower) -- no caps after medial apostrophes
end
return rom
end
local function kana_to_romaji_with_pos_format(kana, data, args)
if data.headword.pos_category == "combining forms" or data.headword.pos_category == "เครื่องหมายวรรคตอน" or data.headword.pos_category == "เครื่องหมายซ้ำ" then
return "-"
end
local rom = remove_links(kana_to_romaji(kana, data.lang_code))
-- make adjustments for -u verbs and -i adjectives
if args['infl'] == '1' or args['infl'] == '1s' or args['infl'] == 'godan' then
rom = rom:gsub('ō$', 'ou'):gsub('ū$', 'uu')
elseif args['infl'] == 'i' or args['infl'] == 'is' or args['infl'] == 'い' then
rom = rom:gsub('ī$', 'ii')
end
return formatting_adjustments(rom, kana, data.headword.pos_category)
end
local function iterate_rare_chars(text)
local ch, i
return function()
repeat
ch, i = umatch(text, "([" .. range.kana .. range.kana_graph .. "!-/:-@%[\\-`×△○◎。-〠〶〷〻-〽・·゠=~][゙゚]*)()", i)
until not (ch and umatch(ch, "^[ぁ-ちっつて-ろんァ-チッツテ-ロンヲ-゚]$"))
return ch
end
end
local function historical_kana(data, hist_kana, modern_kana)
-- Disallow historical kana for kana and morae, as there's no one-to-one correspondence.
local pos = data.headword.pos_category
if pos == "พยางค์" or pos == "คานะ" or pos == "มอรา" then
error(("Cannot specify historical kana for %s."):format(pos))
end
local hist_kana_no_formatting = hist_kana:gsub("[%^%-%. %%]+", "")
local rare_chars, lang_name, hc = {}, data.lang_name, data.headword.categories
for ch in iterate_rare_chars(hist_kana_no_formatting) do
if not (modern_kana and modern_kana:find(ch)) then
rare_chars[ch] = true
end
end
for _, mora in ipairs(moraify((ugsub(hist_kana_no_formatting, "[^" .. range.kana .. "]+", " ")))) do
if not (mora:gsub(" +", ""):match("^.?[\128-\191]*$") or (modern_kana and modern_kana:find(mora))) then
rare_chars[mora] = true
end
end
for ch in pairs(rare_chars) do
insert(hc, lang_name .. " terms historically spelled with " .. ch)
end
insert(data.info_hist, require("Module:ja-link").link({
lang = data.headword.lang,
lemma = hist_kana,
tr = formatting_adjustments(
remove_links(kana_to_romaji(hist_kana, data.lang_code, nil, {hist = true})),
hist_kana,
pos
),
}, {
face = "head",
disableSelfLink = true,
}))
end
local function detect_pagename_kana(data, digraphs)
local pagename = data.pagename
-- Exclude "&" and "@", which are part of %p (e.g. リズム&ブルース).
local function remove_kana(m)
return m:match("[&@]") or ""
end
if ugsub(pagename, '[%p%s%c' .. range.hiragana .. (digraphs and "ゟ" or "") .. ']', remove_kana) == "" then
return 'hira'
elseif ugsub(pagename, '[%p%s%c' .. range.katakana .. (digraphs and "ヿ" or "") .. ']', remove_kana) == "" then
return 'kata'
elseif ugsub(pagename, '[%p%s%c' .. range.kana .. (digraphs and "ゟヿ" or "") .. ']', remove_kana) == "" then
return 'both'
end
end
-- go through args and build inflections by finding whatever kanas were given to us
local function format_headword(args, data)
local pagename, kanas, lang_name = data.pagename, data.kanas, data.lang_name
data.pagename_kana = detect_pagename_kana(data)
if args[1][1] and not args[1][1]:match'[\128-\255]' then
-- filter out POS designations
remove(args[1], 1)
end
local linked_translit = data.headword.lang:link_tr(Jpan)
local suru_ending, rom_suru_ending
if data.headword.pos_category == "คำกริยา する" then
suru_ending = "[[する]]"
rom_suru_ending = linked_translit and " [[suru]]" or " suru"
else
suru_ending, rom_suru_ending = "", ""
end
if data.pagename_kana then -- pure-kana-title entry
if #args.head > 0 or args.head.default then
insert(data.headword.categories, lang_name .. " terms with redundant head parameter")
end
-- {{ja-xxx}} vs {{ja-xxx|こ.うし}} vs {{ja-xxx|コウシ}} in [[こうし]]
if not args[1][1] then
args[1][1] = pagename
elseif remove_links(args[1][1]:gsub("[%^%-%. %%]+", "")) ~= pagename then
insert(args[1], 1, pagename)
end
for i, k in ipairs(args[1]) do
insert(data.headword.heads, {
term = k:gsub("[%^%-%. %%]+", "") .. suru_ending,
tr = '-',
l = args.label[i] and {args.label[i]} or nil,
})
end
for i = 1, math.max(args.rom.maxindex, 1) do
local rom = args.rom[i] or args.rom.default or kana_to_romaji_with_pos_format(args[1][1], data, args)
if not data.headword.heads[i] then
data.headword.heads[i] = {term = data.headword.heads[i-1].term}
end
if rom == "-" then
data.headword.heads[i].tr = "-"
elseif linked_translit then
data.headword.heads[i].tr = "[[" .. rom .. "]]" .. rom_suru_ending
else
data.headword.heads[i].tr = rom .. rom_suru_ending
end
if not data.inflection_base.form then
data.inflection_base.form = remove_links(args[i][1]:gsub("[%^%-%. %%]+", "")) .. suru_ending
data.inflection_base.romaji = rom .. rom_suru_ending
end
end
kanas[1] = pagename
if args.hist[1] then
historical_kana(data, args.hist[1], args[1][1])
end
else -- non-pure-kana-title entry
if #args[1] == 0 and not (data.headword.pos_category == "เครื่องหมายวรรคตอน" or data.headword.pos_category == "เครื่องหมายซ้ำ" or data.headword.pos_category == "สัญลักษณ์") then
error("Kana form is required.")
end
if args.head.default == pagename then
insert(data.headword.categories, lang_name .. " terms with redundant head parameter")
end
local rom_repetition_final = {}
for i, k in ipairs(args[1]) do
local rom_auto = kana_to_romaji_with_pos_format(k, data, args)
local head = args.head[i] or args.head.default or pagename
if args.head[i] == pagename then
insert(data.headword.categories, lang_name .. " terms with redundant head parameter")
end
local head_for_ruby, kana_for_ruby
if ulen(head) > 1 and head:match'%%' == nil and k:match'%%' == nil then
head_for_ruby, kana_for_ruby = assign_kana_to_kanji(head, k, pagename, data.lang_code .. '%-kanjitab')
else
head_for_ruby, kana_for_ruby = head, k
end
local format_table = m_ja_ruby.parse_text(head_for_ruby, kana_for_ruby, {
try = 'force',
try_force_limit = 10000,
})
local kana_bare = remove_links(k:gsub("[%^%-%. %%]+", ""))
local rom = args.rom[i] or args.rom.default or rom_auto
head = {
term = m_ja_ruby.to_wiki(format_table, {
break_link = true,
}):gsub('<rt>(..-)</rt>', "<rt>[[" .. kana_bare .."|%1]]</rt>") .. suru_ending,
l = args.label[i] and {args.label[i]} or nil,
}
if rom == "-" or rom_repetition_final[rom] then
head.tr = "-"
elseif linked_translit then
head.tr = "[[" .. rom .. "]]" .. rom_suru_ending
else
head.tr = rom .. rom_suru_ending
end
insert(data.headword.heads, head)
rom_repetition_final[rom] = true
insert(kanas, kana_bare)
if args.hist[i] then
historical_kana(data, args.hist[i], k)
end
if not data.inflection_base.form then
data.inflection_base.form = remove_links(m_ja_ruby.to_markup(format_table)) .. suru_ending
data.inflection_base.romaji = rom .. rom_suru_ending
end
end
local first_reading, multiple = kanas[1]
if not first_reading then
return
end
first_reading = ulower(kana_to_romaji(first_reading, data.lang_code)):gsub("%%", "")
for i = 2, #kanas do
if ulower(kana_to_romaji(kanas[i], data.lang_code)):gsub("%%", "") ~= first_reading then
multiple = true
break
end
end
if not multiple then
local lang_code = data.lang_code
local content = mw.title.getCurrentTitle():getContent()
local loc1, loc2 = content:find("%f[^%z%s]==%s*" .. lang_name:gsub("%-", "%%%-") .. "%s*==()")
loc2 = content:find("%f[^%z%s]==[^\n=]+==", loc2)
if loc1 then
content = content:sub(loc1, loc2)
for template in require("Module:template parser").find_templates(content) do
local name, reading = template:get_name()
if (
name == lang_code .. "-head" or
name == lang_code .. "-pos"
) then
reading = template:get_arguments()[2]
if reading ~= nil then
reading = remove_links(reading):gsub("%%", "")
end
elseif (
name == lang_code .. "-noun" or
name == lang_code .. "-verb" or
name == lang_code .. "-adj" or
name == lang_code .. "-phrase" or
name == lang_code .. "-verb form" or
name == lang_code .. "-verb-suru"
) then
reading = template:get_arguments()[1]
if reading ~= nil then
reading = remove_links(reading):gsub("%%", "")
end
elseif name == lang_code .. "-see" then
reading = template:get_arguments()[1]
if reading ~= nil then
reading = remove_links(reading):gsub("%%", "")
end
-- if umatch(reading, "[^" .. range.kana .. "]") then
-- TODO: check linked page
-- end
end
if reading and ulower(kana_to_romaji(reading, lang_code)):gsub("%%", "") ~= first_reading then
multiple = true
end
end
end
end
if multiple then
insert(data.headword.categories, lang_name .. " terms with multiple readings")
end
end
end
local function add_transitivity(data, tr)
local categories, lang_name = data.headword.categories, data.lang_name
tr = aliases[tr] or tr
if tr == "tr" then
insert(data.info_mid, 'สกรรม')
insert(categories, "คำสกรรมกริยา" .. lang_name)
elseif tr == "in" then
insert(data.info_mid, 'อกรรม')
insert(categories, "คำอกรรมกริยา" .. lang_name)
elseif tr == "both" then
insert(data.info_mid, 'สกรรมหรืออกรรม')
insert(categories, "คำสกรรมกริยา" .. lang_name)
insert(categories, "คำอกรรมกริยา" .. lang_name)
else
insert(categories, "คำกริยา" .. lang_name .. "ที่ไม่มีสกรรมลักษณะ")
end
end
local function get_final(lemma, data)
--return kana_to_romaji(remove(moraify(m_ja_ruby.to_ruby(m_ja_ruby.parse_markup(lemma)))), data.lang_code)
return remove(moraify(m_ja_ruby.to_ruby(m_ja_ruby.parse_markup(lemma))))
end
local function add_language_fragment(t, lang_name)
for k, v in ipairs(t) do
t[k] = v:gsub("%[%[([^]#]*)%]%]", function (s)
return "[[" .. s .. "#" .. lang_name .. "|" .. s .. "]]"
end)
end
end
local function add_inflections(data, inflection_type, cat_suffix)
local lang_name = data.lang_name
local lemma = data.inflection_base.form
local romaji = data.inflection_base.romaji
inflection_type = aliases[inflection_type] or inflection_type
local function replace_suffix(lemma_from, lemma_to, romaji_from, romaji_to)
-- e.g. 持って来る, lemma = "[持](も)って来(く)る"
-- lemma_from = "くる", lemma_to = {"き","きた"}
add_language_fragment(lemma_to, lang_name)
add_language_fragment(romaji_to, lang_name)
local result = {}
local pattern_from, n_from = lemma_from:gsub('.[\128-\191]*', function(c)
return '[' .. c .. m_ja.hira_to_kata(c) .. ']([^' .. range.kana .. ']*)'
end)
pattern_from = pattern_from .. '$'
-- "[くク]([^kana range]*)[るル]([^kana range]*)$"
for i_lemma_to, s_lemma_to in ipairs(lemma_to) do
local n_to = 0
local pattern_to = s_lemma_to:gsub('.[\128-\191]*', function(c)
if n_to < n_from then
n_to = n_to + 1
return c .. "%" .. n_to
else
return c
end
end)
for i = n_to + 1, n_from do
pattern_to = pattern_to .. "%" .. i
end
-- "き%1%2", "き%1た%2"
local lemma_inflected, success = ugsub(lemma, pattern_from, pattern_to)
if success == 0 then
return
end
local romaji_inflected
romaji_inflected, success = romaji:gsub(romaji_from .. "$", romaji_to[i_lemma_to])
if success == 0 then
romaji_inflected, success = romaji:gsub("%[%[" .. romaji_from .. "%]%]$", "[[" .. romaji_to[i_lemma_to] .. "]]")
if success == 0 then
return
end
end
insert(result, {lemma = lemma_inflected, romaji = romaji_inflected})
end
return result -- {{lemma="[持](も)って来(き)",romaji="motteki"},{lemma="[持](も)って来(き)た",romaji="mottekita"}}
end
local function insert_form(label, ...)
-- label = "stem" or "past" etc.
-- ... = {lemma=...,romaji=...},{lemma=...,romaji=...}
local labeled_forms = {label = label}
for _, v in ipairs{...} do
local table_form = m_ja_ruby.parse_markup(v.lemma)
local form_term = m_ja_ruby.to_wiki(table_form)
if not form_term:find'%[%[.+%]%]' then
form_term = '[[' .. m_ja_ruby.to_text(table_form) .. '#' .. lang_name .. '|' .. form_term .. ']]'
end
insert(labeled_forms, {
term = form_term,
tr = v.romaji,
})
end
insert(data.headword.inflections, labeled_forms)
end
local inflected_forms
if data.lang_code == 'ja' then
if inflection_type == '1' or inflection_type == '1s' then
insert(data.info_mid, '<abbr title="การผันรูปโกดัง (กลุ่ม 1)">โกดัง</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. "โกดัง" .. lang_name)
local romaji = data.inflection_base.romaji
if cat_suffix == "คำกริยา" then
local final = get_final(lemma, data)
insert(data.headword.categories, cat_suffix .. "โกดัง" .. lang_name .. "ที่ลงท้ายด้วย -" .. final)
if final == "る" then
if umatch(romaji, "[iIīĪ]ru$") then
insert(data.headword.categories, cat_suffix .. "โกดัง" .. lang_name .. "ที่ลงท้ายด้วย -ぃる")
elseif umatch(romaji, "[eEēĒ]ru$") then
insert(data.headword.categories, cat_suffix .. "โกดัง" .. lang_name .. "ที่ลงท้ายด้วย -ぇる")
end
end
end
end
if inflection_type == '1' then
inflected_forms =
replace_suffix('く', {'き', 'いた'}, 'ku', {'ki', 'ita'}) or
replace_suffix('ぐ', {'ぎ', 'いだ'}, 'gu', {'gi', 'ida'}) or
replace_suffix('す', {'し', 'した'}, 'su', {'shi', 'shita'}) or
replace_suffix('つ', {'ち', 'った'}, 'tsu', {'chi', 'tta'}) or
replace_suffix('ぬ', {'に', 'んだ'}, 'nu', {'ni', 'nda'}) or
replace_suffix('ぶ', {'び', 'んだ'}, 'bu', {'bi', 'nda'}) or
replace_suffix('む', {'み', 'んだ'}, 'mu', {'mi', 'nda'}) or
replace_suffix('る', {'り', 'った'}, 'ru', {'ri', 'tta'}) or
replace_suffix('う', {'い', 'った'}, 'u', {'i', 'tta'})
if inflected_forms then
insert_form('ต้นเค้าศัพท์', inflected_forms[1])
insert_form('อดีตกาล', inflected_forms[2])
else
require'Module:debug'.track'Jpan-headword/inflection failed/ja'
end
else
inflected_forms =
replace_suffix('る', {'り', 'った', 'い'}, 'ru', {'ri', 'tta', 'i'}) or --くださる
replace_suffix('いく', {'いき', 'いった'}, 'iku', {'iki', 'itta'}) or --行く
replace_suffix('う', {'い', 'うた'}, 'ou', {'oi', 'ōta'}) --問う
if inflected_forms then
insert_form('ต้นเค้าศัพท์', inflected_forms[1], inflected_forms[3])
insert_form('อดีตกาล', inflected_forms[2])
else
require'Module:debug'.track'Jpan-headword/inflection failed/ja'
end
end
elseif inflection_type == '2' then
insert(data.info_mid, '<abbr title="การผันรูปอิจิดัง (กลุ่ม 2)">อิจิดัง</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. "อิจิดัง" .. lang_name)
local romaji = data.inflection_base.romaji
if umatch(romaji, "[iIīĪ]ru$") then
insert(data.headword.categories, cat_suffix .. "คามิอิจิดัง" .. lang_name)
elseif umatch(romaji, "[eEēĒ]ru$") then
insert(data.headword.categories, cat_suffix .. "ชิโมอิจิดัง" .. lang_name)
else
insert(data.headword.categories, cat_suffix .. "ไม่ปรกติ" .. lang_name)
end
end
inflected_forms = replace_suffix('る', {'', 'た'}, 'ru', {'', 'ta'})
if inflected_forms then
insert_form('ต้นเค้าศัพท์', inflected_forms[1])
insert_form('อดีตกาล', inflected_forms[2])
else
require'Module:debug'.track'Jpan-headword/inflection failed/ja'
end
elseif inflection_type == 'suru' then
insert(data.info_mid, '<abbr title="การผันรูปซูรุ (กลุ่ม 3)">ซูรุ</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. " する " .. lang_name)
end
inflected_forms =
replace_suffix('する', {'し', 'した'}, 'suru', {'shi', 'shita'}) or
replace_suffix('ずる', {'じ', 'じた'}, 'zuru', {'ji', 'jita'})
if inflected_forms then
insert_form('ต้นเค้าศัพท์', inflected_forms[1])
insert_form('อดีตกาล', inflected_forms[2])
else
require'Module:debug'.track'Jpan-headword/inflection failed/ja'
end
elseif inflection_type == 'kuru' then
insert(data.info_mid, '<abbr title="การผันรูปคูรุ (กลุ่ม 3)">คูรุ</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. " 来る " .. lang_name)
end
inflected_forms = replace_suffix('くる', {'き', 'きた'}, 'kuru', {'ki', 'kita'})
if inflected_forms then
insert_form('ต้นเค้าศัพท์', inflected_forms[1])
insert_form('อดีตกาล', inflected_forms[2])
else
require'Module:debug'.track'Jpan-headword/inflection failed/ja'
end
elseif inflection_type == 'i' or inflection_type == 'い' then
insert(data.info_mid, '<abbr title="การผันรูป-อิ (ชนิด 1)">-อิ</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. " -い " .. lang_name)
end
inflected_forms = replace_suffix('い', {'く'}, 'i', {'ku'})
if inflected_forms then
insert_form('คำกริยาวิเศษณ์', inflected_forms[1])
else
require'Module:debug'.track'Jpan-headword/inflection failed/ja'
end
elseif inflection_type == 'is' then
insert(data.info_mid, '<abbr title="การผันรูป-อิ (ชนิด 1)">-อิ</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. " -い " .. lang_name)
end
inflected_forms = replace_suffix('いい', {'よく'}, 'ii', {'yoku'})
if inflected_forms then
insert_form('คำกริยาวิเศษณ์', inflected_forms[1])
else
require'Module:debug'.track'Jpan-headword/inflection failed/ja'
end
elseif inflection_type == 'na' or inflection_type == 'な' then
insert(data.info_mid, '<abbr title="การผันรูป-นะ (ชนิด 1)">-นะ</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. " -な " .. lang_name)
end
inflected_forms = replace_suffix('', {'[[な]]', '[[に]]'}, '', {' [[na]]', ' [[ni]]'})
insert_form('หน่วยนาม', inflected_forms[1])
insert_form('คำกริยาวิเศษณ์', inflected_forms[2])
elseif inflection_type == "yo" then
insert(data.info_mid, '<abbr title="การผันรูปโยดัง (คลาสสิก)"><sup><small>†</small></sup>โยดัง</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. "โยดัง" .. lang_name)
insert(data.headword.categories, cat_suffix .. "โยดัง" .. lang_name .. "ที่ลงท้ายด้วย -" .. get_final(lemma, data))
end
elseif inflection_type == "kami ni" then
insert(data.info_mid, '<abbr title="การผันรูปคามินิดัง (คลาสสิก)"><sup><small>†</small></sup>นิดัง</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. "นิดัง" .. lang_name)
insert(data.headword.categories, cat_suffix .. "คามินิดัง" .. lang_name)
end
elseif inflection_type == "shimo ni" then
insert(data.info_mid, '<abbr title="การผันรูปชิโมนิดัง (คลาสสิก)"><sup><small>†</small></sup>นิดัง</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. "นิดัง" .. lang_name)
insert(data.headword.categories, cat_suffix .. "ชิโมนิดัง" .. lang_name)
end
elseif inflection_type == "rahen" then
insert(data.info_mid, '<abbr title="การผันรูป-ริ พิเศษ (คลาสสิก)"><sup><small>†</small></sup>-ริ</abbr>')
elseif inflection_type == "sahen" then
insert(data.info_mid, '<abbr title="การผันรูป-เซะ พิเศษ (คลาสสิก)"><sup><small>†</small></sup>-เซะ</abbr>')
elseif inflection_type == "kahen" then
insert(data.info_mid, '<abbr title="การผันรูป-โกะ พิเศษ (คลาสสิก)"><sup><small>†</small></sup>-โกะ</abbr>')
elseif inflection_type == "nahen" then
insert(data.info_mid, '<abbr title="การผันรูป-ง พิเศษ (คลาสสิก)"><sup><small>†</small></sup>-ง</abbr>')
elseif inflection_type == "nari" or inflection_type == "なり" then
insert(data.info_mid, '<abbr title="การผันรูป-นาริ (คลาสสิก)"><sup><small>†</small></sup>-นาริ</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. " -なり " .. lang_name)
end
elseif inflection_type == 'tari' or inflection_type == 'たり' then
insert(data.info_mid, '<abbr title="การผันรูป-ตาริ (คลาสสิก)"><sup><small>†</small></sup>-ตาริ</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. " -たり " .. lang_name)
end
inflected_forms = replace_suffix('', {'[[とした]]', '[[たる]]', '[[と]]', '[[として]]'}, '', {' [[to shita]]', ' [[taru]]', ' [[to]]', ' [[to shite]]'})
insert_form('หน่วยนาม', inflected_forms[1], inflected_forms[2])
insert_form('คำกริยาวิเศษณ์', inflected_forms[3], inflected_forms[4])
elseif inflection_type == "ku" or inflection_type == "く" then
insert(data.info_mid, '<abbr title="การผันรูป-กุ (คลาสสิก)"><sup><small>†</small></sup>-กุ</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. " -く " .. lang_name)
end
elseif inflection_type == "shiku" or inflection_type == "しく" then
insert(data.info_mid, '<abbr title="การผันรูป-ชิกุ (คลาสสิก)"><sup><small>†</small></sup>-ชิกุ</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. " -しく " .. lang_name)
end
elseif inflection_type == "ka" or inflection_type == "か" then
insert(data.info_mid, '<abbr title="การผันรูป-กะ (ภาษาถิ่น)"><sup><small>†</small></sup>-กะ</abbr>')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. " -か " .. lang_name)
end
elseif inflection_type and inflection_type:len() > adverbs_optional_tag:len() and inflection_type:sub(1, adverbs_optional_tag:len()) == adverbs_optional_tag then
local adverbs_optional_list = inflection_type:sub(adverbs_optional_tag:len() + 1)
for option in gsplit(adverbs_optional_list, ':') do
local normalized_option = adverbs_optional_aliases[option]
if not normalized_option then
error('unrecognized adverb opt= argument: "' .. option .. '"')
end
local normalized_option_romaji = kana_to_romaji(normalized_option, data.lang_code)
local normalized_option_link = adverbs_optional_links[normalized_option]
inflected_forms = replace_suffix('', {normalized_option_link}, '', {' [[' .. normalized_option_romaji .. ']]'})
insert_form('optionally as', inflected_forms[1])
if cat_suffix then
insert(data.headword.categories, lang_name .. " " .. cat_suffix .. " optionally taking " .. normalized_option .. "-" .. normalized_option_romaji)
end
end
elseif inflection_type == 'irr' then
insert(data.info_mid, 'ไม่ปรกติ')
if cat_suffix then
insert(data.headword.categories, cat_suffix .. "ไม่ปรกติ" .. lang_name)
end
elseif inflection_type == '-' or inflection_type == 'un' then
insert(data.info_mid, 'ผันรูปไม่ได้')
end
--elseif data.lang_code == 'ryu' then ...
end
end
local function add_categories(data)
local lang_name = data.lang_name
local pagename = data.pagename
local tc = data.headword.categories
-- adds category [langname] terms spelled with jōyō kanji or [langname] terms spelled with non-jōyō kanji
-- (if it contains any kanji)
local number_of_kanji = 0
for c in ugmatch(pagename, "[" .. range.kanji .. "々〻]") do
number_of_kanji = number_of_kanji + 1
if c ~= "々" and c ~= "〻" then -- Not a kanji for the purposes of categorisation.
insert(tc, ("ศัพท์" .. lang_name .. "ที่สะกดด้วยคันจิ%s"):format(en_grades[m_ja.kanji_grade(c)]))
end
end
if umatch(pagename, "[々〻ゝゞヽヾ〱〲〵〳〴]") and ulen(pagename) > 1 then
insert(tc, "คำซ้ำ" .. lang_name)
end
-- categorize by number of kanji
if number_of_kanji ~= 0 then
insert(tc, ("ศัพท์" .. lang_name .. "ที่มีคันจิ %s ตัว"):format(number_of_kanji))
-- single-kanji terms
if ulen(pagename) == 1 then
insert(tc, "ศัพท์" .. lang_name .. "ที่สะกดด้วย " .. pagename)
insert(tc, "ศัพท์" .. lang_name .. "ที่มีคันจิ 1 ตัวเท่านั้น")
end
end
-- categorize by the script of the pagename or specific characters contained in it
-- if pagename is hiragana or katakana
if detect_pagename_kana(data, true) == 'hira' then insert(tc, "ฮิรางานะ" .. lang_name) end
if detect_pagename_kana(data, true) == 'kata' then insert(data.katakana_category, "คาตากานะ" .. lang_name) end
local p, n = ugsub(pagename, '[' .. range.kana .. range.kanji .. range.ideograph .. range.kana_graph .. range.punctuation .. ']+', '')
if p ~= '' and n > 0 then insert(tc, "ศัพท์" .. lang_name .. "ที่เขียนด้วยอักษรหลายชนิด") end
local pos = data.headword.pos_category
local rare_chars = {}
for ch in iterate_rare_chars(pagename) do
rare_chars[ch] = true
end
-- Categorise yōon, but exclude kana and mora entries, since they can't be spelled with themselves.
-- FIXME: allow kana categories for morae.
if not (pos == "พยางค์" or pos == "คานะ" or pos == "มอรา") then
for _, mora in ipairs(moraify((ugsub(pagename, "[^" .. range.kana .. "]+", " ")))) do
if not mora:gsub(" +", ""):match("^.?[\128-\191]*$") then
rare_chars[mora] = true
end
end
end
for ch in pairs(rare_chars) do
insert(tc, "ศัพท์" .. lang_name .. "ที่สะกดด้วย " .. ch)
end
if (
pos ~= "สุภาษิต" and
pos ~= "วลี" and
umatch(ugsub(pagename, "[" .. range.katakana .. "]+", ""), "[" .. range.hiragana .. "]") and
umatch(ugsub(pagename, "[" .. range.hiragana .. "]+", ""), "[" .. range.katakana .. "]")
) then
insert(tc, "ศัพท์" .. lang_name .. "ที่สะกดด้วยคานะผสม")
end
end
pos_functions["คำกริยา"] = function(args, data)
add_transitivity(data, args["tr"])
add_inflections(data, args["infl"], 'คำกริยา')
end
pos_functions["ปัจจัย"] = function(args, data)
add_inflections(data, args["infl"])
end
pos_functions["คำกริยาช่วย"] = function(args, data)
insert(data.headword.categories, "คำกริยาช่วย" .. data.lang_name)
add_inflections(data, args["infl"])
data.headword.pos_category = "คำกริยา"
end
pos_functions["คำกริยา する"] = function(args, data)
add_transitivity(data, args["tr"])
add_inflections(data, 'suru', 'คำกริยา')
data.headword.pos_category = "คำกริยา"
end
pos_functions["คำคุณศัพท์"] = function(args, data)
add_inflections(data, args["infl"], 'คำคุณศัพท์')
end
pos_functions["คำนาม"] = function(args, data)
-- the counter (classifier) parameter, only relevant for nouns
local counter = args["count"] or ""
if counter == "-" then
insert(data.headword.inflections, {label = "นับไม่ได้"})
elseif counter ~= "" then
insert(data.headword.inflections, {label = "คำลักษณนาม", counter})
end
end
pos_functions["คำกริยาวิเศษณ์"] = function(args, data)
local opt = args["opt"]
if opt then
opt = adverbs_optional_tag .. opt
end
add_inflections(data, opt, 'คำกริยาวิเศษณ์')
end
--[==[
Generate categories by pagename, also optionally by POS
Also for use in soft redirect pages ([[Module:ja-see]]).
Sortkey is not provided.
data = {
pagename = ..., -- (required)
lang = ..., -- (required) language object
categories = {}, -- (required) receive categories
katakana_category = {}, -- (required) receive katakana-sorted categories
pos = ..., "noun", "verb", etc. no POS categories if not given
}
]==]
function export.cat(data)
--data.lang_name = data.lang:getCanonicalName()
data.lang_name = data.lang:getCategoryName()
data.pagename_kana = detect_pagename_kana(data)
if data.pos then
--local pos = data.pos:gsub('x$', 'xe') .. 's'
--insert(data.categories, data.lang_name .. ' ' .. pos)
--insert(data.categories, data.lang_name .. ' ' .. require'Module:headword'.pos_lemma_or_nonlemma(pos, true) .. 's')
local pos = data.pos
insert(data.categories, pos .. data.lang_name)
insert(data.categories, require'Module:headword'.pos_lemma_or_nonlemma(pos, true) .. data.lang_name)
end
data.headword = {categories = data.categories}
add_categories(data)
end
--[==[
The main entry point.
This is the only function that can be invoked from a template.
]==]
function export.show(frame)
local poscat = frame.args[2] or frame.args[1] or error("Part of speech has not been specified. Please pass parameter 1 to the module invocation.")
-- หมวดหมู่เป็นภาษาไทย
local poscat_th = require("Module:th-utilities").th_pos(poscat)
local alias_of_hist = {alias_of = 'hist', list = false}
local alias_of_infl = {alias_of = "infl"}
local list = {list = true}
local list_allow_holes_separate_no_index = {list = true, allow_holes = true, separate_no_index = true}
local params = {
[1] = list,
['rom'] = list_allow_holes_separate_no_index,
['head'] = list_allow_holes_separate_no_index,
['label'] = {list = true, allow_holes = true},
['hist'] = list, ['hhira'] = alias_of_hist, ['hkata'] = alias_of_hist,
['tr'] = true,
['infl'] = true, ['type'] = alias_of_infl, ['decl'] = alias_of_infl,
['opt'] = true,
['count'] = true,
['sort'] = true,
['pagename'] = true,
}
-- For backwards compatibility with uses of {{ja-syllable}} with the script parameter.
if poscat_th == "พยางค์" then
params["sc"] = true
end
local args = require('Module:parameters').process(frame:getParent().args, params)
local data = {
headword = {
pos_category = poscat_th,
categories = {},
heads = {},
no_redundant_head_cat = true,
inflections = {},
genders = {'m'}, -- placeholder
nogendercat = true,
},
--custom info
pagename = args.pagename or mw.loadData("Module:headword/data").pagename,
pagename_kana = nil, -- "hira" "kata" "both", nil
lang_code = frame.args[1],
lang_name = nil, -- "Japanese", "Okinawan" ...
katakana_category = {},
info_mid = {}, -- "godan", "intransitive" ...
info_hist = {}, -- historical kana
inflection_base = {}, -- base of inflections
kanas = {}, -- kana id
}
data.headword.lang = require("Module:languages").getByCode(data.lang_code)
--data.lang_name = data.headword.lang:getCanonicalName()
data.lang_name = data.headword.lang:getCategoryName()
-- sort out all the kanas and do the romanization business
format_headword(args, data)
-- add certain inflections and categories for adjectives, verbs, nouns, or adverbs
if pos_functions[poscat_th] then
pos_functions[poscat_th](args, data)
end
-- categories
add_categories(data)
local sort_base = args.sort or data.kanas[1] or data.pagename
data.headword.sort_key = data.headword.lang:makeSortKey(sort_base)
local katakana_category = #data.katakana_category > 0 and
require("Module:utilities").format_categories(
data.katakana_category,
data.headword.lang,
nil,
sort_base,
nil,
require("Module:scripts").getByCode("Kana")
) or ""
-- output
local i_kanas = 0
return katakana_category .. require('Module:headword').full_headword(data.headword):gsub('<span class="gender">.-</span>', function()
return (#data.info_hist > 0 and '<sup>←' .. concat(data.info_hist, ' or ') .. '<sup>[[w:Historical kana orthography|?]]</sup></sup>' or '') .. ('<i>' .. concat(data.info_mid, ' ') .. '</i>')
end):gsub('<strong .->.-</strong>', function(m0)
i_kanas = i_kanas + 1
if data.kanas[i_kanas] then
return m0
end
end)
end
return export
sukz2wak2r6e6ef7vdtbcf0oc9b3jb3
ꪙꪮꪙ
0
154813
5759162
1646739
2026-08-27T10:48:19Z
Ai Ku Karng
17824
5759162
wikitext
text/x-wiki
== ภาษาไทดำ ==
=== รากศัพท์ ===
{{inh+|blt|tai-pro|*nwɯːnᴬ}}; ร่วมเชื้อสายกับ{{cog|th|นอน}}, {{cog|nod|ᨶᩬᩁ}}, {{cog|lo|ນອນ}}, {{cog|khb|ᦓᦸᧃ}}, {{cog|kkh|ᨶᩬᩁ}}, {{cog|shn|ၼွၼ်း}}, {{cog|aio|ꩫွꩫ်}}, {{cog|aho|𑜃𑜨𑜃𑜫}}
=== การออกเสียง ===
{{blt-pron}}
=== คำกริยา ===
{{blt-verb}}
# {{lb|blt|อกรรม}} [[นอน]]
== ภาษาไทขาว ==
{{inh+|twh|tai-pro|*nwɯːnᴬ}}; ร่วมเชื้อสายกับ{{cog|th|นอน}}, {{cog|lo|ນອນ}}, {{cog|nyw|นอน}}, {{cog|nod|ᨶᩬᩁ}}, {{cog|kkh|ᨶᩬᩁ}}, {{cog|khb|ᦓᦸᧃ}}, {{cog|blt|ꪙꪮꪙ}}, {{cog|shn|ၼွၼ်း}}, {{cog|tdd|ᥘᥩᥢᥰ}} หรือ {{m|tdd|ᥢᥩᥢᥰ}}, {{cog|aio|ꩫွꩫ်}}, {{cog|phk|ꩫွꩫ်}}, {{cog|aho|𑜃𑜨𑜃𑜫}}, {{cog|skb|นู๊น}}, {{cog|za|ninz}}, {{cog|zhn|noanz}}
=== การออกเสียง ===
* {{IPA|twh|/nɔːn˦˦/}}
=== คำกริยา ===
{{twh-verb}}
# [[นอน]]
3txguiuoh3stpme7bnqvgm121kpfixc
5759166
5759162
2026-08-27T11:13:29Z
Ai Ku Karng
17824
5759166
wikitext
text/x-wiki
== ภาษาไทดำ ==
=== รากศัพท์ ===
{{inh+|blt|tai-pro|*nwɯːnᴬ}}; ร่วมเชื้อสายกับ{{cog|th|นอน}}, {{cog|nod|ᨶᩬᩁ}}, {{cog|lo|ນອນ}}, {{cog|khb|ᦓᦸᧃ}}, {{cog|kkh|ᨶᩬᩁ}}, {{cog|shn|ၼွၼ်း}}, {{cog|aio|ꩫွꩫ်}}, {{cog|aho|𑜃𑜨𑜃𑜫}}
=== การออกเสียง ===
{{blt-pron}}
=== คำกริยา ===
{{blt-verb}}
# {{lb|blt|อกรรม}} [[นอน]]
== ภาษาไทขาว ==
=== รากศัพท์ ===
{{inh+|twh|tai-pro|*nwɯːnᴬ}}; ร่วมเชื้อสายกับ{{cog|th|นอน}}, {{cog|lo|ນອນ}}, {{cog|nyw|นอน}}, {{cog|nod|ᨶᩬᩁ}}, {{cog|kkh|ᨶᩬᩁ}}, {{cog|khb|ᦓᦸᧃ}}, {{cog|blt|ꪙꪮꪙ}}, {{cog|shn|ၼွၼ်း}}, {{cog|tdd|ᥘᥩᥢᥰ}} หรือ {{m|tdd|ᥢᥩᥢᥰ}}, {{cog|aio|ꩫွꩫ်}}, {{cog|phk|ꩫွꩫ်}}, {{cog|aho|𑜃𑜨𑜃𑜫}}, {{cog|skb|นู๊น}}, {{cog|za|ninz}}, {{cog|zhn|noanz}}
=== การออกเสียง ===
* {{IPA|twh|/nɔːn˦˦/}}
=== คำกริยา ===
{{twh-verb}}
# [[นอน]]
liq2uec507moh771g3xd4et1s3h00zc
นัม
0
170454
5759157
5449357
2026-08-27T07:05:04Z
Ai Ku Karng
17824
/* ภาษาแสก */
5759157
wikitext
text/x-wiki
{{also/auto}}
== ภาษาแสก ==
=== รากศัพท์ ===
{{inh+|skb|tai-pro|*C̬.namꟲ}}; ร่วมเชื้อสายกับ{{cog|th|น้ำ}}, {{cog|lo|ນ້ຳ}}, {{cog|nyw|น้ำ}}, {{cog|nod|ᨶ᩶ᩣᩴ}}, {{cog|sou|หน่าม}}, {{cog|khb|ᦓᧄᧉ}}, {{cog|blt|ꪙꪾ꫁}}, {{cog|twh|ꪙꪾꫂ}}, {{cog|shn|ၼမ်ႉ}}, {{cog|tdd|ᥘᥛᥳ}}, {{cog|kht|ꩫမ်ႇ}}, {{cog|aio|ꩫံ}}, {{cog|phk|ꩫံ}}, {{cog|aho|𑜃𑜪}}, {{cog|pcc|ramx}}, {{cog|za|raemx}}, {{cog|zhn|naemx}}, {{cog|zzj|naemx}}, {{cog|nut|nãhm}}, {{cog|tyz|nặm}}; เทียบ{{cog|qfa-onb-pro|*namᴮꟲ²}}, {{cog|qfa-lic-pro|*C-nəmʔ}}
=== คำนาม ===
{{skb-noun}}
# [[น้ำ]]
== ภาษาอูรักลาโวยจ ==
=== รากศัพท์ ===
{{inh+|urk|poz-mly-pro|*ənam}}
=== การออกเสียง ===
* {{IPA|urk|/nam/}}
=== เลข ===
{{head|urk|เลข}}
# [[หก]] (เลข)
8xtqvqvkj22ixul0atgnhn34068duvm
5759158
5759157
2026-08-27T07:10:02Z
Ai Ku Karng
17824
/* ภาษาแสก */
5759158
wikitext
text/x-wiki
{{also/auto}}
== ภาษาแสก ==
=== รากศัพท์ ===
{{inh+|skb|tai-pro|*C̬.namꟲ}}, จาก{{inh|skb|qfa-tak-pro|*(C)aNam}}; ร่วมเชื้อสายกับ{{cog|th|น้ำ}}, {{cog|lo|ນ້ຳ}}, {{cog|nyw|น้ำ}}, {{cog|nod|ᨶ᩶ᩣᩴ}}, {{cog|sou|หน่าม}}, {{cog|khb|ᦓᧄᧉ}}, {{cog|blt|ꪙꪾ꫁}}, {{cog|twh|ꪙꪾꫂ}}, {{cog|shn|ၼမ်ႉ}}, {{cog|tdd|ᥘᥛᥳ}}, {{cog|kht|ꩫမ်ႇ}}, {{cog|aio|ꩫံ}}, {{cog|phk|ꩫံ}}, {{cog|aho|𑜃𑜪}}, {{cog|pcc|ramx}}, {{cog|za|raemx}}, {{cog|zhn|naemx}}, {{cog|zzj|naemx}}, {{cog|nut|nãhm}}, {{cog|tyz|nặm}}; เทียบ{{cog|qfa-onb-pro|*namᴮꟲ²}}, {{cog|qfa-lic-pro|*C-nəmʔ}}
=== การออกเสียง ===
* {{IPA|skb|/nam¹/|[nam˧]|a=บ้านบะหว้า}}
=== คำนาม ===
{{skb-noun}}
# [[น้ำ]]
== ภาษาอูรักลาโวยจ ==
=== รากศัพท์ ===
{{inh+|urk|poz-mly-pro|*ənam}}
=== การออกเสียง ===
* {{IPA|urk|/nam/}}
=== เลข ===
{{head|urk|เลข}}
# [[หก]] (เลข)
fl5b5duaaebdfpufiaalwyi9m1a6p2k
ผ้อ
0
170777
5759161
5756690
2026-08-27T10:33:20Z
Ai Ku Karng
17824
/* ภาษาแสก */
5759161
wikitext
text/x-wiki
{{also/auto}}
== ภาษาแสก ==
=== รากศัพท์ ===
{{inh+|skb|tai-pro|*boːᴮ}}; ร่วมเชื้อสายกับ{{cog|th|พ่อ}}, {{cog|lo|ພໍ່}}, {{cog|tts|พ่อ}}, {{cog|nyw|พ่อ}}, {{cog|nod|ᨻᩬᩴ᩵}}, {{cog|kkh|ᨻᩳ᩵}}, {{cog|khb|ᦗᦸᧈ}}, {{cog|sou|ผอ}}, {{cog|shn|ပေႃႈ}}, {{cog|tdd|ᥙᥨᥝ}}, {{cog|aio|ပေႃ}}, {{cog|kht|ပူဝ်ႈ}}, {{cog|blt|ꪝꪷ꪿}}, {{cog|twh|ꪝꪮꫀ}}, {{cog|aho|𑜆𑜦𑜡}} หรือ {{m|aho|𑜆𑜨𑜦𑜡}}, {{cog|za|boh}}, {{cog|zzj|poh}}, {{cog|pcc|boh}}; เทียบ{{cog|ltc|-}} {{ltc-l|父}}, {{cog|och|-}} {{och-l|父}}
=== การออกเสียง ===
* {{IPA|skb|/pʰɔː⁵/|[pʰɔː˥˨]|a=บ้านบะหว้า}}
=== คำนาม ===
{{skb-noun}} {{cls|skb|ฮุ๊น}}
# [[พ่อ]]
adzze7d59lgxsim7pybwaj4v3psvr04
nặm
0
309237
5759167
1877413
2026-08-27T11:25:12Z
Ai Ku Karng
17824
/* ภาษาตั่ย */
5759167
wikitext
text/x-wiki
{{also/auto}}
== ภาษาตั่ย ==
=== รากศัพท์ ===
{{inh+|tyz|tai-pro|*C̬.namꟲ}}, จาก{{inh|tyz|qfa-tak-pro|*(C)aNam}}; ร่วมเชื้อสายกับ{{cog|nut|nãhm}}, {{cog|th|น้ำ}}, {{cog|lo|ນ້ຳ}}, {{cog|nyw|น้ำ}}, {{cog|nod|ᨶ᩶ᩣᩴ}}, {{cog|sou|หน่าม}}, {{cog|khb|ᦓᧄᧉ}}, {{cog|blt|ꪙꪾ꫁}}, {{cog|twh|ꪙꪾꫂ}}, {{cog|shn|ၼမ်ႉ}}, {{cog|tdd|ᥘᥛᥳ}}, {{cog|kht|ꩫမ်ႇ}}, {{cog|aio|ꩫံ}}, {{cog|phk|ꩫံ}}, {{cog|aho|𑜃𑜪}}, {{cog|skb|นัม}}, {{cog|pcc|ramx}}, {{cog|za|raemx}}, {{cog|zhn|naemx}}, {{cog|zzj|naemx}}; เทียบ{{cog|qfa-onb-pro|*namᴮꟲ²}}, {{cog|qfa-lic-pro|*C-nəmʔ}}
=== การออกเสียง ===
{{tyz-IPA}}
=== คำนาม ===
{{tyz-noun|淰}}
# [[น้ำ]]
=== อ้างอิง ===
* {{R:Hoàng Văn Ma, Lục Văn Pảo, Hoàng Chí}}
0s8r6af3rbj2qxpwbr29ub7lul5026d
เห้อ
0
2355896
5759168
5758329
2026-08-27T11:49:46Z
Ai Ku Karng
17824
5759168
wikitext
text/x-wiki
== ภาษาผู้ไท ==
=== รากศัพท์ ===
{{inh+|pht|tai-pro|*haɰꟲ}} ซึ่ง /aɰ/ กลายเป็น /ɤ/, จาก{{der|pht|ltc|-}} {{ltc-l|許}}; ร่วมเชื้อสายกับ{{cog|th|ให้}}, {{cog|tts|ให้}}, {{cog|lo|ໃຫ້}}, {{cog|nyw|เห้อ}}, {{cog|phu|เห้อ}}, {{cog|skb|เฮ̂อ}}, {{cog|nod|ᩉᩨ᩶}}, {{cog|kkh|ᩉᩨ᩶}}, {{cog|khb|ᦠᦹᧉ}}, {{cog|blt|ꪻꪬ꫁}}, {{cog|shn|ႁႂ်ႈ}}, {{cog|tdd|ᥞᥬᥲ}} หรือ {{m|tdd|ᥞᥫᥲ}}, {{cog|kht|ꩭႂ်ႛ}}, {{cog|aio|ꩭၞ်}}, {{cog|phk|ꩭၞ်}}, {{cog|aho|𑜑𑜧}}, {{cog|pcc|haec}}, {{cog|za|hawj}}
=== การออกเสียง ===
* {{IPA|pht|/hɤː˥˩/}}
* {{คำอ่านไทย|เห้อ<sup>สูง-ตก</sup>}} (ประมาณ)
=== คำกริยา ===
{{pht-verb}}
# [[ให้]]
== ภาษาญ้อ ==
=== รากศัพท์ ===
{{inh+|nyw|tai-pro|*haɰꟲ}}, ซึ่ง /aɰ/ กลายเป็น /ɤ/, จาก{{der|nyw|ltc|-}} {{ltc-l|許}}; ร่วมเชื้อสายกับ{{cog|th|ให้}}, {{cog|phu|เห้อ}}, {{cog|pht|เห้อ}}, {{cog|tts|ให้}}, {{cog|lo|ໃຫ້}}, {{cog|nod|ᩉᩨ᩶}}, {{cog|kkh|ᩉᩨᩢ}}, {{cog|khb|ᦠᦹᧉ}}, {{cog|blt|ꪻꪬ꫁}}, {{cog|shn|ႁႂ်ႈ}}, {{cog|tdd|ᥞᥬᥲ}} หรือ {{m|tdd|ᥞᥫᥲ}}, {{cog|kht|ꩭႂ်ႛ}}, {{cog|aio|ꩭၞ်}}, {{cog|phk|ꩭၞ်}}, {{cog|aho|𑜑𑜧}}, {{cog|skb|เฮ̂อ}}, {{cog|pcc|haec}}, {{cog|za|hawj}}
=== การออกเสียง ===
* {{IPA|nyw|/hɤː˦˦ʔ/|a=มุกดาหาร}}
=== คำกริยา ===
{{nyw-verb}}
# [[ให้]]
7bboqsjyvxq65gpbf8qa98j8z9horb0
คุยกับผู้ใช้:King size duvet
3
2358140
5759159
2026-08-27T07:17:59Z
New user message
2698
เพิ่ม[[Template:Welcome|สารต้อนรับ]]ในหน้าคุยของผู้ใช้ใหม่
5759159
wikitext
text/x-wiki
{{Template:Welcome|realName=|name=King size duvet}}
-- [[ผู้ใช้:New user message|New user message]] ([[คุยกับผู้ใช้:New user message|คุย]]) 14:17, 27 สิงหาคม 2569 (+07)
mjwnz75tyc1ormoiw0svd7w0ipsud9j
นู๊น
0
2358141
5759160
2026-08-27T10:19:36Z
Ai Ku Karng
17824
สร้างหน้าด้วย "== ภาษาแสก == === รากศัพท์ === {{inh+|skb|tai-pro|*nwɯːnᴬ}}; ร่วมเชื้อสายกับ{{cog|th|นอน}}, {{cog|lo|ນອນ}}, {{cog|nyw|นอน}}, {{cog|nod|ᨶᩬᩁ}}, {{cog|kkh|ᨶᩬᩁ}}, {{cog|khb|ᦓᦸᧃ}}, {{cog|blt|ꪙꪮꪙ}}, {{cog|twh|ꪙꪮꪙ}}, {{cog|shn|ၼွၼ်း}}, {{cog|tdd|ᥘᥩᥢᥰ}} หรือ {{m|tdd|ᥢᥩᥢᥰ}}, {{cog|aio|ꩫွꩫ်}}, {{cog|phk|ꩫ..."
5759160
wikitext
text/x-wiki
== ภาษาแสก ==
=== รากศัพท์ ===
{{inh+|skb|tai-pro|*nwɯːnᴬ}}; ร่วมเชื้อสายกับ{{cog|th|นอน}}, {{cog|lo|ນອນ}}, {{cog|nyw|นอน}}, {{cog|nod|ᨶᩬᩁ}}, {{cog|kkh|ᨶᩬᩁ}}, {{cog|khb|ᦓᦸᧃ}}, {{cog|blt|ꪙꪮꪙ}}, {{cog|twh|ꪙꪮꪙ}}, {{cog|shn|ၼွၼ်း}}, {{cog|tdd|ᥘᥩᥢᥰ}} หรือ {{m|tdd|ᥢᥩᥢᥰ}}, {{cog|aio|ꩫွꩫ်}}, {{cog|phk|ꩫွꩫ်}}, {{cog|aho|𑜃𑜨𑜃𑜫}}, {{cog|za|ninz}}, {{cog|zhn|noanz}}
=== การออกเสียง ===
* {{IPA|skb|/nuːn⁴/|[nuːn˦˥˦]|a=บ้านบะหว้า}}
=== คำกริยา ===
{{skb-verb}}
# [[นอน]]
0b3ulwr4j7tnqxm0m7yo2vatuuryffs
ninz
0
2358142
5759163
2026-08-27T11:01:37Z
Ai Ku Karng
17824
สร้างหน้าด้วย "== ภาษาจ้วง == === การออกเสียง === * {{za-pron}} {{inh+|za|tai-pro|*nwɯːnᴬ}}; ร่วมเชื้อสายกับ{{cog|th|นอน}}, {{cog|lo|ນອນ}}, {{cog|nyw|นอน}}, {{cog|nod|ᨶᩬᩁ}}, {{cog|kkh|ᨶᩬᩁ}}, {{cog|khb|ᦓᦸᧃ}}, {{cog|blt|ꪙꪮꪙ}}, {{cog|twh|ꪙꪮꪙ}}, {{cog|shn|ၼွၼ်း}}, {{cog|tdd|ᥘᥩᥢᥰ}} หรือ {{m|tdd|ᥢᥩᥢᥰ}}, {{cog|aio|ꩫ..."
5759163
wikitext
text/x-wiki
== ภาษาจ้วง ==
=== การออกเสียง ===
* {{za-pron}}
{{inh+|za|tai-pro|*nwɯːnᴬ}}; ร่วมเชื้อสายกับ{{cog|th|นอน}}, {{cog|lo|ນອນ}}, {{cog|nyw|นอน}}, {{cog|nod|ᨶᩬᩁ}}, {{cog|kkh|ᨶᩬᩁ}}, {{cog|khb|ᦓᦸᧃ}}, {{cog|blt|ꪙꪮꪙ}}, {{cog|twh|ꪙꪮꪙ}}, {{cog|shn|ၼွၼ်း}}, {{cog|tdd|ᥘᥩᥢᥰ}} หรือ {{m|tdd|ᥢᥩᥢᥰ}}, {{cog|aio|ꩫွꩫ်}}, {{cog|phk|ꩫွꩫ်}}, {{cog|aho|𑜃𑜨𑜃𑜫}}, {{cog|skb|นู๊น}}, {{cog|zhn|noanz}}
==== คำกริยา ====
{{za-head|คำกริยา|𭾮|眠|𪰟|𭥓|𣑻|𬌭|能|脌|㬈|睔|哖|𮜵|眝}}
# [[นอน]]
fju3y72t4cgpzzs5verfw5l4zpjc6pv
5759164
5759163
2026-08-27T11:03:02Z
Ai Ku Karng
17824
/* ภาษาจ้วง */
5759164
wikitext
text/x-wiki
== ภาษาจ้วง ==
=== รากศัพท์ ===
{{inh+|za|tai-pro|*nwɯːnᴬ}}; ร่วมเชื้อสายกับ{{cog|th|นอน}}, {{cog|lo|ນອນ}}, {{cog|nyw|นอน}}, {{cog|nod|ᨶᩬᩁ}}, {{cog|kkh|ᨶᩬᩁ}}, {{cog|khb|ᦓᦸᧃ}}, {{cog|blt|ꪙꪮꪙ}}, {{cog|twh|ꪙꪮꪙ}}, {{cog|shn|ၼွၼ်း}}, {{cog|tdd|ᥘᥩᥢᥰ}} หรือ {{m|tdd|ᥢᥩᥢᥰ}}, {{cog|aio|ꩫွꩫ်}}, {{cog|phk|ꩫွꩫ်}}, {{cog|aho|𑜃𑜨𑜃𑜫}}, {{cog|skb|นู๊น}}, {{cog|zhn|noanz}}
=== การออกเสียง ===
* {{za-pron}}
==== คำกริยา ====
{{za-head|คำกริยา|𭾮|眠|𪰟|𭥓|𣑻|𬌭|能|脌|㬈|睔|哖|𮜵|眝}}
# [[นอน]]
blfuorwi6591v2j5hy3ehp0e2u08krn