Este módulo translitera textos en griego antiguo. Se basa en una versión antigua del módulo de transliteración en griego antiguo de Wikcionario, con modificaciones menores para que se pueda ejecutar a través de una plantilla.
{{#invoke:Griego antiguo|translit|οἷος}}
El código siguiente utiliza las funciones de cadena básicas (por ejemplo, ) cuando es posible. Las funciones Ustring deben utilizarse cuando los patrones contienen conjuntos con caracteres de varios bytes (por ejemplo, ), o cuantificadores que actúan sobre caracteres de varios bytes ( ). Y deben utilizarse para obtener correctamente una subcadena del i al j carácter Unicode. En otras situaciones, se pueden utilizar funciones de cadena básicas, y se prefieren por razones de eficiencia, ya que no tienen que analizar la cadena en puntos de código antes de operar sobre ella.str:gsub(...)
"[αΑ]"
"α+"
local p = {} macron local = mw . ustring . char ( 0x304 ) breve local = mw . ustring . char ( 0x306 ) áspero local = mw . ustring . char ( 0x314 ) suave local = mw . ustring . char ( 0x313 ) diéresis local = mw . ustring . char ( 0x308 ) agudo local = mw . ustring . char ( 0x301 ) grave local = mw . ustring . char ( 0x300 ) circunflejo local = mw . ustring . char ( 0x342 ) circunflejo latino local = mw . ustring . char ( 0x302 ) subíndice local = mw . ustring . char ( 0x345 ) local macron_circumflex = macron .. diéresis .. '?' .. Latin_circumflex local is_velar = { [ 'κ' ] = verdadero , [ 'γ' ] = verdadero , [ 'χ' ] = verdadero , [ 'ξ' ] = verdadero , } local UTF8_char = "[%z \1 - \127\194 - \244 ][ \128 - \191 ]*" local basic_Greek = "[ \206 - \207 ][ \128 - \191 ]" -- excluyendo la primera línea del bloque griego y copto: ͰͱͲͳʹ͵Ͷͷͺͻͼͽ;Ϳ local info = {} - Las tablas se comparten entre diferentes caracteres para que puedan ser verificadas - por igualdad si es necesario, y para usar menos espacio. local singer = { singer = true , diacritic_seat = true } local iota = { singer = true , diacritic_seat = true , offglide = true } local upsilon = { singer = true , diacritic_seat = true , offglide = true } - Técnicamente rho es solo un asiento para respiración áspera o suave. local rho = { singer = true , diacritic_seat = true } local consonant = { singer = true } local diacritic = { diacritic = true } - Necesario para comparaciones de igualdad. respiración local = { diacrítico = verdadero } función local add_info ( caracteres , t ) si tipo ( caracteres ) == "cadena" entonces para carácter en cadena.gmatch ( caracteres , UTF8_char ) hacer información [ carácter ] = t fin de lo contrario para _ , carácter en ipairs ( caracteres ) hacer información [ carácter ] = t fin fin fin add_info ({ macron , breve , diéresis , agudo , grave , circunflejo , subíndice , }, diacrítico ) add_info ({ áspero , suave }, respiración ) add_info ( "ΑΕΗΟΩαεηοω" , vocal ) add_info ( "Ιι" , iota ) add_info ( "Υυ" , upsilon ) add_info ( "ΒΓΔΖΘΚΛΜΝΞΠΡΣΤΦΧΨϜϘϺϷͶϠβγδζθκλμνξπρσςτφχψϝϙϻϸͷϡ" , consonante ) add_info ( "Ρρ" , rho ) local not_recognized = {} setmetatable ( info , { __index = function () return not_recognized end }) cita de función local ( str ) return "“" .. str .. "”" finaliza las correspondencias locales = { -- Vocales [ "α" ] = "a" , [ "ε" ] = "e" , [ "η" ] = "e" .. macron , [ "ι " ] = "i" , [ "ο" ] = "o" , [ "υ" ] = "u" , [ "ω" ] = "o" .. macron , -- Consonantes [ "β" ] = "b" , [ "γ" ] = "g" , [ "δ" ] = "d" , [ "ζ" ] = "z" , [ "θ" ] = "th" , [ "κ" ] = "k" , [ "λ" ] = "l" , [ "μ" ] = "m" , [ "ν" ] = "n" ,[ "ξ" ] = "x" , [ "π" ] = "p" , [ "ρ" ] = "r" , [ "σ" ] = "s" , [ "ς" ] = "s" , [ "τ" ] = "t" , [ "φ" ] = "ph" , [ "ψ" ] = "ps" , -- Letras arcaicas [ "ϝ" ] = "w" , [ "ϻ" ] = "ś" , [ "ϙ" ] = "q" , [ "ϡ" ] = "š" , [ "ͷ" ] = "v" , -- Diacríticos [ smooth ] = '' , [ rough ] = '' , -- Se añade h debajo en la función `transliterate`. [ breve ] = '' , } ALA_LC local = { [ "χ" ] = "ch" , [ aguda ] = '' , [ grave ] = '' , [ circunflejo ] = '' , [ subíndice ] = '' , [ diéresis ] = '' , [ macron ] = '' , } transliteración_Wikcionario local = { [ "χ" ] = "kh" , [ circunflejo ] = circunflejo_latín , [ subíndice ] = 'i' , } función local add_index_metamethod ( t ,index_metametodo ) local mt = getmetatable ( t ) si no mt entonces mt = {} setmetatable ( t , mt ) fin mt . __index = index_metametodo fin --[=[ Esto divide una palabra en "tokens" significativos, que son letras individuales o diptongos con sus diacríticos. Usado por [[Module:grc-accent]] y [[Module:grc-pronunciation]]. --]=] función local tokenize ( texto ) tokens locales , información_de_volúmenes , información_previa = {}, {}, {} token_i local = 1 prev local para carácter en string.gmatch ( mw . ustring . toNFD ( texto ), UTF8_char ) do curr_info local = info [ carácter ] -- Divide las vocales entre tokens si no es un diptongo. if curr_info . vocal entonces si prev y ( no ( curr_info . offglide y prev_info . vocal ) -- υυ → υ, υ -- ιυ → ι, υ o prev_info . offglide y curr_info == upsilon ) entonces token_i = token_i + 1 fin tokens [ token_i ] = ( tokens [ token_i ] o "" ) .. carácter tabla.insert ( vocal_info , { índice = token_i }) elseif curr_info . diacritic entonces tokens [ token_i ] = ( tokens [ token_i ] o "" ) .. carácter si prev_info . vocal o prev_info . diacritic entonces si carácter == diéresis entonces -- El token actual es vocal, vocal, posiblemente otros diacríticos, -- y una diéresis. -- Divida el token actual en dos: -- la primera letra, luego la segunda letra más cualquier diacrítico. local previous_vowel , vocal_con_diéresis = string.match ( tokens [ token_i ], "^(" .. griego_básico .. ")(" .. griego_básico .. ".+)" ) if vocal_anterior then tokens [ token_i ], tokens [ token_i + 1 ] = vocal_anterior , vocal_con_diéresis token_i = token_i + 1 end end elseif prev_info == rho then if curr_info ~= breath then return string.format ( "El carácter %s no puede tener el acento %s." , prev , "◌" .. character ) end else error ( "El carácter " .. quote ( prev ) .. " no puede tener un diacrítico." ) end elseif curr_info == rho then if prev and not ( prev_info == breath and info [ string.match ( tokens [ token_i ], "^" .. griego_básico )] == rho ) entonces token_i = token_i + 1 fin tokens [ token_i ] = ( tokens [ token_i ] o "" ) .. carácter de lo contrario si prev entonces token_i = token_i + 1 fin tokens [ token_i ] = ( tokens [ token_i ] o "" ) .. carácter fin prev = carácter prev_info = curr_info fin devolver tokens fin función p . transliterar ( texto , system ) add_index_metamethod ( correspondencias , system == "ALA-LC" y ALA_LC o transliteración_Wikcionario ) si text == '῾' entonces devuelve 'h' fin text = mw . ustring . toNFD ( text ) --[[ Reemplazar punto y coma o signo de interrogación griego con signo de interrogación normal, excepto después de un carácter alfanumérico ASCII (para evitar convertir punto y coma en entidades HTML). --]] text = mw . ustring . gsub ( text , "([^A-Za-z0-9])[;" .. mw . ustring . char ( 0x37E ) .. "]" , "%1?" ) -- Maneja el punto del medio. Es equivalente a punto y coma o dos puntos, pero el punto y coma es probablemente más común. texto = texto : gsub ( "·" , ";" ) tokens locales = tokenize ( texto ) --ahora lee los tokens salida local = { } para i , token en pares ( tokens ) hacer -- sustituye cada carácter en el token por su transliteración translit local = string.gsub ( mw.ustring.lower ( token ) , UTF8_char ,correspondencias ) si token == 'γ' y is_velar [ tokens [ i + 1 ]] entonces -- γ antes de una velar debe ser <n> translit = 'n' elseif token == 'ρ' y tokens [ i - 1 ] == 'ρ' entonces -- ρ después de ρ debe ser <rh> translit = 'rh' elseif system == "Wikcionario" y mw . ustring . find ( token , '^[αΑ].*' .. subíndice .. '$' ) entonces -- agrega macrón a ᾳ translit = mw . ustring . gsub ( translit , '([aA])' , '%1' .. macrón ) fin si token : find ( bruto ) entonces si mw . ustring . find ( token , '[Ρρ]' ) entonces translit = translit .. 'h' sino -- vocal translit = 'h' .. translit fin fin si sistema == "ALA-LC" y mw . ustring . find ( token , '^[υΥ][^ιΙ]*$' ) entonces translit = translit : gsub ( 'u' , 'y' ): gsub ( 'U' , 'Y' ) fin -- Elimina macrón de una vocal que tiene un circunflejo. si mw . ustring . find ( translit , macron_circumflex ) entonces translit = translit : gsub ( macron , '' ) fin - Poner en mayúscula el primer carácter de la transliteración. si token ~= mw . ustring . lower ( token ) entonces translit = mw . ustring . gsub ( translit , "^." , mw . ustring . upper ) fin tabla. insert ( salida , translit ) fin retorno tabla. concat ( salida ) fin función p .translit ( marco ) texto local = frame.args [ 1 ] o frame : getParent (). args [ 1 ] sistema local = frame.args.system si sistema == nil o sistema == "" entonces sistema = "Wikcionario" de lo contrario si no ( sistema == "ALA-LC" o sistema == " Wikcionario " ) entonces error ( ' Sistema de transliteración en | sistema = no reconocido; elija entre "ALA-LC " y "Wikcionario"' ) fin transliteración local = p.transliterar ( texto , sistema ) devolver ' <span title="Transliteración del griego antiguo" lang = "grc-Latn"><i>' .. transliteración .. ' </i></span>' fin función p.bare_translit ( marco ) devolver p.transliterar ( marco.args [ 1 ] o frame : getParent ( ) . args [ 1 ] ) fin devolver p