Módulo:Automated taxobox – Wikipédia, a enciclopédia livre

Documentação do módulo[ver] [editar] [histórico] [purgar]

Este módulo serve de suporte para o sistema automatizado de infocaixas de taxonomia.

Ele pode ser chamado através de uma predefinição, m.q. {{Automatic taxobox |...}}, ou diretamente, nesse caso informando o parâmetro |direct=yes, m.q. {{#invoke:Automated taxobox|automaticTaxobox |direct=yes |...}}.

Ver também

-- nome automated taxobox, require('strict') local TaxonItalics = require('Module:TaxonItalics') local Autotaxobox = require('Module:Autotaxobox') local ItalicTitle = require('Module:Título em itálico') local p = {} -- functions made public local l = {} -- nonpublic internal functions and variables global to the module l.system = '' -- '' for normal scientific classification (default)               -- 'ichnos' for trace fossil classification               -- 'veterovata' for egg fossil classification  -- ============================================================================= -- ichnobox implements Template:Ichnobox; see the documentation of that -- template for details. -- The only difference from Template:Automatic taxobox is in the taxobox colour -- and classification link and the parameters for type species and genera. -- =============================================================================  function p.ichnobox(frame)     l.system = 'ichnos'     return p.automaticTaxobox(frame) end  -- ============================================================================= -- oobox implements Template:Oobox; see the documentation of that -- template for details. -- The only difference from Template:Automatic taxobox is in the taxobox colour -- and classification link and the parameters for type species and genera. -- =============================================================================  function p.oobox(frame)     l.system = 'veterovata'     return p.automaticTaxobox(frame) end  -- ============================================================================= -- automaticTaxobox implements Template:Automatic taxobox; see the documentation -- of that template for details. -- It also implements Template:Ichnobox and Template:Oobox. The small -- differences are signalled by the module-wide variable l.system. -- The following parameters present in the old template code version of -- Template:Automatic taxobox were not used and have not been implemented: --   image_caption_align --   image2_caption_align --   binomial2 --   binomial2_authority --   binomial3 --   binomial3_authority --   binomial4 --   binomial4_authority -- =============================================================================  function p.automaticTaxobox(frame)     local args     if frame.args['direct'] == 'yes' then args = frame.args     else args = frame:getParent().args end     local res = ''     -- ---------------------------------------------------------------------     -- pick up taxobox parameters from the caller that need to be processed;     -- most will be passed on unchanged     -- ---------------------------------------------------------------------     local pagename = args['pagename'] or '' -- for testing and debugging only     local italicTitle = args['italic_title'] or args['italic title'] or args['itálico'] or ''     local ichnos = ''     if l.system == 'ichnos' then ichnos = 'true' end     local veterovata = ''     if l.system == 'veterovata' then veterovata = 'true' end     local fossilRange = args['fossil_range'] or args['fossil range'] or args['temporal_range'] or args['temporal range'] or args['período_fóssil'] or ''     local oldestFossil = args['oldest_fossil'] or args['oldest fossil'] or ''     local youngestFossil =  args['youngest_fossil'] or args['youngest fossil'] or ''     local name = args['name'] or args['nome'] or ''     local colourAs = args['color_as'] or args['color as'] or args['colour_as']  or args['colour as'] or ''     local taxon = args['taxon'] or args['táxon'] or ''     local authority = args['authority'] or args['autoridade'] or ''     local parentAuthority = args['parent_authority'] or args['parent authority'] or ''     local subdivision = args['subdivision'] or args['subdivisão'] or ''     local subdivisionRef = args['subdivision_ref'] or args['subdivision ref'] or args['subdivisão_ref'] or ''     local subdivisionRanks = args['subdivision_ranks'] or args['subdivision ranks'] or args['subdivisão_nome'] or ''     local manualFlag = 'text' -- marks manually specified ranks     local binomial = args['binomial'] or args['binomial_'..manualFlag] or args['binomial '..manualFlag] or ''     local binomialAuthority = args['binomial_authority'] or args['binomial_authority'] or args['binomial_autoridade'] or ''     local genusManual = args['genus_'..manualFlag] or args['genus '..manualFlag] or args['género'..manualFlag] or ''     local speciesManual = args['species_'..manualFlag] or args['species '..manualFlag] or args['espécies'..manualFlag] or ''     -- ------------------------------------------------------     -- set the taxobox parameters determined by this function     -- ------------------------------------------------------     fossilRange = l.setfossilRange(frame, fossilRange, oldestFossil, youngestFossil)     -- use the base page name as the taxon if the taxon parameter is missing     local currentPagename = mw.title.getCurrentTitle()     if pagename == '' then pagename = currentPagename.text end -- pagename para only used in testing and     local basePagename = pagename     if italicTitle ~= 'taxon' then basePagename = mw.ustring.gsub(basePagename, '%s+%b()$', '', 1) end     local taxonParaMissingError = false     if taxon == '' then         taxonParaMissingError = true         taxon = basePagename     end     -- decide if the page name and taxobox name need to be italicized;     -- if italic_title is not set, then if the names are the taxon, use its rank to decide     local ok, taxonRank = Autotaxobox.getTaxonInfoItem(frame, taxon, 'rank') -- taxonRank needed later if not here     if italicTitle == '' then         if not (ok and taxonRank ~= '' and                 frame:expandTemplate{ title = 'Is italic taxon', args = {taxonRank} } == 'yes') then             italicTitle = 'no'         end     end     --   remove any " (DISAMBIG)" or "/MODIFIER" from the taxon's name;     --   if the base page name is the same as the base taxon name, then italicization can be applied     local baseTaxon = taxon     if italicTitle ~= 'taxon' then baseTaxon = mw.ustring.gsub(baseTaxon, '%s+%b()$', '', 1) end     baseTaxon = mw.ustring.gsub(baseTaxon, '/.*$', '', 1)     if italicTitle == '' and basePagename == baseTaxon then         italicTitle = 'yes'     end     -- italicize the page name (page title) if required     if currentPagename.namespace == 0 and (italicTitle == 'yes' or italicTitle == 'taxon') then         if italicTitle == 'taxon' or TaxonItalics.hasConnectingTerm(baseTaxon) then             res =  res .. frame:expandTemplate{ title = 'Italic taxon title', args = {} }             italicTitle = 'yes'         else ItalicTitle._main({})         end     end     -- set the taxobox name if not supplied, italicizing it if appropriate.     if name == '' then         name = basePagename         if italicTitle == 'yes' then             name = TaxonItalics.italicizeTaxonName(name, false, false)         end         -- name = name ..  '/' .. baseTaxon .. '/' .. nameRank     end     -- determine taxobox colour     local colour = ''     if colourAs ~= '' then         colour = frame:expandTemplate{ title = 'Taxonomia/cor', args = {colourAs} }     elseif l.system == 'ichnos' then         colour = frame:expandTemplate{ title = 'Taxonomia/cor', args = {'Ichnos'} }     elseif l.system == 'veterovata' then         colour = frame:expandTemplate{ title = 'Taxonomia/cor', args = {'Veterovata'} }     else         colour = Autotaxobox.getTaxoboxColour(frame, taxon)     end     -- fill in a missing subdivision_ranks parameter     if subdivision ~= '' and subdivisionRanks == '' and ok and taxonRank ~= '' then         subdivisionRanks =  frame:expandTemplate{ title = 'Nível taxonômico', args = {taxonRank} }     end     -- set binomial parameters if the target taxon is (unusually) a species     local genusAuthority = ''     if binomial == '' then         if ok and taxonRank == 'species' or taxonRank == "espécies" then             binomial = TaxonItalics.italicizeTaxonName(taxon, false, false)             binomialAuthority = authority         end     end     -- handle any manually set ranks     local boldFirst = ''     local offset = 0     if speciesManual ~= '' then         offset = offset + 1         binomialAuthority = authority         if binomial == '' then binomial = '<span class="error">Erro: valor do parâmetro binomial em falta</span>' end     end     if genusManual ~= '' then         boldFirst = 'link'         offset = offset + 1         if offset == 1 then             genusAuthority = authority         else             genusAuthority = parentAuthority         end     end     -- process type genus and type species if present; italicize if they seem not to have an authority attached     local typeGenus = ''     local typeGenusAuthority = ''     local typeSpecies = ''     local typeSpeciesAuthority = ''     local typeIchnogenus = ''     local typeIchnogenusAuthority = ''     local typeIchnospecies = ''     local typeIchnospeciesAuthority = ''     local typeOogenus = ''     local typeOogenusAuthority = ''     local typeOospecies = ''     local typeOospeciesAuthority = ''     if l.system == '' then         typeGenus = l.italicizeTypeName(args['type_genus'] or args['type genus'] or args['género_tipo'] or '')         typeGenusAuthority = args['type_genus_authority'] or args['type genus authority'] or args['género_tipo_autoridade'] or ''         typeSpecies = l.italicizeTypeName(args['type_species'] or args['type species'] or args['espécies_tipo'] or '')         typeSpeciesAuthority = args['type_species_authority'] or args['type species authority'] or args['espécies_tipo_autoridade'] or ''     elseif l.system == 'ichnos' then         typeIchnogenus = l.italicizeTypeName(args['type_ichnogenus'] or args['type ichnogenus'] or '')         typeIchnogenusAuthority = args['type_ichnogenus_authority'] or args['type ichnogenus authority'] or ''         typeIchnospecies = l.italicizeTypeName(args['type_ichnospecies'] or args['type ichnospecies'] or '')         typeIchnospeciesAuthority = args['type_ichnospecies_authority'] or args['type ichnospecies authority'] or ''     elseif l.system == 'veterovata' then         typeOogenus = l.italicizeTypeName(args['type_oogenus'] or args['type oogenus'] or '')         typeOogenusAuthority = args['type_oogenus_authority'] or args['type oogenus authority'] or ''         typeOospecies = l.italicizeTypeName(args['type_oospecies'] or args['type oospecies'] or '')         typeOospeciesAuthority = args['type_oospecies_authority'] or args['type oospecies authority'] or ''     end     -- ------------------------------------------------     -- now call Taxobox/core with all of its parameters     -- ------------------------------------------------     res = res .. frame:expandTemplate{ title = 'Info/Taxonomia/core', args =         { ichnos = ichnos,           veterovata = veterovata,           ['edit link'] = 'e',           temporal_range = fossilRange,           display_taxa = args['display_parents'] or args['display parents'] or '1',           parent = taxon,           authority = authority,           parent_authority = parentAuthority,           grandparent_authority = args['grandparent_authority'] or args['grandparent authority'] or '',           greatgrandparent_authority = args['greatgrandparent_authority'] or args['greatgrandparent authority'] or '',           greatgreatgrandparent_authority = args['greatgreatgrandparent_authority'] or args['greatgreatgrandparent authority'] or '',           name = name,           colour = colour,           status = args['status'] or args['estado'] or '',           status_system = args['status_system'] or args['status system'] or args['sistema_estado'] or '',           status_ref = args['status_ref'] or args['status ref'] or args['estado_ref'] or '',           status2 = args['status2'] or '',           status2_system = args['status2_system'] or args['status2 system'] or '',           status2_ref = args['status2_ref'] or args['status2 ref'] or '',           trend = args['trend'] or '',           extinct = args['extinct'] or args['extinto'] or '',           image = args['image'] or args['imagem'] or '',           upright = args['image_upright'] or args['image upright'] or '',           image_alt = args['image_alt'] or args['image alt'] or '',           image_caption = args['image_caption'] or args['image caption'] or args['imagem_legenda'] or '',           image2 = args['image2'] or args['imagem2'] or '',           upright2 = args['image2_upright'] or args['image2 upright'] or '',           image2_alt = args['image2_alt'] or args['image2 alt'] or '',           image2_caption = args['image2_caption'] or args['image2 caption'] or args['imagem2_legenda'] or '',           classification_status = args['classification_status'] or args['classification status'] or '',           diversity = args['diversity'] or args['diversidade'] or '',           diversity_ref = args['diversity_ref'] or args['diversity ref'] or '',           diversity_link = args['diversity_link'] or args['diversity link'] or args['diversidade_link'] or '',           bold_first = boldFirst,           offset = offset,           genus = genusManual,           genus_authority = genusAuthority,           species = speciesManual,           binomial = binomial,           binomial_authority = binomialAuthority,           trinomial = args['trinomial'] or '',           trinomial_authority = args['trinomial_authority'] or args['trinomial authority'] or args['trinomial_autoridade'] or '',           type_genus = typeGenus,           type_genus_authority = typeGenusAuthority,           type_species = typeSpecies,           type_species_authority = typeSpeciesAuthority,           type_ichnogenus = typeIchnogenus,           type_ichnogenus_authority = typeIchnogenusAuthority,           type_ichnospecies = typeIchnospecies,           type_ichnospecies_authority = typeIchnospeciesAuthority,           type_oogenus = typeOogenus,           type_oogenus_authority = typeOogenusAuthority,           type_oospecies = typeOospecies,           type_oospecies_authority = typeOospeciesAuthority,           subdivision = subdivision,           subdivision_ref = subdivisionRef,           subdivision_ranks = subdivisionRanks,                   type_strain = args['type_strain'] or args['type strain'] or '',           range_map = args['range_map'] or args['range map'] or args['mapa'] or '',           range_map_upright = args['range_map_upright'] or args['range map upright'] or '',           range_map_alt = args['range_map_alt'] or args['range map alt'] or '',           range_map_caption = args['range_map_caption'] or args['range map caption'] or args['mapa_legenda'] or '',           range_map2 = args['range_map2'] or args['range map2'] or args['mapa2'] or '',           range_map2_upright = args['range_map2_upright'] or args['range map2 upright'] or '',           range_map2_alt = args['range_map2_alt'] or args['range map2 alt'] or '',           range_map2_caption = args['range_map2_caption'] or args['range map2 caption'] or args['mapa2_legenda'] or '',           range_map3 = args['range_map3'] or args['range map3'] or args['mapa3'] or '',           range_map3_upright = args['range_map3_upright'] or args['range map3 upright'] or '',           range_map3_alt = args['range_map3_alt'] or args['range map3 alt'] or '',           range_map3_caption = args['range_map3_caption'] or args['range map3 caption'] or args['mapa3_legenda'] or '',           range_map4 = args['range_map4'] or args['range map4'] or args['mapa4'] or '',           range_map4_upright = args['range_map4_upright'] or args['range map4 upright'] or '',           range_map4_alt = args['range_map4_alt'] or args['range map4 alt'] or '',           range_map4_caption = args['range_map4_caption'] or args['range map4 caption'] or args['mapa4_legenda'] or '',           synonyms_ref = args['synonyms_ref'] or args['synonyms ref'] or args['sinónimos_ref'] or args['sinônimos_ref'] or '',           synonyms = args['synonyms'] or args['sinónimos'] or args['sinônimos'] or ''         } }     -- put page in error-tracking categories if required     local errCat1 = ''     if genusManual ~= '' or speciesManual ~= '' or binomial ~= '' then errCat1 = '[[Categoria:!Caixas de espécies com parâmetros manuais]]' end     local errCat2 = ''     if taxonParaMissingError then errCat2 = '[[Categoria:!Caixas de espécies contando com título da página]]' end     res = res .. frame:expandTemplate{ title = 'Artigos e outros', args = {errCat1..errCat2} }     return res end  -- ============================================================================= -- l.setfossilRange(frame, fossilRange, oldestFossil, youngestFossil) checks -- the parameters that determine the fossil range, returning an appropriate -- range. -- ============================================================================= -- temporary public function for debugging function p.chkFossilRange(frame)     local args = frame.args     local fossilRange = args['temporal_range'] or args['temporal range'] or args['fossil_range'] or args['fossil range'] or args['período_fóssil'] or ''     local oldestFossil = args['oldest_fossil'] or args['oldest fossil'] or ''     local youngestFossil =  args['youngest_fossil'] or args['youngest fossil'] or ''     local fossilRange = l.setfossilRange(frame, fossilRange, oldestFossil, youngestFossil)     return fossilRange end  function l.setfossilRange(frame, fossilRange, oldestFossil, youngestFossil)     local res = ''     if fossilRange ~= '' then         if mw.ustring.find(frame:expandTemplate{ title = 'Período começo', args = { fossilRange } }, '[Ee]rror') then             res = fossilRange         else             res = frame:expandTemplate{ title = 'Período fóssil', args = { fossilRange } }         end     elseif oldestFossil ~= '' then         if youngestFossil == '' then youngestFossil = 'Recente' end         if mw.ustring.find(frame:expandTemplate{ title = 'Período começo', args = { oldestFossil } }, '[Ee]rror') or            mw.ustring.find(frame:expandTemplate{ title = 'Período começo', args = { youngestFossil } }, '[Ee]rror') then             res = oldestFossil..'–'..youngestFossil         else         res = frame:expandTemplate{ title = 'Período fóssil', args = { oldestFossil, youngestFossil } }         end     end     return res end  -- ============================================================================= -- l.italicizeTypeName(typeName) checks whether the name of a type genus or -- species should be italicized, because it appears to be a bare name. -- =============================================================================  function l.italicizeTypeName(typeName)     if typeName and not (string.find(typeName, "<", 1, true) or string.find(typeName, ">", 1, true)) then         typeName = TaxonItalics.italicizeTaxonName(typeName, false, false)     end     return typeName end  -- **************************** Speciesbox support *****************************  -- ============================================================================= -- l.genusOf(str) extracts the genus from a string. Normally this will be the -- first word of the string (e.g. given 'Bellis perennis' it returns 'Bellis'). -- It also handles a string containing a nothogenus with a spaced × (e.g. given -- '× Heucherella tiarelloides' it returns '× Heucherella'). -- =============================================================================  function l.genusOf(str)     local res = mw.ustring.match(str, '^[^%s]*', 1)     if res == mw.ustring.char(215) then         res = res .. ' ' .. mw.ustring.match(str, '^[^%s]*', 3)     end     return res end  -- ============================================================================= -- l.doSpeciesboxName(name, taxon, genus, species, basePageTitle, italicTitle) -- returns a name for a taxobox created by Template:Speciesbox. The name will be -- italicized if appropriate. It also generates code to italicize the page title -- if appropropriate. In both cases the test for italicization is that the base -- taxon name (stripped of any disambiguation or qualifier) is the same as the -- base page title. -- =============================================================================  function p.speciesboxName(frame)     local name = frame.args[1] or ''     local taxon = frame.args[2] or ''     local genus = frame.args[3] or ''     local species = frame.args[4] or ''     local basePageTitle = frame.args[5] or ''     local italicTitle = frame.args[6] or ''     return l.doSpeciesboxName(name, taxon, genus, species, basePageTitle, italicTitle) end   function l.doSpeciesboxName(name, taxon, genus, species, basePageTitle, italicTitle)     if taxon ~= '' then         genus = mw.ustring.gsub(l.genusOf(taxon), '/.*$', '', 1) -- strip any qualifier     else         genus = mw.ustring.gsub(mw.ustring.gsub(genus, '%s+%b()$', '', 1), '/.*$', '', 1) -- strip any disambig and qualifier         if species == '' then taxon = genus         else taxon = genus .. ' ' .. species         end     end     local italicizeP = italicTitle ~= 'no' and (basePageTitle == taxon or basePageTitle == genus) -- use basePageTitle to match taxon/genus     -- deal with taxobox name (i.e. its caption)     if name == '' then         name = basePageTitle         if italicizeP then name = TaxonItalics.italicizeTaxonName(name, false, false) end     end     -- deal with page title     if italicizeP then         local pageTitle = mw.title.getCurrentTitle().text -- formatting the page title with DISPLAYTITLE needs the full page title         if italicTitle ~= 'test' then             pageTitle  = TaxonItalics.italicizeTaxonName(pageTitle, false, false, true) -- format pageTitle, not italicizing any parenthesized term             local nsText = mw.title.getCurrentTitle().nsText -- for drafts and other pages not in mainspace             if nsText ~= '' then                 pageTitle = nsText .. ':' .. pageTitle             end             mw.getCurrentFrame():callParserFunction('DISPLAYTITLE', pageTitle)         else             name = name .. ' \\Italic title\\ ' .. pageTitle -- for testing and debugging         end     end     return name end  -- ============================================================================= -- ============================================================================= function p.infraspeciesboxName(frame)     local name = frame.args[1] or ''     local genus = frame.args[2] or ''     local species = frame.args[3] or ''     local ct = frame.args[4] or ''     local infraspecies = frame.args[5] or ''     local basePageTitle = frame.args[6] or ''     local italicTitle = frame.args[7] or ''     return l.doinfraspeciesboxName(name, genus, species, ct, infraspecies, basePageTitle, italicTitle) end      function l.doinfraspeciesboxName(name, genus, species, ct, infraspecies, basePageTitle, italicTitle)     genus = mw.ustring.gsub(mw.ustring.gsub(genus, '%s+%b()$', '', 1), '/.*$', '', 1) -- strip any disambig and qualifier     local taxon = genus .. ' ' .. species     if ct == '' then taxon = taxon .. ' ' .. infraspecies     else taxon = taxon .. ' ' .. ct .. ' ' .. infraspecies     end     local italicizeP = italicTitle ~= 'no' and (basePageTitle == taxon) -- use basePageTitle to match taxon     -- deal with taxobox name (i.e. its caption)     if name == '' then         name = basePageTitle         if italicizeP then name = TaxonItalics.italicizeTaxonName(name, false, false) end     end     -- deal with page title     if italicizeP then         local pageTitle = mw.title.getCurrentTitle().text -- formatting the page title with DISPLAYTITLE needs the full page title         pageTitle  = TaxonItalics.italicizeTaxonName(pageTitle, false, false, true) -- format pageTitle, not italicizing any parenthesized term         if italicTitle ~= 'test' then             mw.getCurrentFrame():callParserFunction('DISPLAYTITLE', pageTitle)         else             name = name .. ' \\Italic title\\ ' .. pageTitle -- for testing and debugging         end     end     return name end  return p