Această pagină este protejată de mișcare
Această pagină este protejată

Formă: cifră romană

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Modul care implementează funcționalitatea șablonului {{ număr roman }}.


 - [[
* Modul care implementează funcționalitatea șablonului {{număr roman}}.
*
* Modulul a fost importat din:
* http://en.wikipedia.org/w/index.php?title=Module:Roman&oldid=570926639
]]
 
local p = {}
 
- Această funcție implementează șablonul {{overline}}.
overline ( s ) de funcții locale
întoarce-te mw . ustring . format ( '<span style = "text-decoration: overline;">% s </span>' , s )
Sfârșit
 
- Obține cifrele romane pentru un tabel de numere dat. Returnează atât șirul de
- cifrele și valoarea numărului după ce a fost procesat.
funcție locală getLetters ( num , t )
local ret = {}
pentru _ , v în ipairs ( t ) do
local val , letter = despacheta ( v )
while num> = val do
num = num - val
table.insert ( ret , scrisoare )
Sfârșit
Sfârșit
return table.concat ( ret ), num
Sfârșit

- evaluează arg nu numai ca număr, ci și ca expresie matematică
funcția locală getNum ( arg )
local ret
dacă tastați ( arg ) == „număr” atunci
ret = arg
elseif tip ( arg ) == 'șir' atunci
ret = tonumber ( arg )
dacă nu ret atunci
succes local , rezultat = pcall ( mw . ext . ParserFunctions . expr , arg )
în cazul în care succesul atunci
ret = tonumber ( rezultat )
Sfârșit
Sfârșit
Sfârșit
retur ret
Sfârșit

- Fluxul principal de control al modulului.
funcție locală _main ( args )
- Obțineți intrare și ieșire afișând nimic dacă intrarea este proastă.
local num = getNum ( args [ 1 ] )
dacă nu num sau num < 1 sau num == math.huge atunci
întoarcere
Sfârșit
num = math.floor ( num )
 
- Returnați un mesaj pentru numere prea mari pentru a fi exprimate în cifre romane.
dacă num > = 5000000 atunci
returnează argumente [ 2 ] sau „N / A”
Sfârșit
 
local ret = "
- Găsiți numerele romane pentru partea mare a numerelor 5000 și mai mari.
- Instrucțiunea if nu este strict necesară, ci face algoritmul
- mai eficient pentru un număr mai mic.
dacă num > = 4000 atunci
local bigRomans = {
{ 1000000 , „M” },
{ 900000 , 'CM' }, { 500000 , 'D' }, { 400000 , 'CD' }, { 100000 , 'C' },
{ 90000 , 'XC' }, { 50000 , 'L' }, { 40000 , 'XL' }, { 10000 , 'X' },
{ 9000 , 'IX' }, { 5000 , 'V' }, { 4000 , 'IV' },
}
Litere mari locale
bigLetters , num = getLetters ( num , bigRomans )
ret = overline ( bigLetters )
Sfârșit
 
- Găsiți numerele romane pentru numerele 4999 sau mai puțin.
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 , "I" } 
}
local smallLetters = getLetters ( num , smallRomans )
ret = ret .. smallLetters
 
retur ret
Sfârșit
 
funcția p . principal ( cadru )
- Dacă este apelat prin #invoke, utilizați argumentele transmise în invocare
- șablon sau argumentele transmise la #invoke dacă există. In caz contrar
- presupunem că argumentele sunt transmise direct din consola de depanare
- sau de la un alt modul Lua.
origArg-uri locale
if frame == mw . getCurrentFrame () atunci
origArgs = cadru : getParent (). argumente
pentru k , v în perechi ( cadru . args ) do
origArgs = cadru . argumente
pauză
Sfârșit
altceva
origArgs = cadru
Sfârșit
- Tăiați spațiul alb și eliminați argumentele goale.
argumente locale = {}
pentru k , v în perechi ( origArgs ) do
dacă tastați ( v ) == 'șir' atunci
v = mw . text . tăia ( v )
Sfârșit
dacă v ~ = " atunci
args [ k ] = v
Sfârșit
Sfârșit
return _main ( args )
Sfârșit
 
retur p