Jump to content
Wikipedia The Free Encyclopedia

Module:Sandbox/Jts1882/Biota infobox/param

From Wikipedia, the free encyclopedia
Module documentation[create] [purge]
You might want to create a documentation page for this Scribunto module.
Editors can experiment in this module's sandbox (create | mirror) and testcases (create) pages.
Add categories to the /doc subpage. Subpages of this module.
 require('strict')

 localp={}
 localtemplateArgs={}
 localinfo={}

 localparamData=require('Module:Sandbox/Jts1882/Biota infobox/data')-- contains the taxon ranks in order

 -- call parameter checking independently of taxobox display
 functionp.main(frame)
 p._getArgs(frame)
 returninfo.parameterCategory
 end
 -- get parameters for calling function
 functionp.getArgs(frame,args,localinfo)
 templateArgs=args
 info=localinfo
 p._getArgs(frame)
 end
 -- get the arguments and check them in vaious ways
 functionp._getArgs(frame)
 localparents=mw.getCurrentFrame():getParent()
 localtempArgs={}-- local copy of arguments that will be checked (empty, aliases, invalid)

 -- get copy of parent arguments, aliasing spaces for underscores
 fork,vinpairs(parents.args)do
 iftype(k)=='string'then-- no positional parameters 
 --v = v:match('^%s*(.-)%s*$') -- include trimming (only needed for positional parameters)
 ifvand(v~="")then-- check for content
 localj=k:gsub(" ","_")-- substitute spaces with underscore (aliases)
 tempArgs[j]=v-- parents.args[k]
 end
 end
 end

 -- do we need to check frame args?
 fork,vinpairs(frame.args)do
 ifvandv~=""then--check for content
 tempArgs[k]=v
 end
 end

 -- parameters that can be set without a value, e.g. |extinct= 
 ifparents.args['extinct']andparents.args['extinct']==""thentemplateArgs['extinct']=""end

 ifparents.args['auto']orframe.args['auto']then
 info.auto=parents.args['auto']orframe.args['auto']-- keep template parameters seperate from control flow arguments
 end

 p.preprocessArgs(tempArgs)-- check aliases, check valid parameters for calling template
 end

 functionp.preprocessArgs(tempArgs)-- handles aliases ajc validates parameters
 info.parameterCategory=""-- initialise empty string for tracking categories
 p.aliasParams(tempArgs)-- check parameters for aliases
 p.validateParams(tempArgs)-- check parameters for invalid parameters (from allowed list)
 p._checkParameters(tempArgs)-- check manual taxon ranks, orphaned parameters and invalid combinations
 end
 --[[ -------------------------------------------------------------------
  function p.aliasParams(tempArgs)
  -- alias of spaces to underscores handled in getArgs()
  -- uses alias list from the data subpage (param.aliasmap)
  -- e.g. local aliasMap = { ['fossil_range'] = 'temporal_range', 
 		 ['colour_as'] = 'color_as', ... }
 ]]
 functionp.aliasParams(tempArgs)

 -- change parameters using alias map
 fork,vinpairs(paramData.aliasMap)do
 iftempArgs[k]then-- if templateArgs has parameter with alias name
 tempArgs[v]=tempArgs[k];-- create new element with alias' value as key
 tempArgs[k]=nil;-- delete the alias
 end
 end

 --[[ alias: change parameters using spaces instead of underscores
 	local localArgs = {} -- Note: adding new keys while iterating over a table gives unpredictable results
  for k,v in pairs(templateArgs) do
  if type(k)=='string' then
 			local j,n = string.gsub(k, " ", "_") -- substitute spaces
 			if n > 0 then --if j ~= k then -- if substitution made
 				localArgs[j] = v	 -- create new key with underscore
 			 localArgs[k] = nil;			 -- delete old key with space 
 	 else 
 	 	localArgs[k] = v
  	end
 		end
 	end	
  templateArgs = localArgs -- now copy the corrected table
 	--templateArgs['debug'] = mw.dumpObject (templateArgs)
  --]]

 end
 --[[ -------------------------------------------------------------------------------------------
 	function p.validateParams(tempArgs)
 	 - uses list of valid parametere accepted by template (from data subpage)
 	 params.validList = {
 						automatictaxobox = params.validAutomatictaxobox,
 						speciesbox = params.validSpeciesbox,
 						subspeciesbox = params.validSubspeciesbox,
 					 infraspeciesbox = params.validInfraspeciesbox,	}
 	 - invalid parameters are retaining in tempArgs
 ]]
 functionp.validateParams(tempArgs)

 localvalidParamsList=paramData.validList[info.auto]

 iftype(validParamsList)=='table'then-- if checklist for valid parameters
 fork,vinpairs(validParamsList)do
 iftempArgs[v]then-- v contains the name of valid parameter key
 templateArgs[v]=tempArgs[v]
 tempArgs[v]=nil-- delete so only invalid arguments left in tempArgs
 end-- TODO use these for tracking categories (partially done)
 end

 tempArgs['auto']=nil-- this if not on tracking list but used internally
 if#tempArgsthen-- table not empty -- if next(tempArgs) ~= nil then
 templateArgs['debug']=mw.dumpObject(tempArgs)
 info.parameterCategory=info.parameterCategory.."[[Category:Automatic taxobox with unsupported parameters]]"
 end

 else-- checklist for valid parameters not available for this option
 fork,vinpairs(tempArgs)do
 templateArgs[k]=v
 end
 end


 --DISABLE the parameter checking is currently being call from the template (this is temporary)
 -- this function checks for bad combinations (e.g. genus without species)
 --info.parameterCategory = p._checkParameters(frame)
 end

 -------------------------------------- CATEGORY FUNCTIONS --------------------------------
 -- function for external invoke
 functionp.checkParameters(frame)
 p.getArgs(frame)-- populates templateArgs[] with parameters, after alias checking and validation of supported parameters
 -- then calls p._checkParameters for addition parameter checking 

 returninfo.parameterCategory-- return tracking categories
 end
 -- function that checks for extraneous parameters
 functionp._checkParameters(tempArgs)

 localcategoryString=""

 -- (1) check for speciesbox with taxon and (genus or species)
 ifinfo.auto=="speciesbox"then
 iftemplateArgs['taxon']and(templateArgs['genus']ortemplateArgs['species'])then
 categoryString=categoryString.."[[Category:Speciesboxes using taxon with genus or species parameters]]"
 end
 end

 -- (2) check for manual taxobox parameters
 fork,vinpairs(paramData.taxonRanks)do--run through manual taxobox parameter list

 ifv=='genus'thenbreakend-- don't check at genus and below

 iftempArgs[v]then-- use tempArgs as these won't have been validated (produces redundant category?)
 categoryString=categoryString.."[[Category:Automatic taxoboxes using manual rank parameters]]"
 end
 end

 localorphan=false
 localdependentParams={
 image_caption='image',image_alt='image',image_upright='image',image_width='image',
 image2_caption='image2',image2_alt='image2',image2_upright='image2',image2_width='image2',
 range_map_caption='range_map',range_map_alt='range_map',range_map_upright='range_map',range_map_width='range_map',
 range_map2_caption='range_map2',range_map2_alt='range_map2',range_map2_upright='range_map2',range_map2_width='range_map2',
 range_map3_caption='range_map3',range_map3_alt='range_map3',range_map3_upright='range_map3',range_map3_width='range_map3',
 range_map4_caption='range_map4',range_map4_alt='range_map4',range_map4_upright='range_map4',range_map4_width='range_map4',
 }
 fork,vinpairs(dependentParams)do
 iftemplateArgs[k]andnottemplateArgs[v]thenorphan=trueend
 --templateArgs[k] = nil -- delete orphaned variable
 end
 iforphanthen
 categoryString=categoryString.."[[Category:Automatic taxoboxes with orphaned dependent parameters]]"
 end

 -- paraphyletic groups using manual taxonomy
 --categoryString = categoryString .. "[[Category:" .. mw.getCurrentFrame():getParent():getTitle() .."]]"
 ifmw.getCurrentFrame():getParent():getTitle()=="Template:Paraphyletic group"then
 ifinfo.auto~="yes"andinfo.auto~="virus"then
 categoryString=categoryString.."[[Category:Paraphyletic group infoboxes with manual taxonomy]]"
 end
 --categoryString = categoryString .. "[[Category:Paraphyletic group infoboxes]]"

 end

 -- add to category list
 info.parameterCategory=info.parameterCategory..categoryString

 --return categoryString
 end

 returnp

AltStyle によって変換されたページ (->オリジナル) /