Editing
Module:Greek
Jump to navigation
Jump to search
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
-- Convert standard numbers to greek numerals, and vice versa -- Gts-tg@el wiki, Aug. 2017 local p = {} local greek_numerals = { ["α"] = 1, -- ἄλφα / alpha ["β"] = 2, -- βῆτα / beta ["γ"] = 3, -- γάμμα / gamma ["δ"] = 4, -- δέλτα / delta ["ε"] = 5, -- ἔψιλον / epsilon ["Ϛ"] = 6, -- δίγαμμα / digamma ["ζ"] = 7, -- ζῆτα / zeta ["η"] = 8, -- ῆτα / heta ["θ"] = 9, -- θῆτα / theta ["ι"] = 10, -- ιῶτα / iota ["κ"] = 20, -- κάππα / kappa ["λ"] = 30, -- λάμδα / lamda ["μ"] = 40, -- μῦ / mu ["ν"] = 50, -- νῦ / nu ["ξ"] = 60, -- ξί / xi ["ο"] = 70, -- ὄμικρον / omikron ["π"] = 80, -- πί / pi ["ϟ"] = 90, -- κόππα / koppa ["ρ"] = 100, -- ρό / rho ["σ"] = 200, -- σίγμα / sigma ["ς"] = 200, -- σίγμα / sigma (final variation) ["τ"] = 300, -- ταῦ / ταυ ["υ"] = 400, -- ύψιλον / ypsilon ["φ"] = 500, -- φί / phi ["χ"] = 600, -- χί / chi ["ψ"] = 700, -- ψί / psi ["ω"] = 800, -- ὠμέγα / omega ["ϡ"] = 900, -- σαμπί / sampi } -- used for math graph template local numeral_latin_transliteration = { ["α"] = 'alpha', ["β"] = 'beta', ["γ"] = 'gamma', ["δ"] = 'delta', ["ε"] = 'epsilon', ["Ϛ"] = 'digamma', ["ζ"] = 'zeta', ["η"] = 'eta', ["θ"] = 'theta', ["ι"] = 'iota', ["κ"] = 'kappa', ["λ"] = 'lambda', ["μ"] = 'mu', ["ν"] = 'nu', ["ξ"] = 'xi', ["ο"] = 'omicron', ["π"] = 'pi', ["ϟ"] = 'koppa', ["ρ"] = 'rho', ["σ"] = 'sigma', ["ς"] = 'sigma', --(final variation) ["τ"] = 'tau', ["υ"] = 'upsilon', ["φ"] = 'phi', ["χ"] = 'chi', ["ψ"] = 'psi', ["ω"] = 'omega', ["ϡ"] = 'sampi', } -- return number corresponding to letter -- params: letter (string) -- return: number local function value(letter) if letter ~= 'Ϛ' and letter ~= 'ϟ' and letter ~= 'ϡ' then letter = mw.ustring.lower(letter) end return greek_numerals[letter] end -- letter value * 1000 -- params: letter (string), total (number) -- return: number local function thousandth(letter, total) if letter ~= false then total = total - value(letter) -- remove previous addition as simple number total = total + ( value(letter) * 1000 ) end return total end -- reverse table (index to values, values to index) -- params: tbl (table) -- return: table local function reverse_table(tbl) local reversedTable = {} for letter, value in pairs(tbl) do reversedTable[value] = letter end return reversedTable end -- special notation for numbers > 9999 local function mu_notation(greek_number, digits) local result = '' local postfix = '' -- digits greater than 9999 for index, digit in pairs(digits) do -- mw.log(digit) result = result .. '\\' .. numeral_latin_transliteration[digit] greek_number = greek_number:gsub(digit, "", 1) end if greek_number ~= '' then -- if not all digits are multiples of myriad postfix = "͵" .. greek_number .. "´" end result = '<math>\\stackrel{' .. result .. '}{\\Mu}</math>' .. postfix return result end -- convert standard number to greek -- params: frame (obj) -- return: string function p.to_greek(frame) local number = frame.args[1] local tbl = null local result = '' local big_values = {} local m_notation = false if tonumber(number) > 9999 then m_notation = true end tbl = reverse_table(greek_numerals) -- reverse to [<number>] = '<letter>' if tbl[number] ~= null then result = tbl[number] -- direct hit else local str_number = tostring(number) local highest_numeric_position = #str_number local i = 0 local index = '' for digit in str_number:gmatch"." do -- break up number digits highest_numeric_position = highest_numeric_position - 1 if tonumber(digit) > 0 then index = tonumber(digit .. mw.ustring.rep('0', highest_numeric_position)) if highest_numeric_position >= 3 then match = false while match == false do if index < 1 then index = index * 10 end if tbl[index] == nil then index = index / 10000 else result = result .. tostring(tbl[tonumber(index)]) match = true end end if highest_numeric_position > 3 then table.insert(big_values, tbl[tonumber(index)]) end else result = result .. tostring(tbl[tonumber(index)]) end end end --local d = require "Module:Debugging" --mw.log(result) --mw.log(d.dump(big_values)) end if m_notation == true then --special notation result = mu_notation(result, big_values) local frame = mw.getCurrentFrame() result = frame:preprocess(result) else if tonumber(number) >= 1000 then result = ',' .. result end result = mw.ustring.upper(result) .. "´" end return result end -- convert greek number to standard -- greek number sample for testing: αωκα´ = 1821 -- params: frame (obj) -- return: number function p.to_standard(frame) local greek_number = frame.args[1] local total = 0 local thousand_flag = false local prev_letter = false greek_number = greek_number:gsub("´", "") if type(greek_number) ~= 'string' then return 'Error: value ' .. greek_number .. ' is ' .. type(greek_number) .. ' instead of expected string' end -- iterate through letters for letter in mw.ustring.gmatch(greek_number, ".") do -- check if thousand marker exists if letter == "," then thousand_flag = true else if thousand_flag == true then total = thousandth(letter, total) thousand_flag = false end total = total + value(letter) prev_letter = letter end end if thousand_flag == true then total = thousandth(prev_letter, total) end return total end return p
Summary:
Please note that all contributions to wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Wiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Navigation menu
Personal tools
Not logged in
Talk
Contributions
Create account
Log in
Namespaces
Page
Discussion
English
Views
Read
Edit
View history
More
Search
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Tools
What links here
Related changes
Special pages
Page information