localp={}localpargsfunctionp.main(frame)pargs=frame:getParent().argslocalargs={}locali=1localcontentString=""localmax=getMax()ifpargs['inverse']thencontentString=p.inverseClade(frame,max,max)elsecontentString=p.clade(frame,1,max)endreturncontentStringendfunctionp.clade(frame,i,max)-- |1= is basal at toplocalargs={}args[1]=pargs[i]args['label1']=pargs['label'..tostring(i)]args['sublabel1']=pargs['sublabel'..tostring(i)]ifi+1==maxthenargs[2]=pargs[i+1]args['label2']=pargs['label'..tostring(i+1)]args['sublabel2']=pargs['sublabel'..tostring(i+1)]elseargs[2]=p.clade(frame,i+1,max)-- or the result of the next pairendlocaltemplate="Clade"ifpargs['reverse']thentemplate="CladeR"endreturnframe:expandTemplate{title=template,args=args}endfunctionp.inverseClade(frame,i,max)-- |1= innermost at bottomlocalargs={}args[2]=pargs[i]args['label2']=pargs['label'..tostring(i)]args['sublabel2']=pargs['sublabel'..tostring(i)]ifi-1==1thenargs[1]=pargs[i-1]args['label1']=pargs['label'..tostring(i-1)]args['sublabel1']=pargs['sublabel'..tostring(i-1)]elseargs[1]=p.inverseClade(frame,i-1,max)-- or the result of the next pairendlocaltemplate="Clade"ifpargs['reverse']thentemplate="CladeR"endreturnframe:expandTemplate{title=template,args=args}endfunctionp.inverseClade2(frame,i,max)-- |1= is innermost at bottomlocalargs={}args[1]=pargs[i]args['label1']=pargs['label'..tostring(i)]ifi-1==1thenargs[2]=pargs[i-1]args['label2']=pargs['label'..tostring(i-1)]elseargs[2]=p.inverseClade(frame,i-1,max)-- or the result of the next pairendreturnframe:expandTemplate{title="Clade",args=args}endfunctiongetMax()locali=1localmaxwhilei<50doifpargs[i]thenmax=ii=i+1elsebreakendendreturnmaxendreturnp