Module:User:Suzukaze-c/dng-translit

--[[


 * https://ru.wikipedia.org/wiki/Дунганская_письменность
 * http://www.eki.ee/knab/lat/kbldng.pdf
 * 林涛《东干语论稿》
 * 林涛《中亚东干语研究》

ا ب پ ت ث ج چ ح خ د ذ ر ز ژ س ش ص ض ڞ ط ظ ع غ ف ق ک گ ڴ ل م ن و ۋ ه ى

]]

local export = {}

local gsub = mw.ustring.gsub local gmatch = mw.ustring.gmatch local match = mw.ustring.match

-- Cyrl to Latn, baseless nonsense by yours truly local tt_custom = { ['Б'] = 'B', ['П'] = 'P', ['М'] = 'M', ['Ф'] = 'F', ['В'] = 'V', ['Д'] = 'D', ['Т'] = 'T', ['Н'] = 'N',             ['Л'] = 'L', ['З'] = 'Z', ['Ц'] = 'C',             ['С'] = 'S', ['Җ'] = 'Ž', ['Ч'] = 'Č',             ['Ш'] = 'Š', ['Ж'] = 'Ř', -- ↑    --  ↑                 ['Щ'] = 'X', ['Г'] = 'G', ['К'] = 'K', ['Ң'] = 'Ŋ', ['Х'] = 'H', ['Р'] = 'R',

['Ы'] = '&#700;', ['Й'] = 'J', ['Ў'] = 'W', ['Ү'] = 'Y', -- ↑  	['А'] = 'A', ['Я'] = 'I͡a', ['Ә'] = 'Ə', ['Е'] = 'I͡ə', ['Э'] = 'Æ', ['О'] = 'O', ['Ё'] = 'I͡o', ['У'] = 'U', ['Ю'] = 'I͡u',

['И'] = 'I',

['б'] = 'b', ['п'] = 'p', ['м'] = 'm', ['ф'] = 'f', ['в'] = 'v', ['д'] = 'd', ['т'] = 't', ['н'] = 'n',             ['л'] = 'l', ['з'] = 'z', ['ц'] = 'c',             ['с'] = 's', ['җ'] = 'ž', ['ч'] = 'č',             ['ш'] = 'š', ['ж'] = 'ř', -- ↑    --  ↑                 ['щ'] = 'x', ['г'] = 'g', ['к'] = 'k', ['ң'] = 'ŋ', ['х'] = 'h', ['р'] = 'r',

['ы'] = '&#700;', ['й'] = 'j', ['ў'] = 'w', ['ү'] = 'y', -- ↑  	['а'] = 'a', ['я'] = 'i͡a', ['ә'] = 'ə', ['е'] = 'i͡ə', ['э'] = 'æ', ['о'] = 'o', ['ё'] = 'i͡o', ['у'] = 'u', ['ю'] = 'i͡u',

['и'] = 'i', }

-- Cyrl to Latn, modified from the old Dungan Latin alphabet local tt_classic = { ['Б'] = 'B', ['П'] = 'P', ['М'] = 'M', ['Ф'] = 'F', ['В'] = 'V', ['Д'] = 'D', ['Т'] = 'T', ['Н'] = 'N',             ['Л'] = 'L', ['З'] = 'Z', ['Ц'] = 'C',             ['С'] = 'S', ['Җ'] = 'Ž', ['Ч'] = 'Č',             ['Ш'] = 'Š', ['Ж'] = 'Ƶ', -- ↑    --  ↑                 ['Щ'] = 'X', ['Г'] = 'G', ['К'] = 'K', ['Ң'] = 'Ŋ', ['Х'] = 'H', ['Р'] = 'R',

['Ы'] = 'Ь', ['Й'] = 'J', ['Ў'] = 'W', ['Ү'] = 'Y', -- ↑  	['А'] = 'A', ['Я'] = 'I͡a', ['Ә'] = 'Ə', ['Е'] = 'I͡ə', ['Э'] = 'E', ['О'] = 'O', ['Ё'] = 'I͡o', ['У'] = 'U', ['Ю'] = 'I͡u',

['И'] = 'I',

['б'] = 'b', ['п'] = 'p', ['м'] = 'm', ['ф'] = 'f', ['в'] = 'v', ['д'] = 'd', ['т'] = 't', ['н'] = 'n',             ['л'] = 'l', ['з'] = 'z', ['ц'] = 'c',             ['с'] = 's', ['җ'] = 'ž', ['ч'] = 'č',             ['ш'] = 'š', ['ж'] = 'ƶ', -- ↑    --  ↑                 ['щ'] = 'x', ['г'] = 'g', ['к'] = 'k', ['ң'] = 'ŋ', ['х'] = 'h', ['р'] = 'r',

['ы'] = 'ь', ['й'] = 'j', ['ў'] = 'w', ['ү'] = 'y', -- ↑  	['а'] = 'a', ['я'] = 'i͡a', ['ә'] = 'ə', ['е'] = 'i͡ə', ['э'] = 'e', ['о'] = 'o', ['ё'] = 'i͡o', ['у'] = 'u', ['ю'] = 'i͡u',

['и'] = 'i', }

local conv = {}

conv['IPA'] = { ['intials'] = { ['б'] = 'p', ['п'] = 'pʰ',  ['м'] = 'm', ['ф'] = 'f', ['в'] = 'v', ['д'] = 't', ['т'] = 'tʰ',  ['н'] = 'n',              ['л'] = 'l', ['з'] = 'ts', ['ц'] = 'tsʰ',             ['с'] = 's', ['җ'] = 'tʂ', ['ч'] = 'tʂʰ',             ['ш'] = 'ʂ', ['ж'] = 'ʐ', -- tɕ    --  tɕʰ                 ['щ'] = 'ɕ', ['г'] = 'k', ['к'] = 'kʰ',  ['ң'] = 'ŋ', ['х'] = 'x', ['р'] = 'ɾ', -- unsure: ['й'] = 'j', },	['finals'] = { [1] = {			['ы'] = 'ɿ', ['й'] = 'i',   ['ў'] = 'u', ['ү'] = 'y', -- ʅ ['а'] = 'a', ['я'] = 'ia',  --  ua ['ә'] = 'ə', ['е'] = 'iə',  --  uə   --  yə ['э'] = 'ɛ',                --  uɛ ['о'] = 'ɔ', ['ё'] = 'iɔ',  --  uɛi -- ei                   --  uei ['у'] = 'ou', ['ю'] = 'iou', ['и'] = 'i', },		[2] = {			                            ['уа'] = 'ua', ['уә'] = 'uə', ['үә'] = 'yə', ['уэ'] = 'uɛ', -- uɛi ['ый'] = 'ei',              ['уй'] = 'uei', ['ан'] = 'æ̃', ['ян'] = 'iæ̃',  --  uæ̃     --  yæ̃ ['он'] = 'ɑŋ', ['ён'] = 'iɑŋ', -- uɑŋ ['ын'] = 'əŋ', ['ин'] = 'iŋ', ['ун'] = 'uŋ', ['үн'] = 'yŋ', },		[3] = {			                              ['уэй'] = 'uɛi', ['уан'] = 'uæ̃', ['үан'] = 'yæ̃', ['уон'] = 'uɑŋ', },	},	['tones'] = { ["1"] = "²⁴", ["2"] = "⁵¹", ["3"] = "⁴⁴",		["0"] = "⁰",	}, }

conv['foo1'] = { ['intials'] = { ['б'] = 'b', ['п'] = 'p', ['м'] = 'm', ['ф'] = 'f', ['в'] = 'v', ['д'] = 'd', ['т'] = 't', ['н'] = 'n',             ['л'] = 'l', ['з'] = 'z', ['ц'] = 'c',             ['с'] = 's', ['җ'] = 'ž', ['ч'] = 'č',             ['ш'] = 'š', ['ж'] = 'ř', -- ↑    --  ↑                 ['щ'] = 'š', ['г'] = 'g', ['к'] = 'k', ['ң'] = 'ŋ', ['х'] = 'x', ['р'] = 'r', -- unsure: ['й'] = 'j', },	['finals'] = { [1] = {			['ы'] = '&#700;', ['й'] = 'i',   ['ў'] = 'uu', ['ү'] = 'y', -- ʅ ['а'] = 'a', ['я'] = 'ia',  --  ua ['ә'] = 'o', ['е'] = 'io',  --  uə   --  yə ['э'] = 'ai',               --  uɛ ['о'] = 'ao', ['ё'] = 'iao', -- uɛi -- ei                   --  uei ['у'] = 'u', ['ю'] = 'iu', ['и'] = 'i', },		[2] = {			                              ['уа'] = 'ua', ['уә'] = 'uo', ['үә'] = 'yo', ['уэ'] = 'uai', -- uɛi ['ый'] = 'ei',                ['уй'] = 'uei', ['ан'] = 'an', ['ян'] = 'ian', -- uæ̃     --  yæ̃ ['он'] = 'aŋ', ['ён'] = 'iaŋ', -- uɑŋ ['ын'] = 'en', ['ин'] = 'in', ['ун'] = 'un', ['үн'] = 'yn', },		[3] = {			                              ['уэй'] = 'uei', ['уан'] = 'uan', ['үан'] = 'yan', ['уон'] = 'uaŋ', },	},	['tones'] = { ["1"] = "²⁴", ["2"] = "⁵¹", ["3"] = "⁴⁴",		["0"] = "⁰",	}, }

local tt = tt_custom

function export.tr(text, lang, sc) if (sc == 'Arab') then text = gsub(text, '.', tt_arab) end

text = gsub(text, '([A-Za-z])', ' %1 ') -- highlight pre-existing Latn characters text = gsub(text, '.', tt) text = gsub(text, '([Ѐ-ӿ])', ' %1 ') -- highlight remaining Cyrl characters

return text end

function export.ipa(text, lang, sc) local m_IPA = require('Module:IPA') local lang = require('Module:languages').getByCode('dng') local conv = conv['IPA']

local ret = {}

text = mw.ustring.lower(text)

local extraA = match(text, '^([^Ё-ёЎўҖҗҢңҮүӘә]*)') table.insert(ret, extraA)

for word, extraB in gmatch(text, '([Ё-ёЎўҖҗҢңҮүӘә]+)([^Ё-ёЎўҖҗҢңҮүӘә]*)') do		mw.log(word)

for initial, rime, erhua in gmatch(word, '([бпмфвдтнлзцсҗчшжщгкңхрй]?)([уү]?[ўүыаяәеэоёуюи][йнң]?)(р?)') do			mw.log('\t', initial, rime, erhua)

initial = (conv.intials[initial] or ' ' .. initial .. ' ') rime = (conv.finals[mw.ustring.len(rime)][rime] or ' ' .. rime .. ' ') erhua = (erhua ~=  and '儿' or )

if (initial == 'tʂ' and match(rime, '^[iy]')) then initial = 'tɕ' elseif (initial == 'tʂʰ' and match(rime, '^[iy]')) then initial = 'tɕʰ' elseif (match(initial, '[ʂʐ]') and rime == 'ɿ') then rime = 'ʅ' end

-- TODO(? is this a good idea anyway?): -- * tones? -- * erhua? (is it really just /ɾ/?) -- * non-sinitic words?

table.insert(ret, initial .. rime .. erhua) end

table.insert(ret, extraB) end

text = '/' .. table.concat(ret, '-') .. '/'

return m_IPA.format_IPA_full { lang = lang, items = } end

function export.foobar(frame) local a = { ' ',	}	return table.concat(a) end

return export