Модуль:Дорожная карта (1)

Материал из Справочника наблюдателя
Перейти к:навигация, поиск

(i)      Описание модуля[]

Документация отсутствует!


local p = {}

function Split(str, delim, maxNb)
    -- Eliminate bad cases...
    if string.find(str, delim) == nil then
        return { str }
    end
    if maxNb == nil or maxNb < 1 then
        maxNb = 0    -- No limit
    end
    local result = {}
--    result [1] = tostring(string.byte (str,1,1))
    local pat = "(.-)" .. delim .. "()"
    local nb = 0
    local lastPos
    for part, pos in string.gmatch(str, pat) do
        nb = nb + 1
        result[nb] = part
        lastPos = pos
        if nb == maxNb then break end
    end
    -- Handle the last field
    if nb ~= maxNb then
        result[nb + 1] = string.sub(str, lastPos)
    end
    return result
end
 
local match = string.match
function Trim(s)
  return match(s,'^()%s*$') and '' or match(s,'^%s*(.*%S)')
end
 
function unnil (s, def)
    if s == nil then
        if def == nil then
            return ''
        end
        return def
    end
    return s
end

        
     
 
xs = { ['1']=1, ['2']=2, ['3']=3, ['4']=4, ['5']=5, ['6']=6, ['7']=7, ['8']=8, ['9']=9, ['10']=10, 
       ['11']=11, ['11ж']=12, ['11з']=13, ['12']=14, ['11а']=15, ['11б']=16, ['11в']=17, ['11г']=18, ['11д']=19, ['11е']=20, }

-- local linu
linu = ''

function p.xsx (capture)
    if linu == '' then
        return capture
    else
        local zz = xs[capture]
        if zz == nil then
            return '<span style="color:red; font-weight:bold; font-size:150%">'..capture..'[—несуществующий номер строки]</span>'
        end
        zz=linu[zz]
        if zz == nil then
            return '<span style="color:red; font-weight:bold; font-size:150%">'..capture..'[—не задан региональный эквивалент]</span>'
        end
        return zz
    end
end


function p.Start (frame)
    
    local blank = frame:preprocess ('{{#var:RoadMapFmt}}') == 'бланк'
    local result = '<table class=wikitable><tr>'
    result = result .. '<th>Контролируемое событие</th>'
    if blank then
        result = result .. '<th style="font-size:83%;line-height:105%">кол-во/<br />время</th>'
        result = result .. '<th style="font-size:83%;line-height:105%;background-color:Honeydew;width:30px">да</th>'
        result = result .. '<th style="font-size:83%;line-height:105%;background-color:FloralWhite;width:30px">нет</th>'
    end
    result = result .. '<th style="font-size:83%;line-height:105%">каким законом установлено</th>'
    result = result .. '<th style="font-size:83%;line-height:105%">куда<br />писать<br />жалобу</th>'
    result = result .. '<th style="font-size:83%;line-height:105%">норма об отв-сти</th>'
    if not blank then
        result = result .. '<th>Полезные ссылки</th>'
    end
    return result .. '</tr>'
end

function p.Section (frame)
    frame:preprocess ('{{#vardefine:RoadMapLastKoib|}}')
    if frame:preprocess ('{{#var:RoadMapKoib}}') == 'да' then
        return ''
    end
    local blank = frame:preprocess ('{{#var:RoadMapFmt}}') == 'бланк'
    local xxx = frame.args[1]
    local result = '<tr><th style="text-align:left;font-size:105%;">' .. xxx .. '</th>'
    if blank then
        result = result .. '<th style="text-align:right;" class=plainlinks colspan=6>&nbsp;</th>'
    else
        result = result .. '<th colspan=4>&nbsp;</th>'
    end
    return result .. '</tr>'
end


function p.Line (frame)
    local reg = frame:preprocess ('{{#var:RoadMapReg}}')

    local usl = frame:preprocess ('{{#var:RoadMapUsl}}')
    if usl == '' then
        usl = reg
    else
        usl = usl .. ',' .. reg
    end
    
    local rule = unnil (frame.args['для'])
    if rule ~= '' then
--        if true then return '(('..xxx..'))' end
        local xx = Split (Trim (rule) .. ',все' , '%s*,%s*')
        local yy = Split (Trim (usl), '%s*,%s*')
--        xxx = '(('..xxx..'))'
        for ii = 1, #yy do
            for jj = 1, #xx do
--                xxx = xxx..'(' .. xx [jj] .. '/' .. yy [ii] ..')'
                if (xx [jj] == yy [ii]) and (xx [jj] ~= '') then
                    xx = nil
                    break
                end
            end
            if xx == nil then
                break
            end
        end
--        if true then return '(((('..xxx..'))))' end
        if xx ~=nil then
            return ''
        end
    end
--[[
режимы выдачи:
- полный (есть пометки К и Р) --- КОИБ=все
- простой (только строки для ручного подсчета, без пометок) ---  КОИБ=нет
- составной-основной (строки для ручного подсчета с пометкой Р, для строк КОИБ — отсылка) --- пусто
- составной-вкладыш (только строки КОИБ) --- КОИБ=да
--]]
    local blank 
    blank = frame:preprocess ('{{#var:RoadMapFmt}}') == 'бланк'
    local koib
    koib = frame:preprocess ('{{#var:RoadMapKoib}}')
    local result, td, xxx, koibM, koibH
    
    koibM = unnil (frame.args['дляКОИБ'])
    koibH = (koibM ~= '') and (koibM ~= 'нет')
    if not koibH then
        frame:preprocess ('{{#vardefine:RoadMapLastKoib|}}')
    end
--[[
xxx=(пусто, нет, заголовок) koib = (пусто, нет, да, все)
        нет     пусто   да      все
пусто   +       +       V-      +       (универсальная строчка)
нет     +       V+(Р)   V-      V+(Р)    строка ручного подсчета
згл     V-      VH      /H+     /H+(К)   строка для КОИБ
--]]
    
    if ((koib == 'нет') and koibH) or ((koib == 'да') and not koibH) then
        return ''
    end

    result = '<tr>'
    
-- если у нас дляКОИБ=заголовок, то нам в любом случае надо его вывести, если он изменился
    if koibH then
        if koibM == frame:preprocess ('{{#var:RoadMapLastKoib}}') then
            if koib == '' then
                return ''
            end
            result = ''
        else -- рисуем header 
            if koib == '' then
                xxx = 'font-size:83%;line-height:105%;'
                td = 'ОИБ →'
            else 
                xxx = ''
                td = ''
            end
            result = frame:preprocess ('<tr><td style="font-weight:bold;' .. xxx .. '"><span style="color:red">&nbsp;&nbsp;K'.. td ..'&nbsp;&nbsp;</span> {{#vardefineecho:RoadMapLastKoib|' .. koibM .. '}}</td>')
            if blank then
                result = result .. '<td colspan=6></td>'
            else
                result = result .. '<td colspan=4></td>'
            end
            result = result .. '</tr>'
        end
        if koib == '' then
            return result
        end
        result = result .. '<tr>'
    end
    
    
    td = unnil (frame.args['событие'])
    xxx = unnil (frame.args['совет'])
    if xxx ~= '' then
        td = td .. ". &nbsp; '''''" .. xxx .. "'''''"
    end
    if koibM == 'нет' then
        if koib ~='нет' then
            td = '<span style="color:limegreen;font-weight:bold">&nbsp;&nbsp;Р&nbsp;&nbsp;</span>' .. td
        end
    elseif koibH and (koib == 'все') then
        td = '<span style="color:red;font-weight:bold">&nbsp;&nbsp;K&nbsp;&nbsp;</span>' .. td
    end    
    xxx = frame:preprocess ('{{#var:RoadMapProt}}')
    if xxx == '' then
        linu = ''
    else 
        linu = Split (Trim (xxx), '%s*,%s*')
    end
    td = string.gsub (td, '<_#(.-)_>',  p.xsx ) 
    result = result .. '<td>' .. td .. '</td>'
    
    if blank then
        xxx = unnil(frame.args['показатель'])
        if (xxx ~= 'да') and (xxx ~= 'есть') then
            td = 'X'
        else 
            td = ''
        end
        result = result .. '<td style="text-align:center">' .. td .. '</td><td style="background-color:Honeydew">&nbsp;</td><td style="background-color:FloralWhite">&nbsp;</td>'
    end

    result = result .. '<td style="font-size:93%; line-height:105%">'
    local Bill, Link, Abbr
    local s = unnil (frame.args['все'])
    if s ~= '' then
        Link = 'НПА:Федеральный закон от 12.06.2002 № 67-ФЗ'
        Abbr = "'''ФЗГ:&nbsp;'''"
        if blank then
            s = string.gsub (s , '<_([^#][^:]-)_>', 'ст.&nbsp;%1')
            s = string.gsub (s, '<_([^#][^:]-):(.-)_>', '<span style="white-space: nowrap;">%2 ст. %1</span>')
        else
            s = string.gsub (s , '<_([^#][^:]-)_>', '[['..Link..':Статья %1|ст.&nbsp;%1]]')
            s = string.gsub (s, '<_([^#][^:]-):(.-)_>', '[['..Link..':Статья %1|<span style="white-space: nowrap;">%2 ст. %1</span>]]')
        end
        s = Abbr .. s
    end
    td = s

    s = unnil (frame.args['КОИБ'])
    if s ~= '' then
        if td ~= '' then
            td = td .. '; '
        end
        
        Link = 'НПА:Постановление ЦИК России от 06.07.2011 № 19/204-6:Приложение'
        Abbr = "'''ИИК:&nbsp;'''"
        if blank then
            s = string.gsub (s , '<_([^#][^:]-)_>', 'п.&nbsp;%1')
            s = string.gsub (s, '<_([^#][^:]-):(.-)_>', '<span style="white-space: nowrap;">%2 п. %1</span>')
        else
            s = string.gsub (s , '<_([^#][^:]-)_>', '[['..Link..':%1|п.&nbsp;%1]]')
            s = string.gsub (s, '<_([^#][^:]-):(.-)_>', '[['..Link..':%1|<span style="white-space: nowrap;">%2 п. %1</span>]]')
        end
        td = td .. Abbr .. s
    end

    if (reg == 'все') and (rule ~= '') then
        td = '<span style="font-weight:bold;color:green">(' .. rule .. ')</span> &nbsp; ' .. td
    end
    if reg ~= '' then
--(((  
        local AregC, Alaw0, Alaw1
        if reg == 'все' then
            AregC = Split (frame:preprocess ('{{#var:RoadMapRegC}}'), '%s*;%s*')
            Alaw0 = Split (frame:preprocess ('{{#var:RoadMapLaw0}}'), '%s*;%s*')
            Alaw1 = Split (frame:preprocess ('{{#var:RoadMapLaw1}}'), '%s*;%s*')
        else
            AregC = { [1]=reg }
            Alaw0 = { [1]=frame:preprocess ('{{#var:RoadMapLaw0}}') }
            Alaw1 = { [1]=frame:preprocess ('{{#var:RoadMapLaw1}}') }
        end
        for i = 1, #AregC do
            s = unnil (frame.args [AregC [i]])
            if s ~= '' then
                if td ~= '' then
                    td = td .. '; '
                end
                Bill = Alaw0 [i]
                
                Link, Abbr = string.match (Bill, '^(.*)=(.+)=(.+)$')
    --            if Link == nil then
    --                Link = Bill
    --                Abbr = ''
    --            else
                    Abbr = "'''" .. Abbr .. ":&nbsp;'''"
    --            end
                if (Link == '') or blank then
                    s = string.gsub (s , '<_([^#][^:]-)_>', 'ст.&nbsp;%1')
                    s = string.gsub (s, '<_([^#][^:]-):(.-)_>', '<span style="white-space: nowrap;">%2 ст. %1</span>')
                else
                    s = string.gsub (s , '<_([^#][^:]-)_>', '[['..Link..':Статья %1|ст.&nbsp;%1]]')
                    s = string.gsub (s, '<_([^#][^:]-):(.-)_>', '[['..Link..':Статья %1|<span style="white-space: nowrap;">%2 ст. %1</span>]]')
                end
                td = td .. Abbr .. s
            end
            s = unnil (frame.args[AregC [i]..'+'])
            if s ~= '' then
                if td ~= '' then
                    td = td .. '; '
                end
                Bill = Alaw1 [i]
                Link, Abbr = string.match (Bill, '^(.*)=(.+)=(.+)$')
    --            if Link == nil then
    --                Link = Bill
    --                Abbr = ''
    --            else
                    Abbr = "'''" .. Abbr .. ":&nbsp;'''"
    --            end
                if (Link == '') or blank then
                    s = string.gsub (s , '<_([^#][^:]-)_>', 'ст.&nbsp;%1')
                    s = string.gsub (s, '<_([^#][^:]-):(.-)_>', '<span style="white-space: nowrap;">%2 ст. %1</span>')
                else
                    s = string.gsub (s , '<_([^#][^:]-)_>', '[['..Link..':Статья %1|ст.&nbsp;%1]]')
                    s = string.gsub (s, '<_([^#][^:]-):(.-)_>', '[['..Link..':Статья %1|<span style="white-space: nowrap;">%2 ст. %1</span>]]')
                end
                td = td .. Abbr .. s
            end
        end
        
--)))        
    end
    result = result .. td
    result = result .. '</td><td style="font-size:93%; line-height:105%; text-align:center">' .. unnil(frame.args['куда'])
    result = result .. '</td><td style="font-size:93%; line-height:105%">' .. unnil(frame.args['отв'])
    result = result .. '</td>'
    if not blank then
        result = result .. '<td style="font-size:93%; line-height:105%">'
        xxx = unnil(frame.args['ТС'])
        if xxx ~= '' then
            result = result .. xxx .. ' &nbsp; '
        end
        result = result .. '<span class="doclink" style="font-weight:bold; font-style:italic">' .. unnil(frame.args['жалоба']) .. '</span>'
        result = result .. '</td>'
    end
    return result .. '</tr>'
end





function p.Finish (frame)
    local Alaw0, Alaw1
    if frame:preprocess ('{{#var:RoadMapReg}}') == 'все' then
        Alaw0 = Split (frame:preprocess ('{{#var:RoadMapLaw0}}'), '%s*;%s*')
        Alaw1 = Split (frame:preprocess ('{{#var:RoadMapLaw1}}'), '%s*;%s*')
    elseif frame:preprocess ('{{#var:RoadMapReg}}') ~= '' then
        Alaw0 = { [1]='', [2]=frame:preprocess ('{{#var:RoadMapLaw0}}') }
        Alaw1 = { [1]='', [2]=frame:preprocess ('{{#var:RoadMapLaw1}}') }
    else
        Alaw0 = {}
    end
    local result = '</table> '
    for i = 2, #Alaw0 do
        local Abbr, Name 
        Abbr, Name = string.match (Alaw0 [i], '^.*=(.+)=(.+)$')
        result = result .. "'''" ..Abbr .. "''' — " .. Name .. "<br />"
        if Alaw1[i] ~= '' then
            Abbr, Name = string.match (Alaw1 [i], '^.*=(.+)=(.+)$')
            result = result .. "'''" .. Abbr .. "''' — " .. Name .. "<br />"
        end
    end
    if frame:preprocess ('{{#var:RoadMapKoib}}') ~= 'нет' then
        result = result .. "'''ИИК''' — «Инструкция о порядке использования технических средств подсчета голосов — комплексов обработки избирательных бюллетеней 2010...» (утв. пост. ЦИК РФ от 06.07.2011 № 19/204−6)<br />"
    end
    result = result .. "'''ФЗГ''' — Федеральный закон от 12.06.2002 № 67-ФЗ «Об основных гарантиях избирательных прав и права на участие в референдуме граждан Российской Федерации»<br />"
                    .. "'''КоАП''' — Кодекс РФ об административных правонарушениях<br />"
                    .. "'''УК''' — Уголовный кодекс РФ<br />"
                    .. "'''ТИК''' — территориальная (или иная вышестоящая) комиссия<br />"
                    .. "'''УИК''' — участковая избирательная комиссия<br />"
                    .. "'''УФП''' — увеличенная форма протокола<br />"
                    .. "'''ст.''' — статья, '''п.''' — пункт, '''ч.''' — часть, '''п/п''' — подпункт"
    return result

end    
            
        

return p
-- [[Категория:Шаблоны для дорожных карт]]