--require('strict') -- comment out until clade also uses noglobals
local p =
local pargs = mw.getCurrentFrame:getParent.args
--newickConverter|newickstring= }}
Function p.listConverter convert wikitext-like lists to clade format use @ instead of * in wikitext to avoid processing Usage:
function p.cladeConverter(frame) if frame.args['newickstring'] or pargs['newick'] or pargs['newickstring'] then return p.newickConverter(frame) elseif frame.args['list'] or pargs['list'] then return p.listConverter(frame) endend--newickConverter|newickstring= }}function p.newickConverter(frame) local newickString = frame.args['newickstring'] or pargs['newick'] or pargs['newickstring'] --if newickString
newickString = require('Module:Clade').processNewickString(newickString,"") -- "childNumber") -- show the Newick string local cladeString = local levelNumber = 1 -- for depth of iteration local childNumber = 1 -- number of sister elements on node (always one for root) -- converted the newick string to the clade structure cladeString = cladeString .. ''
local resultString = local option = mw.getCurrentFrame:getParent.args['option'] or if option
Modified Newick string:' .. '
'..newickString..'' -- show the converted clade structure resultString = resultString .. 'Output of clade template structure:' .. '
'.. cladeString ..'
' end --resultString = frame:expandTemplate
return resultStringend
--labelN=labelname 2. the left hand term in parenthesis has common delimited child nodes, each of which can be i. a taxon name which just needs: |N=leafname ii. a Newick string which needs further processing through reiterationfunction p.newickParseLevel(newickString,levelNumber,childNumber)
local cladeString = "" local indent = p.getIndent(levelNumber) --levelNumber=levelNumber+1 local j=0 local k=0 j,k = string.find(newickString, '%(.*%)') -- find location of outer parenthesised term local innerTerm = string.sub(newickString, j+1, k-1) -- select content in parenthesis local outerTerm = string.gsub(newickString, "%b", "") -- delete parenthetic term
cladeString = cladeString .. indent .. '|label'..childNumber..'=' .. outerTerm cladeString = cladeString .. indent .. '|' .. childNumber..'=' .. '' return cladeStringend
function p.getIndent(levelNumber) local indent = "\r" local extraIndent = pargs['indent'] or mw.getCurrentFrame.args['indent'] or 0 while tonumber(extraIndent) > 0 do indent = indent .. " " -- an extra indent to make aligining compound trees easier extraIndent = extraIndent - 1 end while levelNumber > 1 do indent = indent .. " " levelNumber = levelNumber-1 end return indentend
--listConverter|list= }}
function p.listConverter(frame) local listString = frame.args['list'] or mw.getCurrentFrame:getParent.args['list']
-- show the list string local cladeString = local levelNumber = 1 -- for depth of iteration local childNumber = 1 -- number of sister elements on node (always one for root) local indent = p.getIndent(levelNumber) -- converted the newick string to the clade structure cladeString = cladeString .. indent .. ''
local resultString = local option = mw.getCurrentFrame:getParent.args['option'] or if option
'..listString..'' -- show the converted clade structure resultString = resultString .. '
'.. cladeString ..'' end --resultString = frame:expandTemplate
return resultStringend
function p.listParseLevel(listString,levelNumber,childNumber)
local cladeString = "" local indent = p.getIndent(levelNumber) levelNumber=levelNumber+1
local list = mw.text.split(listString, "\n") local i=1 local child=1 local lastNode=0 while list[i] do list[i]=list[i]:gsub("^@", "") -- strip the first @ if not string.match(list[i], "^@", 1) then -- count children at this level (not beginning wiht @) lastNode = lastNode+1 end i=i+1 end i=1
while list[i] do
--
-- if the next value begins with @, we have a subtree which should be recombined if list[i+1] and string.match(list[i+1], "^@", 1) then local label=list[i] i=i+1 local recombined = list[i] while list[i+1] and string.match(list[i+1], "^@", 1) do recombined = recombined .. "\n" .. list[i+1] i=i+1 end cladeString = cladeString .. indent .. '|label' .. child ..'=' .. label cladeString = cladeString .. indent .. '|' .. child ..'=' .. '' return cladeStringendreturn p