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, '&nbsp;') .. '</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, '&nbsp;') .. '</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