Module:Chem:修订间差异
清空全部内容 |
小 已还原Wvrjxwztlp(讨论)的编辑至最后由DarkBarbarian修订的版本 |
||
第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 |