stringtranslate.com

Модуль:SimpleDebug

--2020-06-16 исправлена ​​ошибка, когда vtos(nil) отображал два nil --2020-06-08 если переменная является функцией, теперь отображается как функция (перед "function") --2020-06-06 исправлена ​​ошибка, которая иногда возникает, когда значение == nil local  p  =  {} p . s = '' p . tab = { oneline = true , allidx = false , } p . dec = - 1 p . maxlines = { num = 100 , doerror = true , } p . enabled = true p . nowiki = false p . nohtml = false p . _plaintext = false p . counter = false local LinCount = 0 local vep = ' • ' local function MessRaised ( n ) return ' \n\n Достигнуто значение ' .. n .. ', вы можете изменить этот предел с помощью "maxlines.num".' end local function arrow () return ' => ' end function p . breakline () LinCount = LinCount + 1 p . s = p . s .. ' \n\n ' if p . counter then p . s = p . s .. LinCount .. vep end if ( LinCount > p . maxlines . num ) and p . maxlines . doerror then p . pa = p . s .. MessRaised ( p . maxlines . num )                                                            error  ( p . s , 0 ) end end --breakline local function CheckWhereName ( wn , what ) if wn == nil then return '"' .. what .. '" == nil' elseif ( type ( wn ) == "table" ) then return 'Table as "' .. what .. '"!' else return wn end end --CheckWhereName function p . _plain ( text ) --Изменено с "Module:Plain text" if not text then return end text = mw . text . killMarkers ( text ) : gsub ( ' ' , ' ' ) -- заменить nbsp пробелы на обычные пробелы : gsub ( '<br ?/?>' , ', ' ) -- заменить br запятыми : gsub ( '<span.->(.-)</span>' , '%1' ) -- удалить пробелы, сохранив текст внутри : gsub ( '<b>(.-)</b>' , '%1' ) -- удалить полужирный шрифт, сохранив текст внутри : gsub ( '<i>(.-)</i>' , '%1' ) -- удалить курсив, сохранив текст внутри : gsub ( '<sub>(.-)</sub>' , '%1' ) -- удалить полужирный шрифт, сохранив текст внутри : gsub ( '<sup>(.-)</sup>' , '%1' ) -- удалить жирный шрифт, сохранив текст внутри : gsub ( '<.->.-<.->' , '' ) -- удалить оставшиеся теги и текст внутри : gsub ( '<.->' , '' ) -- удалить любую другую разметку тегов :gsub ( '%[%[%s*[Ff]ile%s*:.-%]%]' , '' ) --удалить файлы : gsub (                                              '%[%[%s*[Ii]mage%s*:.-%]%]' ,  '' )  --удалить использование изображения: : gsub ( '%[%[%s*[Cc]ategory%s*:.-%]%]' , '' ) --удалить категории : gsub ( '%[%[[^%]]-|' , '' ) --удалить переданный текст ссылки : gsub ( '[%[%]]' , '' ) --затем удалить оставшиеся [ и ] : gsub ( "'''''" , "" ) --удалить жирную курсивную разметку : gsub ( "'''?" , "" ) --не удалять '''' дает правильный вывод для жирного текста в кавычках : gsub ( '----' , '' ) --удалить ---- строки : gsub ( " ^ % s+" , " " ) --удалить начальные : gsub ( " % s + $ " , " " ) --и конечные пробелы : gsub ( " % s +" , " " ) --удалить избыточные пробелы return text end --plain function p._plain_len ( text ) return mw.ustring.len ( p._plain ( text ) ) end function p.plain ( frame ) return p._plain ( frame.args [ 1 ] ) end function p.plain_len ( frame ) return p._plain_len ( frame.args [ 1 ] ) end local function totext ( text ) if p._plaintext then return p ._plain ( текст ) иначе вернуть текст конец конец --totext локальная функция NumToStr (                                            N ) если ( p . dec == - 1 ) или ( N == math. floor ( N ​​)) то вернуть строку ( N ) иначе вернуть строку ( math. floor ( ( N * 10 ^ p . dec ) + 0.5 ) / ( 10 ^ p . dec )) конец конец --NumToStr local iniTab1Line = true функция p . containsTab ( avar ) local result = false for k , v in pairs ( avar ) do if type ( v ) == 'table' then result = true break end end return result end --containsTab local var local function DumTab ( tbl , indent ) if not indent then indent = 1 end local toprint = "{ \r\n " indent = indent + 2 for k , v in pairs ( tbl ) do toprint = toprint .. string.rep ( " " , indent ) local id = k if ( type ( k ) == "string" ) then k = '"' .. k .. '"' end toprint = toprint .. "[" .. k .. "] = " if ( type ( v ) == "number" ) then toprint                                                                              =  toprint .. NumToStr ( v ) .. ", \r\n " elseif ( type ( v ) == "string" ) then toprint = toprint .. " \" " .. totext ( v ) .. " \" , \r\n " elseif ( type ( v ) == "table" ) then if iniTab1Line and ( not p . containsTab ( v )) then local wds = '{' for kk , vv in pairs ( v ) do if ( p . tab . allidx == true ) or ( type ( kk ) ~= 'number' ) then wds = wds .. '[' .. kk .. ']=' .. var ( vv ) .. ', ' else wds = wds .. var ( vv ) .. ', ' конец конец toprint = toprint .. wds .. "}, \r\n " иначе toprint = toprint .. DumTab ( v , отступ + 2 ) .. ", \r\n " конец иначе toprint = toprint .. " \" " .. tostring ( v ) .. " \" , \r\n " конец конец toprint = toprint .. string.rep ( " " , отступ - 2 ) .."}" вернуться к концу печати --DumTab                                                  function  var  ( avar ) local EndStr = '' if avar == nil then EndStr = 'nil' elseif type ( avar ) == 'table' then if # avar > 0 then p . s = p . s .. ' \r\n ' end if p . tab . oneline then local wds = '{ ' for k , v in pairs ( avar ) do if ( p . tab . allidx == true ) or ( type ( k ) ~= 'number' ) then wds = wds .. '[' .. k .. ']=' .. var ( v ) .. ', ' else wds = wds .. var ( v ) .. ', ' end end EndStr = wds .. '} ' else EndStr = DumTab ( avar ) end elseif type ( avar ) == 'number' then EndStr = NumToStr ( avar ) elseif type ( avar ) == 'boolean' then if avar == true then EndStr = 'true' else EndStr = 'false' end elseif type ( avar ) == 'function' then EndStr = 'function' else avar = totext ( tostring ( avar )) if p .nohtml тогда avar                                                                               =  string.gsub  ( avar ,  "  < " , " " ) avar = string.gsub ( avar , " > " , " " ) end EndStr = ' " ' .. avar .. ' " ' end return EndStr end --var function p.w ( where ) if p.enabled then return CheckWhereName ( where , ' w ' ) end end --w local function varx ( avar ) iniTab1Line = p.tab.oneline if p.tab.oneline and ( type ( avar ) == ' table ' ) then p.tab.oneline = not p.containsTab ( avar ) end local ss = var ( avar ) p.tab.oneline = iniTab1Line return ss end --varx function p.v ( ... ) if p .включено тогда локальный str = '' если # arg == 0 тогда str = 'nil' иначе локальный c = 0 для k , i в ipairs ( arg ) do c = k end --error (c) для i = 1 , # arg do если str ~= '' тогда str = str .. vep end str = str .. varx ( arg [ i ]) end                                                                          end return str end end --v function p . wv ( where , ...) if p . enabled then return CheckWhereName ( where , 'w' ) .. arrow () .. p . v ( unpack ( arg )) end end --wv function p . nv (...) if p . enabled then if math . mod ( # arg , 2 ) ~= 0 then EndStr = ' Любой параметр не имеет имени или переменной' else local s = '' local IsName = true function Concat ( wds ) if s ~= '' then if IsName then s = s .. vep else s = s .. ': ' end end s = s .. wds end for i = 1 , # arg do if IsName then Concat ( CheckWhereName ( arg [ i ], 'n' )) IsName = false else Concat ( varx ( arg [ i ])) IsName = true end end EndStr = s end return EndStr end end --nv function p . wnv ( where , ...) if p . enabled then return CheckWhereName ( where , 'w' ) .. arrow () .. p . nv ( unpack (                                                            arg )) end end ---------- локальная функция EnabAndBl () if p . enabled then if LinCount < p . maxlines . num then p . breakline () return true else p . s = p . s .. MessRaised ( p . maxlines . num ) error ( p . s ) return false end else return false end end --EnabAndBl function p . wtos ( where ) if EnabAndBl () then p . s = p . s .. p . w ( where ) end end --wtos function p . vtos (...) if EnabAndBl () then local end_nil_count = arg [ "n" ] - # arg p . s = p . s .. p . v ( unpack ( arg )) если # arg == 0 then end_nil_count = end_nil_count - 1 end for i = 1 , end_nil_count do p . s = p . s .. vep .. 'nil' end end end --vtos function p . wvtos ( where , ...) if EnabAndBl () then p . s = p . s .. p . wv ( where , unpack ( arg ))                                                              end end  --wvtos function p.nvtos ( ... ) if EnabAndBl ( ) then local end_nil_count = arg [ " n " ] - # arg if end_nil_count > 0 then for i = 1 , arg [ " n " ] do if math.mod ( i , 2 ) ~ = 0 then p.s = p.s..arg [ i ] .. ' : ' else p.s = p.s..p.v ( arg [ i ] ) if i < arg [ " n " ] then p.s = p.s..vep end end end else p.s = p.s..p.nv ( unpack ( arg ) ) end end end --nvtos function p .wnvtos ( где , ... ) if EnabAndBl ( ) then local end_nil_count = arg [ " n " ] - # arg if end_nil_count > 0 then p.s = p.s .. where .. arrow ( ) for i = 1 , arg [ " n " ] do if math.mod ( i , 2 ) ~ = 0 then p.s = p.s .. arg [ i ] .. ' : '                                                                 else p . s = p . s .. p . v ( arg [ i ]) if i < arg [ "n" ] then p . s = p . s .. vep end end end else p . s = p . s .. p . wnv ( where , unpack ( arg )) end end end --wnvtos return p