Bu modül şu Lua modüllerini kullanıyor:
|
require('strict') local p = {} local lang = 'tr' -- local default language --Below these comments: Internationalization table --How to translate this module (for languages without variants): --• Characters inside single and double quotation marks are called strings. -- The strings in this i18n table are used as output. --• Strings within square brackets are keys. --• Strings are concatenated (joined) with two dots. --• Set the string after «local lang =» to your language's code. -- Change the first key after "i18n" (usually "en-GB") to the same thing. --• For each string which is not inside a function, translate it directly. --• Strings with keys named "format" are Lua regular expressions. -- «()» is a match; «.+» means all characters; «%s+» means all spaces. --• For each string which is concatenated to the variable «var», -- translate the phrase assuming that «var» will be a noun. --• Remove any unnecessary translations. local i18n = require("Modül:Adjacent stations/i18n") local function getData(system, verify) if verify then local title = mw.title.new('Modül:Adjacent stations/' .. system -- .. '/sandbox' ) if not (title and title.exists) then return nil end end return require('Modül:Adjacent stations/' .. system -- .. '/sandbox' ) end local function getLine(data, lineN) if lineN then if data['aliases'] then lineN = data['aliases'][mw.ustring.lower(lineN)] or lineN end local default = data['lines']['_default'] or {} local line = data['lines'][lineN] or {} for k, v in pairs(default) do if v then line[k] = line[k] or v end end line['title'] = line['title'] and mw.ustring.gsub(line['title'], '%%1', lineN) return line, lineN end end local function getColor(data, system, line, Type, frame) if system then if line then return frame:expandTemplate{ title = system .. ' color', args = {line, ['branch'] = Type} } end return frame:expandTemplate{ title = system .. ' color' } else line = (getLine(data, line)) local default = data['lines']['_default'] if line or default then default = default or {} if not line then line = mw.clone(default) end local color = line['color'] or line['background color'] or default['color'] or default['background color'] or data['system color'] local Type_value = Type and line['types'] and (line['types'][Type] and line['types'][Type]['color']) if Type_value then color = Type_value end return color end return (default and (default['color'] or default['background color']) or data['system color'] or '') end end local lineN, typeN local function somethingMissing(name, key, formats) local formatKeys = {} for k in pairs(formats) do table.insert(formatKeys, k) end return name .. ' was "' .. key .. '" but neither an entry for it nor a default was found. Choices were: ' .. table.concat(formatKeys, ', ') end local function getStation(station, _Format) if type(_Format) == 'table' then local lineNformats = _Format _Format = lineNformats[lineN] or lineNformats[1] if not _Format then error(somethingMissing('lineN', lineN, lineNformats)) elseif type(_Format) == 'table' then local typeNformats = _Format _Format = typeNformats[typeN] or typeNformats[1] if not _Format then error(somethingMissing('typeN', typeN, typeNformats)) end end end if typeN then _Format = mw.ustring.gsub(_Format, '%%3', typeN) end if lineN then _Format = mw.ustring.gsub(_Format, '%%2', lineN) end return (mw.ustring.match(_Format, '%[%[.+%]%]')) and (mw.ustring.gsub(_Format, '%%1', station)) or table.concat({'[[', mw.ustring.gsub(_Format, '%%1', station), '|', station, ']]'}) end local function getTerminusText(var, Format) local function subst(var1, var2) -- var1 is the terminus or table of termini; var2 is the key for the table of termini return type(var1) == 'string' and getStation(var1, (Format[var1] or Format[1])) or type(var1) == 'table' and #var1 > 0 and getStation(var1[var2], (Format[var1[var2]] or Format[1])) or '' end if Format then if type(var) == 'string' then return subst(var) elseif type(var) == 'table' and #var > 0 then local t = {subst(var, 1)} for i = 2, #var - 1 do t[i] = i18n[lang]['comma'](subst(var, i)) end if #var > 1 then t[#var] = i18n[lang]['or'](subst(var, #var)) end if var['via'] then if i18n[lang]['via-first'] then table.insert(t, 1, i18n[lang]['via'](subst(var, 'via'))) else table.insert(t, i18n[lang]['via'](subst(var, 'via'))) end end return table.concat(t) else return '' end else return var or '' end end function p._main(_args) -- Arguments are processed here instead of the main function local yesno = require('Modül:Evethayır') local trimq = require('Modül:Trim quotes')._trim local boolean = { ['oneway-left'] = true, ['oneway-right'] = true, ['reverse'] = true, ['reverse-left'] = true, ['reverse-right'] = true } local args = {} -- Processed arguments local index = {} -- A list of addresses corresponding to number suffixes in the arguments for k, v in pairs(_args) do -- Maps each raw argument to processed arguments by string matching _args[k] = v:match('^%s*(.-)%s*$') if _args[k] and _args[k] ~= '' then local a = mw.ustring.match(k, '^(.*%D)%d+$') or k -- The parameter; address 1 can be omitted local b = tonumber(mw.ustring.match(k, '^.*%D(%d+)$')) or 1 -- The address for a given argument; address 1 can be omitted if boolean[a] then v = yesno(v) end if not args[b] then args[b] = {[a] = v} table.insert(index, b) elseif args[b][a] then return error(i18n[lang]['error_duplicate'](a .. b)) else args[b][a] = v end end end table.sort(index) local function small(s, italic) return italic and '<div class="isA">' .. s .. '</div>' or '<div class="smA">' .. s .. '</div>' end local style = { -- Style for each cell type ['header cell'] = 'class="hcA"|', ['header midcell'] = 'colspan="3" class="hmA"|', ['body cell'] = 'class="bcA"|', ['body banner'] = 'class="bbA" style="background-color:#', } local function rgb(var) if var:len() == 3 then return {tonumber(var:sub(1, 1), 16) * 17, tonumber(var:sub(2, 2), 16) * 17, tonumber(var:sub(2, 2), 16) * 17} elseif var:len() == 6 then return {tonumber(var:sub(1, 2), 16), tonumber(var:sub(3, 4), 16), tonumber(var:sub(5, 6), 16)} end return {} end local data = {} -- A table of data modules for each address local noclearclass = (((_args.noclear or '') ~= '') and ' adjacent-stations-noclear' or '') local wikitable = {'{| class="wikitable adjacent-stations' .. noclearclass .. '"'} for i, v in ipairs(index) do -- If an address has a system argument, indexes the data module data[v] = args[v]['system'] and getData(args[v]['system']) -- If an address has no system, the row uses data from the previous address or data[index[i - 1]] or (args[v]['header'] and getData(args[index[i+1]]['system'])) or error(i18n[lang]['error_unknown'](args[v]['system'])) local lang = data[v]['lang'] or lang if args[v]['system'] and not args[v]['hide-system'] then -- Header row local stop_noun = data[v]['header stop noun'] or i18n[lang]['stop_noun'] table.insert(wikitable, table.concat({'\n|-', '\n! scope="col" ', style['header cell'], i18n[lang]['preceding'](stop_noun), '\n! scope="col" ', style['header midcell'], (data[v]['system icon'] and data[v]['system icon'] .. ' ' or ''), (data[v]['system title'] or ('[['.. args[v]['system'] ..']]')), '\n! scope="col" ', style['header cell'], i18n[lang]['following'](stop_noun) })) table.insert(wikitable, '') table.insert(wikitable, '') table.insert(wikitable, '') end if args[v]['header'] then -- Subheader table.insert(wikitable, '\n|-\n!colspan="5" class="hmA"|'.. args[v]['header']) table.insert(wikitable, '') table.insert(wikitable, '') table.insert(wikitable, '') end if args[v]['line'] or args[v]['left'] or args[v]['right'] or args[v]['nonstop'] then if not args[v]['line'] and i > 1 and not args[v]['system'] then args[v]['line'] = args[index[i - 1]]['line'] end lineN = args[v]['line'] or '_default' typeN = args[v]['type'] if data[v]['aliases'] then lineN = data[v]['aliases'][mw.ustring.lower(lineN)] or lineN if typeN then typeN = data[v]['aliases'][mw.ustring.lower(typeN)] or typeN end end -- get the line table local line = data[v]['lines'] and (mw.clone(data[v]['lines'][lineN]) or error(i18n[lang]['error_unknown'](args[v]['line']))) or error(i18n[lang]['error_line']) local default = data[v]['lines']['_default'] or {} line['title'] = line['title'] or default['title'] line['title'] = mw.ustring.gsub(line['title'], '%%1', lineN) -- cell across row for non-stop service if args[v]['nonstop'] then table.insert(wikitable, table.concat({'\n|-\n|colspan="5" ', style['body cell'], ((args[v]['nonstop'] == 'former') and i18n[lang]['nonstop_past'] or i18n[lang]['nonstop_present'])(p._box({data = data[v], line = lineN, Type = typeN, inline = 'yes'})) }) ) table.insert(wikitable, '') table.insert(wikitable, '') table.insert(wikitable, '') else local Format = data[v]['station format'] or i18n[lang]['error_format'] local color, color_2, background_color, circular local Type = line['types'] and line['types'][typeN] -- get the line type table if Type then if Type['color'] then -- line color is used as background if there is no background color in the line type table background_color = Type['background color'] or line['color'] color = Type['color'] color_2 = Type['color2'] or color else background_color = Type['background color'] or line['background color'] color = line['color'] or default['color'] or '' color_2 = line['color2'] or color end if Type['circular'] then -- Type may override the circular status of the line circular = Type['circular'] end else background_color = line['background color'] color = line['color'] or default['color'] or '' color_2 = line['color2'] or color circular = line['circular'] end -- Alternate termini can be specified based on type local sideCell = {true, true} for i, b in ipairs({'left', 'right'}) do if not args[v][b] then -- If no station is given on one side, the station is assumed to be the terminus on that side local _through = args[v]['through-' .. b] or args[v]['through'] local _through_data = getLine(data[v], _through) if _through_data then _through = _through_data['title'] or _through end sideCell[i] = _through and "''" .. i18n[lang]['through'](trimq(_through)) .. "''" or "''" .. trimq((args[v]['reverse-' .. b] or args[v]['reverse']) and i18n[lang]['reverse'] or i18n[lang]['terminus']) .. "''" else local terminusT local terminusN = Type and Type[b .. ' terminus'] or line[b .. ' terminus'] -- If the terminus table has more than one numbered key or has the via key then the table shows only the default termini, since terminusN[2] cannot be used and terminusN[via] is reserved if type(terminusN) == 'string' or (type(terminusN) == 'table' and (terminusN[2] or terminusN['via'])) then if args[v]['to-' .. b] then terminusT = args[v]['to-' .. b] local _or = mw.ustring.match(terminusT, i18n[lang]['or-format']) if _or then terminusT = mw.ustring.gsub(terminusT, i18n[lang]['or-format'], '\127_OR_\127') terminusT = mw.ustring.gsub(terminusT, i18n[lang]['comma-format'], '\127_OR_\127') end local _via = (mw.ustring.match(terminusT, i18n[lang]['via-format'])) if _via then terminusT = mw.ustring.gsub(terminusT, i18n[lang]['via-format'], '') terminusT = mw.text.split(terminusT, '\127_OR_\127') terminusT['via'] = _via elseif _or then terminusT = mw.text.split(terminusT, '\127_OR_\127') end else terminusT = terminusN end elseif type(terminusN) == 'table' then terminusT = terminusN[args[v]['to-' .. b]] or terminusN[args[v]['to']] or terminusN[1] end local mainText = args[v]['note-' .. b] and getTerminusText(args[v][b], Format) .. small(args[v]['note-' .. b]) or getTerminusText(args[v][b], Format) local subText = (args[v]['oneway-' .. b] or line['oneway-' .. b]) and i18n[lang]['oneway'] or args[v][b] == terminusT and i18n[lang]['terminus'] or circular and terminusT or i18n[lang]['towards'](getTerminusText(terminusT, Format)) subText = small(subText, true) sideCell[i] = mainText .. subText end end table.insert(wikitable, '\n|-') table.insert(wikitable, '\n|' .. style['body cell'] .. sideCell[1]) table.insert(wikitable, table.concat({'\n|', style['body banner'], color, '"|', '\n|', (background_color and 'class="bcA" style="background-color:rgba(' .. table.concat(rgb(background_color), ',') .. ',.2)"|' or style['body cell']), line['title'], -- Type; table key 'types' in subpages (datatype table, with strings as keys). If table does not exist then the input is displayed as the text (typeN and '<div>' .. (Type and Type['title'] or typeN) .. '</div>' or ''), -- Note-mid; table key 'note-mid' in subpages. Overridden by user input ((args[v]['note-mid'] and small(args[v]['note-mid'])) or (Type and Type['note-mid'] and small(Type['note-mid'])) or (line['note-mid'] and small(line['note-mid'])) or ''), -- Transfer; uses system's station link table (args[v]['transfer'] and small('transfer at ' .. getTerminusText(args[v]['transfer'], Format), true) or ''), '\n|', style['body banner'], color_2, '"|'})) table.insert(wikitable, '\n|' .. style['body cell'] .. sideCell[2]) end end if args[v]['note-row'] then -- Note if args[v]['note-row']:match('^%s*<tr') or args[v]['note-row']:match('^%s*%|%-') then table.insert(wikitable, '\n' .. args[v]['note-row']) else table.insert(wikitable, '\n|-\n|colspan="5" ' .. style['body cell'] .. args[v]['note-row']) end table.insert(wikitable, '') table.insert(wikitable, '') table.insert(wikitable, '') end end local function combine(t, n) if t[n + 4] ~= '' and t[n + 4] == t[n] then t[n + 4] = '' -- The cell in the next row is deleted local rowspan = 2 while t[n + rowspan * 4] == t[n] do t[n + rowspan * 4] = '' rowspan = rowspan + 1 end t[n] = mw.ustring.gsub(t[n], '\n|class="', '\n|rowspan="' .. rowspan .. '" class="') end end local M = #wikitable for i = 3, M, 4 do combine(wikitable, i) end for i = 4, M, 4 do combine(wikitable, i) end for i = 5, M, 4 do combine(wikitable, i) end table.insert(wikitable, '\n|}') return table.concat(wikitable) end local getArgs = require('Modül:Bağımsız değişkenler').getArgs local function makeInvokeFunction(funcName) -- makes a function that can be returned from #invoke, using -- [[Module:Arguments]] return function (frame) local args = getArgs(frame, {parentOnly = true}) return p[funcName](args, frame) end end p.main = makeInvokeFunction('_main') function p._color(args, frame) local data = args.data if args[1] or data then data = data or getData(args[1], true) if not data then return getColor(nil, args[1], args[2], args[3], frame) end return getColor(data, nil, args[2], args[3]) end end p.color = makeInvokeFunction('_color') function p._box(args, frame) local system = args[1] or args.system lineN = args[2] or args.line if not (system or lineN) then return '' end local line, Type, line_data local inline = args[3] or args.inline typeN = args.type local data = args.data if system or data then data = data or getData(system, true) local color if data then local default = data['lines']['_default'] or {} line, lineN = getLine(data, lineN) if typeN then typeN = data['aliases'] and data['aliases'][mw.ustring.lower(typeN)] or typeN Type = line['types'] and line['types'][typeN] and line['types'][typeN]['title'] or typeN end color = getColor(data, nil, lineN, typeN) if inline ~= 'box' then line_data = line or error(i18n[lang]['error_unknown'](lineN)) line = line_data['title'] or default['title'] or error(i18n[lang]['error_missing']('title')) line = mw.ustring.gsub(line, '%%1', lineN) end else color = getColor(nil, system, lineN, typeN, frame) if inline ~= 'box' then line = frame:expandTemplate{ title = system .. ' lines', args = {lineN, ['branch'] = typeN} } if mw.text.trim(line) == '' then return error(i18n[lang]['error_unknown'](lineN)) end end Type = typeN end local result if Type and Type ~= '' and inline ~= 'box' then if line == '' then line = Type else result = ' – ' .. Type end end if args.note then result = (result or '') .. ' ' .. args.note end result = result or '' if not inline then -- [[Template:Legend]] result = '<div class="legend" style="page-break-inside:avoid;break-inside:avoid-column"><span class="legend-color" style="display:inline-block;min-width:1.25em;height:1.25em;line-height:1.25;margin:1px 0;border:1px solid black;background-color:#' .. color .. '"> </span> ' .. line .. result .. '</div>' elseif inline == 'yes' then result = '<span style="background-color:#' .. color .. ';border:1px solid #000"> </span> ' .. line .. result elseif inline == 'box' then result = '<span style="background-color:#' .. color .. ';border:1px solid #000"> </span>' .. result elseif inline == 'link' then local link = args.link or mw.ustring.match(line, '%[%[([^%[:|%]]+)[|%]]') if link then result = '[[' .. link .. '|<span style="background-color:#' .. color .. ';border:1px solid #000"> </span>]]' .. result else result = '<span style="background-color:#' .. color .. ';border:1px solid #000"> </span>' .. result end elseif inline == 'square' then result = '<span style="color:#' .. color .. ';line-height:initial">■</span> ' .. line .. result elseif inline == 'lsquare' then local link = args.link or mw.ustring.match(line, '%[%[([^%[:|%]]+)[|%]]') if link then result = '[[' .. link .. '|<span style="color:#' .. color .. ';line-height:initial">■</span>]]' else result = '<span style="color:#' .. color .. ';line-height:initial">■</span>' end elseif inline == 'dot' then result = '<span style="color:#' .. color .. ';line-height:initial">●</span> ' .. line .. result elseif inline == 'ldot' then local link = args.link or mw.ustring.match(line, '%[%[([^%[:|%]]+)[|%]]') if link then result = '[[' .. link .. '|<span style="color:#' .. color .. ';line-height:initial">●</span>]]' else result = '<span style="color:#' .. color .. ';line-height:initial">●</span>' end elseif inline == 'small' then result = '<span style="background-color:#' .. color .. '"> </span>' .. ' ' .. line .. result else local yesno = require("Modül:Evethayır") local link = args.link or mw.ustring.match(line, '%[%[([^%[:|%]]+)[|%]]') local border_color, text_color local color_box = data['color box format'] or data['rail box format'] or {} if line_data then if line_data['types'] and line_data['types'][typeN] then local Type_data = line_data['types'][typeN] border_color = Type_data['border color'] or line_data['border color'] or color text_color = Type_data['text color'] or line_data['text color'] if color_box == 'title' and not args[4] then lineN = Type_data['short name'] or line_data['short name'] or require('Modül:Bağlantıyı kes')._delink{line} else lineN = Type_data['short name'] or line_data['short name'] or lineN end else border_color = line_data['border color'] or color text_color = line_data['text color'] if color_box == 'title' and not args[4] then lineN = line_data['short name'] or require('Modül:Bağlantıyı kes')._delink{line} else lineN = line_data['short name'] or lineN end end else border_color = color end text_color = text_color and '#' .. text_color or require('Modül:Renk karşıtlığı')._greatercontrast{color} local bold = ';font-weight:bold' if (yesno(args.bold) == false) then bold = '' end if inline == 'route' then -- [[Şablon:RouteBox]] if link then result = '<span style="background-color:#' .. color .. ';border:.075em solid #' .. border_color .. ';padding:0 .3em">[[' .. link .. '|<span style="color:' .. text_color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>]]</span>' else result = '<span style="background-color:#' .. color .. ';border:.075em solid #' .. border_color .. ';padding:0 .3em;color:' .. text_color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>' end elseif inline == 'croute' then -- [[Şablon:Bahnlinie]] if link then result = '<span style="background-color:#' .. color .. ';border:.075em solid #' .. border_color .. ';border-radius:.5em;padding:0 .3em">[[' .. link .. '|<span style="color:' .. text_color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>]]</span>' else result = '<span style="background-color:#' .. color .. ';border:.075em solid #' .. border_color .. ';border-radius:.5em;padding:0 .3em;color:' .. text_color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>' end elseif inline == 'xroute' then -- [[Şablon:Bahnlinie]] if link then result = '<span style="border:.075em solid #' .. border_color .. ';border-radius:.5em;padding:0 .3em">[[' .. link .. '|<span style="color:#' .. color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>]]</span>' else result = '<span style="border:.075em solid #' .. border_color .. ';border-radius:.5em;padding:0 .3em;color:#' .. color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>' end elseif inline == 'broute' then if link then result = '<span style="background-color:#' .. color .. ';border:.075em solid #000;padding:0 .3em">[[' .. link .. '|<span style="color:' .. text_color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>]]</span>' else result = '<span style="background-color:#' .. color .. ';border:.075em solid #000;padding:0 .3em;color:' .. text_color .. bold .. ';font-size:inherit;white-space:nowrap">' .. lineN .. '</span>' end else -- [[Şablon:Lejant]] (fallback; duplication to simplify logic) result = '<div class="legend" style="page-break-inside:avoid;break-inside:avoid-column"><span class="legend-color" style="display:inline-block;min-width:1.25em;height:1.25em;line-height:1.25;margin:1px 0;border:1px solid black;background-color:#' .. color .. '"> </span> ' .. line .. result .. '</div>' end end result = mw.ustring.gsub(result, ':%s*#transparent', ':transparent') return result end end p.box = makeInvokeFunction('_box') function p._icon(args, frame) local system = args[1] or args.system local data = args.data if not system and not data then return end data = data or getData(system) local line, line_name = getLine(data, args[2] or args.line) local icon local icon_format if line then local line_type = args[3] or args.type if line_type then line_type = data.aliases and data.aliases[mw.ustring.lower(line_type)] or line_type line_type = line.types and line.types[line_type] -- If there's no type table or entry for this type, then it can't have its own icon icon_format = line_type['icon format'] or data['type icon format'] if line_type.icon then icon = line_type.icon end end if not icon then icon = line.icon end -- Only if there is no icon use the icon_format. if not icon and not icon_format then icon_format = line['icon format'] or data['line icon format'] end local default = data.lines._default or {} if icon and string.find(icon, "%%1") and default and default.icon then icon = mw.ustring.gsub(default.icon, '%%1', line_name) end end if not icon then icon = data['system icon'] end if not icon_format then icon_format = data['system icon format'] end if icon_format then if icon_format ~= 'image' then icon = p._box({data = data, [2] = (args[2] or args.line), [3] = icon_format, type = (args[3] or args.type), bold = args.bold, link = args.link}, frame) if args.name then if line and line.title then return icon .. " " .. line.title end return icon .. " " .. data["system title"] end end end local size = args.size if size then if mw.ustring.match(size, '%d$') then size = '|' .. size .. 'px' else size = '|' .. size end -- Upright values are to be disabled until there is use of upright scaling in subpages; doesn't seem to work anyway as of 2018-08-10 local regex = { '|%s*%d*x?%d+px%s*([%]|])', -- '|%s*upright=%d+%.?%d*%s*([%]|])', '|%s*upright%s*([%]|])' } if mw.ustring.match(icon, regex[1]) then icon = mw.ustring.gsub(icon, regex[1], size .. '%1') --elseif mw.ustring.match(icon, regex[2]) then --icon = gsub(icon, regex[2], size .. '%1') --elseif mw.ustring.match(icon, regex[3]) then --icon = gsub(icon, regex[3], size .. '%1') else icon = mw.ustring.gsub(icon, '(%[%[[^%]|]+)([%]|])', '%1' .. size .. '%2') end end local link = args.link if link then if mw.ustring.match(icon, '|%s*link=[^%]|]*[%]|]') then icon = mw.ustring.gsub(icon, '|%s*link=[^%]|]*([%]|])', '|link=' .. link .. '%1') else icon = mw.ustring.gsub(icon, '(%[%[[^%]|]+)([%]|])', '%1|link=' .. link .. '%2') end end local alt = args.alt or link if alt then if mw.ustring.match(icon, '|%s*alt=[^%]|]*[%]|]') then icon = mw.ustring.gsub(icon, '|%s*alt=[^%]|]*([%]|])', '|alt=' .. alt .. '%1') else icon = mw.ustring.gsub(icon, '(%[%[[^%]|]+)([%]|])', '%1|alt=' .. alt .. '%2') end end if args.name then if line and line.title then return icon .. " " .. line.title end return icon .. " " .. data["system title"] end return icon end p.icon = makeInvokeFunction('_icon') function p._line(args, frame) local system = args[1] or args.system local line = args[2] or args.line if not line then return '' end local Type = args[3] or args.type local data = args.data if system or data then data = data or getData(system, true) if data then line = (getLine(data, line)) or error(i18n[lang]['error_unknown'](line)) if Type then Type = data['aliases'] and data['aliases'][mw.ustring.lower(Type)] or Type Type = line['types'] and line['types'][Type] and line['types'][Type]['title'] or Type end line = line['title'] or error(i18n[lang]['error_missing']('title')) else line = frame:expandTemplate{ title = system .. ' lines', args = {line, ['branch'] = Type} } if mw.text.trim(line) == '' then return error(i18n[lang]['error_unknown'](lineN)) end end if Type and Type ~= '' then if line == '' then line = Type else line = line .. ' – ' .. Type end end return line end end p.line = makeInvokeFunction('_line') function p._station(args, frame) local system = args[1] or args.system local station = args[2] or args.station if not station then return '' end lineN = args[3] or args.line typeN = args[4] or args.type local data = args.data if system or data then data = data or getData(system, true) if data then local _Format = data['station format'][station] or data['station format'][1] if _Format then if data['aliases'] then if lineN then lineN = data['aliases'][mw.ustring.lower(lineN)] or lineN end if typeN then typeN = data['aliases'][mw.ustring.lower(typeN)] or typeN end end station = getStation(station, _Format) else station = station or '' end else station = frame:expandTemplate{ title = system .. ' stations', args = {['station'] = station, ['line'] = lineN, ['branch'] = typeN} } end return station end end p.station = makeInvokeFunction('_station') function p._terminusTable(args, frame) local system = args[1] or args.system lineN = args[2] or args.line local side = mw.ustring.sub(mw.ustring.lower(args[3] or args.side or ''), 1, 1) typeN = args.type local prefix = (side == 'r') and 'right' or 'left' local data = args.data if system or data then data = data or getData(system, true) end if data then local line = getLine(data, lineN) or error(i18n[lang]['error_unknown'](lineN)) if typeN and data and data['aliases'] then typeN = data['aliases'][mw.ustring.lower(typeN)] or typeN end local Type = line['types'] and line['types'][typeN] local circular if Type then if Type['circular'] then -- Type may override the circular status of the line circular = Type['circular'] end else circular = line['circular'] end return Type and Type[prefix .. ' terminus'] or line[prefix .. ' terminus'], data['station format'] or i18n[lang]['error_format'], circular else local terminus = frame:expandTemplate{ title = 'S-line/' .. system .. ' ' .. prefix .. '/' .. lineN } return mw.ustring.gsub(terminus, '{{{type}}}', typeN) end end function p._terminus(args, frame) local var, Format, circular = p._terminusTable(args, frame) return circular and var or getTerminusText(var, Format) end p.terminus = makeInvokeFunction('_terminus') function p._style(args, frame) local style = args[1] or args.style local system = args[2] or args.system local line = args[3] or args.line local station = args[4] or args.station local result = {} local data = args.data local default = 'background-color:#efefef' -- Default background color for {{Infobox station}} if system or data then data = data or getData(system, true) end if data then local function getValue(var) if type(var) == 'table' then var = var[line] or var[1] if type(var) == 'table' then var = var[station] or var[1] end end if var ~= '' then return var end end if style == 'header' then local tmp = data['name format'] and getValue(data['name format']) if tmp then table.insert(result, tmp) end elseif style == 'subheader' then local tmp = data['header background color'] and getValue(data['header background color']) if tmp then table.insert(result, 'background-color:#' .. tmp) local color = data['header text color'] and getValue(data['header text color']) if color then table.insert(result, 'color:#' .. color) else local greatercontrast = require('Modül:Renk karşıtlığı')._greatercontrast if greatercontrast{tmp} == '#FFFFFF' then table.insert(result, 'color:#FFFFFF') end end else table.insert(result, default) local color = data['header text color'] and getValue(data['header text color']) if color then table.insert(result, 'color:#' .. color) end end end result = table.concat(result, ';') elseif system then local title = 'Şablon:' .. system .. ' style' local titleObj = mw.title.new(title) if titleObj and titleObj.exists then local tmp if style == 'header' then tmp = frame:expandTemplate{ title = title, args = {'name_format', line, station} } if tmp ~= '' then table.insert(result, tmp) end elseif style == 'subheader' then tmp = frame:expandTemplate{ title = title, args = {'thbgcolor', line, station} } if tmp ~= '' then table.insert(result, 'background-color:#' .. tmp) local color = frame:expandTemplate{ title = title, args = {'thcolor', line, station} } if color ~= '' then table.insert(result, 'color:#' .. color) else local ratio = require('Modül:Renk karşıtlığı')._ratio if ratio{tmp, '222222'} < 4.5 then table.insert(result, 'color:#FFFFFF') end -- 222222 is the default text color in Vector end else table.insert(result, default) tmp = frame:expandTemplate{ title = title, args = {'thcolor', line, station} } if tmp ~= '' then table.insert(result, 'color:#' .. tmp) end end end result = table.concat(result, ';') else if style == 'subheader' then result = default else result = '' end end else if style == 'subheader' then result = default else result = '' end end return result end function p.style(frame) local args = getArgs(frame, {frameOnly = true}) return p._style(args, frame) end function p.convert(frame) local args = frame.args local code = mw.text.split(mw.ustring.gsub(args[1], '^%s*{{(.*)}}%s*$', '%1'), '%s*}}%s*{{%s*') local system local group = tonumber(args.offset or 0) or 0 local firstgroup = group + 1 local delete = { ['s-rail'] = true, ['s-rail-next'] = true, ['s-rail-national'] = true, ['s-start'] = true, ['s-rail-start'] = true, ['start'] = true, ['s-end'] = true, ['end'] = true } local order = { 'line', 'left', 'right', 'to-left', 'to-right', 'oneway-left', 'oneway-right', 'through-left', 'through-right', 'reverse', 'reverse-left', 'reverse-right', 'note-left', 'note-mid', 'note-right', 'transfer' -- circular: use module subpage -- state: not implemented } local replace = { ['previous'] = 'left', ['next'] = 'right', ['type'] = 'to-left', ['type2'] = 'to-right', ['branch'] = 'type', ['note'] = 'note-left', ['notemid'] = 'note-mid', ['note2'] = 'note-right', ['oneway1'] = 'oneway-left', ['oneway2'] = 'oneway-right', ['through1'] = 'through-left', ['through2'] = 'through-right' } local remove_rows = {} local data = {} local noclear = false for i, v in ipairs(code) do code[i] = mw.ustring.gsub(code[i], '\n', ' ') local template = mw.ustring.lower(mw.text.trim(mw.ustring.match(code[i], '^[^|]+'))) code[i] = mw.ustring.match(code[i], '(|.+)$') if (mw.ustring.match(code[i] or '', 'noclear%s*=%s*[a-z]')) then noclear = true end if template == 's-line' then data[i] = {} local this_system = mw.text.trim(mw.ustring.match(code[i], '|%s*system%s*=([^|]+)')) code[i] = mw.text.split(code[i], '%s*|%s*') for m, n in ipairs(code[i]) do local tmp = mw.text.split(n, '%s*=%s*') if tmp[3] then tmp[2] = mw.ustring.gsub(n, '^.-%s*=', '') end tmp[1] = replace[tmp[1]] or tmp[1] if tmp[2] then -- checks for matching brackets local curly = select(2, mw.ustring.gsub(tmp[2], "{", ""))-select(2, mw.ustring.gsub(tmp[2], "}", "")) local square = select(2, mw.ustring.gsub(tmp[2], "%[", ""))-select(2, mw.ustring.gsub(tmp[2], "%]", "")) if not (curly == 0 and square == 0) then local count = mw.clone(m)+1 while not (curly == 0 and square == 0) do tmp[2] = tmp[2]..'|'..code[i][count] curly = curly+select(2, mw.ustring.gsub(code[i][count], "{", ""))-select(2, mw.ustring.gsub(code[i][count], "}", "")) square = square+select(2, mw.ustring.gsub(code[i][count], "%[", ""))-select(2, mw.ustring.gsub(code[i][count], "%]", "")) code[i][count] = '' count = count+1 end end data[i][tmp[1]] = tmp[2] end end if (this_system ~= system) or (not system) then system = this_system data[i]['system'] = system else data[i]['system'] = nil end local last = data[i-1] or data[i-2] or data[i-3] if last then for r, s in pairs({ ['hide1'] = {'left', 'to-left', 'note-left', 'oneway-left'}, ['hide2'] = {'right', 'to-right', 'note-right', 'oneway-right'}, ['hidemid'] = {'type', 'note-mid'} }) do if data[i][r] then for m, n in ipairs(s) do if not data[i][n] then data[i][n] = last[n] end end end end end code[i] = {} local X = '|' local Y = (i+group)..'=' if data[i]['system'] then table.insert(code[i], '|system') table.insert(code[i], Y) table.insert(code[i], data[i]['system']) table.insert(code[i], '\n') end for m, n in ipairs(order) do if data[i][n] then table.insert(code[i], X) table.insert(code[i], n) table.insert(code[i], Y) table.insert(code[i], data[i][n]) end end code[i] = table.concat(code[i]) elseif template == 's-note' then code[i] = mw.ustring.gsub(code[i], '|%s*text%s*=', '|header'..i+group..'=') code[i] = mw.ustring.gsub(code[i], '|%s*wide%s*=[^|]*', '') elseif template == 's-text' then code[i] = mw.ustring.gsub(code[i], '|%s*text%s*=', '|note-row'..i+group..'=') elseif delete[template] then code[i] = '' table.insert(remove_rows, 1, i) -- at the start, so that the rows are deleted in reverse order group = group-1 end end for i, v in ipairs(remove_rows) do table.remove(code, v) end code = table.concat(code, '\n') local t = {'{{Adjacent stations' .. (noclear and '|noclear=y\n' or ''), '\n}}'} system = mw.ustring.match(code, '|system(%d*)=') code = mw.ustring.gsub(code, '\n\n+', '\n') if tonumber(system) > firstgroup then -- If s-line isn't the first template then the system will have to be moved to the top system = mw.ustring.match(code, '|system%d*=([^|]*[^|\n])') code = mw.ustring.gsub(code, '|system%d*=[^|]*', '') code = '\n|system'..firstgroup..'='..system..code elseif not mw.ustring.match(code, '^[^{%[]*|[^=|]+2=') then -- If there's only one parameter group then there's no need to have line breaks code = mw.ustring.gsub(code, '\n', '') code = mw.ustring.gsub(code, '(|[^=|]+)1=', '%1=') t[2] = '}}' if not mw.ustring.match(code, '[%[{]') then code = mw.ustring.gsub(code, '|[^=|]*=$', '') code = mw.ustring.gsub(code, '|[^=|]*$', '') end end if not mw.ustring.match(code, '[%[{]') then code = mw.ustring.gsub(code, '|[^=|]*=|', '|') code = mw.ustring.gsub(code, '|[^=|]*|', '|') code = mw.ustring.gsub(code, '|[^=|]*=\n', '\n') code = mw.ustring.gsub(code, '|[^=|]*\n', '\n') end return t[1]..code..t[2] end return p
wikipedia, wiki, viki, vikipedia, oku, kitap, kütüphane, kütübhane, ara, ara bul, bul, herşey, ne arasanız burada,hikayeler, makale, kitaplar, öğren, wiki, bilgi, tarih, yukle, izle, telefon için, turk, türk, türkçe, turkce, nasıl yapılır, ne demek, nasıl, yapmak, yapılır, indir, ücretsiz, ücretsiz indir, bedava, bedava indir, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, resim, müzik, şarkı, film, film, oyun, oyunlar, mobil, cep telefonu, telefon, android, ios, apple, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, pc, web, computer, bilgisayar
Modul belgelemesi olustur Bu modul su Lua modullerini kullaniyor Modul Adjacent stations i18nModul EvethayirModul Trim quotesModul Bagimsiz degiskenlerModul Baglantiyi kesModul Renk karsitligi Bu Scribunto modulu icin bir belgeleme sayfasi olusturmak isteyebilirsiniz Kullanicilar denemelerini bu sablonun deneme tahtasi olustur yansitma ve test senaryosu olustur sayfalarinda yapabilirler Lutfen kategorileri alt sayfasina ekleyin Bu modul ile ilgili alt sayfalar icin buraya tiklayiniz require strict local p local lang tr local default language Below these comments Internationalization table How to translate this module for languages without variants Characters inside single and double quotation marks are called strings The strings in this i18n table are used as output Strings within square brackets are keys Strings are concatenated joined with two dots Set the string after local lang to your language s code Change the first key after i18n usually en GB to the same thing For each string which is not inside a function translate it directly Strings with keys named format are Lua regular expressions is a match means all characters s means all spaces For each string which is concatenated to the variable var translate the phrase assuming that var will be a noun Remove any unnecessary translations local i18n require Modul Adjacent stations i18n local function getData system verify if verify then local title mw title new Modul Adjacent stations system sandbox if not title and title exists then return nil end end return require Modul Adjacent stations system sandbox end local function getLine data lineN if lineN then if data aliases then lineN data aliases mw ustring lower lineN or lineN end local default data lines default or local line data lines lineN or for k v in pairs default do if v then line k line k or v end end line title line title and mw ustring gsub line title 1 lineN return line lineN end end local function getColor data system line Type frame if system then if line then return frame expandTemplate title system color args line branch Type end return frame expandTemplate title system color else line getLine data line local default data lines default if line or default then default default or if not line then line mw clone default end local color line color or line background color or default color or default background color or data system color local Type value Type and line types and line types Type and line types Type color if Type value then color Type value end return color end return default and default color or default background color or data system color or end end local lineN typeN local function somethingMissing name key formats local formatKeys for k in pairs formats do table insert formatKeys k end return name was key but neither an entry for it nor a default was found Choices were table concat formatKeys end local function getStation station Format if type Format table then local lineNformats Format Format lineNformats lineN or lineNformats 1 if not Format then error somethingMissing lineN lineN lineNformats elseif type Format table then local typeNformats Format Format typeNformats typeN or typeNformats 1 if not Format then error somethingMissing typeN typeN typeNformats end end end if typeN then Format mw ustring gsub Format 3 typeN end if lineN then Format mw ustring gsub Format 2 lineN end return mw ustring match Format and mw ustring gsub Format 1 station or table concat mw ustring gsub Format 1 station station end local function getTerminusText var Format local function subst var1 var2 var1 is the terminus or table of termini var2 is the key for the table of termini return type var1 string and getStation var1 Format var1 or Format 1 or type var1 table and var1 gt 0 and getStation var1 var2 Format var1 var2 or Format 1 or end if Format then if type var string then return subst var elseif type var table and var gt 0 then local t subst var 1 for i 2 var 1 do t i i18n lang comma subst var i end if var gt 1 then t var i18n lang or subst var var end if var via then if i18n lang via first then table insert t 1 i18n lang via subst var via else table insert t i18n lang via subst var via end end return table concat t else return end else return var or end end function p main args Arguments are processed here instead of the main function local yesno require Modul Evethayir local trimq require Modul Trim quotes trim local boolean oneway left true oneway right true reverse true reverse left true reverse right true local args Processed arguments local index A list of addresses corresponding to number suffixes in the arguments for k v in pairs args do Maps each raw argument to processed arguments by string matching args k v match s s if args k and args k then local a mw ustring match k D d or k The parameter address 1 can be omitted local b tonumber mw ustring match k D d or 1 The address for a given argument address 1 can be omitted if boolean a then v yesno v end if not args b then args b a v table insert index b elseif args b a then return error i18n lang error duplicate a b else args b a v end end end table sort index local function small s italic return italic and lt div class isA gt s lt div gt or lt div class smA gt s lt div gt end local style Style for each cell type header cell class hcA header midcell colspan 3 class hmA body cell class bcA body banner class bbA style background color local function rgb var if var len 3 then return tonumber var sub 1 1 16 17 tonumber var sub 2 2 16 17 tonumber var sub 2 2 16 17 elseif var len 6 then return tonumber var sub 1 2 16 tonumber var sub 3 4 16 tonumber var sub 5 6 16 end return end local data A table of data modules for each address local noclearclass args noclear or and adjacent stations noclear or local wikitable class wikitable adjacent stations noclearclass for i v in ipairs index do If an address has a system argument indexes the data module data v args v system and getData args v system If an address has no system the row uses data from the previous address or data index i 1 or args v header and getData args index i 1 system or error i18n lang error unknown args v system local lang data v lang or lang if args v system and not args v hide system then Header row local stop noun data v header stop noun or i18n lang stop noun table insert wikitable table concat n n scope col style header cell i18n lang preceding stop noun n scope col style header midcell data v system icon and data v system icon or data v system title or args v system n scope col style header cell i18n lang following stop noun table insert wikitable table insert wikitable table insert wikitable end if args v header then Subheader table insert wikitable n n colspan 5 class hmA args v header table insert wikitable table insert wikitable table insert wikitable end if args v line or args v left or args v right or args v nonstop then if not args v line and i gt 1 and not args v system then args v line args index i 1 line end lineN args v line or default typeN args v type if data v aliases then lineN data v aliases mw ustring lower lineN or lineN if typeN then typeN data v aliases mw ustring lower typeN or typeN end end get the line table local line data v lines and mw clone data v lines lineN or error i18n lang error unknown args v line or error i18n lang error line local default data v lines default or line title line title or default title line title mw ustring gsub line title 1 lineN cell across row for non stop service if args v nonstop then table insert wikitable table concat n n colspan 5 style body cell args v nonstop former and i18n lang nonstop past or i18n lang nonstop present p box data data v line lineN Type typeN inline yes table insert wikitable table insert wikitable table insert wikitable else local Format data v station format or i18n lang error format local color color 2 background color circular local Type line types and line types typeN get the line type table if Type then if Type color then line color is used as background if there is no background color in the line type table background color Type background color or line color color Type color color 2 Type color2 or color else background color Type background color or line background color color line color or default color or color 2 line color2 or color end if Type circular then Type may override the circular status of the line circular Type circular end else background color line background color color line color or default color or color 2 line color2 or color circular line circular end Alternate termini can be specified based on type local sideCell true true for i b in ipairs left right do if not args v b then If no station is given on one side the station is assumed to be the terminus on that side local through args v through b or args v through local through data getLine data v through if through data then through through data title or through end sideCell i through and i18n lang through trimq through or trimq args v reverse b or args v reverse and i18n lang reverse or i18n lang terminus else local terminusT local terminusN Type and Type b terminus or line b terminus If the terminus table has more than one numbered key or has the via key then the table shows only the default termini since terminusN 2 cannot be used and terminusN via is reserved if type terminusN string or type terminusN table and terminusN 2 or terminusN via then if args v to b then terminusT args v to b local or mw ustring match terminusT i18n lang or format if or then terminusT mw ustring gsub terminusT i18n lang or format 127 OR 127 terminusT mw ustring gsub terminusT i18n lang comma format 127 OR 127 end local via mw ustring match terminusT i18n lang via format if via then terminusT mw ustring gsub terminusT i18n lang via format terminusT mw text split terminusT 127 OR 127 terminusT via via elseif or then terminusT mw text split terminusT 127 OR 127 end else terminusT terminusN end elseif type terminusN table then terminusT terminusN args v to b or terminusN args v to or terminusN 1 end local mainText args v note b and getTerminusText args v b Format small args v note b or getTerminusText args v b Format local subText args v oneway b or line oneway b and i18n lang oneway or args v b terminusT and i18n lang terminus or circular and terminusT or i18n lang towards getTerminusText terminusT Format subText small subText true sideCell i mainText subText end end table insert wikitable n table insert wikitable n style body cell sideCell 1 table insert wikitable table concat n style body banner color n background color and class bcA style background color rgba table concat rgb background color 2 or style body cell line title Type table key types in subpages datatype table with strings as keys If table does not exist then the input is displayed as the text typeN and lt div gt Type and Type title or typeN lt div gt or Note mid table key note mid in subpages Overridden by user input args v note mid and small args v note mid or Type and Type note mid and small Type note mid or line note mid and small line note mid or Transfer uses system s station link table args v transfer and small transfer at getTerminusText args v transfer Format true or n style body banner color 2 table insert wikitable n style body cell sideCell 2 end end if args v note row then Note if args v note row match s lt tr or args v note row match s then table insert wikitable n args v note row else table insert wikitable n n colspan 5 style body cell args v note row end table insert wikitable table insert wikitable table insert wikitable end end local function combine t n if t n 4 and t n 4 t n then t n 4 The cell in the next row is deleted local rowspan 2 while t n rowspan 4 t n do t n rowspan 4 rowspan rowspan 1 end t n mw ustring gsub t n n class n rowspan rowspan class end end local M wikitable for i 3 M 4 do combine wikitable i end for i 4 M 4 do combine wikitable i end for i 5 M 4 do combine wikitable i end table insert wikitable n return table concat wikitable end local getArgs require Modul Bagimsiz degiskenler getArgs local function makeInvokeFunction funcName makes a function that can be returned from invoke using Module Arguments return function frame local args getArgs frame parentOnly true return p funcName args frame end end p main makeInvokeFunction main function p color args frame local data args data if args 1 or data then data data or getData args 1 true if not data then return getColor nil args 1 args 2 args 3 frame end return getColor data nil args 2 args 3 end end p color makeInvokeFunction color function p box args frame local system args 1 or args system lineN args 2 or args line if not system or lineN then return end local line Type line data local inline args 3 or args inline typeN args type local data args data if system or data then data data or getData system true local color if data then local default data lines default or line lineN getLine data lineN if typeN then typeN data aliases and data aliases mw ustring lower typeN or typeN Type line types and line types typeN and line types typeN title or typeN end color getColor data nil lineN typeN if inline box then line data line or error i18n lang error unknown lineN line line data title or default title or error i18n lang error missing title line mw ustring gsub line 1 lineN end else color getColor nil system lineN typeN frame if inline box then line frame expandTemplate title system lines args lineN branch typeN if mw text trim line then return error i18n lang error unknown lineN end end Type typeN end local result if Type and Type and inline box then if line then line Type else result Type end end if args note then result result or args note end result result or if not inline then Template Legend result lt div class legend style page break inside avoid break inside avoid column gt lt span class legend color style display inline block min width 1 25em height 1 25em line height 1 25 margin 1px 0 border 1px solid black background color color gt lt span gt line result lt div gt elseif inline yes then result lt span style background color color border 1px solid 000 gt lt span gt amp nbsp line result elseif inline box then result lt span style background color color border 1px solid 000 gt lt span gt result elseif inline link then local link args link or mw ustring match line if link then result link lt span style background color color border 1px solid 000 gt lt span gt result else result lt span style background color color border 1px solid 000 gt lt span gt result end elseif inline square then result lt span style color color line height initial gt lt span gt amp nbsp line result elseif inline lsquare then local link args link or mw ustring match line if link then result link lt span style color color line height initial gt lt span gt else result lt span style color color line height initial gt lt span gt end elseif inline dot then result lt span style color color line height initial gt lt span gt line result elseif inline ldot then local link args link or mw ustring match line if link then result link lt span style color color line height initial gt lt span gt else result lt span style color color line height initial gt lt span gt end elseif inline small then result lt span style background color color gt lt span gt line result else local yesno require Modul Evethayir local link args link or mw ustring match line local border color text color local color box data color box format or data rail box format or if line data then if line data types and line data types typeN then local Type data line data types typeN border color Type data border color or line data border color or color text color Type data text color or line data text color if color box title and not args 4 then lineN Type data short name or line data short name or require Modul Baglantiyi kes delink line else lineN Type data short name or line data short name or lineN end else border color line data border color or color text color line data text color if color box title and not args 4 then lineN line data short name or require Modul Baglantiyi kes delink line else lineN line data short name or lineN end end else border color color end text color text color and text color or require Modul Renk karsitligi greatercontrast color local bold font weight bold if yesno args bold false then bold end if inline route then Sablon RouteBox if link then result lt span style background color color border 075em solid border color padding 0 3em gt link lt span style color text color bold font size inherit white space nowrap gt lineN lt span gt lt span gt else result lt span style background color color border 075em solid border color padding 0 3em color text color bold font size inherit white space nowrap gt lineN lt span gt end elseif inline croute then Sablon Bahnlinie if link then result lt span style background color color border 075em solid border color border radius 5em padding 0 3em gt link lt span style color text color bold font size inherit white space nowrap gt lineN lt span gt lt span gt else result lt span style background color color border 075em solid border color border radius 5em padding 0 3em color text color bold font size inherit white space nowrap gt lineN lt span gt end elseif inline xroute then Sablon Bahnlinie if link then result lt span style border 075em solid border color border radius 5em padding 0 3em gt link lt span style color color bold font size inherit white space nowrap gt lineN lt span gt lt span gt else result lt span style border 075em solid border color border radius 5em padding 0 3em color color bold font size inherit white space nowrap gt lineN lt span gt end elseif inline broute then if link then result lt span style background color color border 075em solid 000 padding 0 3em gt link lt span style color text color bold font size inherit white space nowrap gt lineN lt span gt lt span gt else result lt span style background color color border 075em solid 000 padding 0 3em color text color bold font size inherit white space nowrap gt lineN lt span gt end else Sablon Lejant fallback duplication to simplify logic result lt div class legend style page break inside avoid break inside avoid column gt lt span class legend color style display inline block min width 1 25em height 1 25em line height 1 25 margin 1px 0 border 1px solid black background color color gt lt span gt line result lt div gt end end result mw ustring gsub result s transparent transparent return result end end p box makeInvokeFunction box function p icon args frame local system args 1 or args system local data args data if not system and not data then return end data data or getData system local line line name getLine data args 2 or args line local icon local icon format if line then local line type args 3 or args type if line type then line type data aliases and data aliases mw ustring lower line type or line type line type line types and line types line type If there s no type table or entry for this type then it can t have its own icon icon format line type icon format or data type icon format if line type icon then icon line type icon end end if not icon then icon line icon end Only if there is no icon use the icon format if not icon and not icon format then icon format line icon format or data line icon format end local default data lines default or if icon and string find icon 1 and default and default icon then icon mw ustring gsub default icon 1 line name end end if not icon then icon data system icon end if not icon format then icon format data system icon format end if icon format then if icon format image then icon p box data data 2 args 2 or args line 3 icon format type args 3 or args type bold args bold link args link frame if args name then if line and line title then return icon line title end return icon data system title end end end local size args size if size then if mw ustring match size d then size size px else size size end Upright values are to be disabled until there is use of upright scaling in subpages doesn t seem to work anyway as of 2018 08 10 local regex s d x d px s s upright d d s s upright s if mw ustring match icon regex 1 then icon mw ustring gsub icon regex 1 size 1 elseif mw ustring match icon regex 2 then icon gsub icon regex 2 size 1 elseif mw ustring match icon regex 3 then icon gsub icon regex 3 size 1 else icon mw ustring gsub icon 1 size 2 end end local link args link if link then if mw ustring match icon s link then icon mw ustring gsub icon s link link link 1 else icon mw ustring gsub icon 1 link link 2 end end local alt args alt or link if alt then if mw ustring match icon s alt then icon mw ustring gsub icon s alt alt alt 1 else icon mw ustring gsub icon 1 alt alt 2 end end if args name then if line and line title then return icon line title end return icon data system title end return icon end p icon makeInvokeFunction icon function p line args frame local system args 1 or args system local line args 2 or args line if not line then return end local Type args 3 or args type local data args data if system or data then data data or getData system true if data then line getLine data line or error i18n lang error unknown line if Type then Type data aliases and data aliases mw ustring lower Type or Type Type line types and line types Type and line types Type title or Type end line line title or error i18n lang error missing title else line frame expandTemplate title system lines args line branch Type if mw text trim line then return error i18n lang error unknown lineN end end if Type and Type then if line then line Type else line line Type end end return line end end p line makeInvokeFunction line function p station args frame local system args 1 or args system local station args 2 or args station if not station then return end lineN args 3 or args line typeN args 4 or args type local data args data if system or data then data data or getData system true if data then local Format data station format station or data station format 1 if Format then if data aliases then if lineN then lineN data aliases mw ustring lower lineN or lineN end if typeN then typeN data aliases mw ustring lower typeN or typeN end end station getStation station Format else station station or end else station frame expandTemplate title system stations args station station line lineN branch typeN end return station end end p station makeInvokeFunction station function p terminusTable args frame local system args 1 or args system lineN args 2 or args line local side mw ustring sub mw ustring lower args 3 or args side or 1 1 typeN args type local prefix side r and right or left local data args data if system or data then data data or getData system true end if data then local line getLine data lineN or error i18n lang error unknown lineN if typeN and data and data aliases then typeN data aliases mw ustring lower typeN or typeN end local Type line types and line types typeN local circular if Type then if Type circular then Type may override the circular status of the line circular Type circular end else circular line circular end return Type and Type prefix terminus or line prefix terminus data station format or i18n lang error format circular else local terminus frame expandTemplate title S line system prefix lineN return mw ustring gsub terminus type typeN end end function p terminus args frame local var Format circular p terminusTable args frame return circular and var or getTerminusText var Format end p terminus makeInvokeFunction terminus function p style args frame local style args 1 or args style local system args 2 or args system local line args 3 or args line local station args 4 or args station local result local data args data local default background color efefef Default background color for Infobox station if system or data then data data or getData system true end if data then local function getValue var if type var table then var var line or var 1 if type var table then var var station or var 1 end end if var then return var end end if style header then local tmp data name format and getValue data name format if tmp then table insert result tmp end elseif style subheader then local tmp data header background color and getValue data header background color if tmp then table insert result background color tmp local color data header text color and getValue data header text color if color then table insert result color color else local greatercontrast require Modul Renk karsitligi greatercontrast if greatercontrast tmp FFFFFF then table insert result color FFFFFF end end else table insert result default local color data header text color and getValue data header text color if color then table insert result color color end end end result table concat result elseif system then local title Sablon system style local titleObj mw title new title if titleObj and titleObj exists then local tmp if style header then tmp frame expandTemplate title title args name format line station if tmp then table insert result tmp end elseif style subheader then tmp frame expandTemplate title title args thbgcolor line station if tmp then table insert result background color tmp local color frame expandTemplate title title args thcolor line station if color then table insert result color color else local ratio require Modul Renk karsitligi ratio if ratio tmp 222222 lt 4 5 then table insert result color FFFFFF end 222222 is the default text color in Vector end else table insert result default tmp frame expandTemplate title title args thcolor line station if tmp then table insert result color tmp end end end result table concat result else if style subheader then result default else result end end else if style subheader then result default else result end end return result end function p style frame local args getArgs frame frameOnly true return p style args frame end function p convert frame local args frame args local code mw text split mw ustring gsub args 1 s s 1 s s s local system local group tonumber args offset or 0 or 0 local firstgroup group 1 local delete s rail true s rail next true s rail national true s start true s rail start true start true s end true end true local order line left right to left to right oneway left oneway right through left through right reverse reverse left reverse right note left note mid note right transfer circular use module subpage state not implemented local replace previous left next right type to left type2 to right branch type note note left notemid note mid note2 note right oneway1 oneway left oneway2 oneway right through1 through left through2 through right local remove rows local data local noclear false for i v in ipairs code do code i mw ustring gsub code i n local template mw ustring lower mw text trim mw ustring match code i code i mw ustring match code i if mw ustring match code i or noclear s s a z then noclear true end if template s line then data i local this system mw text trim mw ustring match code i s system s code i mw text split code i s s for m n in ipairs code i do local tmp mw text split n s s if tmp 3 then tmp 2 mw ustring gsub n s end tmp 1 replace tmp 1 or tmp 1 if tmp 2 then checks for matching brackets local curly select 2 mw ustring gsub tmp 2 select 2 mw ustring gsub tmp 2 local square select 2 mw ustring gsub tmp 2 select 2 mw ustring gsub tmp 2 if not curly 0 and square 0 then local count mw clone m 1 while not curly 0 and square 0 do tmp 2 tmp 2 code i count curly curly select 2 mw ustring gsub code i count select 2 mw ustring gsub code i count square square select 2 mw ustring gsub code i count select 2 mw ustring gsub code i count code i count count count 1 end end data i tmp 1 tmp 2 end end if this system system or not system then system this system data i system system else data i system nil end local last data i 1 or data i 2 or data i 3 if last then for r s in pairs hide1 left to left note left oneway left hide2 right to right note right oneway right hidemid type note mid do if data i r then for m n in ipairs s do if not data i n then data i n last n end end end end end code i local X local Y i group if data i system then table insert code i system table insert code i Y table insert code i data i system table insert code i n end for m n in ipairs order do if data i n then table insert code i X table insert code i n table insert code i Y table insert code i data i n end end code i table concat code i elseif template s note then code i mw ustring gsub code i s text s header i group code i mw ustring gsub code i s wide s elseif template s text then code i mw ustring gsub code i s text s note row i group elseif delete template then code i table insert remove rows 1 i at the start so that the rows are deleted in reverse order group group 1 end end for i v in ipairs remove rows do table remove code v end code table concat code n local t Adjacent stations noclear and noclear y n or n system mw ustring match code system d code mw ustring gsub code n n n if tonumber system gt firstgroup then If s line isn t the first template then the system will have to be moved to the top system mw ustring match code system d n code mw ustring gsub code system d code n system firstgroup system code elseif not mw ustring match code 2 then If there s only one parameter group then there s no need to have line breaks code mw ustring gsub code n code mw ustring gsub code 1 1 t 2 if not mw ustring match code then code mw ustring gsub code code mw ustring gsub code end end if not mw ustring match code then code mw ustring gsub code code mw ustring gsub code code mw ustring gsub code n n code mw ustring gsub code n n end return t 1 code t 2 end return p