Модул:Milokod — разлика између измена
Пређи на навигацију
Пређи на претрагу
(Modul za isticanje Milokod sintakse (kako bi zamenio hakove unutar SyntaxHighlight ekstenzije)) |
м (Trim) |
||
(3 међуизмене истог корисника нису приказане) | |||
Ред 33: | Ред 33: | ||
local function heading(highlighted, line) | local function heading(highlighted, line) | ||
table.insert(highlighted, '<u>') | table.insert(highlighted, ' <u>') | ||
local paren = mw.ustring.find(line, '(', 0, true) | local paren = mw.ustring.find(line, '(', 0, true) | ||
if paren ~= nil then | if paren ~= nil then | ||
Ред 65: | Ред 65: | ||
local function body(line) | local function body(line) | ||
local newline, _ = mw.ustring.gsub(line, '[a-z0-9-_]+', highlighter) | local newline, _ = mw.ustring.gsub(line, '%f[%w_-][a-z0-9-_]+%f[^%w_-]', highlighter) | ||
newline, _ = mw.ustring.gsub(newline, '%f[%w_-][A-Z]%f[^%w_-]', highlighter) | |||
return newline | return newline | ||
end | end | ||
function p.main(frame) | function p.main(frame) | ||
local milocode = mw. | local milocode = mw.text.trim(mw.text.decode(mw.text.unstrip(frame:getParent().args[1]))) | ||
local highlighted = {} | local highlighted = {} | ||
for lineno, line in ipairs(mw.text.split(milocode, '\n', true)) do | for lineno, line in ipairs(mw.text.split(milocode, '\n', true)) do | ||
Ред 76: | Ред 77: | ||
heading(highlighted, line) | heading(highlighted, line) | ||
else | else | ||
table.insert(highlighted, ' ') | |||
table.insert(highlighted, body(line)) | table.insert(highlighted, body(line)) | ||
end | end | ||
table.insert(highlighted, '\n') | table.insert(highlighted, '\n') | ||
end | end | ||
-- Уклања се последња празна линија. | |||
highlighted[#highlighted] = nil | |||
return table.concat(highlighted) | return table.concat(highlighted) | ||
end | end | ||
return p | return p |
Тренутна верзија на датум 13. септембар 2024. у 00:53
Документацију овог модула можете да направите на страници Модул:Milokod/док
local p = {}
require('strict')
local KEYWORDS = {
-- Условни изрази
['if'] = true,
['then'] = true,
['else'] = true,
['end_if'] = true,
-- Петље
['for'] = true,
['do'] = true,
['end_for'] = true,
['while'] = true,
['end_while'] = true,
['break'] = true,
['repeat'] = true,
['until'] = true,
-- Опсези и низови
['in'] = true,
['to'] = true,
-- Остало
['return'] = true,
}
local OPERATORS = {
['and'] = true,
['or'] = true,
['not'] = true,
['nil'] = true
}
local function heading(highlighted, line)
table.insert(highlighted, ' <u>')
local paren = mw.ustring.find(line, '(', 0, true)
if paren ~= nil then
local funcname = mw.ustring.sub(line, 1, paren - 1)
table.insert(highlighted, mw.ustring.upper(funcname))
table.insert(highlighted, '(')
local args = mw.ustring.sub(line, paren + 1, mw.ustring.len(line) - 1)
for idx, arg in ipairs(mw.text.split(args, ',', true)) do
table.insert(highlighted, '\'\'')
table.insert(highlighted, mw.text.trim(arg))
table.insert(highlighted, '\'\'')
table.insert(highlighted, ', ')
end
-- Замена последње запете са затвореном заградом.
highlighted[#highlighted] = ')'
else
table.insert(highlighted, line)
end
table.insert(highlighted, '</u>')
end
local function highlighter(varname)
if KEYWORDS[varname] then
return '\'\'\'' .. varname .. '\'\'\''
elseif OPERATORS[varname] then
return varname
else
return '\'\'' .. varname .. '\'\''
end
end
local function body(line)
local newline, _ = mw.ustring.gsub(line, '%f[%w_-][a-z0-9-_]+%f[^%w_-]', highlighter)
newline, _ = mw.ustring.gsub(newline, '%f[%w_-][A-Z]%f[^%w_-]', highlighter)
return newline
end
function p.main(frame)
local milocode = mw.text.trim(mw.text.decode(mw.text.unstrip(frame:getParent().args[1])))
local highlighted = {}
for lineno, line in ipairs(mw.text.split(milocode, '\n', true)) do
if lineno == 1 then
heading(highlighted, line)
else
table.insert(highlighted, ' ')
table.insert(highlighted, body(line))
end
table.insert(highlighted, '\n')
end
-- Уклања се последња празна линија.
highlighted[#highlighted] = nil
return table.concat(highlighted)
end
return p