Módulo:BibRules: mudanças entre as edições

De Wikincat
Ir para navegação Ir para pesquisar
(lint)
Sem resumo de edição
 
(52 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
local p = {}
local p = {}


function p.BibRules(frame)
function p.Rules(frame)
-- Define o alvo das regras
-- Define o alvo das regras
local target = frame:getParent().args[1] or frame.args[1]
local target = frame:getParent().args[1] or frame.args[1]
if target == '' or target == nil then
if target == "" or target == nil then
target = mw.uri.decode(frame:callParserFunction('#urlget', 'fullpagename'))
target = mw.uri.decode(frame:callParserFunction("#urlget", "fullpagename"))
end
end
if target == '' or target == nil then
if target == "" or target == nil then
target = mw.title.getCurrentTitle().prefixedText
target = mw.title.getCurrentTitle().prefixedText
end
end
-- Semantic Scribunto foi carregado?
-- Semantic Scribunto foi carregado?
if not mw.smw then
if not mw.smw then
return 'mw.smw module not found'
return "mw.smw module not found"
end
end
-- Define variáveis básicas
-- Define variáveis básicas
local test, info, queryResult, a, b
local info, a, b
local infos = {}
local infos = {}
-- Funções básicas
-- Funções básicas
local function ucfirst(str)
local function ucfirst(str)
return (str:gsub('^%l', string.upper))
return (str:gsub("^%l", string.upper))
end
end
-- Somente realize as análises de existir o campo 245
-- Somente realiza as análises se existir o campo 245
local f245 =
local f245 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'245', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "245", "0", "0", fullpagename = target } }) or
if f245 ~= '' then
""
if f245 ~= "" then
-- Categorias
local categories =
frame:callParserFunction {
name = "#ask:[[" .. target .. "]]",
args = {
"?Category",
format = "plainlist",
link = "none",
headers = "hide",
mainlabel = "-",
outro = "",
sep = "",
valuesep = "",
propsep = "",
prefix = "none"
}
} or ""
-- Record status
-- Record status
local recordStatus =
test = frame:expandTemplate {title = 'Field data string', args = {'000', '5', '1', property = 'Leader', fullpagename = target}} or false
frame:expandTemplate {
if test == 'n' then
title = "Field data string",
a = 'Segundo o Líder, este é um registro <b>novo</b> (não um alterado ou revisado, expandido, excluído, etc.)'
args = { "000", "5", "1", property = "Leader", fullpagename = target }
info = string.format( '* %s.' , a )
} or false
if recordStatus == "n" then
a = "Segundo o Líder, este é um registro <b>novo</b> (não um alterado ou revisado, expandido, excluído, etc.)"
info = string.format("* %s.", a)
table.insert(infos, info)
table.insert(infos, info)
elseif test == 'c' then
elseif recordStatus == "c" then
a = 'Segundo o Líder, este é um registro <b>alterado ou revisado</b> (não um novo, expandido, excluído, etc.)'
a = "Segundo o Líder, este é um registro <b>alterado ou revisado</b> (não um novo, expandido, excluído, etc.)"
info = string.format( '* %s.', a )
info = string.format("* %s.", a)
table.insert(infos, info)
table.insert(infos, info)
elseif test == 'a' or test == 'd' or test == 'p' then
elseif recordStatus == "a" or recordStatus == "d" or recordStatus == "p" then
a = 'Segundo o Líder, este é um registro <b>expandido</b> ou <b>excluído</b> (não novo)'
a = "Segundo o Líder, este é um registro <b>expandido</b> ou <b>excluído</b> (não novo)"
info = string.format( '* %s.', a )
info = string.format("* %s.", a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Type of record
-- Type of record
local typeOfRecord =
test = frame:expandTemplate {title = 'Field data string', args = {'000', '6', '1', property = 'Leader', fullpagename = target}} or false
frame:expandTemplate {
if test == 'a' then
title = "Field data string",
a = 'Segundo o Líder, este registro descreve um <b>material textual</b>'
args = { "000", "6", "1", property = "Leader", fullpagename = target }
info = string.format( '* %s.', a )
} or false
if typeOfRecord == "a" then
a = "Segundo o Líder, este registro descreve um <b>material textual</b>"
info = string.format("* %s.", a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Bibliographic level
-- Bibliographic level
local bibliographicLevel =
test = frame:expandTemplate {title = 'Field data string', args = {'000', '7', '1', property = 'Leader', fullpagename = target}} or false
frame:expandTemplate {
if test == 'm' then
title = "Field data string",
a = 'Segundo o Líder, este registro descreve um <b>item monográfico</b> (não parte de um item, não um item seriado, não uma coleção, etc.)'
args = { "000", "7", "1", property = "Leader", fullpagename = target }
info = string.format( '* %s.', a )
} or false
if bibliographicLevel == "m" then
a =
"Segundo o Líder, este registro descreve um <b>item monográfico</b> (não parte de um item, não um item seriado, não uma coleção, etc.)"
info = string.format("* %s.", a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Encoding level
-- Encoding level
local encodingLevel =
test = frame:expandTemplate {title = 'Field data string', args = {'000', '17', '1', property = 'Leader', fullpagename = target}} or false
frame:expandTemplate {
if test == '1' then
title = "Field data string",
a = 'Segundo o Líder, este registro tem um nível <b>completo</b> de catalogação (mas o material não foi examinado)'
args = { "000", "17", "1", property = "Leader", fullpagename = target }
info = string.format( '* %s.', a )
} or false
if encodingLevel == "1" then
a =
"Segundo o Líder, este registro tem um nível <b>completo</b> de catalogação (mas o material não foi examinado)"
info = string.format("* %s.", a)
table.insert(infos, info)
table.insert(infos, info)
elseif test == '#' then
elseif encodingLevel == "#" then
a =
a = 'Segundo o Líder, este registro tem um nível <b>completo</b> de catalogação (a descrição foi realizada com o material em mãos)'
"Segundo o Líder, este registro tem um nível <b>completo</b> de catalogação (a descrição foi realizada com o material em mãos)"
info = string.format( '* %s.', a )
info = string.format("* %s.", a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Descriptive cataloging form
-- Descriptive cataloging form
local descriptiveCatalogingForm =
test = frame:expandTemplate {title = 'Field data string', args = {'000', '18', '1', property = 'Leader', fullpagename = target}} or false
frame:expandTemplate {
if test == 'a' then
title = "Field data string",
a = 'Segundo o Líder, este registro possui uma catalogação <b>compatível com as regras do AACR 2</b>'
args = { "000", "18", "1", property = "Leader", fullpagename = target }
info = string.format( '* %s.', a )
} or false
if descriptiveCatalogingForm == "a" then
a = "Segundo o Líder, este registro possui uma catalogação <b>compatível com as regras do AACR 2</b>"
info = string.format("* %s.", a)
table.insert(infos, info)
table.insert(infos, info)
else
else
a = 'Segundo o Líder, este registro possui uma catalogação <b>não compatível com as regras da ISBD</b>'
a = "Segundo o Líder, este registro possui uma catalogação <b>não compatível com as regras da ISBD</b>"
info = string.format( '* %s.', a )
info = string.format("* %s.", a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Explica a sintaxe '(Biblioteca)NúmeroDeControle'
-- Explica a sintaxe '(Biblioteca)NúmeroDeControle'
local f001 =
local f001 = frame:expandTemplate {title = 'Field data string', args = {'001', '0', '', property = 'Control field data', fullpagename = target}}
local f003 = frame:expandTemplate {
frame:expandTemplate {
title = 'Field data string',
title = "Field data string",
args = {'003', '0', '', property = 'Control field data', fullpagename = target}
args = { "001", "0", "", property = "Control field data", fullpagename = target }
}
} or ""
local f003 =
a = 'Internamente, este registro é identificado pelo código'
frame:expandTemplate {
b = 'para sistemas externos, o código é'
title = "Field data string",
info = string.format( '* %s "%s"; %s "(%s)%s".', a, f001, b, f003, f001 )
args = { "003", "0", "", property = "Control field data", fullpagename = target }
} or ""
a = "Internamente, este registro é identificado pelo código"
b = "para sistemas externos, o código é"
info = string.format('* %s "%s"; %s "(%s)%s".', a, f001, b, f003, f001)
table.insert(infos, info)
table.insert(infos, info)
-- Campo 005
-- Campo 005
local creationDate =
queryResult = mw.smw.ask('[[' .. target .. ']]|?Creation date#-F[l, d \\d\\e F \\d\\e Y]|headers=hide|mainlabel=-')
mw.smw.ask("[[" .. target .. "]]|?Creation date#-F[l, d \\d\\e F \\d\\e Y]|headers=hide|mainlabel=-") or ""
local creationDate = ''
if type(queryResult) == 'table' then
if type(creationDate) == "table" then
for _, row in pairs(queryResult) do
for _, row in pairs(creationDate) do
for _, data in pairs(row) do
for _, data in pairs(row) do
creationDate = data
creationDate = data
Linha 95: Linha 142:
end
end
end
end
queryResult =
local modificationDate =
mw.smw.ask('[[' .. target .. ']]|?Modification date#-F[l, d \\d\\e F \\d\\e Y]|headers=hide|mainlabel=-')
mw.smw.ask("[[" .. target .. "]]|?Modification date#-F[l, d \\d\\e F \\d\\e Y]|headers=hide|mainlabel=-") or ""
local modificationDate = ''
if type(modificationDate) == "table" then
for _, row in pairs(modificationDate) do
if type(queryResult) == 'table' then
for _, row in pairs(queryResult) do
for _, data in pairs(row) do
for _, data in pairs(row) do
modificationDate = data
modificationDate = data
Linha 105: Linha 151:
end
end
end
end
a = 'O registro foi criado em:'
a = "O registro foi criado em:"
b = 'Sua última transação foi em:'
b = "Sua última transação foi em:"
info = string.format( '* %s %s. %s %s.', a, creationDate, b, modificationDate )
info = string.format("* %s %s. %s %s.", a, creationDate, b, modificationDate)
table.insert(infos, info)
table.insert(infos, info)
-- Campo 008
-- Campo 008
local invalidCode = '<strong class="error">código inválido para o local de publicação</strong>'
local invalidCode = '<strong class="error">código inválido para o local de publicação</strong>'
local pubPlace_tbl = {
local pubPlaceTbl = {
['acb'] = 'Acre',
["acb"] = "Acre",
['alb'] = 'Alagoas',
["alb"] = "Alagoas",
['amb'] = 'Amazonas',
["amb"] = "Amazonas",
['apb'] = 'Amapá',
["apb"] = "Amapá",
['bab'] = 'Bahia',
["bab"] = "Bahia",
['ceb'] = 'Ceará',
["ceb"] = "Ceará",
['dfb'] = 'Distrito Federal',
["dfb"] = "Distrito Federal",
['esb'] = 'Espírito Santo',
["esb"] = "Espírito Santo",
['gob'] = 'Goiás',
["gob"] = "Goiás",
['mab'] = 'Maranhão',
["mab"] = "Maranhão",
['mgb'] = 'Minas Gerais',
["mgb"] = "Minas Gerais",
['msb'] = 'Mato Grosso do Sul',
["msb"] = "Mato Grosso do Sul",
['mtb'] = 'Mato Grosso',
["mtb"] = "Mato Grosso",
['pab'] = 'Pará',
["pab"] = "Pará",
['pbb'] = 'Paraíba',
["pbb"] = "Paraíba",
['peb'] = 'Pernambuco',
["peb"] = "Pernambuco",
['pib'] = 'Piauí',
["pib"] = "Piauí",
['prb'] = 'Paraná',
["prb"] = "Paraná",
['rjb'] = 'Rio de Janeiro',
["rjb"] = "Rio de Janeiro",
['rnb'] = 'Rio Grande do Norte',
["rnb"] = "Rio Grande do Norte",
['rob'] = 'Rondônia',
["rob"] = "Rondônia",
['rrb'] = 'Roraima',
["rrb"] = "Roraima",
['rsb'] = 'Rio Grande do Sul',
["rsb"] = "Rio Grande do Sul",
['scb'] = 'Santa Catarina',
["scb"] = "Santa Catarina",
['seb'] = 'Sergipe',
["seb"] = "Sergipe",
['spb'] = 'São Paulo',
["spb"] = "São Paulo",
['tob'] = 'Tocantins',
["tob"] = "Tocantins",
['bl '] = 'Brasil',
["bl "] = "Brasil",
['xxu'] = 'Estados Unidos',
["xxu"] = "Estados Unidos",
['flu'] = 'Flórida, EUA',
["flu"] = "Flórida, EUA",
['nyu'] = 'Nova York, EUA',
["nyu"] = "Nova York, EUA",
['po '] = 'Portugal',
["po "] = "Portugal",
['xxk'] = 'Reino Unido',
["xxk"] = "Reino Unido",
['fr '] = 'França',
["fr "] = "França",
['sp '] = 'Espanha',
["sp "] = "Espanha",
['gw '] = 'Alemanha',
["gw "] = "Alemanha",
['xx '] = '<strong class="error">não foi identificado um local de publicação no campo 008</strong>',
["xx "] = '<strong class="error">não foi identificado um local de publicação no campo 008.</strong>',
['vp '] = 'há vários locais de publicação',
["vp "] = "há vários locais de publicação",
['esp'] = invalidCode,
["esp"] = invalidCode,
['eua'] = invalidCode,
["eua"] = invalidCode,
['fra'] = invalidCode,
["fra"] = invalidCode,
["pt "] = invalidCode,
['   '] = '<strong class="error">é necessário informar um código de local de publicação, campo 008.</strong>'
["   "] = '<strong class="error">é necessário informar um código de local de publicação, campo 008.</strong>'
}
}
local f008pubPlace =
local f008pubPlace =
frame:expandTemplate {
frame:expandTemplate {
title = 'Field data string',
title = "Field data string",
args = {'008', '15', '3', property = 'Control field data', fullpagename = target}
args = { "008", "15", "3", property = "Control field data", fullpagename = target } or ""
}
}
if string.match(f008pubPlace, '^[A-Z]') then
if string.match(f008pubPlace, "^[A-Z]") then
a = 'O uso de maiúsculas não é permitido no campo 008, local de publicação'
a = "O uso de maiúsculas não é permitido no campo 008, local de publicação"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
elseif pubPlace_tbl[f008pubPlace] then
elseif pubPlaceTbl[f008pubPlace] then
a = 'O item possui a seguinte origem:'
a = "O item possui a seguinte origem:"
info = string.format( '* %s %s', a, tostring( pubPlace_tbl[f008pubPlace] ) )
info = string.format("* %s %s.", a, tostring(pubPlaceTbl[f008pubPlace]))
table.insert(infos, info)
table.insert(infos, info)
else
else
a = 'O item possui a seguinte origem:'
a = "O item possui a seguinte origem:"
info = string.format( '* %s %s', a, f008pubPlace )
info = string.format("* %s %s.", a, f008pubPlace)
table.insert(infos, info)
table.insert(infos, info)
end
end
invalidCode = '<strong class="error">código inválido para o idioma (campo 008 ou subcampo $h do campo 041)</strong>'
invalidCode = '<strong class="error">código inválido para o idioma (campo 008 ou subcampo $h do campo 041).</strong>'
local lang_tbl = {
local langTbl = {
['por'] = 'português',
["por"] = "português",
['eng'] = 'inglês',
["eng"] = "inglês",
['spa'] = 'espanhol',
["spa"] = "espanhol",
['ger'] = 'alemão',
["ger"] = "alemão",
['fre'] = 'francês',
["fre"] = "francês",
['ita'] = 'italiano',
["ita"] = "italiano",
['chi'] = 'chinês',
["chi"] = "chinês",
['esp'] = invalidCode,
["esp"] = invalidCode,
['ing'] = invalidCode,
["ing"] = invalidCode,
['fra'] = invalidCode,
["fra"] = invalidCode,
['pt'] = invalidCode,
["pt"] = invalidCode,
['en'] = invalidCode,
["en"] = invalidCode,
['es'] = invalidCode,
["es"] = invalidCode,
['   '] = '<strong class="error">é necessário informar um código de idioma no campo 008.</strong>'
["   "] = '<strong class="error">é necessário informar um código de idioma no campo 008.</strong>'
}
}
local f008lang =
local f008lang =
frame:expandTemplate {
frame:expandTemplate {
title = 'Field data string',
title = "Field data string",
args = {'008', '35', '3', property = 'Control field data', fullpagename = target}
args = { "008", "35", "3", property = "Control field data", fullpagename = target }
}
} or ""
if string.match(f008lang, '^[A-Z]') then
if string.match(f008lang, "^[A-Z]") then
a = 'O uso de maiúsculas não é permitido no campo 008, idioma'
a = "O uso de maiúsculas não é permitido no campo 008, idioma"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
elseif lang_tbl[f008lang] then
elseif langTbl[f008lang] then
a = 'Majoritariamente, o item se expressa no seguinte idioma:'
a = "Majoritariamente, o item se expressa no seguinte idioma:"
info = string.format( '* %s %s', a, tostring( lang_tbl[f008lang] ) )
info = string.format("* %s %s", a, tostring(langTbl[f008lang]))
else
else
a = 'Majoritariamente, o item se expressa no seguinte idioma:'
a = "Majoritariamente, o item se expressa no seguinte idioma:"
info = string.format( '* %s %s', a, f008lang )
info = string.format("* %s %s", a, f008lang)
end
end
-- Se existe o campo 041, mostra '(traduzido do... )' na mesma linha do idioma presente no 008
-- Se existe o campo 041, mostra '(traduzido do... )' na mesma linha do idioma presente no 008
local f041 =
local f041 = mw.text.trim ( frame:expandTemplate {title = 'Field data string', args = {'041', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "041", "0", "0", fullpagename = target } }) or
if f041 ~= '' then
if f041:sub(1, 1) == '1' then
""
if f041 ~= "" then
local f041h = frame:expandTemplate {title = 'Select', args = {'041', 'h', target}}
f041h = lang_tbl[f041h] or f041h
if f041:sub(1, 1) == "1" then
local f041h = frame:expandTemplate { title = "Select", args = { "041", "h", target } } or ""
info = string.format( '%s (traduzido do %s)', info, f041h )
f041h = langTbl[f041h] or f041h
info = string.format("%s (traduzido do %s).", info, f041h)
end
end
end
end
table.insert(infos, info)
table.insert(infos, info)
-- Testa se existe(m) ISBN(s) inválido(s)
-- Testa se existe(m) ISBN(s) inválido(s)
local f020 =
local f020 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'090', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "020", "0", "0", fullpagename = target } }) or
if f020 ~= '' then
""
local printedIsbn = frame:expandTemplate {title = 'Print ISBN'} or false
if f020 ~= "" then
local printedIsbn = frame:expandTemplate { title = "Print ISBN" } or ""
if string.match(printedIsbn, "error") then
if string.match(printedIsbn, "error") then
a = 'ISBN inválido, por favor, reveja os números informados'
a = "ISBN inválido, por favor, reveja os números informados"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Testa se existe(m) hifen(s) ou x minúsculo no ISBN
-- Testa se existe(m) hifen(s) ou x minúsculo no ISBN
queryResult = mw.smw.ask('[[' .. target .. '#020]]|?Field data#|headers=hide|mainlabel=-')
local f020 = mw.smw.ask("[[" .. target .. "#020]]|?Field data#|headers=hide|mainlabel=-") or ""
if type(queryResult) == 'table' then
if type(f020) == "table" then
for _, row in pairs(queryResult) do
for _, row in pairs(f020) do
for _, data in pairs(row) do
for _, data in pairs(row) do
f020 = mw.text.trim(table.concat(data))
if type(data) == "table" then
f020 = mw.text.trim(table.concat(data))
else
f020 = mw.text.trim(data)
end
end
end
end
end
end
end
if string.match(f020, '-') then
if string.match(f020, "-") then
a = 'O ISBN não pode conter hifens. Apenas números e "X" maiúsculo'
a = 'O ISBN não pode conter hifens. Apenas números e "X" maiúsculo'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
elseif string.match(f020, 'x') then
elseif string.match(f020, "x") then
a = 'O ISBN não pode conter um x minúsculo. Apenas números e "X" maiúsculo'
a = 'O ISBN não pode conter um x minúsculo. Apenas números e "X" maiúsculo'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
elseif string.match(f020, "%(") then
a =
'O campo de ISBN só pode conter números e "X" maiúsculo. Use o subcampo $q para outros dados (sem parênteses)'
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Testa se há indicadores no campo 020
-- Testa se há indicadores no campo 020
if f020:sub(1, 1) ~= '#' then
if f020:sub(1, 1) ~= "#" then
a = 'O primeiro indicador do campo 020 foi preenchido, porém, ele não deve ser preenchido'
a = "O primeiro indicador do campo 020 foi preenchido, porém, ele não deve ser preenchido"
info = string.format( '* <strong class="error">.</strong>', a )
info = string.format('* <strong class="error">.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if f020:sub(2, 2) ~= '#' then
if f020:sub(2, 2) ~= "#" then
a = 'O segundo indicador do campo 020 foi preenchido, porém, ele não deve ser preenchido'
a = "O segundo indicador do campo 020 foi preenchido, porém, ele não deve ser preenchido"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
-- Testa o uso de maiúsculas no campo 041
-- Testa o uso de maiúsculas no campo 041
if f041 ~= '' then
if f041 ~= "" then
if f041:sub(1, 1) == '#' then
if f041:sub(1, 1) == "#" then
a = 'Talvez o primeiro indicador do campo 041 tenha sido esquecido'
a = "Talvez o primeiro indicador do campo 041 tenha sido esquecido"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
local f041a = frame:expandTemplate {title = 'Select', args = {'041', 'a', target}} or false
local f041a = frame:expandTemplate { title = "Select", args = { "041", "a", target } } or ""
if string.match(f041a, '^[A-Z]') then
if string.match(f041a, "^[A-Z]") then
a = 'O uso de maiúsculas não é permitido nos códigos de idioma (campo 041)'
a = "O uso de maiúsculas não é permitido nos códigos de idioma (campo 041)"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
Linha 272: Linha 332:
-- queryResult = mw.smw.ask( '[[' .. target .. '#100||' .. target .. '#110||' .. target .. '#111||' .. target .. '#130]]' )
-- queryResult = mw.smw.ask( '[[' .. target .. '#100||' .. target .. '#110||' .. target .. '#111||' .. target .. '#130]]' )
local accessPointPresence =
local accessPointPresence =
frame:callParserFunction {
frame:callParserFunction {
name = '#ask:[[' .. target .. '#100||' .. target .. '#110||' .. target .. '#111||' .. target .. '#130]]',
name = "#ask:[[" .. target .. "#100||" .. target .. "#110||" .. target .. "#111||" .. target .. "#130]]",
args = {'?Field data', format = 'count', mainlabel = '-'}
args = { "?Field data", format = "count", mainlabel = "-" }
} or 0
} or 0
accessPointPresence = tonumber( accessPointPresence )
accessPointPresence = tonumber(accessPointPresence) or 0
-- Testa se há subcampo $b e se há espaço no subcampo $c do campo 090
-- Testa se há subcampo $b e se há espaço no subcampo $c do campo 090
local f090 =
local f090 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'090', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "090", "0", "0", fullpagename = target } }) or
if f090 ~= '' then
""
local f090b = frame:expandTemplate {title = 'Select', args = {'090', 'b', target}} or ''
if f090b == '' then
if f090 ~= "" then
if string.match(f090, ",") then
a = 'Está faltando o subcampo $b do campo 090 (notação de Cutter)'
a = "Normalmente não há vírgula no campo 090, reveja"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
local f090b = frame:expandTemplate { title = "Select", args = { "090", "b", target } } or ""
if f090b == "" then
a = "Está faltando o subcampo $b do campo 090 (notação de Cutter)"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Testa se não foi esquecida a letra do tíulo na notação de Cutter, caso haja um ponto de acesso 1XX
-- Testa se não foi esquecida a letra do tíulo na notação de Cutter, caso haja um ponto de acesso 1XX
if accessPointPresence >= 1 and string.match(f090b, '[0-9]$') then
if accessPointPresence >= 1 and string.match(f090b, "[0-9]$") then
a = 'Falta a letra do título na notação de Cutter'
a = "Falta a letra do título na notação de Cutter"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
local f090c = frame:expandTemplate {title = 'Select', args = {'090', 'c', target}} or ''
local f090c = frame:expandTemplate { title = "Select", args = { "090", "c", target } } or ""
if string.match(f090c, '%sed') then
if string.match(f090c, "%sed") then
a = 'Nossa política de catalogação proíbe espaços na indicação de edição no número de chamada (090 $c)'
a = "Nossa política de catalogação proíbe espaços na indicação de edição no número de chamada (090 $c)"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
-- Testa (conta) se existe mais de um ponto de acesso principal
-- Testa (conta) se existe mais de um ponto de acesso principal
local f100existance = frame:expandTemplate {title = 'Exist', args = {'100', target}}
local f100existance = frame:expandTemplate { title = "Exist", args = { "100", target } } or ""
if accessPointPresence > 1 or f100existance == 'multiple' then
if accessPointPresence > 1 or f100existance == "multiple" then
a = 'Foi registrado <b>mais de um ponto de acesso principal</b>. Isso não é permitido'
a = "Foi registrado <b>mais de um ponto de acesso principal</b>. Isso não é permitido"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if f100existance ~= '' then
if f100existance ~= "" then
local f100 =
local f100 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'100', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(
info = 'O ponto de acesso principal foi dado a uma <b>pessoa</b>'
frame:expandTemplate { title = "Field data string", args = { "100", "0", "0", fullpagename = target } }
if f100:sub(1, 1) == '0' then
) or ""
a = 'e a entrada começa pelo seu <b>primeiro nome</b>'
info = string.format( '* %s %s.', info, a )
info = "O ponto de acesso principal foi dado a uma <b>pessoa</b>"
if f100:sub(1, 1) == "0" then
a = 'e a entrada começa pelo seu <strong class="error">primeiro nome</strong>'
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
table.insert(infos, info)
elseif f100:sub(1, 1) == '1' then
elseif f100:sub(1, 1) == "1" then
a = 'e a entrada começa pelo seu <b>sobrenome</b>'
a = "e a entrada começa pelo seu <b>sobrenome</b>"
info = string.format( '* %s %s.', info, a )
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
table.insert(infos, info)
elseif f100:sub(1, 1) == '3' then
elseif f100:sub(1, 1) == "3" then
a = 'e a entrada começa pelo seu <b>nome de família</b>'
a = "e a entrada começa pelo seu <b>nome de família</b>"
info = string.format( '* %s %s.', info, a )
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
table.insert(infos, info)
elseif f100:sub(1, 1) == '#' then
elseif f100:sub(1, 1) == "#" then
a = 'o primeiro indicador não foi preenchido'
a = "o primeiro indicador não foi preenchido"
info = string.format( '* %s, porém, <strong class="error">%s.</strong>', info, a )
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
table.insert(infos, info)
else
else
a = 'o primeiro indicador foi preenchido incorretamente'
a = "o primeiro indicador foi preenchido incorretamente"
info = string.format( '* %s, porém, <strong class="error">%s.</strong>', info, a )
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if f100:sub(2, 2) ~= '#' then
if f100:sub(2, 2) ~= "#" then
a = 'O segundo indicador do campo 100 foi preenchido, porém, ele não deve ser preenchido'
a = "O segundo indicador do campo 100 foi preenchido, porém, ele não deve ser preenchido"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Testa se existe ', ' no subcampo $a (Nome, Sobrenome)
-- Testa se existe ', ' no subcampo $a (Nome, Sobrenome)
local f100a = frame:expandTemplate {title = 'Select', args = {'100', 'a', target}}
local f100a = frame:expandTemplate { title = "Select", args = { "100", "a", target } } or ""
if f100a ~= '' then
if f100a ~= "" then
if not string.match(f100a, '.-,.') then
if not string.match(f100a, ".-,.") then
a = 'Em pontos de acesso, o nome pessoal deve ser invertido (Nome, Sobrenome). Verifique o campo 100'
a = "Em pontos de acesso, o nome pessoal deve ser invertido (Nome, Sobrenome). Verifique o campo 100"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if string.match(f100a, '[a-zÀ-ü],[A-ZÀ-ü]') then
if string.match(f100a, "[a-zÀ-ü],[A-ZÀ-ü]") then
a = 'Falta espaço após a vírgula. Verifique o campo 100'
a = "Falta espaço após a vírgula. Verifique o campo 100"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
if string.match(f100a, "%d%d%d%d") then
a = "No campo 100, o ano deve ser informado no subcampo $d"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
local f100q = frame:expandTemplate {title = 'Select', args = {'100', 'q', target}}
local f100q = frame:expandTemplate { title = "Select", args = { "100", "q", target } } or ""
if f100q ~= '' then
if f100q ~= "" then
if not string.match(f100q, '^%(') then
if not string.match(f100q, "^%(") then
a = 'O subcampo $q do campo 100 necessita parênteses'
a = "O subcampo $q do campo 100 necessita parênteses"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
local f100d = frame:expandTemplate {title = 'Select', args = {'100', 'd', target}}
local f100d = frame:expandTemplate { title = "Select", args = { "100", "d", target } } or ""
if f100d ~= '' then
if f100d ~= "" then
if string.match(f100, '%$d %d%d%d%d$') then
if string.match(f100, "%$d %d%d%d%d$") then
a = 'O subcampo $d do campo 100 necessita hífen'
a = "O subcampo $d do campo 100 necessita hífen"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
end
end
-- A seguir, testa se existe um ponto de acesso principal 110
-- Testa se existe um ponto de acesso principal 110
local f110 =
local f110 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'110', '0', '0', fullpagename = target}} or '' )
if f110 ~= '' then
mw.text.trim(
frame:expandTemplate { title = "Field data string", args = { "110", "0", "0", fullpagename = target } } or ""
info = 'O ponto de acesso principal foi dado a uma <b>entidade coletiva</b>'
if f110:sub(1, 1) == '0' then
)
if f110 ~= "" then
a = 'e a entrada começa por um <b>nome invertido</b>'
info = string.format( '* %s %s.', info, a )
info = "O ponto de acesso principal foi dado a uma <b>entidade coletiva</b>"
if f110:sub(1, 1) == "0" then
a = "e a entrada começa por um <b>nome invertido</b>"
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
table.insert(infos, info)
elseif f110:sub(1, 1) == '1' then
elseif f110:sub(1, 1) == "1" then
a = 'e a entrada começa por um <b>nome de jurisdição</b>'
a = "e a entrada começa por um <b>nome de jurisdição</b>"
info = string.format( '* %s %s.', info, a )
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
table.insert(infos, info)
elseif f110:sub(1, 1) == '2' then
elseif f110:sub(1, 1) == "2" then
a = 'e a entrada começa por um <b>nome em ordem direta</b>'
a = "e a entrada começa por um <b>nome em ordem direta</b>"
info = string.format( '* %s %s.', info, a )
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
table.insert(infos, info)
elseif f110:sub(1, 1) == '#' then
elseif f110:sub(1, 1) == "#" then
a = 'o primeiro indicador não foi preenchido'
a = "o primeiro indicador não foi preenchido"
info = string.format( '* %s, porém, <strong class="error">%s.</strong>', info, a )
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
table.insert(infos, info)
else
else
a = 'o primeiro indicador foi preenchido incorretamente'
a = "o primeiro indicador foi preenchido incorretamente"
info = string.format( '* %s, porém, <strong class="error">%s.</strong>', info, a )
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if f110:sub(2, 2) ~= '#' then
if f110:sub(2, 2) ~= "#" then
a = 'O segundo indicador do campo 110 foi preenchido, porém, ele não deve ser preenchido'
a = "O segundo indicador do campo 110 foi preenchido, porém, ele não deve ser preenchido"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
-- A seguir, testa se existe um ponto de acesso principal 111
-- Testa se existe um ponto de acesso principal 111
local f111 =
local f111 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'111', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "111", "0", "0", fullpagename = target } }) or
if f111 ~= '' then
""
info = 'O ponto de acesso principal foi dado a um <b>evento</b>'
if f111:sub(1, 1) == '0' then
if f111 ~= "" then
a = 'e a entrada começa por um <b>nome invertido</b>'
info = "O ponto de acesso principal foi dado a um <b>evento</b>"
if f111:sub(1, 1) == "0" then
info = string.format ( '* %s %s.' , info, a )
a = "e a entrada começa por um <b>nome invertido</b>"
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
table.insert(infos, info)
elseif f111:sub(1, 1) == '1' then
elseif f111:sub(1, 1) == "1" then
a = 'e a entrada começa por um <b>nome de jurisdição</b>'
a = "e a entrada começa por um <b>nome de jurisdição</b>"
info = string.format ( '* %s %s.' , info, a )
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
table.insert(infos, info)
elseif f111:sub(1, 1) == '2' then
elseif f111:sub(1, 1) == "2" then
a = 'e a entrada começa por um <b>nome em ordem direta</b>'
a = "e a entrada começa por um <b>nome em ordem direta</b>"
info = string.format ( '* %s %s.' , info, a )
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
table.insert(infos, info)
elseif f111:sub(1, 1) == '#' then
elseif f111:sub(1, 1) == "#" then
a = 'o primeiro indicador não foi preenchido'
a = "o primeiro indicador não foi preenchido"
info = string.format ( '* %s, porém, <strong class="error">%s.</strong>', info, a )
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
table.insert(infos, info)
else
else
a = 'o primeiro indicador foi preenchido incorretamente'
a = "o primeiro indicador foi preenchido incorretamente"
info = string.format ( '* %s, porém, <strong class="error">%s.</strong>', info, a )
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if f111:sub(2, 2) ~= '#' then
if f111:sub(2, 2) ~= "#" then
a = 'O segundo indicador do campo 111 foi preenchido, porém, ele não deve ser preenchido'
a = "O segundo indicador do campo 111 foi preenchido, porém, ele não deve ser preenchido"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
-- A seguir, testa se existe um ponto de acesso principal 130
-- Testa se existe um ponto de acesso principal 130
local f130 =
local f130 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'130', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "130", "0", "0", fullpagename = target } }) or
if f130 ~= '' then
""
info = 'O ponto de acesso principal foi dado a um <b>título uniforme</b>'
if f130:sub(1, 1) == '#' then
if f130 ~= "" then
info = "O ponto de acesso principal foi dado a um <b>título uniforme</b>"
a = 'o primeiro indicador não foi preenchido'
if f130:sub(1, 1) == "#" then
info = string.format( '* %s, porém, <strong class="error">%s.</strong>', info, a )
a = "o primeiro indicador não foi preenchido"
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
table.insert(infos, info)
else
else
local f130a = frame:expandTemplate {title = 'Select', args = {'130', 'a', target}}
local f130a = frame:expandTemplate { title = "Select", args = { "130", "a", target } } or ""
a = ucfirst( f130a:sub( f130:sub(1, 1) ) )
a = ucfirst(f130a:sub(tonumber(f130:sub(1, 1)) or 0))
info = string.format( '* %s, ele será alfabetado como "<b>%s</b>".', info, a )
info = string.format('* %s, ele será alfabetado como "<b>%s</b>".', info, a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if f130:sub(2, 2) ~= '#' then
if f130:sub(2, 2) ~= "#" then
a = 'O segundo indicador do campo 130 foi preenchido, porém, ele não deve ser preenchido'
a = "O segundo indicador do campo 130 foi preenchido, porém, ele não deve ser preenchido"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
-- A seguir, testa se existe um ponto de acesso principal. Se existir, testa se o primeiro indicador do campo 245 condiz com essa realidade
-- Testa se existe um ponto de acesso principal. Se existir, testa se o primeiro indicador do campo 245 condiz com essa realidade
local f245ind1 = f245:sub(1, 1) or ''
local f245ind1 = f245:sub(1, 1) or ""
if accessPointPresence == 0 then
if accessPointPresence == 0 then
if f245ind1 == '1' then
if f245ind1 == "1" then
a =
a = 'Não houve um ponto de acesso principal nos campos 1XX, desse modo, o primeiro indicador do campo 245 deve ter o valor "0"'
'Não houve um ponto de acesso principal nos campos 1XX, desse modo, o primeiro indicador do campo 245 deve ter o valor "0"'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
else
else
if f245ind1 == '0' then
if f245ind1 == "0" then
a =
a = 'Houve um ponto de acesso principal nos campos 1XX, desse modo, o primeiro indicador do campo 245 deve ter o valor "1"'
'Houve um ponto de acesso principal nos campos 1XX, desse modo, o primeiro indicador do campo 245 deve ter o valor "1"'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
-- a seguir, testa a relação entre a presença do campo 240 em relação a presença do campo 041 e a presença do subcampo $l
-- Testa a relação entre a presença do campo 240 em relação a presença do campo 041 e a presença do subcampo $l
local f240 =
local f240 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'240', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "240", "0", "0", fullpagename = target } }) or
if f240 ~= '' then
if f041 == '' then
""
if f240 ~= "" then
a = 'Normalmente, quando há um campo 240, deve haver um campo 041'
if f041 == "" then
info = string.format( '* <strong class="error">%s.</strong>' , a )
a = "Normalmente, quando há um campo 240, deve haver um campo 041"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
local f240l = frame:expandTemplate {title = 'Select', args = {'240', 'l', target}} or ''
local f240l = frame:expandTemplate { title = "Select", args = { "240", "l", target } } or ""
if f240l ~= '' then
if f240l ~= "" then
if string.match(f240l, '^[a-zA-Z][a-zA-Z][a-zA-Z]$') then
if string.match(f240l, "^[a-zA-Z][a-zA-Z][a-zA-Z]$") then
a = 'É necessário informar o idioma por extenso ($l do campo 240) antecedido por um ponto no subcampo $a'
a = "É necessário informar o idioma por extenso ($l do campo 240) antecedido por um ponto no subcampo $a"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if not string.match(f240, '%.%s?%$l') then
if not string.match(f240, "%.%s?%$l") then
a = 'O subcampo $l do campo 240 necessita ser antecedido por um ponto no subcampo anterior'
a = "O subcampo $l do campo 240 necessita ser antecedido por um ponto no subcampo anterior"
info = string.format ( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
else
else
a = 'Normalmente, quando há um campo 240 $a, deve haver também um 240 $l. 240 $l não foi detectado'
a = "Normalmente, quando há um campo 240 $a, deve haver também um 240 $l. 240 $l não foi detectado"
info = string.format ( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if f240:sub(1, 1) == '0' then
if f240:sub(1, 1) == "0" then
a = 'O título uniforme não será exibido'
a = "O título uniforme não será exibido"
info = string.format( '* %s.', a )
info = string.format("* %s.", a)
table.insert(infos, info)
table.insert(infos, info)
elseif f240:sub(1, 1) == '1' then
elseif f240:sub(1, 1) == "1" then
a = 'O título uniforme será exibido'
a = "O título uniforme será exibido"
info = string.format( '* %s.', a )
info = string.format("* %s.", a)
table.insert(infos, info)
table.insert(infos, info)
elseif f240:sub(1, 1) == '#' then
elseif f240:sub(1, 1) == "#" then
a = 'Está faltando o primeiro indicador do campo 240'
a = "Está faltando o primeiro indicador do campo 240"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
else
else
a = 'O primeiro indicador do campo 240 foi preenchido incorretamente'
a = "O primeiro indicador do campo 240 foi preenchido incorretamente"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if f240:sub(2, 2) == '#' then
if f240:sub(2, 2) == "#" then
a = 'Está faltando o segundo indicador do campo 240'
a = "Está faltando o segundo indicador do campo 240"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
else
else
local f240a =
local f240a = string.gsub( mw.text.trim ( frame:expandTemplate {title = 'Select', args = {'240', 'a', target}} ), '[/:=.]$', '' )
string.gsub(mw.text.trim(frame:expandTemplate { title = "Select", args = { "240", "a", target } }), "[/:=.]$",
a = 'O título uniforme será alfabetado como'
b = ucfirst( f240a:sub( f240:sub(2, 2) + 1 ) )
"") or ""
info = string.format( '* %s "<b>%s</b>".', a, b )
a = "O título uniforme será alfabetado como"
b = ucfirst(f240a:sub(f240:sub(2, 2) + 1))
info = string.format('* %s "<b>%s</b>".', a, b)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
-- A seguir, informa se o título receberá o ponto de acesso principal ou secundário
-- Informa se o título receberá o ponto de acesso principal ou secundário
if f245ind1 == '0' then
if f245ind1 == "0" then
a = 'O título recebeu o <b>ponto de acesso principal</b>'
a = "O título recebeu o <b>ponto de acesso principal</b>"
info = string.format( '* %s.', a )
info = string.format("* %s.", a)
table.insert(infos, info)
table.insert(infos, info)
elseif f245ind1 == '1' then
elseif f245ind1 == "1" then
a = 'O título recebeu um <b>ponto de acesso secundário</b>'
a = "O título recebeu um <b>ponto de acesso secundário</b>"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* %s.', a)
table.insert(infos, info)
table.insert(infos, info)
elseif f245ind1 == '#' then
elseif f245ind1 == "#" then
a = 'Está faltando o primeiro indicador do campo 245'
a = "Está faltando o primeiro indicador do campo 245"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
else
else
a = 'O primeiro indicador do campo 245 foi preenchido incorretamente'
a = "O primeiro indicador do campo 245 foi preenchido incorretamente"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- A seguir, testa se foi preenchido o segundo indicador do 245, se foi, mostra como será a alfabetação, removendo a pontuação final do subcampo $a ('/',':','='' ou '.')
-- Testa se foi preenchido o segundo indicador do 245, se foi, mostra como será a alfabetação, removendo a pontuação final do subcampo $a ('/',':','='' ou '.')
local f245a = frame:expandTemplate {title = 'Select', args = {'245', 'a', target}}
local f245a = frame:expandTemplate { title = "Select", args = { "245", "a", target } } or ""
if f245:sub(2, 2) == '#' then
if f245:sub(2, 2) == "#" then
a = 'Está faltando o segundo indicador do campo 245'
a = "Está faltando o segundo indicador do campo 245"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
else
else
a = 'O título será alfabetado como'
a = "O título será alfabetado como"
b = ucfirst( f245a:sub( f245:sub(2, 2) + 1 ) )
b = ucfirst(f245a:sub(f245:sub(2, 2) + 1))
b = string.gsub( b, '%s?[/:=.]$', '' )
b = string.gsub(b, "%s?[/:=.]$", "")
info = string.format( '* %s "<b>%s</b>".', a, b )
info = string.format('* %s "<b>%s</b>".', a, b)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- A seguir, testa se existe espaço antes da pontuação "/", ":" e "=" no final do subcampo $a e $b
-- Testa se existe espaço antes da pontuação "/", ":" e "=" no final do subcampo $a e $b
if string.match( f245a, '[a-zA-Z][/:=]$' ) then
if string.match(f245a, "[a-zA-Z][/:=]$") then
a = 'Inclua um espaço antes da pontuação (ao final do subcampo $a do campo 245)'
a = "Inclua um espaço antes da pontuação (ao final do subcampo $a do campo 245)"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- A seguir, testa se o subcampo $b começa com letras maiúsculas
-- Testa se o subcampo $b começa com letras maiúsculas
local f245b = frame:expandTemplate {title = 'Select', args = {'245', 'b', target}} or ''
local f245b = frame:expandTemplate { title = "Select", args = { "245", "b", target } } or ""
if f245b ~= '' then
if f245b ~= "" then
if string.match( f245b, '[a-zA-Z][/:=]$' ) then
if string.match(f245b, "[a-zA-Z][/:=]$") then
a = 'Inclua um espaço antes da pontuação (ao final do subcampo $b do campo 245'
a = "Inclua um espaço antes da pontuação (ao final do subcampo $b do campo 245"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if string.match( f245b, '^[A-Z]' ) then
if string.match(f245b, "^[A-Z]") then
a = 'Normalmente, o início de um subtítulo (245 $b) começa com letras minúsculas'
a = "Normalmente, o início de um subtítulo (245 $b) começa com letras minúsculas"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Testa se existe mais de um subcampo $b no 245
-- Testa se existe mais de um subcampo $b no 245
if string.match( f245, '%$b.*%$b' ) then
if string.match(f245, "%$b.*%$b") then
a = 'Há mais de um subcampo $b no campo 245. O subcampo $b não é repetível'
a = "Há mais de um subcampo $b no campo 245. O subcampo $b não é repetível"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
-- A seguir, testa se o subcampo $c está presente
-- Testa se o subcampo $c está presente
local f245c = frame:expandTemplate {title = 'Select', args = {'245', 'c', target}} or ''
local f245c = frame:expandTemplate { title = "Select", args = { "245", "c", target } } or ""
if f245c ~= '' then
if f245c ~= "" then
-- Testa se existe espaço antes do ponto e vírgula na indicação de responsabilidade, subcampo $c do 245
-- Testa se existe espaço antes do ponto e vírgula na indicação de responsabilidade, subcampo $c do 245
if string.match( f245c, '[a-zA-Z.];' ) then
if string.match(f245c, "[a-zA-Z.];") then
a = 'Inclua um espaço antes do ponto e vírgula (subcampo $c do campo 245)'
a = "Inclua um espaço antes do ponto e vírgula (subcampo $c do campo 245)"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Testa se existe "/" antes do subcampo $c do campo 245
-- Testa se existe "/" antes do subcampo $c do campo 245
if string.match( f245, '[a-zA-Z]%s?%$c' ) then
if string.match(f245, "[a-zA-Z]%s?%$c") then
a = 'É necessária a pontuação que precede a indicação de responsabilidade (" / ") no campo 245'
a = 'É necessária a pontuação que precede a indicação de responsabilidade (" / ") no campo 245'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Testa se há ": $c"
-- Testa se há ": $c"
if string.match( f245, ':%s?%$c' ) then
if string.match(f245, ":%s?%$c") then
a =
a = 'Ou o subtítulo foi colocado no subcampo $c, ou a pontuação que precede a indicação de responsabilidade (" / ") não foi informada corretamente (campo 245).'
'Ou o subtítulo foi colocado no subcampo $c, ou a pontuação que precede a indicação de responsabilidade (" / ") não foi informada corretamente (campo 245).'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Testa se o subcampo $c termina em "-"
-- Testa se o subcampo $c termina em "-"
if string.match( f245, '%-$' ) then
if string.match(f245, "%-$") then
a = 'Nunca inclua hifens de separação de áreas do AACR2 em registros MARC 21. Reveja a pontuação (campo 245)'
a = "Nunca inclua hifens de separação de áreas do AACR2 em registros MARC 21. Reveja a pontuação (campo 245)"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Testa se existe mais de um subcampo $c no 245
-- Testa se existe mais de um subcampo $c no 245
if string.match( f245, '%$c.*%$c' ) then
if string.match(f245, "%$c.*%$c") then
a = 'Há mais de um subcampo $c no campo 245. O subcampo $c não é repetível'
a = "Há mais de um subcampo $c no campo 245. O subcampo $c não é repetível"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Testa se existe mais de 3 vírgulas no campo 245 $c
-- Testa se existe mais de 3 vírgulas no campo 245 $c
if string.match( f245c, '[A-Za-zÀ-ü ]+,[A-Za-zÀ-ü ]+,[A-Za-zÀ-ü ]+,' ) then
if string.match(f245c, "[A-Za-zÀ-ü ]+,[A-Za-zÀ-ü ]+,[A-Za-zÀ-ü ]+,") then
a = 'Parece haver mais de 3 pessoas na indicação de responsabilidade (245 $c), use " ... [et al.]"'
a = 'Parece haver mais de 3 pessoas na indicação de responsabilidade (245 $c), use " ... [et al.]"'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Testa se existe a sintaxe "*...[et. "
-- Testa se existe a sintaxe "*...[et. "
if string.match( f245c, '[a-zA-ZÀ-ü]%.%.%.%[et.?%s' ) then
if string.match(f245c, "[a-zA-ZÀ-ü]%.%.%.%[et.?%s") then
a = 'No campo 245, o espaçamento correto é " ... [et al.]"'
a = 'No campo 245, o espaçamento correto é " ... [et al.]"'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
else
else
a = 'Está faltando o subcampo $c do campo 245'
a = "Está faltando o subcampo $c do campo 245"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Testa se existe espaço antes de "ed." (subcampo $a do 250)
-- Testa se existe espaço antes de "ed." (subcampo $a do 250)
local f250 =
local f250 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'250', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "250", "0", "0", fullpagename = target } }) or
if f250 ~= '' then
""
local f250a = frame:expandTemplate {title = 'Select', args = {'250', 'a', target}} or ''
if string.match( f250a, '%d%.?ed%.' ) then
if f250 ~= "" then
local f250a = frame:expandTemplate { title = "Select", args = { "250", "a", target } } or ""
if string.match(f250a, "%d%.?ed%.") then
a = 'Inclua um espaço antes da indicação "ed." (subcampo $a do campo 250)'
a = 'Inclua um espaço antes da indicação "ed." (subcampo $a do campo 250)'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
if string.match(f250a, "%-$") then
a = "Nunca inclua hifens de separação de áreas do AACR2 em registros MARC 21. Reveja a pontuação (campo 250)"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
-- Testa se existe 260, se existir, verifica a pontuação final dos subcampos $a, $b e $c do campo 260
-- Testa se existe 260, se existir, verifica a pontuação final dos subcampos $a, $b e $c do campo 260
local f260 =
local f260 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'260', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "260", "0", "0", fullpagename = target } }) or
if f260 ~= '' then
""
local f260a = frame:expandTemplate {title = 'Select', args = {'260', 'a', target}} or ''
if f260a ~= '' then
if f260 ~= "" then
local f260a = frame:expandTemplate { title = "Select", args = { "260", "a", target } } or ""
if string.match( f260a, '[a-zA-ZÀ-ü%],]%s?$' ) then
if f260a ~= "" then
if string.match(f260a, "[a-zA-ZÀ-ü%],]%s?$") then
a = 'Normalmente, o final do subcampo $a do campo 260 requer a seguinte pontuação " : "'
a = 'Normalmente, o final do subcampo $a do campo 260 requer a seguinte pontuação " : "'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
else
else
if string.match(categories, "Livro") then
a = 'Está faltando o subcampo $a do campo 260'
a = "Está faltando o subcampo $a do campo 260"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
end
if string.match(f260a, "[a-zA-ZÀ-ü%]]:") then
a =
'Normalmente, o final do subcampo $a do campo 260 requer a seguinte pontuação " : " (perceba o espaço antes da pontuação)'
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
local f260b = frame:expandTemplate {title = 'Select', args = {'260', 'b', target}} or ''
local f260b = frame:expandTemplate { title = "Select", args = { "260", "b", target } } or ""
if f260b ~= '' then
if f260b ~= "" then
if string.match( f260b, '[a-zA-Z.]$' ) then
if string.match(f260b, "[a-zA-Z.]$") then
a =
a = 'Normalmente, o final do subcampo $b do campo 260 requer uma das seguintes pontuações ", " ou " : ". Reveja a pontuação'
'Normalmente, o final do subcampo $b do campo 260 requer uma das seguintes pontuações ", " ou " : ". Reveja a pontuação'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
else
else
if string.match(categories, "Livro") then
a = 'Está faltando o subcampo $b do campo 260'
a = "Está faltando o subcampo $b do campo 260"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
local f260c = frame:expandTemplate {title = 'Select', args = {'260', 'c', target}} or ''
local f260c = frame:expandTemplate { title = "Select", args = { "260", "c", target } } or ""
if f260c ~= '' then
if f260c ~= "" then
-- Testa se o subcampo $c é precedido ou não por ","
-- Testa se o subcampo $c é precedido ou não por ","
if string.match( f260, '[a-zA-ZÀ-ü%]][;:]%s?%$c' ) then
if string.match(f260, "[a-zA-ZÀ-ü%]][;:]%s?%$c") then
a = 'O ano de publicação deve sempre ser precedido de uma vírgula. Reveja a pontuação (campo 260)'
a = "O ano de publicação deve sempre ser precedido de uma vírgula. Reveja a pontuação (campo 260)"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if string.match( f260c, '[a-zA-ZÀ-ü0-9%]]$' ) then
if string.match(f260c, "[a-zA-ZÀ-ü0-9%]]$") then
a = 'Nossa política de catalogação define que o subcampo $c do campo 260 deve terminar com um ponto'
a = "Nossa política de catalogação define que o subcampo $c do campo 260 deve terminar com um ponto"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
else
else
a = 'Está faltando o subcampo $c do campo 260'
a = "Está faltando o subcampo $c do campo 260"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
-- Testa se existe espaço entre o número e a indicaçação de extensão do texto
-- Testa se existe espaço entre o número e a indicaçação de extensão do texto
local f300 =
local f300 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'300', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "300", "0", "0", fullpagename = target } }) or
if f300 ~= '' then
""
local f300a = frame:expandTemplate {title = 'Select', args = {'300', 'a', target}} or ''
if f300a ~= '' then
if f300 ~= "" then
local f300a = frame:expandTemplate { title = "Select", args = { "300", "a", target } } or ""
if string.match( f300a, '%d[a-z]%.' ) then
if f300a ~= "" then
if string.match(f300a, "%d[a-z]%.") then
a = 'Inclua um espaço entre o número e a indicação "p.", "f." ou "v." (subcampo $a do campo 300)'
a = 'Inclua um espaço entre o número e a indicação "p.", "f." ou "v." (subcampo $a do campo 300)'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Testa se existe espaço entre "p." e ";"
-- Testa se existe espaço entre "p." e ";"
if string.match( f300a, '%.[:;]' ) then
if string.match(f300a, "%.[:;]") then
a = 'Inclua um espaço entre a indicação "p.", "f." ou "v." e a pontuação final (subcampo $a do campo 300)'
a = 'Inclua um espaço entre a indicação "p.", "f." ou "v." e a pontuação final (subcampo $a do campo 300)'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Testa se existe "il." no subcampo $a (deve estar no subcampo $b)
-- Testa se existe "il." no subcampo $a (deve estar no subcampo $b)
if string.match( f300a, 'il%.' ) then
if string.match(f300a, "il%.") then
a = 'Ilustrações e outros detalhes físicos devem ir no subcampo $b do campo 300, antecedidos de " : "'
a = 'Ilustrações e outros detalhes físicos devem ir no subcampo $b do campo 300, antecedidos de " : "'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
local f300b = frame:expandTemplate {title = 'Select', args = {'300', 'b', target}} or ''
local f300b = frame:expandTemplate { title = "Select", args = { "300", "b", target } } or ""
if f300b ~= '' then
if f300b ~= "" then
-- Testa se existe ".;" no subcampo $b do campo 300
-- Testa se existe ".;" no subcampo $b do campo 300
if string.match( f300b, '%.;' ) then
if string.match(f300b, "%.;") then
a = 'Inclua um espaço entre o ponto e o ponto e vírgula (campo 300, subcampo $b)'
a = "Inclua um espaço entre o ponto e o ponto e vírgula (campo 300, subcampo $b)"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
if string.match(f300b, "il,") then
a = "Falta um ponto na abreviatura para ilustrações (il.)"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
if string.match(f300b, "il%.?, col") then
a = "'Ilustrações coloridas' (il. color.) é uma expressão só, remova a vírgula"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
-- Testa se o subcampo $b contém "il. ; color" ou "il. ; p&b"
if string.match(f300b, "il%. ?; color") then
a = "'Ilustrações coloridas' (il. color.) é uma expressão só, remova o ponto e vírgula da expressão"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
if string.match(f300b, "il%. ?; p&b") then
a = "'Ilustrações pretas e brancas' (il. p&b) é uma expressão só, remova o ponto e vírgula da expressão"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
-- Testa se os itens do subcampo $b estão separados por ponto e vírgula
if string.match(f300b, "il%. ?; gráf") then
a = "No campo 300, $b, os itens devem ser separados por vírgulas (il., gráfs.)"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if string.match( f300b, 'il,' ) then
-- Testa se o subcampo $b termina em ":"
if not string.match(f300, ":%s%$b") then
a = 'Falta um ponto na abreviatura para ilustrações (il.)'
a = 'A pontuação que precede o subcampo $b, no campo 300, deve ser sempre " : "'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
local f300c = frame:expandTemplate {title = 'Select', args = {'300', 'c', target}} or ''
local f300c = frame:expandTemplate { title = "Select", args = { "300", "c", target } } or ""
if f300c ~= '' then
if f300c ~= "" then
-- Testa se a sintaxe das dimensões está correta
-- Testa se a sintaxe das dimensões está correta
if string.match( f300c, '%d[a-z]' ) then
if string.match(f300c, "%d[a-z]") then
a =
a = 'Atenção, a sintaxe correta para a dimensão é: "NN cm" ou, menos frequentemente, "NN x NN cm" (subcampo $c do campo 300)'
'Atenção, a sintaxe correta para a dimensão é: "NN cm" ou, menos frequentemente, "NN x NN cm" (subcampo $c do campo 300)'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
else
else
if string.match(categories, "Livro") then
a = 'Não foi detectado um subcampo $c no campo 300'
a = "Está faltando o subcampo $c do campo 300"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
-- Testa se a pontuação antes da dimensão é ".", "," ou ":"
-- Testa se a pontuação antes da dimensão é ".", "," ou ":"
if string.match( f300, '[.,:]%s?%$c' ) then
if string.match(f300, "[.,:]%s?%$c") then
a = 'A pontuação que precede a dimensão (300 $c) deve ser " ; "'
a = 'A pontuação que precede a dimensão (300 $c) deve ser " ; "'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Testa se o subcampo $c termina em "-"
-- Testa se o subcampo $c termina em "-"
if string.match( f300, '%-$' ) then
if string.match(f300, "%-$") then
a = 'Nunca inclua hifens de separação de áreas do AACR2 em registros MARC 21. Reveja a pontuação (campo 300)'
a = "Nunca inclua hifens de separação de áreas do AACR2 em registros MARC 21. Reveja a pontuação (campo 300)"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
local f440 =
local f440 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'440', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "440", "0", "0", fullpagename = target } }) or
if f440 ~= '' then
""
a = 'O campo 440 é obsoleto. Mova seu conteúdo para o campo 490'
if f440 ~= "" then
info = string.format( '* <strong class="error">%s.</strong>', a )
a = "O campo 440 é obsoleto. Mova seu conteúdo para o campo 490"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Testa se existem indicadores, parênteses no subcampo $a do campo 490 e se existe ";" antes da numeração da série
-- Testa se existem indicadores, parênteses no subcampo $a do campo 490 e se existe ";" antes da numeração da série
local f490 =
local f490 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'490', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "490", "0", "0", fullpagename = target } }) or
if f490 ~= '' then
if f490:sub(2, 2) ~= '#' then
""
if f490 ~= "" then
a = 'O segundo indicador do campo 490 foi preenchido, porém, ele não deve ser preenchido'
if f490:sub(2, 2) ~= "#" then
info = string.format( '* <strong class="error">%s.</strong>', a )
a = "O segundo indicador do campo 490 foi preenchido, porém, ele não deve ser preenchido"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
local f490a = frame:expandTemplate {title = 'Select', args = {'490', 'a', target}} or ''
local f490a = frame:expandTemplate { title = "Select", args = { "490", "a", target } } or ""
if f490a ~= '' then
if f490a ~= "" then
if string.match( f490a, '^%(' ) then
if string.match(f490a, "^%(") then
a = 'Segundo as orientações do MARC 21, não inclua os parênteses no campo 490 ou 830'
a = "Segundo as orientações do MARC 21, não inclua os parênteses no campo 490 ou 830"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
-- Testa se o início da série/coleção começa com letra minúscula
if string.match(f490a, "^[a-zà-ÿ]") then
a = "Normalmente, o início de uma série/coleção (490 $a) começa com letra maiúscula"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
local f490v = frame:expandTemplate {title = 'Select', args = {'490', 'v', target}} or ''
local f490v = frame:expandTemplate { title = "Select", args = { "490", "v", target } } or ""
if f490v ~= '' then
if f490v ~= "" then
if not string.match( f490, ';%s?%$v' ) then
if not string.match(f490, ";%s?%$v") then
a = 'É necessária a pontuação que precede a numeração da série (490, $v)'
a = "É necessária a pontuação que precede a numeração da série (490, $v)"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
-- Testa a consistência entre o indicador do 490 e a presença do campo 830
-- Testa a consistência entre o indicador do 490 e a presença do campo 830
local f830 =
local f830 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'830', '0', '0', fullpagename = target}} ) or ''
if f490:sub(1, 1) == '#' then
mw.text.trim(
frame:expandTemplate { title = "Field data string", args = { "830", "0", "0", fullpagename = target } }
a = 'Está faltando o primeiro indicador do campo 490'
) or ""
info = string.format( '* <strong class="error">%s.</strong>', a )
if f490:sub(1, 1) == "#" then
a = "Está faltando o primeiro indicador do campo 490"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
elseif f490:sub(1, 1) == '1' then
elseif f490:sub(1, 1) == "1" then
if f830 == '' then
if f830 == "" then
a =
a = 'Foi especificado um ponto de acesso secundário para a série (490, primeiro indicador com valor 1), porém, um campo 830 não foi informado'
"Foi especificado um ponto de acesso secundário para a série (490, primeiro indicador com valor 1), porém, um campo 830 não foi informado"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
elseif f490:sub(1, 1) == '0' then
elseif f490:sub(1, 1) == "0" then
if f830 ~= '' then
if f830 ~= "" then
a =
a = 'O primeiro indicador do campo 490 indica que não foi gerado um ponto de acesso para a série, porém, um campo 830 foi informado'
"O primeiro indicador do campo 490 indica que não foi gerado um ponto de acesso para a série, porém, um campo 830 foi informado"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
else
else
a = 'O primeiro indicador do campo 490 foi preenchido incorretamente'
a = "O primeiro indicador do campo 490 foi preenchido incorretamente"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
-- Testa se a nota 500 acaba com "."
-- Testa se a nota 500 acaba com "."
local f500 =
local f500 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'500', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "500", "0", "0", fullpagename = target } }) or
if f500 ~= '' then
""
if string.match( f500, '[a-zA-ZÀ-ü0-9:;-]$' ) then
if f500 ~= "" then
a = 'Nossa política de catalogação define que as notas devem terminar com um ponto (500)'
info = string.format( '* <strong class="error">%s.</strong>', a )
if string.match(f500, "[a-zA-ZÀ-ü0-9:;-]$") then
a = "Nossa política de catalogação define que as notas devem terminar com um ponto (500)"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
if string.match(f500, "inclui") then
a = "Verifique o uso de maiúsculas no início de frase ('inclui')"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
-- Testa se a nota 504 acaba com "." e se existe uso de maiúsculas no meio da nota
-- Testa se a nota 504 acaba com "." e se existe uso de maiúsculas no meio da nota
local f504 =
local f504 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'504', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "504", "0", "0", fullpagename = target } }) or
if f504 ~= '' then
""
if string.match( f504, '[a-zA-ZÀ-ü0-9]$' ) then
if f504 ~= "" then
a = 'Nossa política de catalogação define que as notas devem terminar com um ponto (504)'
info = string.format( '* <strong class="error">%s.</strong>', a )
if string.match(f504, "[a-zA-ZÀ-ü0-9]$") then
a = "Nossa política de catalogação define que as notas devem terminar com um ponto (504)"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Testa se existe uso de maiúsculas no meio da nota 504
-- Testa se existe uso de maiúsculas no meio da nota 504
if string.match( f504, '.*%s[A-Z]' ) then
if string.match(f504:sub(6), ".*%s[A-Z]") then
a = 'Verifique o uso de maiúsculas na nota do campo 504'
a = "Verifique o uso de maiúsculas na nota do campo 504"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
if string.match(f504, "Inclui índice%.?$") then
a = "'Inclui índice', somente, deve estar no campo 500"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
local f600 =
local f600 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'600', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "600", "0", "0", fullpagename = target } }) or
-- a seguir, testa os indicadores dos campos 6XX
if f600 ~= '' then
""
if f600:sub(1, 1) == '#' then
-- Testa os indicadores dos campos 6XX
if f600 ~= "" then
a = 'Está faltando o primeiro indicador do campo 600'
if f600:sub(1, 1) == "#" then
info = string.format( '* <strong class="error">%s.</strong>', a )
a = "Está faltando o primeiro indicador do campo 600"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if f600:sub(2, 2) ~= '4' then
if f600:sub(2, 2) ~= "4" then
a = 'Nossa política de catalogação define que o segundo indicador do campo 600 deve ser sempre "4"'
a = 'Nossa política de catalogação define que o segundo indicador do campo 600 deve ser sempre "4"'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Testa se existe "," no subcampo $a (Nome, Sobrenome)
-- Testa se existe "," no subcampo $a (Nome, Sobrenome)
local f600a = frame:expandTemplate {title = 'Select', args = {'600', 'a', target}} or ''
local f600a = frame:expandTemplate { title = "Select", args = { "600", "a", target } } or ""
if f600a ~= '' then
if f600a ~= "" then
if not string.match( f600a, '.*,.' ) then
if not string.match(f600a, ".*,.") then
a = 'Em pontos de acesso, o nome pessoal deve ser invertido (Nome, Sobrenome). Verifique o campo 600'
a = "Em pontos de acesso, o nome pessoal deve ser invertido (Nome, Sobrenome). Verifique o campo 600"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if string.match( f600a, '[a-zÀ-ü],[A-ZÀ-ü]' ) then
if string.match(f600a, "[a-zÀ-ü],[A-ZÀ-ü]") then
a = 'Falta espaço após a vírgula. Verifique o campo 600'
a = "Falta espaço após a vírgula. Verifique o campo 600"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
if string.match(f600a, "%d%d%d%d") then
a = "No campo 600, o ano deve ser informado no subcampo $d"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
local f600q = frame:expandTemplate {title = 'Select', args = {'600', 'q', target}} or ''
local f600q = frame:expandTemplate { title = "Select", args = { "600", "q", target } } or ""
if f600q ~= '' then
if f600q ~= "" then
if not string.match( f600q, '^%(' ) then
if not string.match(f600q, "^%(") then
a = 'O subcampo $q do campo 600 necessita parênteses'
a = "O subcampo $q do campo 600 necessita parênteses"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
end
end
local f610 =
local f610 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'610', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "610", "0", "0", fullpagename = target } }) or
if f610 ~= '' then
if f610:sub(1, 1) == '#' then
""
if f610 ~= "" then
a = 'Está faltando o primeiro indicador do campo 610'
if f610:sub(1, 1) == "#" then
info = string.format( '* <strong class="error">%s.</strong>', a )
a = "Está faltando o primeiro indicador do campo 610"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if f610:sub(2, 2) ~= '4' then
if f610:sub(2, 2) ~= "4" then
a = 'Nossa política de catalogação define que o segundo indicador do campo 610 deve ser sempre "4"'
a = 'Nossa política de catalogação define que o segundo indicador do campo 610 deve ser sempre "4"'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
local f611 =
local f611 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'611', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "611", "0", "0", fullpagename = target } }) or
if f611 ~= '' then
if f611:sub(1, 1) == '#' then
""
if f611 ~= "" then
a = 'Está faltando o primeiro indicador do campo 611'
if f611:sub(1, 1) == "#" then
info = string.format( '* <strong class="error">%s.</strong>', a )
a = "Está faltando o primeiro indicador do campo 611"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if f611:sub(2, 2) ~= '4' then
if f611:sub(2, 2) ~= "4" then
a = 'Nossa política de catalogação define que o segundo indicador do campo 611 deve ser sempre "4"'
a = 'Nossa política de catalogação define que o segundo indicador do campo 611 deve ser sempre "4"'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
local f630 =
local f630 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'630', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "630", "0", "0", fullpagename = target } }) or
if f630 ~= '' then
if f630:sub(1, 1) == '#' then
""
if f630 ~= "" then
a = 'Está faltando o primeiro indicador do campo 630'
if f630:sub(1, 1) == "#" then
info = string.format( '* <strong class="error">%s.</strong>', a )
a = "Está faltando o primeiro indicador do campo 630"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if f630:sub(2, 2) ~= '4' then
if f630:sub(2, 2) ~= "4" then
a = 'Nossa política de catalogação define que o segundo indicador do campo 630 deve ser sempre "4"'
a = 'Nossa política de catalogação define que o segundo indicador do campo 630 deve ser sempre "4"'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
local f650 =
local f650 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'650', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "650", "0", "0", fullpagename = target } }) or
if f650 ~= '' then
if f650:sub(1, 1) ~= '0' then
""
if f650 ~= "" then
if f650:sub(1, 1) ~= "0" then
a = 'Nossa política de catalogação define que o primeiro indicador do campo 650 deve ser sempre "0"'
a = 'Nossa política de catalogação define que o primeiro indicador do campo 650 deve ser sempre "0"'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if f650:sub(2, 2) ~= '4' then
if f650:sub(2, 2) ~= "4" then
a = 'Nossa política de catalogação define que o segundo indicador do campo 650 deve ser sempre "4"'
a = 'Nossa política de catalogação define que o segundo indicador do campo 650 deve ser sempre "4"'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Testa se os assuntos começam com letra minúscula
-- Testa se os assuntos começam com letra minúscula
if string.match( f650, '%$[axzy][a-zà-ü]' ) then
if string.match(f650, "%$[axzy]%s[a-z]") then
a = 'Os assuntos principais e suas subdivisões devem começar com letra maiúscula'
a = "Os assuntos principais e suas subdivisões devem começar com letra maiúscula"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Testa se um subcampo termina em "-"
-- Testa se um subcampo termina em "-"
if string.match( f650, '%-%s?%$' ) then
if string.match(f650, "%-%s?%$") then
a = 'Nunca inclua hifens entre termos de assuntos'
a = "Nunca inclua hifens entre termos de assuntos"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
local f651 =
local f651 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'651', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "651", "0", "0", fullpagename = target } }) or
if f651 ~= '' then
if f651:sub(1, 1) ~= '#' then
""
if f651 ~= "" then
if f651:sub(1, 1) ~= "#" then
a = 'Nossa política de catalogação define que o primeiro indicador do campo 651 deve ser sempre "#"'
a = 'Nossa política de catalogação define que o primeiro indicador do campo 651 deve ser sempre "#"'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if f651:sub(2, 2) ~= '4' then
if f651:sub(2, 2) ~= "4" then
a = 'Nossa política de catalogação define que o segundo indicador do campo 651 deve ser sempre "4"'
a = 'Nossa política de catalogação define que o segundo indicador do campo 651 deve ser sempre "4"'
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
-- Testa os pontos de acesso secundários, tal como os principais
-- Testa os pontos de acesso secundários, tal como os principais
local f700 =
local f700 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'700', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "700", "0", "0", fullpagename = target } }) or
if f700 ~= '' then
""
info = 'Um ponto de acesso secundário foi dado a uma <b>pessoa</b>'
if f700:sub(1, 1) == '0' then
if f700 ~= "" then
a = 'e a entrada começa pelo seu <b>primeiro nome</b>'
info = "Um ponto de acesso secundário foi dado a uma <b>pessoa</b>"
if f700:sub(1, 1) == "0" then
info = string.format( '* %s %s.', info, a )
a = 'e a entrada começa pelo seu <strong class="error">primeiro nome</strong>'
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
table.insert(infos, info)
elseif f700:sub(1, 1) == '1' then
elseif f700:sub(1, 1) == "1" then
a = 'e a entrada começa pelo seu <b>sobrenome</b>'
a = "e a entrada começa pelo seu <b>sobrenome</b>"
info = string.format( '* %s %s.', info, a )
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
table.insert(infos, info)
elseif f700:sub(1, 1) == '3' then
elseif f700:sub(1, 1) == "3" then
a = 'e a entrada começa pelo seu <b>nome de família</b>'
a = "e a entrada começa pelo seu <b>nome de família</b>"
info = string.format( '* %s %s.', info, a )
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
table.insert(infos, info)
elseif f700:sub(1, 1) == '#' then
elseif f700:sub(1, 1) == "#" then
a = 'o primeiro indicador não foi preenchido'
a = "o primeiro indicador não foi preenchido"
info = string.format( '* %s, porém, <strong class="error">%s.</strong>', info, a )
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
table.insert(infos, info)
else
else
a = 'o primeiro indicador foi preenchido incorretamente'
a = "o primeiro indicador foi preenchido incorretamente"
info = string.format( '* %s, porém, <strong class="error">%s.</strong>', info, a )
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if f700:sub(2, 2) ~= '#' then
if f700:sub(2, 2) ~= "#" then
a = 'O segundo indicador do campo 700 foi preenchido, porém, ele não deve ser preenchido'
a = "O segundo indicador do campo 700 foi preenchido, porém, ele não deve ser preenchido"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- Testa se existe mais de um subcampo $a no mesmo campo 700
-- Testa se existe mais de um subcampo $a no mesmo campo 700
test = frame:expandTemplate {title = 'Exist', args = {'700', target}} or false
local exist700 = frame:expandTemplate { title = "Exist", args = { "700", target } } or false
if test == 'yes' then
if exist700 == "yes" then
if string.match( f700, '%$a.*%$a.-$' ) then
if string.match(f700, "%$a.*%$a.-$") then
a = 'Há mais de um subcampo $a no campo 700. O subcampo $a não é repetível'
a = "Há mais de um subcampo $a no campo 700. O subcampo $a não é repetível"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
-- testa se existe "," no subcampo $a (Nome, Sobrenome)
-- testa se existe "," no subcampo $a (Nome, Sobrenome)
local f700a = frame:expandTemplate {title = 'Select', args = {'700', 'a', target}}
local f700a = frame:expandTemplate { title = "Select", args = { "700", "a", target } } or ""
if f700a ~= '' then
if f700a ~= "" then
if not string.match(f700a, '.-,.') then
if not string.match(f700a, ".-,.") then
a = 'Em pontos de acesso, o nome pessoal deve ser invertido (Nome, Sobrenome). Verifique o campo 700'
a = "Em pontos de acesso, o nome pessoal deve ser invertido (Nome, Sobrenome). Verifique o campo 700"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if string.match(f700a, '[a-zÀ-ü],[A-ZÀ-ü]') then
if string.match(f700a, "[a-zÀ-ü],[A-ZÀ-ü]") then
a = 'Falta espaço após a vírgula. Verifique o campo 700'
a = "Falta espaço após a vírgula. Verifique o campo 700"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
if string.match(f700a, "%d%d%d%d") then
a = "No campo 700, o ano deve ser informado no subcampo $d"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
local f700q = frame:expandTemplate {title = 'Select', args = {'700', 'q', target}}
local f700q = frame:expandTemplate { title = "Select", args = { "700", "q", target } } or ""
if f700q ~= '' then
if f700q ~= "" then
if not string.match(f700q, '^%(') then
if not string.match(f700q, "^%(") then
a = 'O subcampo $q do campo 700 necessita parênteses'
a = "O subcampo $q do campo 700 necessita parênteses"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
end
local f700e = frame:expandTemplate { title = "Select", args = { "700", "e", target } } or ""
if f700e ~= "" then
if string.match(f700, "[a-zA-ZÀ-ü0-9%]-]%s?%$e") then
a = "O subcampo $e do campo 700 deve ser precedido por uma vírgula"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
Linha 996: Linha 1 199:
end
end
end
end
local f710 =
local f710 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'710', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "710", "0", "0", fullpagename = target } }) or
if f710 ~= '' then
""
info = 'Um ponto de acesso secundário foi dado a uma <b>entidade coletiva</b>'
if f710:sub(1, 1) == '0' then
if f710 ~= "" then
a = 'e a entrada começa por um <b>nome invertido</b>'
info = "Um ponto de acesso secundário foi dado a uma <b>entidade coletiva</b>"
if f710:sub(1, 1) == "0" then
info = string.format( '* %s %s.', info, a )
a = "e a entrada começa por um <b>nome invertido</b>"
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
table.insert(infos, info)
elseif f710:sub(1, 1) == '1' then
elseif f710:sub(1, 1) == "1" then
a = 'e a entrada começa por um <b>nome de jurisdição</b>'
a = "e a entrada começa por um <b>nome de jurisdição</b>"
info = string.format( '* %s %s.', info, a )
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
table.insert(infos, info)
elseif f710:sub(1, 1) == '2' then
elseif f710:sub(1, 1) == "2" then
a = 'e a entrada começa por um <b>nome em ordem direta</b>'
a = "e a entrada começa por um <b>nome em ordem direta</b>"
info = string.format( '* %s %s.', info, a )
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
table.insert(infos, info)
elseif f710:sub(1, 1) == '#' then
elseif f710:sub(1, 1) == "#" then
a = 'o primeiro indicador não foi preenchido'
a = "o primeiro indicador não foi preenchido"
info = string.format( '* %s, porém, <strong class="error">%s.</strong>', info, a )
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
table.insert(infos, info)
else
else
a = 'o primeiro indicador foi preenchido incorretamente'
a = "o primeiro indicador foi preenchido incorretamente"
info = string.format( '* %s, porém, <strong class="error">%s.</strong>', info, a )
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if f710:sub(2, 2) ~= '#' then
if f710:sub(2, 2) ~= "#" then
a = 'O segundo indicador do campo 710 foi preenchido, porém, ele não deve ser preenchido'
a = "O segundo indicador do campo 710 foi preenchido, porém, ele não deve ser preenchido"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
local f711 =
local f711 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'711', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "711", "0", "0", fullpagename = target } }) or
if f711 ~= '' then
""
info = 'Um ponto de acesso secundário foi dado a um <b>evento</b>'
if f711:sub(1, 1) == '0' then
if f711 ~= "" then
a = 'e a entrada começa por um <b>nome invertido</b>'
info = "Um ponto de acesso secundário foi dado a um <b>evento</b>"
if f711:sub(1, 1) == "0" then
info = string.format ( '* %s %s.' , info, a )
a = "e a entrada começa por um <b>nome invertido</b>"
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
table.insert(infos, info)
elseif f711:sub(1, 1) == '1' then
elseif f711:sub(1, 1) == "1" then
a = 'e a entrada começa por um <b>nome de jurisdição</b>'
a = "e a entrada começa por um <b>nome de jurisdição</b>"
info = string.format ( '* %s %s.' , info, a )
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
table.insert(infos, info)
elseif f711:sub(1, 1) == '2' then
elseif f711:sub(1, 1) == "2" then
a = 'e a entrada começa por um <b>nome em ordem direta</b>'
a = "e a entrada começa por um <b>nome em ordem direta</b>"
info = string.format ( '* %s %s.' , info, a )
info = string.format("* %s %s.", info, a)
table.insert(infos, info)
table.insert(infos, info)
elseif f711:sub(1, 1) == '#' then
elseif f711:sub(1, 1) == "#" then
a = 'o primeiro indicador não foi preenchido'
a = "o primeiro indicador não foi preenchido"
info = string.format ( '* %s, porém, <strong class="error">%s.</strong>', info, a )
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
table.insert(infos, info)
else
else
a = 'o primeiro indicador foi preenchido incorretamente'
a = "o primeiro indicador foi preenchido incorretamente"
info = string.format ( '* %s, porém, <strong class="error">%s.</strong>', info, a )
info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if f711:sub(2, 2) ~= '#' then
if f711:sub(2, 2) ~= "#" then
a = 'O segundo indicador do campo 711 foi preenchido, porém, ele não deve ser preenchido'
a = "O segundo indicador do campo 711 foi preenchido, porém, ele não deve ser preenchido"
info = string.format( '* <strong class="error">%s.</strong>', a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
end
local f740 =
-- a seguir, testa os indicadores do campo 830
local f830 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'830', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "740", "0", "0", fullpagename = target } }) or
if f830 ~= '' then
""
if f830:sub(1, 1) ~= '#' then
if f740 ~= "" then
if f740:sub(1, 1) == "#" then
a = 'O primeiro indicador do campo 830 foi preenchido, porém, ele não deve ser preenchido'
a = "O primeiro indicador do campo 740 precisa ser preenchido"
info = string.format ( '* <strong class="error">%s.</strong>' , a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
if f830:sub(2, 2) == '#' then
a = 'O segundo indicador do campo 830 precisa ser preenchido'
-- Testa os indicadores do campo 830
local f830 =
info = string.format ( '* <strong class="error">%s.</strong>' , a )
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "830", "0", "0", fullpagename = target } }) or
""
if f830 ~= "" then
if f830:sub(1, 1) ~= "#" then
a = "O primeiro indicador do campo 830 foi preenchido, porém, ele não deve ser preenchido"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if f830:sub(2, 2) == "#" then
local f830v = frame:expandTemplate {title = 'Select', args = {'830', 'v', target}} or ''
a = "O segundo indicador do campo 830 precisa ser preenchido"
if f830v ~= '' then
if not string.match( f830v, ';%s?%$v' ) then
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
a = 'É necessária a pontuação que precede a numeração da série (830, $v)'
end
info = string.format ( '* <strong class="error">%s.</strong>' , a )
local f830v = frame:expandTemplate { title = "Select", args = { "830", "v", target } } or ""
if f830v ~= "" then
if not string.match(f830, ";%s?%$v") then
a = "É necessária a pontuação que precede a numeração da série (830, $v)"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end
if f490 == "" then
a = "Foi informado um ponto de acesso secundário para a série (campo 830), porém, um campo 490 não foi detectado"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
end
end
end
end
local f856 =
local f856 = mw.text.trim( frame:expandTemplate {title = 'Field data string', args = {'856', '0', '0', fullpagename = target}} ) or ''
mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "856", "0", "0", fullpagename = target } }) or
if f856 ~= '' then
if f856:sub(1, 1) ~= '4' then
""
if f856 ~= "" then
if f856:sub(1, 1) ~= "4" then
a = 'O primeiro indicador do campo 856 precisa ter o valor "4"'
a = 'O primeiro indicador do campo 856 precisa ter o valor "4"'
info = string.format ( '* <strong class="error">%s.</strong>' , a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
local f856a = frame:expandTemplate {title = 'Select', args = {'856', 'a', target}} or ''
local f856a = frame:expandTemplate { title = "Select", args = { "856", "a", target } } or ""
if f856a ~= '' then
if f856a ~= "" then
a = 'Normalmente, o subcampo utilizado no 856 é o $u, não o $a'
a = "Normalmente, o subcampo utilizado no 856 é o $u, não o $a"
info = string.format ( '* <strong class="error">%s.</strong>' , a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
Linha 1 094: Linha 1 320:
-- Testa por inteiro o registro de modo a acusar: "," ou o "." precedido de espaço; designadores de subcampos errados
-- Testa por inteiro o registro de modo a acusar: "," ou o "." precedido de espaço; designadores de subcampos errados
local isoRecord =
local isoRecord =
frame:callParserFunction {
frame:callParserFunction {
name = '#ask:[[-Has subobject::' .. 'B000004' .. ']][[Field data::+]]',
name = "#ask:[[-Has subobject::" .. target .. "]][[Field data::+]]",
args = {
args = {'?Field data', format = 'plainlist', link = 'none', headers = 'hide', mainlabel = '-', outro = '', sep = '', valuesep = '', propsep = ''} } or ''
"?Field data",
if string.match( isoRecord, '%s[.,][^.]' ) then
format = "plainlist",
a = 'Pontos finais ou vírgulas nunca devem ser precedidos por um espaço'
info = string.format ( '* <strong class="error">%s.</strong>' , a )
link = "none",
headers = "hide",
mainlabel = "-",
outro = "",
sep = "",
valuesep = "",
propsep = ""
}
} or ""
if string.match(isoRecord, "%s[.,][^.]") then
a = "Pontos finais ou vírgulas nunca devem ser precedidos por um espaço"
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
if string.match( isoRecord, '%$[A-Z]' ) then
if string.match(isoRecord, "%$[A-Z]") then
a = 'Não são permitidos designadores de subcampos com letras maiúsculas'
a = "Não são permitidos designadores de subcampos com letras maiúsculas"
info = string.format ( '* <strong class="error">%s.</strong>' , a )
info = string.format('* <strong class="error">%s.</strong>', a)
table.insert(infos, info)
table.insert(infos, info)
end
end
end -- end if 245
end -- end if 245


return table.concat(infos, '\n')
return table.concat(infos, "\n")
end
end



Edição atual tal como às 13h23min de 23 de outubro de 2024

A documentação para este módulo pode ser criada em Módulo:BibRules/doc

local p = {}

function p.Rules(frame)
  -- Define o alvo das regras
  local target = frame:getParent().args[1] or frame.args[1]
  if target == "" or target == nil then
    target = mw.uri.decode(frame:callParserFunction("#urlget", "fullpagename"))
  end
  if target == "" or target == nil then
    target = mw.title.getCurrentTitle().prefixedText
  end
  -- Semantic Scribunto foi carregado?
  if not mw.smw then
    return "mw.smw module not found"
  end
  -- Define variáveis básicas
  local info, a, b
  local infos = {}
  -- Funções básicas
  local function ucfirst(str)
    return (str:gsub("^%l", string.upper))
  end
  -- Somente realiza as análises se existir o campo 245
  local f245 =
      mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "245", "0", "0", fullpagename = target } }) or
      ""
  if f245 ~= "" then
    -- Categorias
    local categories =
        frame:callParserFunction {
          name = "#ask:[[" .. target .. "]]",
          args = {
            "?Category",
            format = "plainlist",
            link = "none",
            headers = "hide",
            mainlabel = "-",
            outro = "",
            sep = "",
            valuesep = "",
            propsep = "",
            prefix = "none"
          }
        } or ""
    -- Record status
    local recordStatus =
        frame:expandTemplate {
          title = "Field data string",
          args = { "000", "5", "1", property = "Leader", fullpagename = target }
        } or false
    if recordStatus == "n" then
      a = "Segundo o Líder, este é um registro <b>novo</b> (não um alterado ou revisado, expandido, excluído, etc.)"
      info = string.format("* %s.", a)
      table.insert(infos, info)
    elseif recordStatus == "c" then
      a = "Segundo o Líder, este é um registro <b>alterado ou revisado</b> (não um novo, expandido, excluído, etc.)"
      info = string.format("* %s.", a)
      table.insert(infos, info)
    elseif recordStatus == "a" or recordStatus == "d" or recordStatus == "p" then
      a = "Segundo o Líder, este é um registro <b>expandido</b> ou <b>excluído</b> (não novo)"
      info = string.format("* %s.", a)
      table.insert(infos, info)
    end
    -- Type of record
    local typeOfRecord =
        frame:expandTemplate {
          title = "Field data string",
          args = { "000", "6", "1", property = "Leader", fullpagename = target }
        } or false
    if typeOfRecord == "a" then
      a = "Segundo o Líder, este registro descreve um <b>material textual</b>"
      info = string.format("* %s.", a)
      table.insert(infos, info)
    end
    -- Bibliographic level
    local bibliographicLevel =
        frame:expandTemplate {
          title = "Field data string",
          args = { "000", "7", "1", property = "Leader", fullpagename = target }
        } or false
    if bibliographicLevel == "m" then
      a =
      "Segundo o Líder, este registro descreve um <b>item monográfico</b> (não parte de um item, não um item seriado, não uma coleção, etc.)"
      info = string.format("* %s.", a)
      table.insert(infos, info)
    end
    -- Encoding level
    local encodingLevel =
        frame:expandTemplate {
          title = "Field data string",
          args = { "000", "17", "1", property = "Leader", fullpagename = target }
        } or false
    if encodingLevel == "1" then
      a =
      "Segundo o Líder, este registro tem um nível <b>completo</b> de catalogação (mas o material não foi examinado)"
      info = string.format("* %s.", a)
      table.insert(infos, info)
    elseif encodingLevel == "#" then
      a =
      "Segundo o Líder, este registro tem um nível <b>completo</b> de catalogação (a descrição foi realizada com o material em mãos)"
      info = string.format("* %s.", a)
      table.insert(infos, info)
    end
    -- Descriptive cataloging form
    local descriptiveCatalogingForm =
        frame:expandTemplate {
          title = "Field data string",
          args = { "000", "18", "1", property = "Leader", fullpagename = target }
        } or false
    if descriptiveCatalogingForm == "a" then
      a = "Segundo o Líder, este registro possui uma catalogação <b>compatível com as regras do AACR 2</b>"
      info = string.format("* %s.", a)
      table.insert(infos, info)
    else
      a = "Segundo o Líder, este registro possui uma catalogação <b>não compatível com as regras da ISBD</b>"
      info = string.format("* %s.", a)
      table.insert(infos, info)
    end
    -- Explica a sintaxe '(Biblioteca)NúmeroDeControle'
    local f001 =
        frame:expandTemplate {
          title = "Field data string",
          args = { "001", "0", "", property = "Control field data", fullpagename = target }
        } or ""
    local f003 =
        frame:expandTemplate {
          title = "Field data string",
          args = { "003", "0", "", property = "Control field data", fullpagename = target }
        } or ""
    a = "Internamente, este registro é identificado pelo código"
    b = "para sistemas externos, o código é"
    info = string.format('* %s "%s"; %s "(%s)%s".', a, f001, b, f003, f001)
    table.insert(infos, info)
    -- Campo 005
    local creationDate =
        mw.smw.ask("[[" .. target .. "]]|?Creation date#-F[l, d \\d\\e F \\d\\e Y]|headers=hide|mainlabel=-") or ""
    if type(creationDate) == "table" then
      for _, row in pairs(creationDate) do
        for _, data in pairs(row) do
          creationDate = data
        end
      end
    end
    local modificationDate =
        mw.smw.ask("[[" .. target .. "]]|?Modification date#-F[l, d \\d\\e F \\d\\e Y]|headers=hide|mainlabel=-") or ""
    if type(modificationDate) == "table" then
      for _, row in pairs(modificationDate) do
        for _, data in pairs(row) do
          modificationDate = data
        end
      end
    end
    a = "O registro foi criado em:"
    b = "Sua última transação foi em:"
    info = string.format("* %s %s. %s %s.", a, creationDate, b, modificationDate)
    table.insert(infos, info)
    -- Campo 008
    local invalidCode = '<strong class="error">código inválido para o local de publicação</strong>'
    local pubPlaceTbl = {
      ["acb"] = "Acre",
      ["alb"] = "Alagoas",
      ["amb"] = "Amazonas",
      ["apb"] = "Amapá",
      ["bab"] = "Bahia",
      ["ceb"] = "Ceará",
      ["dfb"] = "Distrito Federal",
      ["esb"] = "Espírito Santo",
      ["gob"] = "Goiás",
      ["mab"] = "Maranhão",
      ["mgb"] = "Minas Gerais",
      ["msb"] = "Mato Grosso do Sul",
      ["mtb"] = "Mato Grosso",
      ["pab"] = "Pará",
      ["pbb"] = "Paraíba",
      ["peb"] = "Pernambuco",
      ["pib"] = "Piauí",
      ["prb"] = "Paraná",
      ["rjb"] = "Rio de Janeiro",
      ["rnb"] = "Rio Grande do Norte",
      ["rob"] = "Rondônia",
      ["rrb"] = "Roraima",
      ["rsb"] = "Rio Grande do Sul",
      ["scb"] = "Santa Catarina",
      ["seb"] = "Sergipe",
      ["spb"] = "São Paulo",
      ["tob"] = "Tocantins",
      ["bl "] = "Brasil",
      ["xxu"] = "Estados Unidos",
      ["flu"] = "Flórida, EUA",
      ["nyu"] = "Nova York, EUA",
      ["po "] = "Portugal",
      ["xxk"] = "Reino Unido",
      ["fr "] = "França",
      ["sp "] = "Espanha",
      ["gw "] = "Alemanha",
      ["xx "] = '<strong class="error">não foi identificado um local de publicação no campo 008.</strong>',
      ["vp "] = "há vários locais de publicação",
      ["esp"] = invalidCode,
      ["eua"] = invalidCode,
      ["fra"] = invalidCode,
      ["pt "] = invalidCode,
      ["   "] = '<strong class="error">é necessário informar um código de local de publicação, campo 008.</strong>'
    }
    local f008pubPlace =
        frame:expandTemplate {
          title = "Field data string",
          args = { "008", "15", "3", property = "Control field data", fullpagename = target } or ""
        }
    if string.match(f008pubPlace, "^[A-Z]") then
      a = "O uso de maiúsculas não é permitido no campo 008, local de publicação"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    elseif pubPlaceTbl[f008pubPlace] then
      a = "O item possui a seguinte origem:"
      info = string.format("* %s %s.", a, tostring(pubPlaceTbl[f008pubPlace]))
      table.insert(infos, info)
    else
      a = "O item possui a seguinte origem:"
      info = string.format("* %s %s.", a, f008pubPlace)
      table.insert(infos, info)
    end
    invalidCode = '<strong class="error">código inválido para o idioma (campo 008 ou subcampo $h do campo 041).</strong>'
    local langTbl = {
      ["por"] = "português",
      ["eng"] = "inglês",
      ["spa"] = "espanhol",
      ["ger"] = "alemão",
      ["fre"] = "francês",
      ["ita"] = "italiano",
      ["chi"] = "chinês",
      ["esp"] = invalidCode,
      ["ing"] = invalidCode,
      ["fra"] = invalidCode,
      ["pt"] = invalidCode,
      ["en"] = invalidCode,
      ["es"] = invalidCode,
      ["   "] = '<strong class="error">é necessário informar um código de idioma no campo 008.</strong>'
    }
    local f008lang =
        frame:expandTemplate {
          title = "Field data string",
          args = { "008", "35", "3", property = "Control field data", fullpagename = target }
        } or ""
    if string.match(f008lang, "^[A-Z]") then
      a = "O uso de maiúsculas não é permitido no campo 008, idioma"
      info = string.format('* <strong class="error">%s.</strong>', a)
    elseif langTbl[f008lang] then
      a = "Majoritariamente, o item se expressa no seguinte idioma:"
      info = string.format("* %s %s", a, tostring(langTbl[f008lang]))
    else
      a = "Majoritariamente, o item se expressa no seguinte idioma:"
      info = string.format("* %s %s", a, f008lang)
    end
    -- Se existe o campo 041, mostra '(traduzido do... )' na mesma linha do idioma presente no 008
    local f041 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "041", "0", "0", fullpagename = target } }) or
        ""
    if f041 ~= "" then
      if f041:sub(1, 1) == "1" then
        local f041h = frame:expandTemplate { title = "Select", args = { "041", "h", target } } or ""
        f041h = langTbl[f041h] or f041h
        info = string.format("%s (traduzido do %s).", info, f041h)
      end
    end
    table.insert(infos, info)
    -- Testa se existe(m) ISBN(s) inválido(s)
    local f020 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "020", "0", "0", fullpagename = target } }) or
        ""
    if f020 ~= "" then
      local printedIsbn = frame:expandTemplate { title = "Print ISBN" } or ""
      if string.match(printedIsbn, "error") then
        a = "ISBN inválido, por favor, reveja os números informados"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se existe(m) hifen(s) ou x minúsculo no ISBN
      local f020 = mw.smw.ask("[[" .. target .. "#020]]|?Field data#|headers=hide|mainlabel=-") or ""
      if type(f020) == "table" then
        for _, row in pairs(f020) do
          for _, data in pairs(row) do
            if type(data) == "table" then
              f020 = mw.text.trim(table.concat(data))
            else
              f020 = mw.text.trim(data)
            end
          end
        end
      end
      if string.match(f020, "-") then
        a = 'O ISBN não pode conter hifens. Apenas números e "X" maiúsculo'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      elseif string.match(f020, "x") then
        a = 'O ISBN não pode conter um x minúsculo. Apenas números e "X" maiúsculo'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      elseif string.match(f020, "%(") then
        a =
        'O campo de ISBN só pode conter números e "X" maiúsculo. Use o subcampo $q para outros dados (sem parênteses)'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se há indicadores no campo 020
      if f020:sub(1, 1) ~= "#" then
        a = "O primeiro indicador do campo 020 foi preenchido, porém, ele não deve ser preenchido"
        info = string.format('* <strong class="error">.</strong>', a)
        table.insert(infos, info)
      end
      if f020:sub(2, 2) ~= "#" then
        a = "O segundo indicador do campo 020 foi preenchido, porém, ele não deve ser preenchido"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Testa o uso de maiúsculas no campo 041
    if f041 ~= "" then
      if f041:sub(1, 1) == "#" then
        a = "Talvez o primeiro indicador do campo 041 tenha sido esquecido"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      local f041a = frame:expandTemplate { title = "Select", args = { "041", "a", target } } or ""
      if string.match(f041a, "^[A-Z]") then
        a = "O uso de maiúsculas não é permitido nos códigos de idioma (campo 041)"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Verifica a presença de pontos de acesso principais 1XX
    -- TODO: trocar callParserFunction por mw.smw.ask
    -- queryResult = mw.smw.ask( '[[' .. target .. '#100||' .. target .. '#110||' .. target .. '#111||' .. target .. '#130]]' )
    local accessPointPresence =
        frame:callParserFunction {
          name = "#ask:[[" .. target .. "#100||" .. target .. "#110||" .. target .. "#111||" .. target .. "#130]]",
          args = { "?Field data", format = "count", mainlabel = "-" }
        } or 0
    accessPointPresence = tonumber(accessPointPresence) or 0
    -- Testa se há subcampo $b e se há espaço no subcampo $c do campo 090
    local f090 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "090", "0", "0", fullpagename = target } }) or
        ""
    if f090 ~= "" then
      if string.match(f090, ",") then
        a = "Normalmente não há vírgula no campo 090, reveja"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      local f090b = frame:expandTemplate { title = "Select", args = { "090", "b", target } } or ""
      if f090b == "" then
        a = "Está faltando o subcampo $b do campo 090 (notação de Cutter)"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se não foi esquecida a letra do tíulo na notação de Cutter, caso haja um ponto de acesso 1XX
      if accessPointPresence >= 1 and string.match(f090b, "[0-9]$") then
        a = "Falta a letra do título na notação de Cutter"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      local f090c = frame:expandTemplate { title = "Select", args = { "090", "c", target } } or ""
      if string.match(f090c, "%sed") then
        a = "Nossa política de catalogação proíbe espaços na indicação de edição no número de chamada (090 $c)"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Testa (conta) se existe mais de um ponto de acesso principal
    local f100existance = frame:expandTemplate { title = "Exist", args = { "100", target } } or ""
    if accessPointPresence > 1 or f100existance == "multiple" then
      a = "Foi registrado <b>mais de um ponto de acesso principal</b>. Isso não é permitido"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
    if f100existance ~= "" then
      local f100 =
          mw.text.trim(
            frame:expandTemplate { title = "Field data string", args = { "100", "0", "0", fullpagename = target } }
          ) or ""
      info = "O ponto de acesso principal foi dado a uma <b>pessoa</b>"
      if f100:sub(1, 1) == "0" then
        a = 'e a entrada começa pelo seu <strong class="error">primeiro nome</strong>'
        info = string.format("* %s %s.", info, a)
        table.insert(infos, info)
      elseif f100:sub(1, 1) == "1" then
        a = "e a entrada começa pelo seu <b>sobrenome</b>"
        info = string.format("* %s %s.", info, a)
        table.insert(infos, info)
      elseif f100:sub(1, 1) == "3" then
        a = "e a entrada começa pelo seu <b>nome de família</b>"
        info = string.format("* %s %s.", info, a)
        table.insert(infos, info)
      elseif f100:sub(1, 1) == "#" then
        a = "o primeiro indicador não foi preenchido"
        info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
        table.insert(infos, info)
      else
        a = "o primeiro indicador foi preenchido incorretamente"
        info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
        table.insert(infos, info)
      end
      if f100:sub(2, 2) ~= "#" then
        a = "O segundo indicador do campo 100 foi preenchido, porém, ele não deve ser preenchido"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se existe ', ' no subcampo $a (Nome, Sobrenome)
      local f100a = frame:expandTemplate { title = "Select", args = { "100", "a", target } } or ""
      if f100a ~= "" then
        if not string.match(f100a, ".-,.") then
          a = "Em pontos de acesso, o nome pessoal deve ser invertido (Nome, Sobrenome). Verifique o campo 100"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        if string.match(f100a, "[a-zÀ-ü],[A-ZÀ-ü]") then
          a = "Falta espaço após a vírgula. Verifique o campo 100"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        if string.match(f100a, "%d%d%d%d") then
          a = "No campo 100, o ano deve ser informado no subcampo $d"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
      local f100q = frame:expandTemplate { title = "Select", args = { "100", "q", target } } or ""
      if f100q ~= "" then
        if not string.match(f100q, "^%(") then
          a = "O subcampo $q do campo 100 necessita parênteses"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
      local f100d = frame:expandTemplate { title = "Select", args = { "100", "d", target } } or ""
      if f100d ~= "" then
        if string.match(f100, "%$d %d%d%d%d$") then
          a = "O subcampo $d do campo 100 necessita hífen"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
    end
    -- Testa se existe um ponto de acesso principal 110
    local f110 =
        mw.text.trim(
          frame:expandTemplate { title = "Field data string", args = { "110", "0", "0", fullpagename = target } } or ""
        )
    if f110 ~= "" then
      info = "O ponto de acesso principal foi dado a uma <b>entidade coletiva</b>"
      if f110:sub(1, 1) == "0" then
        a = "e a entrada começa por um <b>nome invertido</b>"
        info = string.format("* %s %s.", info, a)
        table.insert(infos, info)
      elseif f110:sub(1, 1) == "1" then
        a = "e a entrada começa por um <b>nome de jurisdição</b>"
        info = string.format("* %s %s.", info, a)
        table.insert(infos, info)
      elseif f110:sub(1, 1) == "2" then
        a = "e a entrada começa por um <b>nome em ordem direta</b>"
        info = string.format("* %s %s.", info, a)
        table.insert(infos, info)
      elseif f110:sub(1, 1) == "#" then
        a = "o primeiro indicador não foi preenchido"
        info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
        table.insert(infos, info)
      else
        a = "o primeiro indicador foi preenchido incorretamente"
        info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
        table.insert(infos, info)
      end
      if f110:sub(2, 2) ~= "#" then
        a = "O segundo indicador do campo 110 foi preenchido, porém, ele não deve ser preenchido"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Testa se existe um ponto de acesso principal 111
    local f111 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "111", "0", "0", fullpagename = target } }) or
        ""
    if f111 ~= "" then
      info = "O ponto de acesso principal foi dado a um <b>evento</b>"
      if f111:sub(1, 1) == "0" then
        a = "e a entrada começa por um <b>nome invertido</b>"
        info = string.format("* %s %s.", info, a)
        table.insert(infos, info)
      elseif f111:sub(1, 1) == "1" then
        a = "e a entrada começa por um <b>nome de jurisdição</b>"
        info = string.format("* %s %s.", info, a)
        table.insert(infos, info)
      elseif f111:sub(1, 1) == "2" then
        a = "e a entrada começa por um <b>nome em ordem direta</b>"
        info = string.format("* %s %s.", info, a)
        table.insert(infos, info)
      elseif f111:sub(1, 1) == "#" then
        a = "o primeiro indicador não foi preenchido"
        info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
        table.insert(infos, info)
      else
        a = "o primeiro indicador foi preenchido incorretamente"
        info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
        table.insert(infos, info)
      end
      if f111:sub(2, 2) ~= "#" then
        a = "O segundo indicador do campo 111 foi preenchido, porém, ele não deve ser preenchido"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Testa se existe um ponto de acesso principal 130
    local f130 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "130", "0", "0", fullpagename = target } }) or
        ""
    if f130 ~= "" then
      info = "O ponto de acesso principal foi dado a um <b>título uniforme</b>"
      if f130:sub(1, 1) == "#" then
        a = "o primeiro indicador não foi preenchido"
        info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
        table.insert(infos, info)
      else
        local f130a = frame:expandTemplate { title = "Select", args = { "130", "a", target } } or ""
        a = ucfirst(f130a:sub(tonumber(f130:sub(1, 1)) or 0))
        info = string.format('* %s, ele será alfabetado como "<b>%s</b>".', info, a)
        table.insert(infos, info)
      end
      if f130:sub(2, 2) ~= "#" then
        a = "O segundo indicador do campo 130 foi preenchido, porém, ele não deve ser preenchido"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Testa se existe um ponto de acesso principal. Se existir, testa se o primeiro indicador do campo 245 condiz com essa realidade
    local f245ind1 = f245:sub(1, 1) or ""
    if accessPointPresence == 0 then
      if f245ind1 == "1" then
        a =
        'Não houve um ponto de acesso principal nos campos 1XX, desse modo, o primeiro indicador do campo 245 deve ter o valor "0"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    else
      if f245ind1 == "0" then
        a =
        'Houve um ponto de acesso principal nos campos 1XX, desse modo, o primeiro indicador do campo 245 deve ter o valor "1"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Testa a relação entre a presença do campo 240 em relação a presença do campo 041 e a presença do subcampo $l
    local f240 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "240", "0", "0", fullpagename = target } }) or
        ""
    if f240 ~= "" then
      if f041 == "" then
        a = "Normalmente, quando há um campo 240, deve haver um campo 041"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      local f240l = frame:expandTemplate { title = "Select", args = { "240", "l", target } } or ""
      if f240l ~= "" then
        if string.match(f240l, "^[a-zA-Z][a-zA-Z][a-zA-Z]$") then
          a = "É necessário informar o idioma por extenso ($l do campo 240) antecedido por um ponto no subcampo $a"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        if not string.match(f240, "%.%s?%$l") then
          a = "O subcampo $l do campo 240 necessita ser antecedido por um ponto no subcampo anterior"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      else
        a = "Normalmente, quando há um campo 240 $a, deve haver também um 240 $l. 240 $l não foi detectado"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if f240:sub(1, 1) == "0" then
        a = "O título uniforme não será exibido"
        info = string.format("* %s.", a)
        table.insert(infos, info)
      elseif f240:sub(1, 1) == "1" then
        a = "O título uniforme será exibido"
        info = string.format("* %s.", a)
        table.insert(infos, info)
      elseif f240:sub(1, 1) == "#" then
        a = "Está faltando o primeiro indicador do campo 240"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      else
        a = "O primeiro indicador do campo 240 foi preenchido incorretamente"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if f240:sub(2, 2) == "#" then
        a = "Está faltando o segundo indicador do campo 240"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      else
        local f240a =
            string.gsub(mw.text.trim(frame:expandTemplate { title = "Select", args = { "240", "a", target } }), "[/:=.]$",
              "") or ""
        a = "O título uniforme será alfabetado como"
        b = ucfirst(f240a:sub(f240:sub(2, 2) + 1))
        info = string.format('* %s "<b>%s</b>".', a, b)
        table.insert(infos, info)
      end
    end
    -- Informa se o título receberá o ponto de acesso principal ou secundário
    if f245ind1 == "0" then
      a = "O título recebeu o <b>ponto de acesso principal</b>"
      info = string.format("* %s.", a)
      table.insert(infos, info)
    elseif f245ind1 == "1" then
      a = "O título recebeu um <b>ponto de acesso secundário</b>"
      info = string.format('* %s.', a)
      table.insert(infos, info)
    elseif f245ind1 == "#" then
      a = "Está faltando o primeiro indicador do campo 245"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    else
      a = "O primeiro indicador do campo 245 foi preenchido incorretamente"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
    -- Testa se foi preenchido o segundo indicador do 245, se foi, mostra como será a alfabetação, removendo a pontuação final do subcampo $a ('/',':','='' ou '.')
    local f245a = frame:expandTemplate { title = "Select", args = { "245", "a", target } } or ""
    if f245:sub(2, 2) == "#" then
      a = "Está faltando o segundo indicador do campo 245"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    else
      a = "O título será alfabetado como"
      b = ucfirst(f245a:sub(f245:sub(2, 2) + 1))
      b = string.gsub(b, "%s?[/:=.]$", "")
      info = string.format('* %s "<b>%s</b>".', a, b)
      table.insert(infos, info)
    end
    -- Testa se existe espaço antes da pontuação "/", ":" e "=" no final do subcampo $a e $b
    if string.match(f245a, "[a-zA-Z][/:=]$") then
      a = "Inclua um espaço antes da pontuação (ao final do subcampo $a do campo 245)"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
    -- Testa se o subcampo $b começa com letras maiúsculas
    local f245b = frame:expandTemplate { title = "Select", args = { "245", "b", target } } or ""
    if f245b ~= "" then
      if string.match(f245b, "[a-zA-Z][/:=]$") then
        a = "Inclua um espaço antes da pontuação (ao final do subcampo $b do campo 245"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if string.match(f245b, "^[A-Z]") then
        a = "Normalmente, o início de um subtítulo (245 $b) começa com letras minúsculas"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se existe mais de um subcampo $b no 245
      if string.match(f245, "%$b.*%$b") then
        a = "Há mais de um subcampo $b no campo 245. O subcampo $b não é repetível"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Testa se o subcampo $c está presente
    local f245c = frame:expandTemplate { title = "Select", args = { "245", "c", target } } or ""
    if f245c ~= "" then
      -- Testa se existe espaço antes do ponto e vírgula na indicação de responsabilidade, subcampo $c do 245
      if string.match(f245c, "[a-zA-Z.];") then
        a = "Inclua um espaço antes do ponto e vírgula (subcampo $c do campo 245)"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se existe "/" antes do subcampo $c do campo 245
      if string.match(f245, "[a-zA-Z]%s?%$c") then
        a = 'É necessária a pontuação que precede a indicação de responsabilidade (" / ") no campo 245'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se há ": $c"
      if string.match(f245, ":%s?%$c") then
        a =
        'Ou o subtítulo foi colocado no subcampo $c, ou a pontuação que precede a indicação de responsabilidade (" / ") não foi informada corretamente (campo 245).'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se o subcampo $c termina em "-"
      if string.match(f245, "%-$") then
        a = "Nunca inclua hifens de separação de áreas do AACR2 em registros MARC 21. Reveja a pontuação (campo 245)"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se existe mais de um subcampo $c no 245
      if string.match(f245, "%$c.*%$c") then
        a = "Há mais de um subcampo $c no campo 245. O subcampo $c não é repetível"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se existe mais de 3 vírgulas no campo 245 $c
      if string.match(f245c, "[A-Za-zÀ-ü ]+,[A-Za-zÀ-ü ]+,[A-Za-zÀ-ü ]+,") then
        a = 'Parece haver mais de 3 pessoas na indicação de responsabilidade (245 $c), use " ... [et al.]"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se existe a sintaxe "*...[et. "
      if string.match(f245c, "[a-zA-ZÀ-ü]%.%.%.%[et.?%s") then
        a = 'No campo 245, o espaçamento correto é " ... [et al.]"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    else
      a = "Está faltando o subcampo $c do campo 245"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
    -- Testa se existe espaço antes de "ed." (subcampo $a do 250)
    local f250 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "250", "0", "0", fullpagename = target } }) or
        ""
    if f250 ~= "" then
      local f250a = frame:expandTemplate { title = "Select", args = { "250", "a", target } } or ""
      if string.match(f250a, "%d%.?ed%.") then
        a = 'Inclua um espaço antes da indicação "ed." (subcampo $a do campo 250)'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if string.match(f250a, "%-$") then
        a = "Nunca inclua hifens de separação de áreas do AACR2 em registros MARC 21. Reveja a pontuação (campo 250)"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Testa se existe 260, se existir, verifica a pontuação final dos subcampos $a, $b e $c do campo 260
    local f260 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "260", "0", "0", fullpagename = target } }) or
        ""
    if f260 ~= "" then
      local f260a = frame:expandTemplate { title = "Select", args = { "260", "a", target } } or ""
      if f260a ~= "" then
        if string.match(f260a, "[a-zA-ZÀ-ü%],]%s?$") then
          a = 'Normalmente, o final do subcampo $a do campo 260 requer a seguinte pontuação " : "'
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      else
        if string.match(categories, "Livro") then
          a = "Está faltando o subcampo $a do campo 260"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
      if string.match(f260a, "[a-zA-ZÀ-ü%]]:") then
        a =
        'Normalmente, o final do subcampo $a do campo 260 requer a seguinte pontuação " : " (perceba o espaço antes da pontuação)'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      local f260b = frame:expandTemplate { title = "Select", args = { "260", "b", target } } or ""
      if f260b ~= "" then
        if string.match(f260b, "[a-zA-Z.]$") then
          a =
          'Normalmente, o final do subcampo $b do campo 260 requer uma das seguintes pontuações ", " ou " : ". Reveja a pontuação'
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      else
        if string.match(categories, "Livro") then
          a = "Está faltando o subcampo $b do campo 260"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
      local f260c = frame:expandTemplate { title = "Select", args = { "260", "c", target } } or ""
      if f260c ~= "" then
        -- Testa se o subcampo $c é precedido ou não por ","
        if string.match(f260, "[a-zA-ZÀ-ü%]][;:]%s?%$c") then
          a = "O ano de publicação deve sempre ser precedido de uma vírgula. Reveja a pontuação (campo 260)"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        if string.match(f260c, "[a-zA-ZÀ-ü0-9%]]$") then
          a = "Nossa política de catalogação define que o subcampo $c do campo 260 deve terminar com um ponto"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      else
        a = "Está faltando o subcampo $c do campo 260"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Testa se existe espaço entre o número e a indicaçação de extensão do texto
    local f300 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "300", "0", "0", fullpagename = target } }) or
        ""
    if f300 ~= "" then
      local f300a = frame:expandTemplate { title = "Select", args = { "300", "a", target } } or ""
      if f300a ~= "" then
        if string.match(f300a, "%d[a-z]%.") then
          a = 'Inclua um espaço entre o número e a indicação "p.", "f." ou "v." (subcampo $a do campo 300)'
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        -- Testa se existe espaço entre "p." e ";"
        if string.match(f300a, "%.[:;]") then
          a = 'Inclua um espaço entre a indicação "p.", "f." ou "v." e a pontuação final (subcampo $a do campo 300)'
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        -- Testa se existe "il." no subcampo $a (deve estar no subcampo $b)
        if string.match(f300a, "il%.") then
          a = 'Ilustrações e outros detalhes físicos devem ir no subcampo $b do campo 300, antecedidos de " : "'
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
      local f300b = frame:expandTemplate { title = "Select", args = { "300", "b", target } } or ""
      if f300b ~= "" then
        -- Testa se existe ".;" no subcampo $b do campo 300
        if string.match(f300b, "%.;") then
          a = "Inclua um espaço entre o ponto e o ponto e vírgula (campo 300, subcampo $b)"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        if string.match(f300b, "il,") then
          a = "Falta um ponto na abreviatura para ilustrações (il.)"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        if string.match(f300b, "il%.?, col") then
          a = "'Ilustrações coloridas' (il. color.) é uma expressão só, remova a vírgula"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        -- Testa se o subcampo $b contém "il. ; color" ou "il. ; p&b"
        if string.match(f300b, "il%. ?; color") then
          a = "'Ilustrações coloridas' (il. color.) é uma expressão só, remova o ponto e vírgula da expressão"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        if string.match(f300b, "il%. ?; p&b") then
          a = "'Ilustrações pretas e brancas' (il. p&b) é uma expressão só, remova o ponto e vírgula da expressão"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        -- Testa se os itens do subcampo $b estão separados por ponto e vírgula
        if string.match(f300b, "il%. ?; gráf") then
          a = "No campo 300, $b, os itens devem ser separados por vírgulas (il., gráfs.)"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        -- Testa se o subcampo $b termina em ":"
        if not string.match(f300, ":%s%$b") then
          a = 'A pontuação que precede o subcampo $b, no campo 300, deve ser sempre " : "'
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
      local f300c = frame:expandTemplate { title = "Select", args = { "300", "c", target } } or ""
      if f300c ~= "" then
        -- Testa se a sintaxe das dimensões está correta
        if string.match(f300c, "%d[a-z]") then
          a =
          'Atenção, a sintaxe correta para a dimensão é: "NN cm" ou, menos frequentemente, "NN x NN cm" (subcampo $c do campo 300)'
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      else
        if string.match(categories, "Livro") then
          a = "Está faltando o subcampo $c do campo 300"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
      -- Testa se a pontuação antes da dimensão é ".", "," ou ":"
      if string.match(f300, "[.,:]%s?%$c") then
        a = 'A pontuação que precede a dimensão (300 $c) deve ser " ; "'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se o subcampo $c termina em "-"
      if string.match(f300, "%-$") then
        a = "Nunca inclua hifens de separação de áreas do AACR2 em registros MARC 21. Reveja a pontuação (campo 300)"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    local f440 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "440", "0", "0", fullpagename = target } }) or
        ""
    if f440 ~= "" then
      a = "O campo 440 é obsoleto. Mova seu conteúdo para o campo 490"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
    -- Testa se existem indicadores, parênteses no subcampo $a do campo 490 e se existe ";" antes da numeração da série
    local f490 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "490", "0", "0", fullpagename = target } }) or
        ""
    if f490 ~= "" then
      if f490:sub(2, 2) ~= "#" then
        a = "O segundo indicador do campo 490 foi preenchido, porém, ele não deve ser preenchido"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      local f490a = frame:expandTemplate { title = "Select", args = { "490", "a", target } } or ""
      if f490a ~= "" then
        if string.match(f490a, "^%(") then
          a = "Segundo as orientações do MARC 21, não inclua os parênteses no campo 490 ou 830"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        -- Testa se o início da série/coleção começa com letra minúscula
        if string.match(f490a, "^[a-zà-ÿ]") then
          a = "Normalmente, o início de uma série/coleção (490 $a) começa com letra maiúscula"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
      local f490v = frame:expandTemplate { title = "Select", args = { "490", "v", target } } or ""
      if f490v ~= "" then
        if not string.match(f490, ";%s?%$v") then
          a = "É necessária a pontuação que precede a numeração da série (490, $v)"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
      -- Testa a consistência entre o indicador do 490 e a presença do campo 830
      local f830 =
          mw.text.trim(
            frame:expandTemplate { title = "Field data string", args = { "830", "0", "0", fullpagename = target } }
          ) or ""
      if f490:sub(1, 1) == "#" then
        a = "Está faltando o primeiro indicador do campo 490"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      elseif f490:sub(1, 1) == "1" then
        if f830 == "" then
          a =
          "Foi especificado um ponto de acesso secundário para a série (490, primeiro indicador com valor 1), porém, um campo 830 não foi informado"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      elseif f490:sub(1, 1) == "0" then
        if f830 ~= "" then
          a =
          "O primeiro indicador do campo 490 indica que não foi gerado um ponto de acesso para a série, porém, um campo 830 foi informado"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      else
        a = "O primeiro indicador do campo 490 foi preenchido incorretamente"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Testa se a nota 500 acaba com "."
    local f500 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "500", "0", "0", fullpagename = target } }) or
        ""
    if f500 ~= "" then
      if string.match(f500, "[a-zA-ZÀ-ü0-9:;-]$") then
        a = "Nossa política de catalogação define que as notas devem terminar com um ponto (500)"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if string.match(f500, "inclui") then
        a = "Verifique o uso de maiúsculas no início de frase ('inclui')"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Testa se a nota 504 acaba com "." e se existe uso de maiúsculas no meio da nota
    local f504 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "504", "0", "0", fullpagename = target } }) or
        ""
    if f504 ~= "" then
      if string.match(f504, "[a-zA-ZÀ-ü0-9]$") then
        a = "Nossa política de catalogação define que as notas devem terminar com um ponto (504)"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se existe uso de maiúsculas no meio da nota 504
      if string.match(f504:sub(6), ".*%s[A-Z]") then
        a = "Verifique o uso de maiúsculas na nota do campo 504"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if string.match(f504, "Inclui índice%.?$") then
        a = "'Inclui índice', somente, deve estar no campo 500"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    local f600 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "600", "0", "0", fullpagename = target } }) or
        ""
    -- Testa os indicadores dos campos 6XX
    if f600 ~= "" then
      if f600:sub(1, 1) == "#" then
        a = "Está faltando o primeiro indicador do campo 600"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if f600:sub(2, 2) ~= "4" then
        a = 'Nossa política de catalogação define que o segundo indicador do campo 600 deve ser sempre "4"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se existe "," no subcampo $a (Nome, Sobrenome)
      local f600a = frame:expandTemplate { title = "Select", args = { "600", "a", target } } or ""
      if f600a ~= "" then
        if not string.match(f600a, ".*,.") then
          a = "Em pontos de acesso, o nome pessoal deve ser invertido (Nome, Sobrenome). Verifique o campo 600"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        if string.match(f600a, "[a-zÀ-ü],[A-ZÀ-ü]") then
          a = "Falta espaço após a vírgula. Verifique o campo 600"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        if string.match(f600a, "%d%d%d%d") then
          a = "No campo 600, o ano deve ser informado no subcampo $d"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
      local f600q = frame:expandTemplate { title = "Select", args = { "600", "q", target } } or ""
      if f600q ~= "" then
        if not string.match(f600q, "^%(") then
          a = "O subcampo $q do campo 600 necessita parênteses"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
    end
    local f610 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "610", "0", "0", fullpagename = target } }) or
        ""
    if f610 ~= "" then
      if f610:sub(1, 1) == "#" then
        a = "Está faltando o primeiro indicador do campo 610"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if f610:sub(2, 2) ~= "4" then
        a = 'Nossa política de catalogação define que o segundo indicador do campo 610 deve ser sempre "4"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    local f611 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "611", "0", "0", fullpagename = target } }) or
        ""
    if f611 ~= "" then
      if f611:sub(1, 1) == "#" then
        a = "Está faltando o primeiro indicador do campo 611"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if f611:sub(2, 2) ~= "4" then
        a = 'Nossa política de catalogação define que o segundo indicador do campo 611 deve ser sempre "4"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    local f630 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "630", "0", "0", fullpagename = target } }) or
        ""
    if f630 ~= "" then
      if f630:sub(1, 1) == "#" then
        a = "Está faltando o primeiro indicador do campo 630"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if f630:sub(2, 2) ~= "4" then
        a = 'Nossa política de catalogação define que o segundo indicador do campo 630 deve ser sempre "4"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    local f650 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "650", "0", "0", fullpagename = target } }) or
        ""
    if f650 ~= "" then
      if f650:sub(1, 1) ~= "0" then
        a = 'Nossa política de catalogação define que o primeiro indicador do campo 650 deve ser sempre "0"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if f650:sub(2, 2) ~= "4" then
        a = 'Nossa política de catalogação define que o segundo indicador do campo 650 deve ser sempre "4"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se os assuntos começam com letra minúscula
      if string.match(f650, "%$[axzy]%s[a-z]") then
        a = "Os assuntos principais e suas subdivisões devem começar com letra maiúscula"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se um subcampo termina em "-"
      if string.match(f650, "%-%s?%$") then
        a = "Nunca inclua hifens entre termos de assuntos"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    local f651 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "651", "0", "0", fullpagename = target } }) or
        ""
    if f651 ~= "" then
      if f651:sub(1, 1) ~= "#" then
        a = 'Nossa política de catalogação define que o primeiro indicador do campo 651 deve ser sempre "#"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if f651:sub(2, 2) ~= "4" then
        a = 'Nossa política de catalogação define que o segundo indicador do campo 651 deve ser sempre "4"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Testa os pontos de acesso secundários, tal como os principais
    local f700 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "700", "0", "0", fullpagename = target } }) or
        ""
    if f700 ~= "" then
      info = "Um ponto de acesso secundário foi dado a uma <b>pessoa</b>"
      if f700:sub(1, 1) == "0" then
        a = 'e a entrada começa pelo seu <strong class="error">primeiro nome</strong>'
        info = string.format("* %s %s.", info, a)
        table.insert(infos, info)
      elseif f700:sub(1, 1) == "1" then
        a = "e a entrada começa pelo seu <b>sobrenome</b>"
        info = string.format("* %s %s.", info, a)
        table.insert(infos, info)
      elseif f700:sub(1, 1) == "3" then
        a = "e a entrada começa pelo seu <b>nome de família</b>"
        info = string.format("* %s %s.", info, a)
        table.insert(infos, info)
      elseif f700:sub(1, 1) == "#" then
        a = "o primeiro indicador não foi preenchido"
        info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
        table.insert(infos, info)
      else
        a = "o primeiro indicador foi preenchido incorretamente"
        info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
        table.insert(infos, info)
      end
      if f700:sub(2, 2) ~= "#" then
        a = "O segundo indicador do campo 700 foi preenchido, porém, ele não deve ser preenchido"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      -- Testa se existe mais de um subcampo $a no mesmo campo 700
      local exist700 = frame:expandTemplate { title = "Exist", args = { "700", target } } or false
      if exist700 == "yes" then
        if string.match(f700, "%$a.*%$a.-$") then
          a = "Há mais de um subcampo $a no campo 700. O subcampo $a não é repetível"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
        -- testa se existe "," no subcampo $a (Nome, Sobrenome)
        local f700a = frame:expandTemplate { title = "Select", args = { "700", "a", target } } or ""
        if f700a ~= "" then
          if not string.match(f700a, ".-,.") then
            a = "Em pontos de acesso, o nome pessoal deve ser invertido (Nome, Sobrenome). Verifique o campo 700"
            info = string.format('* <strong class="error">%s.</strong>', a)
            table.insert(infos, info)
          end
          if string.match(f700a, "[a-zÀ-ü],[A-ZÀ-ü]") then
            a = "Falta espaço após a vírgula. Verifique o campo 700"
            info = string.format('* <strong class="error">%s.</strong>', a)
            table.insert(infos, info)
          end
          if string.match(f700a, "%d%d%d%d") then
            a = "No campo 700, o ano deve ser informado no subcampo $d"
            info = string.format('* <strong class="error">%s.</strong>', a)
            table.insert(infos, info)
          end
        end
        local f700q = frame:expandTemplate { title = "Select", args = { "700", "q", target } } or ""
        if f700q ~= "" then
          if not string.match(f700q, "^%(") then
            a = "O subcampo $q do campo 700 necessita parênteses"
            info = string.format('* <strong class="error">%s.</strong>', a)
            table.insert(infos, info)
          end
        end
        local f700e = frame:expandTemplate { title = "Select", args = { "700", "e", target } } or ""
        if f700e ~= "" then
          if string.match(f700, "[a-zA-ZÀ-ü0-9%]-]%s?%$e") then
            a = "O subcampo $e do campo 700 deve ser precedido por uma vírgula"
            info = string.format('* <strong class="error">%s.</strong>', a)
            table.insert(infos, info)
          end
        end
      end
    end
    local f710 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "710", "0", "0", fullpagename = target } }) or
        ""
    if f710 ~= "" then
      info = "Um ponto de acesso secundário foi dado a uma <b>entidade coletiva</b>"
      if f710:sub(1, 1) == "0" then
        a = "e a entrada começa por um <b>nome invertido</b>"
        info = string.format("* %s %s.", info, a)
        table.insert(infos, info)
      elseif f710:sub(1, 1) == "1" then
        a = "e a entrada começa por um <b>nome de jurisdição</b>"
        info = string.format("* %s %s.", info, a)
        table.insert(infos, info)
      elseif f710:sub(1, 1) == "2" then
        a = "e a entrada começa por um <b>nome em ordem direta</b>"
        info = string.format("* %s %s.", info, a)
        table.insert(infos, info)
      elseif f710:sub(1, 1) == "#" then
        a = "o primeiro indicador não foi preenchido"
        info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
        table.insert(infos, info)
      else
        a = "o primeiro indicador foi preenchido incorretamente"
        info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
        table.insert(infos, info)
      end
      if f710:sub(2, 2) ~= "#" then
        a = "O segundo indicador do campo 710 foi preenchido, porém, ele não deve ser preenchido"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    local f711 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "711", "0", "0", fullpagename = target } }) or
        ""
    if f711 ~= "" then
      info = "Um ponto de acesso secundário foi dado a um <b>evento</b>"
      if f711:sub(1, 1) == "0" then
        a = "e a entrada começa por um <b>nome invertido</b>"
        info = string.format("* %s %s.", info, a)
        table.insert(infos, info)
      elseif f711:sub(1, 1) == "1" then
        a = "e a entrada começa por um <b>nome de jurisdição</b>"
        info = string.format("* %s %s.", info, a)
        table.insert(infos, info)
      elseif f711:sub(1, 1) == "2" then
        a = "e a entrada começa por um <b>nome em ordem direta</b>"
        info = string.format("* %s %s.", info, a)
        table.insert(infos, info)
      elseif f711:sub(1, 1) == "#" then
        a = "o primeiro indicador não foi preenchido"
        info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
        table.insert(infos, info)
      else
        a = "o primeiro indicador foi preenchido incorretamente"
        info = string.format('* %s, porém, <strong class="error">%s.</strong>', info, a)
        table.insert(infos, info)
      end
      if f711:sub(2, 2) ~= "#" then
        a = "O segundo indicador do campo 711 foi preenchido, porém, ele não deve ser preenchido"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    local f740 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "740", "0", "0", fullpagename = target } }) or
        ""
    if f740 ~= "" then
      if f740:sub(1, 1) == "#" then
        a = "O primeiro indicador do campo 740 precisa ser preenchido"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Testa os indicadores do campo 830
    local f830 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "830", "0", "0", fullpagename = target } }) or
        ""
    if f830 ~= "" then
      if f830:sub(1, 1) ~= "#" then
        a = "O primeiro indicador do campo 830 foi preenchido, porém, ele não deve ser preenchido"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      if f830:sub(2, 2) == "#" then
        a = "O segundo indicador do campo 830 precisa ser preenchido"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      local f830v = frame:expandTemplate { title = "Select", args = { "830", "v", target } } or ""
      if f830v ~= "" then
        if not string.match(f830, ";%s?%$v") then
          a = "É necessária a pontuação que precede a numeração da série (830, $v)"
          info = string.format('* <strong class="error">%s.</strong>', a)
          table.insert(infos, info)
        end
      end
      if f490 == "" then
        a = "Foi informado um ponto de acesso secundário para a série (campo 830), porém, um campo 490 não foi detectado"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    local f856 =
        mw.text.trim(frame:expandTemplate { title = "Field data string", args = { "856", "0", "0", fullpagename = target } }) or
        ""
    if f856 ~= "" then
      if f856:sub(1, 1) ~= "4" then
        a = 'O primeiro indicador do campo 856 precisa ter o valor "4"'
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
      local f856a = frame:expandTemplate { title = "Select", args = { "856", "a", target } } or ""
      if f856a ~= "" then
        a = "Normalmente, o subcampo utilizado no 856 é o $u, não o $a"
        info = string.format('* <strong class="error">%s.</strong>', a)
        table.insert(infos, info)
      end
    end
    -- Testa por inteiro o registro de modo a acusar: "," ou o "." precedido de espaço; designadores de subcampos errados
    local isoRecord =
        frame:callParserFunction {
          name = "#ask:[[-Has subobject::" .. target .. "]][[Field data::+]]",
          args = {
            "?Field data",
            format = "plainlist",
            link = "none",
            headers = "hide",
            mainlabel = "-",
            outro = "",
            sep = "",
            valuesep = "",
            propsep = ""
          }
        } or ""
    if string.match(isoRecord, "%s[.,][^.]") then
      a = "Pontos finais ou vírgulas nunca devem ser precedidos por um espaço"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
    if string.match(isoRecord, "%$[A-Z]") then
      a = "Não são permitidos designadores de subcampos com letras maiúsculas"
      info = string.format('* <strong class="error">%s.</strong>', a)
      table.insert(infos, info)
    end
  end -- end if 245

  return table.concat(infos, "\n")
end

return p