Module:StorySim:修订间差异

来自Rotaeno中文维基
(创建页面,内容为“local p = {} local getArgs = require('Module:Arguments').getArgs local function getTextList(txt,add,mod) local t = {}; local isValid = false; for i in string.gmatch(txt .. add,mod) do isValid = isValid or (i ~= '') if isValid then table.insert(t,i);end end return t; end local function delbr(txt) local t = txt; while true do local a = string.sub(t,-4) if a ~= '<br>' then break;end t = string.s…”)
 
SSF讨论 | 贡献
(修复+优化)
第44行: 第44行:
    local _type;
    local _type;
    local isEmpty = true;
    local isEmpty = true;
    for i, v in ipairs(l) do
   local i = 0;
      -- Init
    for a,b in string.gmatch(string.sub(txt,2) .. '\n[','(.-)%](.-)%c%[') do
     local a = ''; -- name="伊洛" class="123"
      i = i + 1;
      local b = ''; --  知道了知道了。
-- local a = 'name="伊洛" class="123"''
      for _a, _b in string.gmatch(v, "%[(.-)%](.*)") do
      -- local b = '知道了知道了。'
       a = _a
      isEmpty = (b == '' or a == '/');
 
     if isEmpty then b = '<div class="addLine"></div>';end
       isEmpty = (_b == '');
       if isEmpty 
       then b = '<div class="addLine"></div>'
       else b = _b
       end
       -- tableHTML:wikitext(tostring(isEmpty))
     end
 
      local n = getParam(a,"name");
      local n = getParam(a,"name");
      if n then
      if n then
第69行: 第61行:
      end
      end


      if _type == 'talk' then node:wikitext(b)
      if _type == 'talk' then node:wikitext(b):done()
      elseif _type == 'think' then
      elseif _type == 'think' then
        if isEmpty then node:wikitext(b):done()
        if isEmpty then node:wikitext(b):done()
第76行: 第68行:
      else node:tag("span"):addClass("storyError"):wikitext(string.format("警告:无法识别类型名!(line=%d)",i)):done();
      else node:tag("span"):addClass("storyError"):wikitext(string.format("警告:无法识别类型名!(line=%d)",i)):done();
      end
      end
    
      if not isEmpty then node:wikitext('<br>') end
      if not isEmpty then node:wikitext('<br>') end
   end
end
end
end



2023年12月15日 (五) 15:21的版本

可在Module:StorySim/doc创建此模块的帮助文档

local p = {}

local getArgs = require('Module:Arguments').getArgs

local function getTextList(txt,add,mod)
    local t = {};
    local isValid = false;
    for i in string.gmatch(txt .. add,mod) do
        isValid = isValid or (i ~= '')
        if isValid then table.insert(t,i);end
    end
    return t;
end
local function delbr(txt)
    local t = txt;
    while true do
        local a = string.sub(t,-4)
        if a ~= '<br>' then break;end
        t = string.sub(t,1,-5);
    end
    return t;
end

local function getParam(txt,id)
    return string.match(txt,id .. '"(.-)"')
end

local function _summonTextShow(tag,txt)
    local s = '';
    for _,v in ipairs(getTextList(txt,'\n',"(.-)%c")) do
        s = s .. v .. '<br>';
    end
    tag:tag("div"):addClass("textShow"):wikitext(delbr(s));
end

local function summonTextShow(tag,txt)
    for _, v in ipairs(getTextList(txt,"[/]","(.-)%[/%]")) do _summonTextShow(tag,v) end
end

local function summonTalkShow(tag,txt)
    local tableHTML = tag:tag("table"):addClass("talkShow")
    local l = getTextList(txt,'\n',"(.-)%c");
    local node;
    local _type;
    local isEmpty = true;
    local i = 0;
    for a,b in string.gmatch(string.sub(txt,2) .. '\n[','(.-)%](.-)%c%[') do
        i = i + 1;
		-- local a = 'name="伊洛" class="123"''
        -- local b = '知道了知道了。'
        isEmpty = (b == '' or a == '/');
        if isEmpty then b = '<div class="addLine"></div>';end
        local n = getParam(a,"name");
        if n then
            _type = getParam(a,"type") or 'talk'
            node = tableHTML:tag('tr')
                    :tag('th'):wikitext(n):done()
                    :tag('td')
        else
            _type = getParam(a,"type") or _type
        end

        if _type == 'talk' then node:wikitext(b):done()
        elseif _type == 'think' then
            if isEmpty then node:wikitext(b):done()
            else node:tag('span'):addClass('thought'):wikitext(b):done()
            end
        else node:tag("span"):addClass("storyError"):wikitext(string.format("警告:无法识别类型名!(line=%d)",i)):done();
        end
        if not isEmpty then node:wikitext('<br>') end
	end
end

-- Start --
local function makeInvokeFunc(funcName)
    return function(frame)
        local args = getArgs(frame)
        return p[funcName](args)
    end
end

p.main = makeInvokeFunc('_main')
function p._main(args)-- 生成HTML的主函数 部分代码来源:[[Module:Songtable]]

    --- 构建HTML ---
    local box = mw.html.create("table"):addClass("rotable mw-collapsible mw-collapsed storyTable");
    box:tag('tr'):tag('th'):wikitext(args['title'] or "标题");
    for index, arg in ipairs(args) do
        local tag = box:tag("tr"):tag("td"):addClass("storySim");
            local a = string.match(arg,"textShow>(.+)");
            local b = string.match(arg,"talkShow>(.+)");

            if a then summonTextShow(tag,a);
            elseif b then summonTalkShow(tag,b);
            else tag:tag("span"):addClass("storyError"):wikitext(string.format("警告:无法识别源代码!(arg=%d)",index)):done();
        end
        
        -- box:tag("span"):wikitext(type(index) .. arg):done()
    end
    return tostring(box)
end
return p