模块:Element/sandbox
![]() | 这是Module:Element(差异)的沙盒。 |
![]() | 此模块沙盒被引用于约850个页面。 为了避免造成大规模的影响,所有对此模块沙盒的编辑应先于沙盒或测试样例上测试。 测试后无误的版本可以一次性地加入此模块沙盒中,但是修改前请务必于讨论页发起讨论。 模板引用数量会自动更新。 |
Module:Element(编辑 | 讨论 | 历史 | 链接 | 监视 | 日志)
函数说明
[编辑]symbol
[编辑]输入一个与元素相关字串(如原子序、名称、符号、别名等),回传该元素的元素符号,资料记载于Module:Element/data。
- 输入
{{#invoke:Element|symbol|26}}
→回传“Fe” - 输入
{{#invoke:Element|symbol|水銀}}
→回传“Hg” - 输入
{{#invoke:Element|symbol|汞}}
→回传“Hg” - 输入
{{#invoke:Element|symbol|168}}
→回传“Uho”
- 例外状况
- 输入
{{#invoke:Element|symbol|娜娜奇}}
→回传“未知的元素“娜娜奇”” - 输入
{{#invoke:Element|symbol|-168}}
→回传“未知的元素“-168””
- 其他
- 输入
{{#invoke:Element|symbol|元素}}
→回传“X” - 输入
{{#invoke:Element|symbol|銨}}
→回传“NH4”
neutron
[编辑]输入一个与元素相关字串(如原子序、名称、符号、别名等),回传该元素最稳定同位素且丰度最高之同位素的中子数,资料记载于Module:Element/data。
- 输入
{{#invoke:Element|neutron|Oxygen}}
→回传“8” - 输入
{{#invoke:Element|neutron|26}}
→回传“30” - 输入
{{#invoke:Element|neutron|水銀}}
→回传“122” - 输入
{{#invoke:Element|neutron|汞}}
→回传“122” - 输入
{{#invoke:Element|neutron|Tc}}
→回传“54” - 输入
{{#invoke:Element|neutron|61}}
→回传“84”
- 失败则回传空白
- 输入
{{#invoke:Element|neutron|娜娜奇}}
→回传“” - 输入
{{#invoke:Element|neutron|168}}
→回传“”
protons
[编辑]输入一个与元素相关字串(如原子序、名称、符号、别名等),回传该元素的质子数,资料记载于Module:Element/data。
- 输入
{{#invoke:Element|protons|Oxygen}}
→回传“8” - 输入
{{#invoke:Element|protons|26}}
→回传“26” - 输入
{{#invoke:Element|protons|水銀}}
→回传“80” - 输入
{{#invoke:Element|protons|汞}}
→回传“80” - 输入
{{#invoke:Element|protons|Tc}}
→回传“43” - 输入
{{#invoke:Element|protons|61}}
→回传“61”
- 失败则回传空白
- 输入
{{#invoke:Element|protons|娜娜奇}}
→回传“” - 输入
{{#invoke:Element|protons|168}}
→回传“168”
protons与neutron
[编辑]结合protons与neutron可输出质量数
- 输入
{{#expr:{{#invoke:Element|protons|1=Oxygen}}+{{#invoke:Element|neutron|1=Oxygen}} }}
→回传“16” - 输入
{{#expr:{{#invoke:Element|protons|1=26}}+{{#invoke:Element|neutron|1=26}} }}
→回传“56” - 输入
{{#expr:{{#invoke:Element|protons|1=水銀}}+{{#invoke:Element|neutron|1=水銀}} }}
→回传“202” - 输入
{{#expr:{{#invoke:Element|protons|1=汞}}+{{#invoke:Element|neutron|1=汞}} }}
→回传“202” - 输入
{{#expr:{{#invoke:Element|protons|1=Tc}}+{{#invoke:Element|neutron|1=Tc}} }}
→回传“97” - 输入
{{#expr:{{#invoke:Element|protons|1=61}}+{{#invoke:Element|neutron|1=61}} }}
→回传“145”
getAtomicWeight
[编辑]输入一个与元素相关字串(如原子序、名称、符号、别名等),回传该元素的转换标准原子量,资料记载于Module:Element/data。
- 输入
{{#invoke:Element|getAtomicWeight|Oxygen}}
→回传“15.999” - 输入
{{#invoke:Element|getAtomicWeight|26}}
→回传“55.845” - 输入
{{#invoke:Element|getAtomicWeight|水銀}}
→回传“200.592” - 输入
{{#invoke:Element|getAtomicWeight|汞}}
→回传“200.592” - 输入
{{#invoke:Element|getAtomicWeight|Tc}}
→回传“[97]” - 输入
{{#invoke:Element|getAtomicWeight|61}}
→回传“[145]”
- 失败则回传空白
- 输入
{{#invoke:Element|getAtomicWeight|娜娜奇}}
→回传“” - 输入
{{#invoke:Element|getAtomicWeight|168}}
→回传“”
getName
[编辑]输入一个与元素相关字串(如原子序、名称、符号、别名等),回传该元素的元素名称,资料记载于Module:Element/data。
- 输入
{{#invoke:Element|getName|26}}
→回传“铁” - 输入
{{#invoke:Element|getName|水銀}}
→回传“汞” - 输入
{{#invoke:Element|getName|汞}}
→回传“汞”
- 例外状况
- 输入
{{#invoke:Element|getName|娜娜奇}}
→回传“未知的元素“娜娜奇””
getPhase
[编辑]输入一个与元素相关字串(如原子序、名称、符号、别名等),回传该元素的相态,值有可能是soild、gas、liquid或unknown四者其中之一,资料记载于Module:Element/data。
- 输入
{{#invoke:Element|getPhase|26}}
→回传“solid” - 输入
{{#invoke:Element|getPhase|水銀}}
→回传“liquid” - 输入
{{#invoke:Element|getPhase|汞}}
→回传“liquid” - 输入
{{#invoke:Element|getPhase|氮}}
→回传“gas” - 输入
{{#invoke:Element|getPhase|113}}
→回传“solid”
- 失败则回传空白
- 输入
{{#invoke:Element|getPhase|娜娜奇}}
→回传“” - 输入
{{#invoke:Element|getPhase|168}}
→回传“unknown”
wikidataID
[编辑]输入一个与元素相关字串(如原子序、名称、符号、别名等),回传该元素的维基数据项目编号,资料记载于Module:Element/data。
- 输入
{{#invoke:Element|wikidataID|26}}
→回传“Q677” - 输入
{{#invoke:Element|wikidataID|水銀}}
→回传“Q925” - 输入
{{Q|{{#invoke:Element|wikidataID|26}}}}
→回传“铁 (Q677)” - 输入
{{Q|{{#invoke:Element|wikidataID|水銀}}}}
→回传“汞 (Q925)”
meltingPoint
[编辑]输入一个与元素相关字串(如原子序、名称、符号、别名等),回传该元素的熔点(单位为绝对温标),资料记载于Module:Element/data。
- 输入
{{#invoke:Element|meltingPoint|26}}
→回传“1811” - 输入
{{#invoke:Element|meltingPoint|水銀}}
→回传“234.43”
boilingPoint
[编辑]输入一个与元素相关字串(如原子序、名称、符号、别名等),回传该元素的熔点(单位为绝对温标),资料记载于Module:Element/data。
- 输入
{{#invoke:Element|boilingPoint|26}}
→回传“3134” - 输入
{{#invoke:Element|boilingPoint|水銀}}
→回传“629.88”
decaylink
[编辑]输入一个与衰变方式相关字串,回传该衰变方式的内部链接,资料记载于Module:Element/data。
- 输入
{{#invoke:Element|decaylink|γ衰變}}
→回传“γ”
ElectronConfiguration
[编辑]输入一个与元素相关字串(如原子序、名称、符号、别名等),回传该元素的电子组态,资料记载于Module:Element/data。
- 输入
{{#invoke:Element|ElectronConfiguration|26}}
→回传“[Ar]3d64s2” - 输入
{{#invoke:Element|ElectronConfiguration|水銀}}
→回传“[Xe]4f145d106s2”
link
[编辑]输入一个与元素相关字串(如原子序、名称、符号、别名等),回传该元素的条目名称(用于在导航模板提供直接连结,以使在对应条目显示为粗体,达到导航效果),注意,使用getName可能会连结到重新导向页,资料记载于Module:Element/data。
- 输入
[[{{#invoke:Element|link|26}}]]
→回传“铁” - 输入
[[{{#invoke:Element|link|水銀}}]]
→回传“汞” - 输入
[[{{#invoke:Element|link|汞}}]]
→回传“汞” - 输入
[[{{#invoke:Element|link|氮}}]]
→回传“氮” - 输入
[[{{#invoke:Element|link|113}}]]
→回传“鿭”
- 例外状况
- 输入
{{#invoke:Element|link|娜娜奇}}
→回传“未知的元素“娜娜奇”” - 输入
{{#invoke:Element|link|元素}}
→回传“元素“元素”没有对应的页面。” - 输入
{{#invoke:Element|link|168}}
→回传“元素“168”没有对应的页面。”
- 使用getName
elementlink
[编辑]输入一个与元素相关字串(如原子序、名称、符号、别名等),回传显示为该元素符号且指向该元素条目的内部链接,资料记载于Module:Element/data。
check
[编辑]当字串不是有效的元素名称或“x”时,会显示以下错误信息:
- 输入
{{#invoke:Element|check|C}}
→会显示“”(正确无误) - 输入
{{#invoke:Element|check|Carbon}}
→会显示“”(正确无误) - 输入
{{#invoke:Element|check|碳}}
→会显示“”(正确无误) - 输入
{{#invoke:Element|check|娜娜奇}}
→会显示“未知的元素“娜娜奇”” - 输入
{{#invoke:Element|check|Blablabla}}
→会显示“未知的元素“Blablabla””
支持"link=yes"参数。如果元素或符号没有对应的页面,则错误信息如下:
- 输入
{{#invoke:Element|check|C | link=yes}}
→会显示“” - 输入
{{#invoke:Element|check|Carbon | link=yes}}
→会显示“” - 输入
{{#invoke:Element|check|碳 | link=yes}}
→会显示“”(正确无误) - 输入
{{#invoke:Element|check|X | link=yes}}
→会显示“元素“X”没有对应的页面。”
如果所输入的元素名称不符合英文维基百科的拼写规则,则会显示以下错误信息:
- 输入
{{#invoke:Element|check|Aluminum}}
→会显示““Aluminum”不是“铝”的正确拼法。” - 输入
{{#invoke:Element|check|Sulphur}}
→会显示““Sulphur”不是“硫”的正确拼法。” - 输入
{{#invoke:Element|check|Sulfur}}
→会显示“”(正确无误) - 输入
{{#invoke:Element|check|Cesium}}
→会显示““Cesium”不是“铯”的正确拼法。”
compare_series
[编辑]比对两个输入是否属于同一种元素分类。
- 输入
{{#invoke:Element|compare_series|鹼金屬|鉀}}
→回传“yes” - 输入
{{#invoke:Element|compare_series|鹼金屬|氫}}
→回传“” - 输入
{{#invoke:Element|compare_series|鐵|金屬}}
→回传“yes” - 输入
{{#invoke:Element|compare_series|氯|鉀}}
→回传“” - 输入
{{#invoke:Element|compare_series|氯|氟}}
→回传“yes”
- 失败回传空白
- 输入
{{#invoke:Element|compare_series|氯|娜娜奇}}
→回传“”
series
[编辑]输入一个与元素相关字串(如原子序、名称、符号、别名等),回传该元素主要的元素分类,资料记载于Module:Element/data。
- 输入
{{#invoke:Element|series|氫}}
→回传“非金属” - 输入
{{#invoke:Element|series|鋰}}
→回传“碱金属” - 输入
{{#invoke:Element|series|硼}}
→回传“类金属” - 输入
{{#invoke:Element|series|氖}}
→回传“惰性气体” - 输入
{{#invoke:Element|series|鐵}}
→回传“过渡金属” - 输入
{{#invoke:Element|series|鑭}}
→回传“镧系元素” - 输入
{{#invoke:Element|series|銨}}
→回传“官能基” - 输入
{{#invoke:Element|series|116}}
→回传“贫金属(预测)” - 输入
{{#invoke:Element|series|119}}
→回传“碱金属(预测)” - 输入
{{#invoke:Element|series|9487}}
→回传“未知”
相关模板
[编辑]![]() | 此模块使用Lua语言: |
核素模板是用来显示核素、同位素和元素符号的,特别是用在化学公式当中。编者可以选择加上指向对应页面的链接。
以下为不同模板对碳-12的输出效果,包括有链接的和没有链接的:
模板名称 没有链接 有链接 {{Element}}
C
C
{{SimpleNuclide}} 12
C
12
C
{{Nuclide}} 12
6C
12
6C
{{ComplexNuclide}} 12
6C
612
6C
6
参数
[编辑]所有有关模板都是用同样的参数。
1 要输出符号的元素名称(中文、英文或符号) 2
(可选)该同位素的质量数。
默认值为最常见或最稳定的同位素质量数。3
(可选)表示原子核在激发态时的同核异构体符号(“m”、“m2”等等)。
可以直接输入这项选项,无需先输入质量数。link=yes
(可选)自动加上指向相关元素或同位素页面的链接。
许多同位素没有单独的页面,请编者建立新页面,或者重定向至“‘某某元素’的同位素”页面。anti=yes
(可选)表示该元素由反物质组成,因此需要在顶端标以横线。 charge=...
(可选)表示离子的电荷。 q=...
(可选)指定该原子的数量(在化学公式中非常有用)。
例子
[编辑]{{SimpleNuclide|Carbon}}
12
C
{{SimpleNuclide|Carbon|14}}
14
C
{{SimpleNuclide|碳|14}}
14
C
{{SimpleNuclide|link=yes|Carbon}}
12
C
{{SimpleNuclide|anti=yes|Carbon}}
12
C
{{SimpleNuclide|link=yes|Carbon|14}}
14
C
{{SimpleNuclide|Carbon|12|m}}
12m
C
{{Element|Carbon|12|charge=2+}}
C2+
{{ComplexNuclide|link=yes|anti=yes|Carbon|12|m|charge=2+}}
12m
6C2+
6
包含的模板
[编辑]- 以上所有模板都使用{{ProtonsForElement}}来检测元素名称是否正确,而当link=yes参数被加入时,检测是否使用统称的元素名“X”或“element”。
- 以上某些模板使用{{ProtonsForElement}}为某特定元素提取其原子序。
- 以上某些模板使用{{NeutronsForElement}}为某特定元素提取其中子数
- 以上某些模板使用{{ProtonsForElement}}和{{NeutronsForElement}}为某特定元素提取其质量数。
- 以上所有模板都使用{{LinkForElement}},在link=yes参数被加入时加上链接。
- 以上所有模板都使用{{PhysicsParticle}}为所有物理符号创建视觉上统一的HTML输出。
错误使用
[编辑]错误使用这些模板的页面将会被加入分类:带有错误格式模板的页面。请定时查看分类并修改错处。
以下为一些错误信息:
{{Nuclide |Blabla}} | 未知的元素“Blabla” |
{{Nuclide |Aluminum}} | “Aluminum”不是“铝”的正确拼法。 |
{{Element |Element |link=yes}} | 元素“Element”没有对应的页面。 |
模板编辑说明
[编辑]- 资料皆储存于Module:Element/data
若要调整本模板的内容请至Module:Element/data编辑
- 编辑时请按照下面格式,以锝为例,其中参数有大小写敏感,大小写要跟下列示例一致
{
name='鎝',
isotopePage='鎝的同位素',
page='锝',
stability={
stableCount=0,
halflife=1.3276656e14
},
Symbol='Tc',
period=5, group=7, block='d',
series={'過渡金屬','金屬'},
Z=43,N=56,
Melting=2430,Boiling=4538,
othername={'Tc','tc','technetium','Technetium','鎝','鍀','锝'},
Isotope={
{N=56,name='鎝-99m',page='鎝-99m'}
{N=56,name='鎝-99'}
},
wikidata=1054,
density=11,
atomicRadius=136,CovalentRadius=147,vdwRadius="nan",EN=1.9,
EC={{2},{2,6},{2,6,10},{2,6,5},{2},cen="Kr"}
}
参数名称 | 意义 | 说明 | 范例 (以锝为主) |
备注 |
---|---|---|---|---|
name | 元素名称 | 这是本资料表的key,应先到先得,请勿窜改, 否则部分模板将会出现查无资料类的错误 |
'鎝' |
|
page | 元素条目名称 | 元素的条目名称,请使用未繁简转换的原始条目名 (否则连到页面的链接在条目中不会变成粗体) |
'锝' |
|
isotopePage | 同位素条目名称 | 同位素的条目名称,请使用未繁简转换的原始条目名 (否则连到页面的链接在条目中不会变成粗体) |
'鎝的同位素' |
|
stability | 元素稳定资讯 | stability={
stableCount=0,
halflife=1.3276656e14
},
|
||
stability={ stableCount } |
稳定同位素的数量 | 0 | ||
stability={ halflife } |
最稳定同位素的半衰期 | 以秒为单位。若有同位素稳定请不要写此参数 | 1.3276656e14 |
|
Symbol | 元素符号 | 'Tc' |
开头字母大写 | |
period | 周期 | 元素的周期,整数 用于确定元素在周期表的位置 |
5 |
|
group | 族 | 元素的族,整数 用于确定元素在周期表的位置 |
7 |
|
block | 元素分区 | 元素的区 用于确定元素在周期表的位置 |
'd' |
|
series | 元素种类 | 元素的种类/系列 | ||
Z | 原子序 | |||
N | 中子数 | 主同位素的中子数 | ||
stdAtomicWeight | 标准原子量 | 元素的标准原子质量 |
以氦为例
以氢为例
|
未填即使用Z和N推算 并标记为未确定特性 |
Melting | 熔点 | 熔点,单位为绝对温度 | 2430 |
|
Boiling | 沸点 | 沸点,单位为绝对温度 | 4538 |
|
othername | 别名 | 能够表示此种元素的各种别名。 | ||
Isotope | 同位素 | 同位素列表,以有条目存在的为主。 | Isotope={
{N=56,name='鎝-99m',page='鎝-99m'}
{N=56,name='鎝-99'}
},
|
|
wikidata | 维基数据项目 | 元素条目的维基数据项目。 | wikidata=1054 |
|
density | 密度 | 密度,单位为g/cm³ | 11 |
|
atomicRadius | 原子半径 | 原子半径,单位为皮米 | 136 |
|
CovalentRadius | 共价半径 | 共价半径,单位为皮米 | 147 |
|
vdwRadius | 范德华半径 | 范德华半径,单位为皮米 | ||
EN | 电负度 | 电负性,单位为鲍林标度 | 1.9 |
|
EC | 电子组态 | 电子组态,表达方式为{{1s},{2s,2p},{3s,3p,3d}...,cen="內層元素"} |
{{2}, {2,6}, {2,6,10}, {2,6,5}, {2}, cen="Kr"} |
local p = {}
local origArgs
local error = require( 'Module:Error' )
local element_data = require( 'Module:Element/data' )
function p.symbol(frame)
-- For calling from #invoke.
local pframe = frame:getParent()
local args = pframe.args
return p._symbol(args)
end
function p.link(frame)
-- For calling from #invoke.
local pframe = frame:getParent()
local args = pframe.args
return p._link(args)
end
function p.check(frame)
-- For calling from #invoke.
local pframe = frame:getParent()
local args = pframe.args
return p._check(args)
end
function p.neutron(frame)
-- For calling from #invoke.
local pframe = frame:getParent()
local args = pframe.args
return p._neutron(args)
end
function p._neutron(args)
--去除模板引用時可能產生的空格
eleString='' if (args[1] and args[1] ~= '') then eleString = string.gsub(args[1] , "%s$", "") else return '' end
eleid = p.getListID(eleString)
ele1 = element_data[eleid]
if (eleid==-1) then
return ''
end
if (ele1.correct and ele1.correct ~= '') then
return ''
end
if (ele1.N and ele1.N ~= '') then
return ele1.N
end
return ''
end
function p.protons(frame)
-- For calling from #invoke.
local pframe = frame:getParent()
local args = pframe.args
return p._protons(args)
end
function p._protons(args)
--去除模板引用時可能產生的空格
eleString='' if (args[1] and args[1] ~= '') then eleString = string.gsub(args[1] , "%s$", "") else return '' end
eleid = p.getListID(eleString)
ele1 = element_data[eleid]
if (eleid==-1) then
return ''
end
if (ele1.correct and ele1.correct ~= '') then
return ''
end
if (ele1.Z and ele1.Z ~= '') then
return ele1.Z
end
return ''
end
function p._check(args)
--去除模板引用時可能產生的空格
eleString='' if (args[1] and args[1] ~= '') then eleString = string.gsub(args[1] , "%s$", "") else return error.error{ '未輸入元素' } end
linkString='' if (args['link'] and args['link'] ~= '') then linkString = string.gsub(args['link'] , "%s$", "") end
if (linkString and linkString ~= '') then
if (linkString == 'yes') then
pagetest=true
end
end
eleid = p.getListID(eleString)
ele1 = element_data[eleid]
if (eleid==-1) then
return error.error{ '未知的元素“' .. args[1] .. '”' } .. '[[Category:含有錯誤元素符號的條目]]'
end
if (ele1.correct and ele1.correct ~= '') then
return error.error{ '“' .. args[1] .. '”不是“'.. ele1.correct .. '”的正確拼法。' }
end
if (ele1.page and ele1.page ~= '') then
return ''
end
if(pagetest)then
return error.error{ '元素“' .. args[1] .. '”' .. '沒有對應的頁面。'}
else
return ''
end
end
function p._symbol(args)
if not(args[1] and args[1] ~= '') then return error.error{ '未輸入元素' } end
myString = string.gsub(args[1] , "%s$", "") --去除模板引用時可能產生的空格
eleid = p.getListID(myString)
if (eleid==-1) then
return error.error{ '未知的元素“' .. args[1] .. '”' } .. '[[Category:含有錯誤元素符號的條目]]'
end
ele1 = element_data[eleid]
if(ele1.NotElement)then
return ele1.Symbol
end
num = ele1.Z + ele1.N --計算質量數
n = ele1.N
number=tonumber(args[2])
if (number and number ~= '') then
num = number
n = num - ele1.Z
if (n > 0) then --讀到有效的原子量才會進來這裡執行
if (ele1.Isotope) then
for v, x in ipairs(ele1.Isotope) do
if (x.N == n) then
if (x.Symbol and x.Symbol ~= '') then
return x.Symbol
end
end
end
end
end
end
return ele1.Symbol
end
function p._link(args)
--去除模板引用時可能產生的空格
arg1='' if (args[1] and args[1] ~= '') then arg1 = string.gsub(args[1] , "%s$", "") else return error.error{ '未輸入元素' } end
arg2='' if (args[2] and args[2] ~= '') then arg2 = string.gsub(args[2] , "%s$", "") end
arg3='' if (args[3] and args[3] ~= '') then arg3 = string.gsub(args[3] , "%s$", "") end
eleid = p.getListID(arg1)
has_m=''
if (arg3 and arg3 ~= '') then
has_m=arg3
end
if (eleid == -1) then
return error.error{ '未知的元素“' .. arg1 .. '”' } .. '[[Category:含有錯誤元素符號的條目]]'
end
ele1 = element_data[eleid]
if(ele1.NotElement)then
return ele1.page
end
if (ele1.page and ele1.page ~= '') then
num = ele1.Z + ele1.N --計算質量數
n = ele1.N
hasmass=false
number=tonumber(arg2)
if (number and number ~= '') then
num = number
n = num - ele1.Z
hasmass=true
if (n < 0) then
return error.error{ '中子數不得為“' .. n .. '”' }
end
else
if (args2 and args2 ~= '') then
return error.error{ '未知的質量數“' .. args2 .. '”' }
end
end
if (hasmass == true) then
if (ele1.Isotope) then
for v, x in ipairs(ele1.Isotope) do
if (x.N == n) then
if (x.page and x.page ~= '') then
return x.page
else
return error.error{ '元素“' .. args[1] .. '”' .. '質量數為“'.. num ..'”的同位素沒有對應的頁面。'}
end
end
end
return ele1.page .. '-' .. num .. has_m
end
end
return ele1.page
end
return error.error{ '元素“' .. args[1] .. '”' .. '沒有對應的頁面。'}
end
function p.getListID(names)
local body =''
i=1
for v, x in ipairs(element_data) do
if ((x.name == names) or (x.page == names)) then
return i
end
for v1, x1 in ipairs(x.othername) do
if (x1 == names) then
return i
end
end
i=i+1
end
return -1
end
function p.decaylink(frame)
-- For calling from #invoke.
local pframe = frame:getParent()
local args = pframe.args
return p._decaylink(args)
end
function p.elementlink(frame)
-- For calling from #invoke.
local pframe = frame:getParent()
local args = pframe.args
return p._elementlink(args)
end
function p._elementlink(args)
arg1='' if (args[1] and args[1] ~= '') then arg1 = string.gsub(args[1] , "%s$", "") else return '' end
arg2='' if (args[2] and args[2] ~= '') then arg2 = string.gsub(args[2] , "%s$", "") end
eleid = p.getListID(arg1)
if (eleid==-1) then
return error.error{ '未知的元素“' .. arg1 .. '”' } .. '[[Category:含有錯誤元素符號的條目]]'
end
ele1 = element_data[eleid]
symbol1=ele1.Symbol
if(arg2 and arg2 ~= '')then if(arg2 ~= '1' )then
if (ele1.compound)then symbol1 ='(' .. symbol1 .. ')' end
symbol1 = symbol1 .. '<sub>' .. arg2 .. '</sub>'
end end
if (ele1.compound)then
return '[[' .. ele1.page .. '|' .. symbol1 .. ']]'
end
if (ele1.NotElement)then
return error.error{ '“' .. args[1] .. '”不是元素。'}
end
if (ele1.correct and ele1.correct ~= '') then
return error.error{ '“' .. args[1] .. '”不是“'.. ele1.correct .. '”的正確拼法。' }
end
if (ele1.page and ele1.page ~= '') then
return '[[' .. ele1.page .. '|' .. symbol1 .. ']]'
else
return error.error{ '元素“' .. args[1] .. '”沒有對應的頁面。'}
end
return ''
end
function p._element_symbol(args)
arg1='' if (args[1] and args[1] ~= '') then arg1 = string.gsub(args[1] , "%s$", "") else return '' end
arg2='' if (args[2] and args[2] ~= '') then arg2 = string.gsub(args[2] , "%s$", "") end
eleid = p.getListID(arg1)
if (eleid==-1) then
return error.error{ '未知的元素“' .. arg1 .. '”' } .. '[[Category:含有錯誤元素符號的條目]]'
end
ele1 = element_data[eleid]
symbol1=ele1.Symbol
if(arg2 and arg2 ~= '')then if(arg2 ~= '1' )then
if (ele1.compound)then symbol1 ='(' .. symbol1 .. ')' end
symbol1 = symbol1 .. '<sub>' .. arg2 .. '</sub>'
end end
if (ele1.compound)then
return symbol1
end
if (ele1.NotElement)then
return error.error{ '“' .. args[1] .. '”不是元素。'}
end
if (ele1.correct and ele1.correct ~= '') then
return error.error{ '“' .. args[1] .. '”不是“'.. ele1.correct .. '”的正確拼法。' }
end
if (ele1.page and ele1.page ~= '') then
return symbol1
else
return error.error{ '元素“' .. args[1] .. '”沒有對應的頁面。'}
end
return ''
end
function p._decaylink(args)
arg1='' if (args[1] and args[1] ~= '') then arg1 = string.gsub(args[1] , "%s$", "") else return '' end
if(arg1=='p') then arg1='p+'end if(arg1=='n') then arg1='n0'end
decayid = p.getListID(arg1)
if (decayid==-1) then
return ''
end
decay1 = element_data[decayid]
if (decay1.decay)then
return '[[' .. decay1.page .. '|' .. decay1.Symbol .. ']]'
end
return ''
end
p.IUPAC = { [0] = 'n', [1] = 'u', [2] = 'b', [3] = 't', [4] = 'q', [5] = 'p', [6] = 'h', [7] = 's', [8] = 'o', [9] = 'e' }
p.IUPAC_name = { [0] = 'nil', [1] = 'un', [2] = 'bi', [3] = 'tri', [4] = 'quad', [5] = 'pent',
[6] = 'hex', [7] = 'sept', [8] = 'oct', [9] = 'enn', [10] = 'ium', [11] = 'um' }
function p.DecodeByIUPAC_rules(symbol_data)
symbol = mw.ustring.lower(symbol_data)
symbol_len = mw.ustring.len(symbol)
Z_data = ''
for i = 1, symbol_len do
get_id = nil
for j = 0, 9 do if mw.ustring.sub(symbol ,i, i) == p.IUPAC[j] then get_id = j end end
if get_id == nil then return nil end
Z_data = Z_data .. get_id
end
return tonumber(Z_data)
end
function p.getElementByIUPAC_rules(index_input)
result = ''
result_name = ''
index = tonumber(index_input)
if index ~= nil then index = math.floor(index) else index = 0 end
index_str = '' .. index
index_len = mw.ustring.len(index_str)
if index > 100 then
for i = 1, index_len do
data = p.IUPAC[tonumber('' .. mw.ustring.sub(index_str ,i, i)) or 0]
name = p.IUPAC_name[tonumber('' .. mw.ustring.sub(index_str ,i, i)) or 0]
if i == 1 then
result = result .. mw.ustring.upper(data)
result_name = result_name .. mw.ustring.upper(mw.ustring.sub(name,1,1)) .. mw.ustring.sub(name,2,-1)
else
result = result .. data
result_name = result_name .. name
end
end
end
if result == '' then
return nil
end
result_name_index = 11 if mw.ustring.sub(result_name,-1,-1) ~= 'i' then result_name_index = result_name_index - 1 end
return { name=result_name .. p.IUPAC_name[result_name_index] , page=result, Symbol=result, Z=index }
end
function p.getElementByZ(index)
local body =''
for v, x in ipairs(element_data) do
if (x.Z == index) then
return x
end
end
if index > 0 then
return p.getElementByIUPAC_rules(index)
end
return nil
end
function p.next_element(symbol)
eleid = p.getListID(symbol)
ele1 = element_data[eleid]
if ele1 == nil then ele_z = p.DecodeByIUPAC_rules(symbol) else if ele1.Z == nil then
ele_z = p.DecodeByIUPAC_rules(symbol) else ele_z = ele1.Z end
end
if ele_z ~= nil then
return p.getElementByZ(ele_z + 1)
end
return nil
end
function p.last_element(symbol)
eleid = p.getListID(symbol)
ele1 = element_data[eleid]
if ele1 == nil then ele_z = p.DecodeByIUPAC_rules(symbol) else if ele1.Z == nil then
ele_z = p.DecodeByIUPAC_rules(symbol) else ele_z = ele1.Z end
end
if ele_z ~= nil then
return p.getElementByZ(ele_z - 1)
end
return nil
end
--本模塊的沙盒(測試)函數
function p.sandbox(frame)
-- For calling from #invoke.
local pframe = frame:getParent()
local args = pframe.args
return p._elementlink(args)
end
function p._sandbox(args)
return element_data[p.getListID(args[1])].name
end
return p