stringtranslate.com

Módulo:Romano

-- Este módulo implementa { { Roman}}. require [[strict]] local p = {} -- Esta función implementa la plantilla {{overline}}. local function overline ( s ) return mw.ustring.format ( '<span style ="text- decoration :overline;">%s</span>' , s ) end -- Obtiene los números romanos para una tabla de números dada. Devuelve tanto la cadena de números como el valor del número después de que termina de procesarse. local function getLetters ( num , t ) local ret = {} for _ , v in ipairs ( t ) do local val , letter = unpack ( v ) while num >= val do num = num - val table.insert ( ret , letter ) end end return table.concat ( ret ), num end -- El flujo de control principal del módulo. función local _main ( args ) - Obtiene la entrada y sale sin mostrar nada si la entrada está vacía. if args [ 1 ] == nil then return end local num = tonumber ( args [ 1 ]) if not num or num < 0 or num == math.huge then error ( 'Número inválido ' .. args [ 1 ], 2 ) elseif num == 0 then return 'N' end - Devuelve un mensaje para números demasiado grandes para ser expresados ​​en números romanos. if num >= 5000000 then return args [ 2 ] or 'N/A' end local ret                                                                                                 =  '' -- Encuentra los números romanos para la parte grande de los números. -- 23 de abril de 2016 - ajustado a >= 4000 para aceptar números romanos grandes 'IV' -- La declaración if no es estrictamente necesaria, pero hace que el algoritmo -- sea más eficiente para números más pequeños. si num >= 4000 entonces letras grandes locales = { { 1000000 , 'M' }, { 900000 , 'CM' }, { 500000 , 'D' }, { 400000 , 'CD' }, { 100000 , 'C' }, { 90000 , 'XC' }, { 50000 , 'L' }, { 40000 , 'XL' }, { 10000 , 'X' }, { 9000 , 'IX' }, { 5000 , 'V' }, { 4000 , 'IV' }, } letras grandes locales letras grandes , num = obtenerLetras ( num , letras grandes ) ret = overline ( letras grandes ) fin -- Encuentra los números romanos para números menores que el umbral romano grande. local smallRomans = { { 1000 , 'M' }, { 900 , 'CM' }, { 500 , 'D' }, { 400 , 'CD' }, { 100 , 'C' }, { 90 , 'XC' }, { 50 , 'L' }, { 40 , 'XL' }, { 10 , 'X' }, { 9 , 'IX' }, { 5 , 'V' }, { 4 , 'IV' }, { 1 ,'Yo' } } local smallLetters = getLetters ( num ,                                                                                                                                         smallRomans  ) ret = ret .. smallLetters if args . fracture == 'yes' then -- Encuentra los números romanos para las partes fraccionarias de los números. -- Si num no es un número entero, suma la mitad de 1/1728 (la unidad más pequeña) para igualar al redondeo. -- Asegúrese de que no seamos menores que la unidad más pequeña ni mayores que 1 (la unidad más pequeña ) para evitar obtener dos símbolos "medios" o ningún símbolo en absoluto num = num - math.floor ( num ) if num ~= 0 then num = math.max ( 1.1 / 1728 , math.min ( 1727.1 / 1728 , num + 1 / 3456 )) end local fracturealRomans = { { 1 / 2 , 'S' }, { 5 / 12 , "''':'''•''':'''" }, { 1 / 3 , "'''::'''" }, { 1 / 4 , "''':'''•" }, { 1 / 6 , "''':'''" }, { 1 / 12 , '•' }, { 1 / 24 , 'Є' }, { 1 / 36 , 'ƧƧ' }, { 1 / 48 , 'Ɔ' }, { 1 / 72 , 'Ƨ' }, { 1 / 144 , '<s>Ƨ</s>' }, { 1 / 288 , '℈' }, { 1 / 1728 , '»' }, } letrasFraccionarias locales = obtenerLetras ( num , letrasRomanasFraccionarias ) ret = ret ..letrasfraccionales fin retorno ret fin función p . main (                                                                                                        frame ) - Si se llama a través de #invoke, use los argumentos pasados ​​a la plantilla de invocación, o los argumentos pasados ​​a #invoke si existen. De lo contrario , se supone que los argumentos se pasan directamente desde la consola de depuración o desde otro módulo Lua. local origArgs if frame == mw . getCurrentFrame () then origArgs = frame : getParent (). args for k , v in pairs ( frame . args ) do origArgs = frame . args break end else origArgs = frame end - Recorte los espacios en blanco y elimine los argumentos en blanco. local args = {} for k , v in pairs ( origArgs ) do if type ( v ) == 'string' then v = mw . text . trim ( v ) fin si v ~= '' entonces args [ k ] = v fin fin -- salir si no se da nada si args == nil o args == {} entonces retorna fin -- Dada una expresión matemática, simplificar a un número si tipo ( args [ 1 ]) == 'string' entonces éxito local , resultado = pcall ( mw . ext . ParserFunctions . expr , args [ 1 ]) si éxito entonces args [ 1 ] = resultado fin -- de lo contrario, pasar a la rutina _main e intentar dejar que tonumber de Lua lo maneje fin retorna _main ( args ) fin retorna p