Модуль:FtlMarking: различия между версиями
Pok (обсуждение | вклад) мНет описания правки |
Pok (обсуждение | вклад) мНет описания правки |
||
| (не показано 7 промежуточных версий этого же участника) | |||
| Строка 53: | Строка 53: | ||
if attr_str == "" then return nil end | if attr_str == "" then return nil end | ||
local params = {} | local params = {} | ||
local function unquote_val(v) | |||
if not v then return v end | |||
v = trim(v) | |||
v = mw.ustring.gsub(v, "^"(.-)"$", "%1") | |||
v = mw.ustring.gsub(v, '^"(.-)"$', "%1") | |||
return v | |||
end | |||
for k, v in mw.ustring.gmatch(attr_str, "([%w_%-%:]+)%s*=%s*\"(.-)\"") do | for k, v in mw.ustring.gmatch(attr_str, "([%w_%-%:]+)%s*=%s*\"(.-)\"") do | ||
params[mw.ustring.lower(k)] = v | params[mw.ustring.lower(k)] = unquote_val(v) | ||
end | end | ||
attr_str = mw.ustring.gsub(attr_str, "([%w_%-%:]+)%s*=%s*\"(.-)\"", "") | attr_str = mw.ustring.gsub(attr_str, "([%w_%-%:]+)%s*=%s*\"(.-)\"", "") | ||
for k, v in mw.ustring.gmatch(attr_str, "([%w_%-%:]+)%s*=%s*([^%s%]]+)") do | for k, v in mw.ustring.gmatch(attr_str, "([%w_%-%:]+)%s*=%s*([^%s%]]+)") do | ||
params[mw.ustring.lower(k)] = v | params[mw.ustring.lower(k)] = unquote_val(v) | ||
end | end | ||
attr_str = mw.ustring.gsub(attr_str, "([%w_%-%:]+)%s*=%s*([^%s%]]+)", "") | attr_str = mw.ustring.gsub(attr_str, "([%w_%-%:]+)%s*=%s*([^%s%]]+)", "") | ||
local unnamed = mw.ustring.match(attr_str, "%s*\"(.-)\"") | |||
local unnamed = mw.ustring.match(attr_str, "%s*"(.-)"") or mw.ustring.match(attr_str, "%s*\"(.-)\"") | |||
if unnamed then | if unnamed then | ||
params._value = unnamed | params._value = unquote_val(unnamed) | ||
attr_str = mw.ustring.gsub(attr_str, "%s*"(.-)"", "", 1) | |||
attr_str = mw.ustring.gsub(attr_str, "%s*\"(.-)\"", "", 1) | attr_str = mw.ustring.gsub(attr_str, "%s*\"(.-)\"", "", 1) | ||
end | end | ||
if not params._value then | if not params._value then | ||
local v = mw.ustring.match(attr_str, "%s*([^%s%]]+)") | local v = mw.ustring.match(attr_str, "%s*([^%s%]]+)") | ||
if v then params._value = v end | if v then params._value = unquote_val(v) end | ||
end | end | ||
return params | return params | ||
end | end | ||
| Строка 77: | Строка 91: | ||
local lines = mw.text.split(s, "\n") | local lines = mw.text.split(s, "\n") | ||
local first_non_empty = nil | local first_non_empty = nil | ||
local first_non_empty_unescaped = nil | |||
for i, line in ipairs(lines) do | for i, line in ipairs(lines) do | ||
if line and line:match("%S") then | if line and line:match("%S") then | ||
first_non_empty = line | first_non_empty = line | ||
first_non_empty_unescaped = mw.ustring.gsub(line, " ", " ") | |||
break | break | ||
end | end | ||
end | end | ||
local enable_numeric = false | local enable_numeric = false | ||
if | if first_non_empty_unescaped and mw.ustring.match(first_non_empty_unescaped, "^%s*%d+%.") then | ||
enable_numeric = true | enable_numeric = true | ||
end | end | ||
local out_lines = {} | local out_lines = {} | ||
for _, line in ipairs(lines) do | for _, line in ipairs(lines) do | ||
local processed = line | local processed = line | ||
local handled = false | local handled = false | ||
local line_unescaped = mw.ustring.gsub(line, " ", " ") | |||
if enable_numeric then | if enable_numeric then | ||
local leading, num, rest = mw.ustring.match( | local leading, num, rest = mw.ustring.match(line_unescaped, "^(%s*)(%d+)%.%s*(.*)$") | ||
if num then | if num then | ||
local indent = mw.ustring.len(leading or "") | local indent = mw.ustring.len(leading or "") | ||
| Строка 102: | Строка 123: | ||
end | end | ||
end | end | ||
if not handled then | if not handled then | ||
local leading, rest = mw.ustring.match( | local leading, rest = mw.ustring.match(line_unescaped, "^(%s*)%-%s+(.*)$") | ||
if rest then | if rest then | ||
local indent = mw.ustring.len(leading or "") | local indent = mw.ustring.len(leading or "") | ||
| Строка 113: | Строка 135: | ||
end | end | ||
end | end | ||
if not handled then | if not handled then | ||
table.insert(out_lines, processed) | table.insert(out_lines, processed) | ||
end | end | ||
end | end | ||
return table.concat(out_lines, "\n") | return table.concat(out_lines, "\n") | ||
end | end | ||
| Строка 134: | Строка 158: | ||
visible = mw.ustring.gsub(visible, "|", "|") | visible = mw.ustring.gsub(visible, "|", "|") | ||
tip = mw.ustring.gsub(tip, "|", "|") | tip = mw.ustring.gsub(tip, "|", "|") | ||
return "{{ | return "{{altTooltip|" .. (visible or "") .. "|" .. (tip or "") .. "}}" | ||
end) | end) | ||
while true do | while true do | ||
| Строка 178: | Строка 202: | ||
text = mw.text.unstripNoWiki(text) | text = mw.text.unstripNoWiki(text) | ||
text = process_nowiki_equals(text) | text = process_nowiki_equals(text) | ||
return transform(text) | return frame:preprocess(transform(text)) | ||
end | end | ||
return p | return p | ||