跳转到内容

Module:Chem:修订间差异

来自锑星百科
修正错误
清空全部内容
第1行: 第1行:
local p={}


function p.chem(frame)
  local args=frame:getParent().args
  --local args=frame
  local chemstr=""
  for i, v in pairs(args) do
    if type(i)=="number" then
      chemstr=chemstr .. v
    else
      chemstr=chemstr .. i .. "=" .. v
    end
  end
  chemstr=mw.ustring.gsub(chemstr, "%s", "")
  local res={}
  local len=mw.ustring.len(chemstr)
  local i=1
  local norm=true
  local sup=false
  while i<=len do
    local ch=mw.ustring.sub(chemstr, i, i)
    if ch=="." or ch=="·" then
      table.insert(res, "·")
      norm=true
    elseif ch=="=" then
      table.insert(res, "=")
      norm=true
    elseif ch=="^" then
      sup=true
      norm=false
    elseif ch=="_" then
      sup=false
      norm=false
    elseif ch=="+" or ch=="-" then
      if i~=len then
        local nc=mw.ustring.sub(chemstr, i+1, i+1)
        norm=true
        if nc=="+" or nc=="-" then
          norm=false
        end
      end
      if not norm then
        table.insert(res, "<sup>" .. ch .. "</sup>")
      else
        table.insert(res, ch)
      end
      norm=true
    elseif mw.ustring.match(ch, "%d") then
      if not norm then
        if sup then
          table.insert(res, "<sup>" .. ch .. "</sup>")
        else
          table.insert(res, "<sub>" .. ch .. "</sub>")
        end
      else
        table.insert(res, ch)
      end
    else
      table.insert(res, ch)
      norm=false
      sup=false
    end
    i=i+1
  end
  return mw.html.create("span"):wikitext(table.concat(res))
end
return p

2023年6月17日 (六) 12:25的版本

此模块的文档可以在Module:Chem/doc创建

我们为您提供服务需要使用Cookie。使用我们的服务即表示您同意我们使用Cookie。