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

De Wikincat
Ir para navegação Ir para pesquisar
Conteúdo deletado Conteúdo adicionado
Sem resumo de edição
fix formOfItem
 
(10 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 3: Linha 3:
-- um handler para registros em "MARC tags", uma configuração para registros
-- um handler para registros em "MARC tags", uma configuração para registros
-- bibliográficos e uma configuração para registros de autoridade.
-- bibliográficos e uma configuração para registros de autoridade.
function p.record( frame )
function p.record(frame)
-- recebe o registro, o terceiro argumento da Predefinição:MARCimporter
-- recebe o registro, o terceiro argumento da Predefinição:MARCimporter
local record = frame.args[3] or ''
local record = frame.args[3] or ''
-- recebe o modo de normalização Unicode ("Sim" para ativar o modo NFD)
-- recebe o modo de normalização Unicode ("Sim" para ativar o modo NFD)
local isNFD = frame.args[2] or ''
local isNFD = frame.args[2] or ''
-- inicializa as variáveis básicas do registro
-- inicializa as variáveis básicas do registro
local leader = ''
local leader = ''
local baseAddressOfData = 0
local baseAddressOfData = 0
local directory = 0
local directory = ''
local dataValuesGroup = ''
local dataValuesGroup = ''
-- inicializa as variáveis auxiliares
-- inicializa as variáveis auxiliares
local directoryEntry = 0
local directoryEntry = ''
local entryTag = 0
local entryTag = ''
local entryDataLength = 0
local entryDataLength = ''
local entryInitPosition = 0
local entryInitPosition = ''
local dataField = {} -- Cada tabela que contém os dados dos campos. Formato:
local dataField = {} -- Cada tabela que contém os dados dos campos. Formato:
-- { tag='', length='', initPosition='', data='', ind1='', ind2='' }
-- { tag='', length='', initPosition='', data='', ind1='', ind2='' }
local dataFields = {} -- Tabela que contém cada tabela dataField. Formato:
local dataFields = {} -- Tabela que contém cada tabela dataField. Formato:
-- { 1={}, 2={}, 3={}, 4={}, n={} }
-- { 1={}, 2={}, 3={}, 4={}, n={} }
local controlField001 = ''
local controlField001 = ''
local controlField003 = ''
local controlField003 = ''
local controlField006 = ''
local controlField006 = ''
local controlField007 = ''
local controlField007 = ''
local controlField008 = ''
local controlField008 = ''
local tag040 = ''
local tag040 = ''
local firstTemplate = ''
local firstTemplate = ''
local fieldTemplates = ''
local fieldTemplates = ''
local lastTemplate = '{{EndOfRecord}}</pre>'
local lastTemplate = '{{EndOfRecord}}</pre>'
local queryString = ''
local queryString = ''
local fieldQueryString = ''
local fieldQueryString = ''
local formLink = ''
local formLink = ''
local function normalizeData( data )
local function normalizeData(data)
data = data
data = data
:gsub( '|(.)', ' $%1 ' ) -- substitui "|a" por " $a "
:gsub('|(.)', ' $%1 ') -- substitui "|a" por " $a "
:gsub( '(%d)p%.', '%1 p.' ) -- // "1p." por "1 p."
:gsub('(%d)p%.', '%1 p.') -- // "1p." por "1 p."
:gsub( '(%d)cm', '%1 cm' ) -- // "1cm" por "1 cm"
:gsub('(%d)cm', '%1 cm') -- // "1cm" por "1 cm"
:gsub( '(%d)ed%.', '%1 ed.' ) -- // "1ed." por "1 ed."
:gsub('(%d)ed%.', '%1 ed.') -- // "1ed." por "1 ed."
:gsub( '%.%s?%-$', '.' ) -- // ". -" por "."
:gsub('%.%s?%-$', '.') -- // ". -" por "."
:gsub( '(%$.*)(%$w.*)', '%2 %1' ) -- move o subcampo $w para a frente
:gsub('(%$.*)(%$w.*)', '%2 %1') -- move o subcampo $w para a frente
:gsub( '(%s%$9%s.*)', '' ) -- remove o subcampo $9
:gsub('(%s%$9%s.*)', '') -- remove o subcampo $9
:gsub( '(%$z.*)(%$u.*)', '%2 %1' ) -- move o subcampo $u para a frente
:gsub('(%$z.*)(%$u.*)', '%2 %1') -- move o subcampo $u para a frente
:gsub( '[\n\r]', '') -- remove line feed e carriage return
:gsub('[\n\r]', '') -- remove line feed e carriage return
return data
return data
end
end
if record:match( '^%d%d%d%d' )
if record:match('^%d%d%d%d')
then
then
-- == MARC ISO 2709 handler == --
-- == MARC ISO 2709 handler == --
-- O MediaWiki substitui caracteres de controle (RS, US, GS) pelo
-- O MediaWiki substitui caracteres de controle (RS, US, GS) pelo
-- caractere de "desconhecido" (losango com interrogação) e, aqui,
-- caractere de "desconhecido" (losango com interrogação) e, aqui,
-- substituo esse caractere por um pipe (é necessário substituir
-- substituo esse caractere por um pipe (é necessário substituir
-- por um caractere da faixa ASCII).
-- por um caractere da faixa ASCII).
record = record:gsub( '�', '|' )
record = record:gsub('�', '|')
-- verifica se a forma de normalização Unicode é a
-- verifica se a forma de normalização Unicode é a
-- Normalization Form Canonical Decomposition (NFD)
-- Normalization Form Canonical Decomposition (NFD)
if isNFD == 'Sim'
if isNFD == 'Sim'
then
then
record = mw.ustring.toNFD( record )
record = mw.ustring.toNFD(record)
end
end
-- configuração das variáveis básicas do registro (via ISO 2709):
-- configuração das variáveis básicas do registro (via ISO 2709):
-- obtém o líder
-- obtém o líder
leader = record:sub( 1, 24 ) or ''
leader = record:sub(1, 24) or ''
--> 00898nam a2200277 a 4500
--> 00898nam a2200277 a 4500
-- obtém o endereço base dos dados
-- obtém o endereço base dos dados
baseAddressOfData = tonumber( leader:sub( 13, 17 ) ) or 0
baseAddressOfData = tonumber(leader:sub(13, 17)) or 0
--> 00277
--> 00277
-- obtém o diretório (-1 para não pegar RS)
-- obtém o diretório (-1 para não pegar RS)
directory = record:sub( 25, baseAddressOfData - 1 ) or 0
directory = record:sub(25, baseAddressOfData - 1) or ''
--> 0010010000000050017000100080041000270200027000680400017000950...
--> 0010010000000050017000100080041000270200027000680400017000950...
-- obtém os dados dos campos em um único grupo
-- obtém os dados dos campos em um único grupo
dataValuesGroup = record:sub( baseAddressOfData + 1 ) or ''
dataValuesGroup = record:sub(baseAddressOfData + 1) or ''
--> 278 até o final do registro
--> 278 até o final do registro
-- enquanto o tamanho do diretório for maior que 0...
-- enquanto o tamanho do diretório for maior que 0...
while #directory > 0
while #directory > 0
do
do
directoryEntry = directory:sub( 1, 12 ) -- 245008100177
directoryEntry = directory:sub(1, 12) -- 245008100177
entryTag = directoryEntry:sub( 1, 3 ) -- 245
entryTag = directoryEntry:sub(1, 3) -- 245
entryDataLength = directoryEntry:sub( 4, 7 ) -- 0081
entryDataLength = directoryEntry:sub(4, 7) -- 0081
entryInitPosition = directoryEntry:sub( 8, 12 ) -- 00177
entryInitPosition = directoryEntry:sub(8, 12) -- 00177
-- cria uma tabela com os dados...
-- cria uma tabela com os dados...
dataField = {
dataField = {
tag = entryTag,
tag = entryTag,
length = entryDataLength,
length = entryDataLength,
initPosition = entryInitPosition
initPosition = entryInitPosition
}
}
-- e insere cada tabela dataField na tabela dataFields
-- e insere cada tabela dataField na tabela dataFields
table.insert( dataFields, dataField )
table.insert(dataFields, dataField)
-- esvazia o diretório de 12 em 12
-- esvazia o diretório de 12 em 12
directory = directory:sub( 13 )
directory = directory:sub(13)
end
end
-- para cada item da tabela dataFields...
-- para cada item da tabela dataFields...
for index, dataField in ipairs( dataFields )
for index, dataField in ipairs(dataFields)
do
do
-- configura as variáveis para uso na função string.sub( i, j )
-- configura as variáveis para uso na função string.sub( i, j )
-- (+1 porque em Lua se começa do 1, não do 0)
-- (+1 porque em Lua se começa do 1, não do 0)
local i = dataFields[index].initPosition + 1
local i = dataFields[index].initPosition + 1
-- (-1 para não pegar RS)
-- (-1 para não pegar RS)
local j = dataFields[index].initPosition + dataFields[index].length - 1
local j = dataFields[index].initPosition + dataFields[index].length - 1
-- localiza o dado em dataValuesGroup, normaliza o dado
-- localiza o dado em dataValuesGroup, normaliza o dado
-- e armazena na tabela
-- e armazena na tabela
dataFields[index].data = normalizeData( dataValuesGroup:sub( i, j ) )
dataFields[index].data = normalizeData(dataValuesGroup:sub(i, j))
-- armazena os campos de controle (00X) para posterior decomposição
-- armazena os campos de controle (00X) para posterior decomposição
if dataFields[index].tag == '006'
if dataFields[index].tag == '006'
then
then
controlField006 = dataFields[index].data:gsub( '[|#$]', ' ' )
controlField006 = dataFields[index].data:gsub('[|#$]', ' ')
end
end
if dataFields[index].tag == '007'
if dataFields[index].tag == '007'
then
then
controlField007 = dataFields[index].data:gsub( '[|#$\r]', ' ' )
controlField007 = dataFields[index].data:gsub('[|#$\r]', ' ')
end
end
if dataFields[index].tag == '008'
if dataFields[index].tag == '008'
then
then
controlField008 = dataFields[index].data:gsub( '[|#$-]', ' ' )
controlField008 = dataFields[index].data:gsub('[|#$-]', ' ')
end
end
end
end
else
else
-- == MARC tags handler == --
-- == MARC tags handler == --
record = record
record = record
:gsub( ' ', ' ' ) -- LC bib handling (\t+\s)
:gsub(' ', ' ') -- LC bib handling (\t+\s)
:gsub( ' ', ' ' ) -- LC aut handling (\t)
:gsub(' ', ' ') -- LC aut handling (\t)
:gsub( '    ', ' ' ) -- Pergamum handling (control fields) (non-breaking space)
:gsub('    ', ' ') -- Pergamum handling (control fields) (non-breaking space)
:gsub( ' ', ' ' ) -- Pergamum handling (data fields) (non-breaking space)
:gsub(' ', ' ') -- Pergamum handling (data fields) (non-breaking space)
record = record .. '\n'
record = record .. '\n'
if record:match( '^FMT' ) or record:match( '^LDR' ) -- Aleph handling
if record:match('^FMT') or record:match('^LDR') -- Aleph handling
then
then
record = record:gsub( '\t', ' ' ) -- 1
record = record:gsub('\t', ' ') -- 1
:gsub( '^(FMT%s[A-Z].-\n)', '' ) -- 2
:gsub('^(FMT%s[A-Z].-\n)', '') -- 2
:gsub( 'LDR%s([0%s][0%s][0%s][0%s][0%s].-\n)', '000 %1' ) -- 3
:gsub('LDR%s([0%s][0%s][0%s][0%s][0%s].-\n)', '000 %1') -- 3
:gsub( '\n(%d%d%d)%s(%$.%s)', '\n%1 %2' ) -- 4
:gsub('\n(%d%d%d)%s(%$.%s)', '\n%1 %2') -- 4
:gsub( '\n(%d%d%d)(%d)', '\n%1 %2' ) -- 5
:gsub('\n(%d%d%d)(%d)', '\n%1 %2') -- 5
:gsub( '\n(%d%d%d%s%d%s)', '\n%1 ' ) -- 6 (manter essa ordem)
:gsub('\n(%d%d%d%s%d%s)', '\n%1 ') -- 6 (manter essa ordem)
end
end
-- configuração das variáveis básicas do registro (via MARC tags):
-- configuração das variáveis básicas do registro (via MARC tags):
-- obtém o líder
-- obtém o líder
leader = record:match( '^000%s([%d%s][%d%s][%d%s][%d%s][%d%s].-)\n' ) or ''
leader = record:match('^000%s([%d%s][%d%s][%d%s][%d%s][%d%s].-)\n') or ''
leader = leader:gsub( '[|#$]', ' ' )
leader = leader:gsub('[|#$]', ' ')
-- obtém os campos de controle
-- obtém os campos de controle
controlField001 = record:match( '\n001%s(.-)\n' ) or ''
controlField001 = record:match('\n001%s(.-)\n') or ''
controlField003 = record:match( '\n003%s(.-)\n' ) or ''
controlField003 = record:match('\n003%s(.-)\n') or ''
controlField003 = mw.text.trim(controlField003)
controlField006 = record:match( '\n006%s([a-z].-)\n' ) or ''
controlField006 = controlField006:gsub( '[|#$]', ' ' )
controlField006 = record:match('\n006%s([a-z].-)\n') or ''
controlField006 = controlField006:gsub('[|#$]', ' ')
controlField007 = record:match( '\n007%s([a-z].-)\n' ) or ''
controlField007 = controlField007:gsub( '[|#$\r]', ' ' )
controlField007 = record:match('\n007%s([a-z].-)\n') or ''
controlField007 = controlField007:gsub('[|#$\r]', ' ')
controlField008 = record:match( '008%s([%d%s][%d%s][%d%s][%d%s][%d%s][%d%s].-)\n' ) or ''
controlField008 = controlField008:gsub( '[|#$-]', ' ' )
controlField008 = record:match('008%s([%d%s][%d%s][%d%s][%d%s][%d%s][%d%s].-)\n') or ''
controlField008 = controlField008:gsub('[|#$-]', ' ')
-- para cada linha do registro, identifica o campo e seu conteúdo
-- para cada linha do registro, identifica o campo e seu conteúdo
-- (o conteúdo inclui os indicadores)
-- (o conteúdo inclui os indicadores)
for tagMatch, dataMatch in record:gmatch(
for tagMatch, dataMatch in record:gmatch(
'([0-8]%d%d) ([0-9_%s][0-9_%s] [$|].-)\n' )
'([0-8]%d%d) ([0-9_%s][0-9_%s] [$|].-)\n')
do
do
-- transforma o dado para o formato igual ao manipulado pelo
-- transforma o dado para o formato igual ao manipulado pelo
-- MARC ISO 2709 handler
-- MARC ISO 2709 handler
dataMatch = dataMatch:gsub( '%s?|(.)%s', '|%1' )
dataMatch = dataMatch:gsub('%s?|(.)%s', '|%1')
-- normaliza o dado
-- normaliza o dado
dataMatch = normalizeData(dataMatch)
dataMatch = normalizeData(dataMatch)


-- cria uma tabela com os dados...
-- cria uma tabela com os dados...
dataField = {
dataField = {
tag = tagMatch,
tag = tagMatch,
data = dataMatch
data = dataMatch
}
}
-- e insere cada tabela dataField na tabela dataFields
-- e insere cada tabela dataField na tabela dataFields
table.insert( dataFields, dataField )
table.insert(dataFields, dataField)
end
end
end
end
-- == Handler unificado == --
-- == Handler unificado == --
if leader:sub( 7, 7 ) == 'z' and controlField003:lower():match( 'br' )
if leader:sub(7, 7) == 'z' and (controlField003:lower():match('br') or controlField003:lower():match('br-rjbn'))
then
then
-- cria uma tabela com os dados...
-- cria uma tabela com os dados...
dataField = {
dataField = {
tag = '670',
tag = '670',
data = '## $a CA-BN ' .. os.date( '%Y' )
data = '## $a CA-BN ' .. os.date('%Y')
}
}
-- e insere a tabela dataField na tabela dataFields
-- e insere a tabela dataField na tabela dataFields
table.insert( dataFields, dataField )
table.insert(dataFields, dataField)
-- também mova o número de controle para o campo 035
-- também mova o número de controle para o campo 035
dataField = {
dataField = {
tag = '035',
tag = '035',
data = '## $a ' .. '(' .. controlField003 .. ')' .. controlField001
data = '## $a ' .. '(' .. controlField003 .. ')' .. controlField001
}
}
table.insert( dataFields, dataField )
table.insert(dataFields, dataField)
end
end
-- função de ordenação dos campos
-- função de ordenação dos campos
local function sortByTag ( a, b )
local function sortByTag(a, b)
if ( a.tag < b.tag )
if (a.tag < b.tag)
then
then
return true
return true
elseif ( a.tag > b.tag )
elseif (a.tag > b.tag)
then
then
return false
return false
else
else
return a.originalOrder < b.originalOrder
return a.originalOrder < b.originalOrder
end
end
end
end
-- para cada item da tabela dataFields...
-- para cada item da tabela dataFields...
for index, dataField in ipairs( dataFields )
for index, dataField in ipairs(dataFields)
do
do
-- verifica se a tag é a 040
-- verifica se a tag é a 040
if dataFields[index].tag == '040'
if dataFields[index].tag == '040'
-- se for, adiciona o subcampo para a agência modificadora do registro
-- se for, adiciona o subcampo para a agência modificadora do registro
-- e marca como verdadeiro a presença deste campo
-- e marca como verdadeiro a presença deste campo
then
then
dataFields[index].data = dataFields[index].data .. ' $d BR-FlWIK'
dataFields[index].data = dataFields[index].data .. ' $d BR-FlWIK'
tag040 = dataFields[index].data
tag040 = dataFields[index].data
end
end
-- verifica se a tag é uma das seguintes
-- verifica se a tag é uma das seguintes
if dataFields[index].tag == '092' or dataFields[index].tag == '595'
if dataFields[index].tag == '092' or dataFields[index].tag == '595'
then
then
-- se for, exclua da tabela dataFields
-- se for, exclua da tabela dataFields
table.remove( dataFields, index )
table.remove(dataFields, index)
end
end
end
end
-- se o registro for da LC
-- se não há campo 040, então será criado agora
if leader:sub(7, 7) == 'z' and tag040:match('a DLC')
if tag040 == ''
then
then
-- cria uma tabela com os dados...
-- cria uma tabela com os dados...
dataField = {
dataField = {
tag = '040',
tag = '670',
data = '## $a BR-FlWIK $b por $c BR-FlWIK'
data = '## $a CA-LC ' .. os.date('%Y')
}
}
-- e insere a tabela dataField na tabela dataFields
-- e insere a tabela dataField na tabela dataFields
table.insert( dataFields, dataField )
table.insert(dataFields, dataField)
end
end
-- se não há campo 040, então será criado agora
if leader:sub( 7, 7 ) == 'z' and tag040:match( 'a DLC' )
if tag040 == ''
then
then
-- cria uma tabela com os dados...
-- cria uma tabela com os dados...
dataField = {
dataField = {
tag = '670',
data = '## $a CA-LC ' .. os.date( '%Y' )
tag = '040',
data = '## $a BR-FlWIK $b por $c BR-FlWIK'
}
}
-- e insere a tabela dataField na tabela dataFields
-- e insere a tabela dataField na tabela dataFields
table.insert( dataFields, dataField )
table.insert(dataFields, dataField)
end
end
for index, dataField in ipairs( dataFields )
for index, dataField in ipairs(dataFields)
do
do
-- guarda a ordem original do campo para posterior inclusão de outros
-- campos (mantendo a ordem original)
-- guarda a ordem original do campo para posterior inclusão de outros
-- campos (mantendo a ordem original)
dataFields[index].originalOrder = index
dataFields[index].originalOrder = index
end
end
-- ordena os campos do registro
-- ordena os campos do registro
table.sort( dataFields, sortByTag )
for index, dataField in ipairs( dataFields )
table.sort(dataFields, sortByTag)
for index, dataField in ipairs(dataFields)
do
do
-- se os campos forem maior que 009, então gerarão indicadores
-- se os campos forem maior que 009, então gerarão indicadores
if tonumber( dataFields[index].tag ) > 9
if tonumber(dataFields[index].tag) > 9
then
then
dataFields[index].ind1 =
dataFields[index].ind1 =
dataFields[index].data:sub( 1, 1 ):gsub( '[ _]', '#' )
dataFields[index].ind2 =
dataFields[index].data:sub(1, 1):gsub('[ _]', '#')
dataFields[index].ind2 =
dataFields[index].data:sub( 2, 2 ):gsub( '[ _]', '#' )
dataFields[index].data:sub(2, 2):gsub('[ _]', '#')
end
end
-- se, também, os campos estiverem entre 010 e 830 (com exceção para 856),
-- se, também, os campos estiverem entre 010 e 830 (com exceção para 856),
-- criará a query string do link para o formulário e a sintaxe da
-- criará a query string do link para o formulário e a sintaxe da
-- Predefinição Field
-- Predefinição Field
if
if
tonumber( dataFields[index].tag ) == 10 or
tonumber( dataFields[index].tag ) > 12 and
tonumber(dataFields[index].tag) == 10 or
tonumber( dataFields[index].tag ) < 831 or
tonumber(dataFields[index].tag) > 12 and
tonumber( dataFields[index].tag ) == 856
tonumber(dataFields[index].tag) < 831 or
tonumber(dataFields[index].tag) == 856
then
then
-- query string maker (part 2), Predefinição Field
-- query string maker (part 2), Predefinição Field
fieldQueryString = fieldQueryString ..
fieldQueryString = fieldQueryString ..
'&Field[' .. index .. '][tag]=' .. dataField.tag ..
'&Field[' .. index .. '][ind1]=' .. dataField.ind1 ..
'&Field[' .. index .. '][tag]=' .. dataField.tag ..
'&Field[' .. index .. '][ind2]=' .. dataField.ind2 ..
'&Field[' .. index .. '][ind1]=' .. dataField.ind1 ..
'&Field[' .. index .. '][data]=' .. mw.uri.encode( dataField.data:sub( 4 ), 'PATH' )
'&Field[' .. index .. '][ind2]=' .. dataField.ind2 ..
'&Field[' .. index .. '][data]=' .. mw.uri.encode(dataField.data:sub(4), 'PATH')
-- template string maker (part 2), Predefinição Field
-- template string maker (part 2), Predefinição Field
fieldTemplates = fieldTemplates .. '{{Field' ..
fieldTemplates = fieldTemplates .. '{{Field' ..
'\n|tag=' .. dataField.tag ..
'\n|ind1=' .. dataField.ind1 ..
'\n|tag=' .. dataField.tag ..
'\n|ind2=' .. dataField.ind2 ..
'\n|ind1=' .. dataField.ind1 ..
'\n|data=' .. dataField.data:sub( 4 ) ..
'\n|ind2=' .. dataField.ind2 ..
'\n|data=' .. dataField.data:sub(4) ..
'\n}}\n'
'\n}}\n'
end
end
end
end
if frame.args[1] == 'bib' or frame.args[1] == ''
if frame.args[1] == 'bib' or frame.args[1] == ''
then
then
-- inicializa as variáveis derivadas (registro bibliográfico)
-- inicializa as variáveis derivadas (registro bibliográfico)
-- líder
-- líder
local recordStatus = leader:sub( 6, 6 )
local typeOfRecord = leader:sub( 7, 7 )
local recordStatus = leader:sub(6, 6)
local bibliographicLevel = leader:sub( 8, 8 )
local typeOfRecord = leader:sub(7, 7)
local encodingLevel = leader:sub( 18, 18 )
local bibliographicLevel = leader:sub(8, 8)
if encodingLevel == ' '
local encodingLevel = leader:sub(18, 18)
if encodingLevel == ' '
then
then
encodingLevel = ''
encodingLevel = ''
end
end
local descriptiveCatalogingForm = leader:sub( 19, 19 )
if descriptiveCatalogingForm == ' '
local descriptiveCatalogingForm = leader:sub(19, 19)
if descriptiveCatalogingForm == ' '
then
then
descriptiveCatalogingForm = ''
descriptiveCatalogingForm = ''
end
end
local multipartResourceRecordLevel = leader:sub( 20, 20 )
if multipartResourceRecordLevel == ' '
local multipartResourceRecordLevel = leader:sub(20, 20)
if multipartResourceRecordLevel == ' '
then
then
multipartResourceRecordLevel = ''
multipartResourceRecordLevel = ''
end
end
-- control field 008
-- control field 008
local dateEnteredOnFile = controlField008:sub( 1, 6 )
local typeOfDate = controlField008:sub( 7, 7 )
local dateEnteredOnFile = controlField008:sub(1, 6)
local date1 = controlField008:sub( 8, 11 )
local typeOfDate = controlField008:sub(7, 7)
local date2 = controlField008:sub( 12, 15 )
local date1 = controlField008:sub(8, 11)
local placeOfPublication = controlField008:sub( 16, 18 )
local date2 = controlField008:sub(12, 15)
local illustrations = controlField008:sub( 19, 19 )
local placeOfPublication = controlField008:sub(16, 18)
if illustrations == ' '
local illustrations = controlField008:sub(19, 19)
if illustrations == ' '
then
then
illustrations = ''
illustrations = ''
end
end
local targetAudience = controlField008:sub( 23, 23 )
if targetAudience == ' '
local targetAudience = controlField008:sub(23, 23)
if targetAudience == ' '
then
then
targetAudience = ''
targetAudience = ''
end
end
local formOfItem = controlField008:sub( 24, 24 )
if formOfItem == ' '
local formOfItem = controlField008:sub(24, 24)
if formOfItem == ' '
then
then
formOfItem = 'r'
formOfItem = ''
end
end
local natureOfContents = controlField008:sub( 25, 25 )
if natureOfContents == ' '
local natureOfContents = controlField008:sub(25, 25)
if natureOfContents == ' '
then
then
natureOfContents = ''
natureOfContents = ''
end
end
local governmentPublication = controlField008:sub( 29, 29 )
if governmentPublication == ' ' or governmentPublication == '0'
local governmentPublication = controlField008:sub(29, 29)
if governmentPublication == ' ' or governmentPublication == '0'
then
then
governmentPublication = ''
governmentPublication = ''
end
end
local conferencePublication = controlField008:sub( 30, 30 )
if conferencePublication == '0'
local conferencePublication = controlField008:sub(30, 30)
if conferencePublication == '0'
then
then
conferencePublication = ''
conferencePublication = ''
end
end
local festschrift = controlField008:sub( 31, 31 )
if festschrift == '0'
local festschrift = controlField008:sub(31, 31)
if festschrift == ' '
then
then
festschrift = ''
festschrift = ''
end
end
local index = controlField008:sub( 32, 32 )
if index == '0' or index == ' '
local index = controlField008:sub(32, 32)
if index == '0' or index == ' '
then
then
index = ''
index = ''
end
end
local literaryForm = controlField008:sub( 34, 34 )
if literaryForm == '0' or literaryForm == ' '
local literaryForm = controlField008:sub(34, 34)
if literaryForm == '0' or literaryForm == ' '
then
then
literaryForm = ''
literaryForm = ''
end
end
local biography = controlField008:sub( 35, 35 )
if biography == ' '
local biography = controlField008:sub(35, 35)
if biography == ' '
then
then
biography = ''
biography = ''
end
end
local language = controlField008:sub( 36, 38 )
local modifiedRecord = controlField008:sub( 39, 39 )
local language = controlField008:sub(36, 38)
local modifiedRecord = controlField008:sub(39, 39)
if modifiedRecord == ' ' or modifiedRecord:match( '\r' )
if modifiedRecord == ' ' or modifiedRecord:match('\r')
then
then
modifiedRecord = ''
modifiedRecord = ''
end
end
local catalogingSource = controlField008:sub( 40, 40 )
if catalogingSource == ' '
local catalogingSource = controlField008:sub(40, 40)
if catalogingSource == ' '
then
then
catalogingSource = ''
catalogingSource = ''
end
end
-- query string maker (part 1), Predefinição BibRecord
-- query string maker (part 1), Predefinição BibRecord
queryString =
queryString =
'BibRecord[dateEnteredOnFile]=' .. dateEnteredOnFile ..
'&BibRecord[recordStatus]=' .. recordStatus ..
'BibRecord[dateEnteredOnFile]=' .. dateEnteredOnFile ..
'&BibRecord[typeOfRecord]=' .. typeOfRecord ..
'&BibRecord[recordStatus]=' .. recordStatus ..
'&BibRecord[bibliographicLevel]=' .. bibliographicLevel ..
'&BibRecord[typeOfRecord]=' .. typeOfRecord ..
'&BibRecord[encodingLevel]=' .. encodingLevel ..
'&BibRecord[bibliographicLevel]=' .. bibliographicLevel ..
'&BibRecord[descriptiveCatalogingForm]=' .. descriptiveCatalogingForm ..
'&BibRecord[encodingLevel]=' .. encodingLevel ..
'&BibRecord[multipartResourceRecordLevel]=' .. multipartResourceRecordLevel ..
'&BibRecord[descriptiveCatalogingForm]=' .. descriptiveCatalogingForm ..
'&BibRecord[controlField006]=' .. controlField006 ..
'&BibRecord[multipartResourceRecordLevel]=' .. multipartResourceRecordLevel ..
'&BibRecord[controlField007]=' .. controlField007 ..
'&BibRecord[controlField006]=' .. controlField006 ..
'&BibRecord[typeOfDate]=' .. typeOfDate ..
'&BibRecord[controlField007]=' .. controlField007 ..
'&BibRecord[date1]=' .. date1 ..
'&BibRecord[typeOfDate]=' .. typeOfDate ..
'&BibRecord[date2]=' .. date2 ..
'&BibRecord[date1]=' .. date1 ..
'&BibRecord[placeOfPublication]=' .. placeOfPublication ..
'&BibRecord[date2]=' .. date2 ..
'&BibRecord[illustrations]=' .. illustrations ..
'&BibRecord[placeOfPublication]=' .. placeOfPublication ..
'&BibRecord[targetAudience]=' .. targetAudience ..
'&BibRecord[illustrations]=' .. illustrations ..
'&BibRecord[formOfItem]=' .. formOfItem ..
'&BibRecord[targetAudience]=' .. targetAudience ..
'&BibRecord[natureOfContents]=' .. natureOfContents ..
'&BibRecord[formOfItem]=' .. formOfItem ..
'&BibRecord[governmentPublication]=' .. governmentPublication ..
'&BibRecord[natureOfContents]=' .. natureOfContents ..
'&BibRecord[conferencePublication]=' .. conferencePublication ..
'&BibRecord[governmentPublication]=' .. governmentPublication ..
'&BibRecord[festschrift]=' .. festschrift ..
'&BibRecord[conferencePublication]=' .. conferencePublication ..
'&BibRecord[index]=' .. index ..
'&BibRecord[festschrift]=' .. festschrift ..
'&BibRecord[literaryForm]=' .. literaryForm ..
'&BibRecord[index]=' .. index ..
'&BibRecord[biography]=' .. biography ..
'&BibRecord[literaryForm]=' .. literaryForm ..
'&BibRecord[language]=' .. language ..
'&BibRecord[biography]=' .. biography ..
'&BibRecord[modifiedRecord]=' .. modifiedRecord ..
'&BibRecord[language]=' .. language ..
'&BibRecord[catalogingSource]=' .. catalogingSource ..
'&BibRecord[modifiedRecord]=' .. modifiedRecord ..
'&BibRecord[catalogingSource]=' .. catalogingSource ..
fieldQueryString
fieldQueryString
-- template string maker (part 1), Predefinição BibRecord
-- template string maker (part 1), Predefinição BibRecord
firstTemplate = '<pre>{{BibRecord\n' ..
firstTemplate = '<pre>{{BibRecord\n' ..
'|dateEnteredOnFile=' .. dateEnteredOnFile .. '\n' ..
'|recordStatus=' .. recordStatus .. '\n' ..
'|dateEnteredOnFile=' .. dateEnteredOnFile .. '\n' ..
'|typeOfRecord=' .. typeOfRecord .. '\n' ..
'|recordStatus=' .. recordStatus .. '\n' ..
'|bibliographicLevel=' .. bibliographicLevel .. '\n' ..
'|typeOfRecord=' .. typeOfRecord .. '\n' ..
'|encodingLevel=' .. encodingLevel .. '\n' ..
'|bibliographicLevel=' .. bibliographicLevel .. '\n' ..
'|descriptiveCatalogingForm=' .. descriptiveCatalogingForm .. '\n' ..
'|encodingLevel=' .. encodingLevel .. '\n' ..
'|multipartResourceRecordLevel=' .. multipartResourceRecordLevel .. '\n' ..
'|descriptiveCatalogingForm=' .. descriptiveCatalogingForm .. '\n' ..
'|controlField006=' .. controlField006 .. '\n' ..
'|multipartResourceRecordLevel=' .. multipartResourceRecordLevel .. '\n' ..
'|controlField007=' .. controlField007 .. '\n' ..
'|controlField006=' .. controlField006 .. '\n' ..
'|typeOfDate=' .. typeOfDate .. '\n' ..
'|controlField007=' .. controlField007 .. '\n' ..
'|date1=' .. date1 .. '\n' ..
'|typeOfDate=' .. typeOfDate .. '\n' ..
'|date2=' .. date2 .. '\n' ..
'|date1=' .. date1 .. '\n' ..
'|placeOfPublication=' .. placeOfPublication .. '\n' ..
'|date2=' .. date2 .. '\n' ..
'|illustrations=' .. illustrations .. '\n' ..
'|placeOfPublication=' .. placeOfPublication .. '\n' ..
'|targetAudience=' .. targetAudience .. '\n' ..
'|illustrations=' .. illustrations .. '\n' ..
'|formOfItem=' .. formOfItem .. '\n' ..
'|targetAudience=' .. targetAudience .. '\n' ..
'|natureOfContents=' .. natureOfContents .. '\n' ..
'|formOfItem=' .. formOfItem .. '\n' ..
'|governmentPublication=' .. governmentPublication .. '\n' ..
'|natureOfContents=' .. natureOfContents .. '\n' ..
'|conferencePublication=' .. conferencePublication .. '\n' ..
'|governmentPublication=' .. governmentPublication .. '\n' ..
'|festschrift=' .. festschrift .. '\n' ..
'|conferencePublication=' .. conferencePublication .. '\n' ..
'|index=' .. index .. '\n' ..
'|festschrift=' .. festschrift .. '\n' ..
'|literaryForm=' .. literaryForm .. '\n' ..
'|index=' .. index .. '\n' ..
'|biography=' .. biography .. '\n' ..
'|literaryForm=' .. literaryForm .. '\n' ..
'|language=' .. language .. '\n' ..
'|biography=' .. biography .. '\n' ..
'|modifiedRecord=' .. modifiedRecord .. '\n' ..
'|language=' .. language .. '\n' ..
'|modifiedRecord=' .. modifiedRecord .. '\n' ..
'|catalogingSource=' .. catalogingSource ..
'|catalogingSource=' .. catalogingSource ..
'\n}}\n'
'\n}}\n'
-- cria o botão para a importação do registro
-- cria o botão para a importação do registro
formLink = frame:callParserFunction{ name = '#formlink',
formLink = frame:callParserFunction { name = '#formlink',
args = { 'form=BibRecord', 'link text=Importar registro',
args = { 'form=BibRecord', 'link text=Importar registro',
'link type=post button', 'query string=' .. queryString } }
'link type=post button', 'query string=' .. queryString } }
else
else
-- inicializa as variáveis derivadas (registro de autoridade)
-- inicializa as variáveis derivadas (registro de autoridade)
-- líder
-- líder
local recordStatus = leader:sub( 6, 6 )
local encodingLevel = leader:sub( 18, 18 )
local recordStatus = leader:sub(6, 6)
if encodingLevel == ' '
local encodingLevel = leader:sub(18, 18)
if encodingLevel == ' '
then
then
encodingLevel = ''
encodingLevel = ''
end
end
local punctuationPolicy = leader:sub( 19, 19 )
if punctuationPolicy == ' ' or punctuationPolicy == '4'
local punctuationPolicy = leader:sub(19, 19)
if punctuationPolicy == ' ' or punctuationPolicy == '4'
then
then
punctuationPolicy = ''
punctuationPolicy = ''
end
end
-- control field 008
-- control field 008
local dateEnteredOnFile = controlField008:sub( 1, 6 )
local directOrIndirectGeogSubdiv = controlField008:sub( 7, 7 )
local dateEnteredOnFile = controlField008:sub(1, 6)
if directOrIndirectGeogSubdiv == ' '
local directOrIndirectGeogSubdiv = controlField008:sub(7, 7)
if directOrIndirectGeogSubdiv == ' '
then
then
directOrIndirectGeogSubdiv = ''
directOrIndirectGeogSubdiv = ''
end
end
local romanizationScheme = controlField008:sub( 8, 8 )
local languageOfCatalog = controlField008:sub( 9, 9 )
local romanizationScheme = controlField008:sub(8, 8)
if languageOfCatalog == ' '
local languageOfCatalog = controlField008:sub(9, 9)
if languageOfCatalog == ' '
then
then
languageOfCatalog = ''
languageOfCatalog = ''
end
end
local kindOfRecord = controlField008:sub( 10, 10 )
local descriptiveCatalogingRules = controlField008:sub( 11, 11 )
local kindOfRecord = controlField008:sub(10, 10)
local subjectHeadingSystem = controlField008:sub( 12, 12 )
local descriptiveCatalogingRules = controlField008:sub(11, 11)
local typeOfSeries = controlField008:sub( 13, 13 )
local subjectHeadingSystem = controlField008:sub(12, 12)
local numberedOrUnnumberedSeries = controlField008:sub( 14, 14 )
local typeOfSeries = controlField008:sub(13, 13)
if numberedOrUnnumberedSeries == ' '
local numberedOrUnnumberedSeries = controlField008:sub(14, 14)
if numberedOrUnnumberedSeries == ' '
then
then
numberedOrUnnumberedSeries = ''
numberedOrUnnumberedSeries = ''
end
end
local headingUseMainOrAddedEntry = controlField008:sub( 15, 15 )
local headingUseSubjectAddedEntry = controlField008:sub( 16, 16 )
local headingUseMainOrAddedEntry = controlField008:sub(15, 15)
if headingUseSubjectAddedEntry == ' '
local headingUseSubjectAddedEntry = controlField008:sub(16, 16)
if headingUseSubjectAddedEntry == ' '
then
then
headingUseSubjectAddedEntry = ''
headingUseSubjectAddedEntry = ''
end
end
local headingUseSeriesAddedEntry = controlField008:sub( 17, 17 )
local typeOfSubjectSubdivision = controlField008:sub( 18, 18 )
local headingUseSeriesAddedEntry = controlField008:sub(17, 17)
if typeOfSubjectSubdivision == ' '
if headingUseSeriesAddedEntry == ' '
then
then
headingUseSeriesAddedEntry = 'b'
typeOfSubjectSubdivision = ''
end
end
local typeOfGovernmentAgency = controlField008:sub( 29, 29 )
local typeOfSubjectSubdivision = controlField008:sub(18, 18)
if typeOfGovernmentAgency == ' '
if typeOfSubjectSubdivision == ' '
then
then
typeOfSubjectSubdivision = ''
typeOfGovernmentAgency = ''
end
end
local referenceEvaluation = controlField008:sub( 30, 30 )
local typeOfGovernmentAgency = controlField008:sub(29, 29)
if referenceEvaluation == ' '
if typeOfGovernmentAgency == ' '
then
then
typeOfGovernmentAgency = ''
referenceEvaluation = ''
end
end
local recordUpdateInProcess = controlField008:sub( 32, 32 )
local referenceEvaluation = controlField008:sub(30, 30)
if referenceEvaluation == ' '
local undifferentiatedPersonalName = controlField008:sub( 33, 33 )
then
if undifferentiatedPersonalName == ' '
referenceEvaluation = ''
then
end
undifferentiatedPersonalName = ''
local recordUpdateInProcess = controlField008:sub(32, 32)
end
local levelOfEstablishment = controlField008:sub( 34, 34 )
local undifferentiatedPersonalName = controlField008:sub(33, 33)
if levelOfEstablishment == ' '
if undifferentiatedPersonalName == ' '
then
then
undifferentiatedPersonalName = ''
levelOfEstablishment = ''
end
end
local modifiedRecord = controlField008:sub( 39, 39 )
local levelOfEstablishment = controlField008:sub(34, 34)
if levelOfEstablishment == ' '
if modifiedRecord == ' ' or modifiedRecord:match( '\r' )
then
then
levelOfEstablishment = ''
modifiedRecord = ''
end
end
local catalogingSource = controlField008:sub( 40, 40 )
local modifiedRecord = controlField008:sub(39, 39)
if modifiedRecord == ' ' or modifiedRecord:match('\r')
if catalogingSource == ' '
then
then
modifiedRecord = ''
catalogingSource = ''
end
end
local catalogingSource = controlField008:sub(40, 40)
-- query string maker (part 1), Predefinição AutRecord
if catalogingSource == ' '
queryString =
then
'AutRecord[dateEnteredOnFile]=' .. dateEnteredOnFile ..
catalogingSource = ''
'&AutRecord[recordStatus]=' .. recordStatus ..
end
'&AutRecord[encodingLevel]=' .. encodingLevel ..
-- query string maker (part 1), Predefinição AutRecord
'&AutRecord[punctuationPolicy]=' .. punctuationPolicy ..
queryString =
'&AutRecord[directOrIndirectGeogSubdiv]=' .. directOrIndirectGeogSubdiv ..
'&AutRecord[romanizationScheme]=' .. romanizationScheme ..
'AutRecord[dateEnteredOnFile]=' .. dateEnteredOnFile ..
'&AutRecord[languageOfCatalog]=' .. languageOfCatalog ..
'&AutRecord[recordStatus]=' .. recordStatus ..
'&AutRecord[kindOfRecord]=' .. kindOfRecord ..
'&AutRecord[encodingLevel]=' .. encodingLevel ..
'&AutRecord[descriptiveCatalogingRules]=' .. descriptiveCatalogingRules ..
'&AutRecord[punctuationPolicy]=' .. punctuationPolicy ..
'&AutRecord[subjectHeadingSystem]=' .. subjectHeadingSystem ..
'&AutRecord[directOrIndirectGeogSubdiv]=' .. directOrIndirectGeogSubdiv ..
'&AutRecord[typeOfSeries]=' .. typeOfSeries ..
'&AutRecord[romanizationScheme]=' .. romanizationScheme ..
'&AutRecord[numberedOrUnnumberedSeries]=' .. numberedOrUnnumberedSeries ..
'&AutRecord[languageOfCatalog]=' .. languageOfCatalog ..
'&AutRecord[headingUseMainOrAddedEntry]=' .. headingUseMainOrAddedEntry ..
'&AutRecord[kindOfRecord]=' .. kindOfRecord ..
'&AutRecord[headingUseSubjectAddedEntry]=' .. headingUseSubjectAddedEntry ..
'&AutRecord[descriptiveCatalogingRules]=' .. descriptiveCatalogingRules ..
'&AutRecord[headingUseSeriesAddedEntry]=' .. headingUseSeriesAddedEntry ..
'&AutRecord[subjectHeadingSystem]=' .. subjectHeadingSystem ..
'&AutRecord[typeOfSubjectSubdivision]=' .. typeOfSubjectSubdivision ..
'&AutRecord[typeOfSeries]=' .. typeOfSeries ..
'&AutRecord[typeOfGovernmentAgency]=' .. typeOfGovernmentAgency ..
'&AutRecord[numberedOrUnnumberedSeries]=' .. numberedOrUnnumberedSeries ..
'&AutRecord[referenceEvaluation]=' .. referenceEvaluation ..
'&AutRecord[headingUseMainOrAddedEntry]=' .. headingUseMainOrAddedEntry ..
'&AutRecord[recordUpdateInProcess]=' .. recordUpdateInProcess ..
'&AutRecord[headingUseSubjectAddedEntry]=' .. headingUseSubjectAddedEntry ..
'&AutRecord[undifferentiatedPersonalName]=' .. undifferentiatedPersonalName ..
'&AutRecord[headingUseSeriesAddedEntry]=' .. headingUseSeriesAddedEntry ..
'&AutRecord[levelOfEstablishment]=' .. levelOfEstablishment ..
'&AutRecord[typeOfSubjectSubdivision]=' .. typeOfSubjectSubdivision ..
'&AutRecord[modifiedRecord]=' .. modifiedRecord ..
'&AutRecord[typeOfGovernmentAgency]=' .. typeOfGovernmentAgency ..
'&AutRecord[catalogingSource]=' .. catalogingSource ..
'&AutRecord[referenceEvaluation]=' .. referenceEvaluation ..
'&AutRecord[recordUpdateInProcess]=' .. recordUpdateInProcess ..
fieldQueryString
'&AutRecord[undifferentiatedPersonalName]=' .. undifferentiatedPersonalName ..
-- template string maker (part 1), Predefinição AutRecord
'&AutRecord[levelOfEstablishment]=' .. levelOfEstablishment ..
firstTemplate = '<pre>{{AutRecord\n' ..
'&AutRecord[modifiedRecord]=' .. modifiedRecord ..
'|dateEnteredOnFile=' .. dateEnteredOnFile .. '\n' ..
'&AutRecord[catalogingSource]=' .. catalogingSource ..
'|recordStatus=' .. recordStatus .. '\n' ..
fieldQueryString
'|encodingLevel=' .. encodingLevel .. '\n' ..
-- template string maker (part 1), Predefinição AutRecord
'|punctuationPolicy=' .. punctuationPolicy .. '\n' ..
firstTemplate = '<pre>{{AutRecord\n' ..
'|directOrIndirectGeogSubdiv=' .. directOrIndirectGeogSubdiv .. '\n' ..
'|romanizationScheme=' .. romanizationScheme .. '\n' ..
'|dateEnteredOnFile=' .. dateEnteredOnFile .. '\n' ..
'|languageOfCatalog=' .. languageOfCatalog .. '\n' ..
'|recordStatus=' .. recordStatus .. '\n' ..
'|kindOfRecord=' .. kindOfRecord .. '\n' ..
'|encodingLevel=' .. encodingLevel .. '\n' ..
'|descriptiveCatalogingRules=' .. descriptiveCatalogingRules .. '\n' ..
'|punctuationPolicy=' .. punctuationPolicy .. '\n' ..
'|subjectHeadingSystem=' .. subjectHeadingSystem .. '\n' ..
'|directOrIndirectGeogSubdiv=' .. directOrIndirectGeogSubdiv .. '\n' ..
'|typeOfSeries=' .. typeOfSeries .. '\n' ..
'|romanizationScheme=' .. romanizationScheme .. '\n' ..
'|numberedOrUnnumberedSeries=' .. numberedOrUnnumberedSeries .. '\n' ..
'|languageOfCatalog=' .. languageOfCatalog .. '\n' ..
'|headingUseMainOrAddedEntry=' .. headingUseMainOrAddedEntry .. '\n' ..
'|kindOfRecord=' .. kindOfRecord .. '\n' ..
'|headingUseSubjectAddedEntry=' .. headingUseSubjectAddedEntry .. '\n' ..
'|descriptiveCatalogingRules=' .. descriptiveCatalogingRules .. '\n' ..
'|headingUseSeriesAddedEntry=' .. headingUseSeriesAddedEntry .. '\n' ..
'|subjectHeadingSystem=' .. subjectHeadingSystem .. '\n' ..
'|typeOfSubjectSubdivision=' .. typeOfSubjectSubdivision .. '\n' ..
'|typeOfSeries=' .. typeOfSeries .. '\n' ..
'|typeOfGovernmentAgency=' .. typeOfGovernmentAgency .. '\n' ..
'|numberedOrUnnumberedSeries=' .. numberedOrUnnumberedSeries .. '\n' ..
'|referenceEvaluation=' .. referenceEvaluation .. '\n' ..
'|headingUseMainOrAddedEntry=' .. headingUseMainOrAddedEntry .. '\n' ..
'|recordUpdateInProcess=' .. recordUpdateInProcess .. '\n' ..
'|headingUseSubjectAddedEntry=' .. headingUseSubjectAddedEntry .. '\n' ..
'|undifferentiatedPersonalName=' .. undifferentiatedPersonalName .. '\n' ..
'|headingUseSeriesAddedEntry=' .. headingUseSeriesAddedEntry .. '\n' ..
'|levelOfEstablishment=' .. levelOfEstablishment .. '\n' ..
'|typeOfSubjectSubdivision=' .. typeOfSubjectSubdivision .. '\n' ..
'|modifiedRecord=' .. modifiedRecord .. '\n' ..
'|typeOfGovernmentAgency=' .. typeOfGovernmentAgency .. '\n' ..
'|referenceEvaluation=' .. referenceEvaluation .. '\n' ..
'|catalogingSource=' .. catalogingSource ..
'|recordUpdateInProcess=' .. recordUpdateInProcess .. '\n' ..
'\n}}\n'
'|undifferentiatedPersonalName=' .. undifferentiatedPersonalName .. '\n' ..
-- cria o botão para a importação do registro
'|levelOfEstablishment=' .. levelOfEstablishment .. '\n' ..
formLink = frame:callParserFunction{ name = '#formlink',
'|modifiedRecord=' .. modifiedRecord .. '\n' ..
args = { 'form=AutRecord', 'link text=Importar registro',
'|catalogingSource=' .. catalogingSource ..
'link type=post button', 'query string=' .. queryString } }
'\n}}\n'
end
-- cria o botão para a importação do registro
-- retorna todos os valores para a predefinição {{MARCimporter}}
formLink = frame:callParserFunction { name = '#formlink',
return formLink, firstTemplate, fieldTemplates, lastTemplate
args = { 'form=AutRecord', 'link text=Importar registro',
'link type=post button', 'query string=' .. queryString } }
end
-- retorna todos os valores para a predefinição {{MARCimporter}}
return formLink, firstTemplate, fieldTemplates, lastTemplate
end
end

return p
return p

Edição atual tal como às 14h14min de 24 de novembro de 2024

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

local p = {}
-- a função "record" é dividida em 4 partes: um handler para registros ISO 2709,
-- um handler para registros em "MARC tags", uma configuração para registros
-- bibliográficos e uma configuração para registros de autoridade.
function p.record(frame)
  -- recebe o registro, o terceiro argumento da Predefinição:MARCimporter
  local record = frame.args[3] or ''
  -- recebe o modo de normalização Unicode ("Sim" para ativar o modo NFD)
  local isNFD = frame.args[2] or ''
  -- inicializa as variáveis básicas do registro
  local leader = ''
  local baseAddressOfData = 0
  local directory = ''
  local dataValuesGroup = ''
  -- inicializa as variáveis auxiliares
  local directoryEntry = ''
  local entryTag = ''
  local entryDataLength = ''
  local entryInitPosition = ''
  local dataField = {}  -- Cada tabela que contém os dados dos campos. Formato:
  -- { tag='', length='', initPosition='', data='', ind1='', ind2='' }
  local dataFields = {} -- Tabela que contém cada tabela dataField. Formato:
  -- { 1={}, 2={}, 3={}, 4={}, n={} }
  local controlField001 = ''
  local controlField003 = ''
  local controlField006 = ''
  local controlField007 = ''
  local controlField008 = ''
  local tag040 = ''
  local firstTemplate = ''
  local fieldTemplates = ''
  local lastTemplate = '{{EndOfRecord}}</pre>'
  local queryString = ''
  local fieldQueryString = ''
  local formLink = ''
  local function normalizeData(data)
    data = data
        :gsub('|(.)', ' $%1 ')           -- substitui "|a" por " $a "
        :gsub('(%d)p%.', '%1 p.')        -- // "1p." por "1 p."
        :gsub('(%d)cm', '%1 cm')         -- // "1cm" por "1 cm"
        :gsub('(%d)ed%.', '%1 ed.')      -- // "1ed." por "1 ed."
        :gsub('%.%s?%-$', '.')           -- // ". -" por "."
        :gsub('(%$.*)(%$w.*)', '%2 %1')  -- move o subcampo $w para a frente
        :gsub('(%s%$9%s.*)', '')         -- remove o subcampo $9
        :gsub('(%$z.*)(%$u.*)', '%2 %1') -- move o subcampo $u para a frente
        :gsub('[\n\r]', '')              -- remove line feed e carriage return
    return data
  end
  if record:match('^%d%d%d%d')
  then
    -- == MARC ISO 2709 handler == --
    -- O MediaWiki substitui caracteres de controle (RS, US, GS) pelo
    -- caractere de "desconhecido" (losango com interrogação) e, aqui,
    -- substituo esse caractere por um pipe (é necessário substituir
    -- por um caractere da faixa ASCII).
    record = record:gsub('�', '|')
    -- verifica se a forma de normalização Unicode é a
    -- Normalization Form Canonical Decomposition (NFD)
    if isNFD == 'Sim'
    then
      record = mw.ustring.toNFD(record)
    end
    -- configuração das variáveis básicas do registro (via ISO 2709):
    -- obtém o líder
    leader = record:sub(1, 24) or ''
    --> 00898nam a2200277 a 4500
    -- obtém o endereço base dos dados
    baseAddressOfData = tonumber(leader:sub(13, 17)) or 0
    --> 00277
    -- obtém o diretório (-1 para não pegar RS)
    directory = record:sub(25, baseAddressOfData - 1) or ''
    --> 0010010000000050017000100080041000270200027000680400017000950...
    -- obtém os dados dos campos em um único grupo
    dataValuesGroup = record:sub(baseAddressOfData + 1) or ''
    --> 278 até o final do registro
    -- enquanto o tamanho do diretório for maior que 0...
    while #directory > 0
    do
      directoryEntry = directory:sub(1, 12)         -- 245008100177
      entryTag = directoryEntry:sub(1, 3)           -- 245
      entryDataLength = directoryEntry:sub(4, 7)    -- 0081
      entryInitPosition = directoryEntry:sub(8, 12) -- 00177
      -- cria uma tabela com os dados...
      dataField = {
        tag = entryTag,
        length = entryDataLength,
        initPosition = entryInitPosition
      }
      -- e insere cada tabela dataField na tabela dataFields
      table.insert(dataFields, dataField)
      -- esvazia o diretório de 12 em 12
      directory = directory:sub(13)
    end
    -- para cada item da tabela dataFields...
    for index, dataField in ipairs(dataFields)
    do
      -- configura as variáveis para uso na função string.sub( i, j )
      -- (+1 porque em Lua se começa do 1, não do 0)
      local i = dataFields[index].initPosition + 1
      -- (-1 para não pegar RS)
      local j = dataFields[index].initPosition + dataFields[index].length - 1
      -- localiza o dado em dataValuesGroup, normaliza o dado
      -- e armazena na tabela
      dataFields[index].data = normalizeData(dataValuesGroup:sub(i, j))
      -- armazena os campos de controle (00X) para posterior decomposição
      if dataFields[index].tag == '006'
      then
        controlField006 = dataFields[index].data:gsub('[|#$]', ' ')
      end
      if dataFields[index].tag == '007'
      then
        controlField007 = dataFields[index].data:gsub('[|#$\r]', ' ')
      end
      if dataFields[index].tag == '008'
      then
        controlField008 = dataFields[index].data:gsub('[|#$-]', ' ')
      end
    end
  else
    -- == MARC tags handler == --
    record = record
        :gsub('	 ', ' ')                                          -- LC bib handling (\t+\s)
        :gsub('	', ' ')                                           -- LC aut handling (\t)
        :gsub('    ', ' ')                                        -- Pergamum handling (control fields) (non-breaking space)
        :gsub(' ', ' ')                                           -- Pergamum handling (data fields) (non-breaking space)
    record = record .. '\n'
    if record:match('^FMT') or record:match('^LDR')               -- Aleph handling
    then
      record = record:gsub('\t', ' ')                             -- 1
          :gsub('^(FMT%s[A-Z].-\n)', '')                          -- 2
          :gsub('LDR%s([0%s][0%s][0%s][0%s][0%s].-\n)', '000 %1') -- 3
          :gsub('\n(%d%d%d)%s(%$.%s)', '\n%1    %2')              -- 4
          :gsub('\n(%d%d%d)(%d)', '\n%1 %2')                      -- 5
          :gsub('\n(%d%d%d%s%d%s)', '\n%1 ')                      -- 6 (manter essa ordem)
    end
    -- configuração das variáveis básicas do registro (via MARC tags):
    -- obtém o líder
    leader = record:match('^000%s([%d%s][%d%s][%d%s][%d%s][%d%s].-)\n') or ''
    leader = leader:gsub('[|#$]', ' ')
    -- obtém os campos de controle
    controlField001 = record:match('\n001%s(.-)\n') or ''
    controlField003 = record:match('\n003%s(.-)\n') or ''
    controlField003 = mw.text.trim(controlField003)
    controlField006 = record:match('\n006%s([a-z].-)\n') or ''
    controlField006 = controlField006:gsub('[|#$]', ' ')
    controlField007 = record:match('\n007%s([a-z].-)\n') or ''
    controlField007 = controlField007:gsub('[|#$\r]', ' ')
    controlField008 = record:match('008%s([%d%s][%d%s][%d%s][%d%s][%d%s][%d%s].-)\n') or ''
    controlField008 = controlField008:gsub('[|#$-]', ' ')
    -- para cada linha do registro, identifica o campo e seu conteúdo
    -- (o conteúdo inclui os indicadores)
    for tagMatch, dataMatch in record:gmatch(
      '([0-8]%d%d) ([0-9_%s][0-9_%s] [$|].-)\n')
    do
      -- transforma o dado para o formato igual ao manipulado pelo
      -- MARC ISO 2709 handler
      dataMatch = dataMatch:gsub('%s?|(.)%s', '|%1')
      -- normaliza o dado
      dataMatch = normalizeData(dataMatch)

      -- cria uma tabela com os dados...
      dataField = {
        tag = tagMatch,
        data = dataMatch
      }
      -- e insere cada tabela dataField na tabela dataFields
      table.insert(dataFields, dataField)
    end
  end
  -- == Handler unificado == --
  if leader:sub(7, 7) == 'z' and (controlField003:lower():match('br') or controlField003:lower():match('br-rjbn'))
  then
    -- cria uma tabela com os dados...
    dataField = {
      tag = '670',
      data = '## $a CA-BN ' .. os.date('%Y')
    }
    -- e insere a tabela dataField na tabela dataFields
    table.insert(dataFields, dataField)
    -- também mova o número de controle para o campo 035
    dataField = {
      tag = '035',
      data = '## $a ' .. '(' .. controlField003 .. ')' .. controlField001
    }
    table.insert(dataFields, dataField)
  end
  -- função de ordenação dos campos
  local function sortByTag(a, b)
    if (a.tag < b.tag)
    then
      return true
    elseif (a.tag > b.tag)
    then
      return false
    else
      return a.originalOrder < b.originalOrder
    end
  end
  -- para cada item da tabela dataFields...
  for index, dataField in ipairs(dataFields)
  do
    -- verifica se a tag é a 040
    if dataFields[index].tag == '040'
    -- se for, adiciona o subcampo para a agência modificadora do registro
    -- e marca como verdadeiro a presença deste campo
    then
      dataFields[index].data = dataFields[index].data .. ' $d BR-FlWIK'
      tag040 = dataFields[index].data
    end
    -- verifica se a tag é uma das seguintes
    if dataFields[index].tag == '092' or dataFields[index].tag == '595'
    then
      -- se for, exclua da tabela dataFields
      table.remove(dataFields, index)
    end
  end
  -- se o registro for da LC
  if leader:sub(7, 7) == 'z' and tag040:match('a DLC')
  then
    -- cria uma tabela com os dados...
    dataField = {
      tag = '670',
      data = '## $a CA-LC ' .. os.date('%Y')
    }
    -- e insere a tabela dataField na tabela dataFields
    table.insert(dataFields, dataField)
  end
  -- se não há campo 040, então será criado agora
  if tag040 == ''
  then
    -- cria uma tabela com os dados...
    dataField = {
      tag = '040',
      data = '## $a BR-FlWIK $b por $c BR-FlWIK'
    }
    -- e insere a tabela dataField na tabela dataFields
    table.insert(dataFields, dataField)
  end
  for index, dataField in ipairs(dataFields)
  do
    -- guarda a ordem original do campo para posterior inclusão de outros
    -- campos (mantendo a ordem original)
    dataFields[index].originalOrder = index
  end
  -- ordena os campos do registro
  table.sort(dataFields, sortByTag)
  for index, dataField in ipairs(dataFields)
  do
    -- se os campos forem maior que 009, então gerarão indicadores
    if tonumber(dataFields[index].tag) > 9
    then
      dataFields[index].ind1 =
          dataFields[index].data:sub(1, 1):gsub('[ _]', '#')
      dataFields[index].ind2 =
          dataFields[index].data:sub(2, 2):gsub('[ _]', '#')
    end
    -- se, também, os campos estiverem entre 010 e 830 (com exceção para 856),
    -- criará a query string do link para o formulário e a sintaxe da
    -- Predefinição Field
    if
        tonumber(dataFields[index].tag) == 10 or
        tonumber(dataFields[index].tag) > 12 and
        tonumber(dataFields[index].tag) < 831 or
        tonumber(dataFields[index].tag) == 856
    then
      -- query string maker (part 2), Predefinição Field
      fieldQueryString = fieldQueryString ..
          '&Field[' .. index .. '][tag]=' .. dataField.tag ..
          '&Field[' .. index .. '][ind1]=' .. dataField.ind1 ..
          '&Field[' .. index .. '][ind2]=' .. dataField.ind2 ..
          '&Field[' .. index .. '][data]=' .. mw.uri.encode(dataField.data:sub(4), 'PATH')
      -- template string maker (part 2), Predefinição Field
      fieldTemplates = fieldTemplates .. '{{Field' ..
          '\n|tag=' .. dataField.tag ..
          '\n|ind1=' .. dataField.ind1 ..
          '\n|ind2=' .. dataField.ind2 ..
          '\n|data=' .. dataField.data:sub(4) ..
          '\n}}\n'
    end
  end
  if frame.args[1] == 'bib' or frame.args[1] == ''
  then
    -- inicializa as variáveis derivadas (registro bibliográfico)
    -- líder
    local recordStatus = leader:sub(6, 6)
    local typeOfRecord = leader:sub(7, 7)
    local bibliographicLevel = leader:sub(8, 8)
    local encodingLevel = leader:sub(18, 18)
    if encodingLevel == ' '
    then
      encodingLevel = ''
    end
    local descriptiveCatalogingForm = leader:sub(19, 19)
    if descriptiveCatalogingForm == ' '
    then
      descriptiveCatalogingForm = ''
    end
    local multipartResourceRecordLevel = leader:sub(20, 20)
    if multipartResourceRecordLevel == ' '
    then
      multipartResourceRecordLevel = ''
    end
    -- control field 008
    local dateEnteredOnFile = controlField008:sub(1, 6)
    local typeOfDate = controlField008:sub(7, 7)
    local date1 = controlField008:sub(8, 11)
    local date2 = controlField008:sub(12, 15)
    local placeOfPublication = controlField008:sub(16, 18)
    local illustrations = controlField008:sub(19, 19)
    if illustrations == ' '
    then
      illustrations = ''
    end
    local targetAudience = controlField008:sub(23, 23)
    if targetAudience == ' '
    then
      targetAudience = ''
    end
    local formOfItem = controlField008:sub(24, 24)
    if formOfItem == ' '
    then
      formOfItem = ''
    end
    local natureOfContents = controlField008:sub(25, 25)
    if natureOfContents == ' '
    then
      natureOfContents = ''
    end
    local governmentPublication = controlField008:sub(29, 29)
    if governmentPublication == ' ' or governmentPublication == '0'
    then
      governmentPublication = ''
    end
    local conferencePublication = controlField008:sub(30, 30)
    if conferencePublication == '0'
    then
      conferencePublication = ''
    end
    local festschrift = controlField008:sub(31, 31)
    if festschrift == ' '
    then
      festschrift = ''
    end
    local index = controlField008:sub(32, 32)
    if index == '0' or index == ' '
    then
      index = ''
    end
    local literaryForm = controlField008:sub(34, 34)
    if literaryForm == '0' or literaryForm == ' '
    then
      literaryForm = ''
    end
    local biography = controlField008:sub(35, 35)
    if biography == ' '
    then
      biography = ''
    end
    local language = controlField008:sub(36, 38)
    local modifiedRecord = controlField008:sub(39, 39)
    if modifiedRecord == ' ' or modifiedRecord:match('\r')
    then
      modifiedRecord = ''
    end
    local catalogingSource = controlField008:sub(40, 40)
    if catalogingSource == ' '
    then
      catalogingSource = ''
    end
    -- query string maker (part 1), Predefinição BibRecord
    queryString =
        'BibRecord[dateEnteredOnFile]=' .. dateEnteredOnFile ..
        '&BibRecord[recordStatus]=' .. recordStatus ..
        '&BibRecord[typeOfRecord]=' .. typeOfRecord ..
        '&BibRecord[bibliographicLevel]=' .. bibliographicLevel ..
        '&BibRecord[encodingLevel]=' .. encodingLevel ..
        '&BibRecord[descriptiveCatalogingForm]=' .. descriptiveCatalogingForm ..
        '&BibRecord[multipartResourceRecordLevel]=' .. multipartResourceRecordLevel ..
        '&BibRecord[controlField006]=' .. controlField006 ..
        '&BibRecord[controlField007]=' .. controlField007 ..
        '&BibRecord[typeOfDate]=' .. typeOfDate ..
        '&BibRecord[date1]=' .. date1 ..
        '&BibRecord[date2]=' .. date2 ..
        '&BibRecord[placeOfPublication]=' .. placeOfPublication ..
        '&BibRecord[illustrations]=' .. illustrations ..
        '&BibRecord[targetAudience]=' .. targetAudience ..
        '&BibRecord[formOfItem]=' .. formOfItem ..
        '&BibRecord[natureOfContents]=' .. natureOfContents ..
        '&BibRecord[governmentPublication]=' .. governmentPublication ..
        '&BibRecord[conferencePublication]=' .. conferencePublication ..
        '&BibRecord[festschrift]=' .. festschrift ..
        '&BibRecord[index]=' .. index ..
        '&BibRecord[literaryForm]=' .. literaryForm ..
        '&BibRecord[biography]=' .. biography ..
        '&BibRecord[language]=' .. language ..
        '&BibRecord[modifiedRecord]=' .. modifiedRecord ..
        '&BibRecord[catalogingSource]=' .. catalogingSource ..
        fieldQueryString
    -- template string maker (part 1), Predefinição BibRecord
    firstTemplate = '<pre>{{BibRecord\n' ..
        '|dateEnteredOnFile=' .. dateEnteredOnFile .. '\n' ..
        '|recordStatus=' .. recordStatus .. '\n' ..
        '|typeOfRecord=' .. typeOfRecord .. '\n' ..
        '|bibliographicLevel=' .. bibliographicLevel .. '\n' ..
        '|encodingLevel=' .. encodingLevel .. '\n' ..
        '|descriptiveCatalogingForm=' .. descriptiveCatalogingForm .. '\n' ..
        '|multipartResourceRecordLevel=' .. multipartResourceRecordLevel .. '\n' ..
        '|controlField006=' .. controlField006 .. '\n' ..
        '|controlField007=' .. controlField007 .. '\n' ..
        '|typeOfDate=' .. typeOfDate .. '\n' ..
        '|date1=' .. date1 .. '\n' ..
        '|date2=' .. date2 .. '\n' ..
        '|placeOfPublication=' .. placeOfPublication .. '\n' ..
        '|illustrations=' .. illustrations .. '\n' ..
        '|targetAudience=' .. targetAudience .. '\n' ..
        '|formOfItem=' .. formOfItem .. '\n' ..
        '|natureOfContents=' .. natureOfContents .. '\n' ..
        '|governmentPublication=' .. governmentPublication .. '\n' ..
        '|conferencePublication=' .. conferencePublication .. '\n' ..
        '|festschrift=' .. festschrift .. '\n' ..
        '|index=' .. index .. '\n' ..
        '|literaryForm=' .. literaryForm .. '\n' ..
        '|biography=' .. biography .. '\n' ..
        '|language=' .. language .. '\n' ..
        '|modifiedRecord=' .. modifiedRecord .. '\n' ..
        '|catalogingSource=' .. catalogingSource ..
        '\n}}\n'
    -- cria o botão para a importação do registro
    formLink = frame:callParserFunction { name = '#formlink',
      args = { 'form=BibRecord', 'link text=Importar registro',
        'link type=post button', 'query string=' .. queryString } }
  else
    -- inicializa as variáveis derivadas (registro de autoridade)
    -- líder
    local recordStatus = leader:sub(6, 6)
    local encodingLevel = leader:sub(18, 18)
    if encodingLevel == ' '
    then
      encodingLevel = ''
    end
    local punctuationPolicy = leader:sub(19, 19)
    if punctuationPolicy == ' ' or punctuationPolicy == '4'
    then
      punctuationPolicy = ''
    end
    -- control field 008
    local dateEnteredOnFile = controlField008:sub(1, 6)
    local directOrIndirectGeogSubdiv = controlField008:sub(7, 7)
    if directOrIndirectGeogSubdiv == ' '
    then
      directOrIndirectGeogSubdiv = ''
    end
    local romanizationScheme = controlField008:sub(8, 8)
    local languageOfCatalog = controlField008:sub(9, 9)
    if languageOfCatalog == ' '
    then
      languageOfCatalog = ''
    end
    local kindOfRecord = controlField008:sub(10, 10)
    local descriptiveCatalogingRules = controlField008:sub(11, 11)
    local subjectHeadingSystem = controlField008:sub(12, 12)
    local typeOfSeries = controlField008:sub(13, 13)
    local numberedOrUnnumberedSeries = controlField008:sub(14, 14)
    if numberedOrUnnumberedSeries == ' '
    then
      numberedOrUnnumberedSeries = ''
    end
    local headingUseMainOrAddedEntry = controlField008:sub(15, 15)
    local headingUseSubjectAddedEntry = controlField008:sub(16, 16)
    if headingUseSubjectAddedEntry == ' '
    then
      headingUseSubjectAddedEntry = ''
    end
    local headingUseSeriesAddedEntry = controlField008:sub(17, 17)
    if headingUseSeriesAddedEntry == ' '
    then
      headingUseSeriesAddedEntry = 'b'
    end
    local typeOfSubjectSubdivision = controlField008:sub(18, 18)
    if typeOfSubjectSubdivision == ' '
    then
      typeOfSubjectSubdivision = ''
    end
    local typeOfGovernmentAgency = controlField008:sub(29, 29)
    if typeOfGovernmentAgency == ' '
    then
      typeOfGovernmentAgency = ''
    end
    local referenceEvaluation = controlField008:sub(30, 30)
    if referenceEvaluation == ' '
    then
      referenceEvaluation = ''
    end
    local recordUpdateInProcess = controlField008:sub(32, 32)
    local undifferentiatedPersonalName = controlField008:sub(33, 33)
    if undifferentiatedPersonalName == ' '
    then
      undifferentiatedPersonalName = ''
    end
    local levelOfEstablishment = controlField008:sub(34, 34)
    if levelOfEstablishment == ' '
    then
      levelOfEstablishment = ''
    end
    local modifiedRecord = controlField008:sub(39, 39)
    if modifiedRecord == ' ' or modifiedRecord:match('\r')
    then
      modifiedRecord = ''
    end
    local catalogingSource = controlField008:sub(40, 40)
    if catalogingSource == ' '
    then
      catalogingSource = ''
    end
    -- query string maker (part 1), Predefinição AutRecord
    queryString =
        'AutRecord[dateEnteredOnFile]=' .. dateEnteredOnFile ..
        '&AutRecord[recordStatus]=' .. recordStatus ..
        '&AutRecord[encodingLevel]=' .. encodingLevel ..
        '&AutRecord[punctuationPolicy]=' .. punctuationPolicy ..
        '&AutRecord[directOrIndirectGeogSubdiv]=' .. directOrIndirectGeogSubdiv ..
        '&AutRecord[romanizationScheme]=' .. romanizationScheme ..
        '&AutRecord[languageOfCatalog]=' .. languageOfCatalog ..
        '&AutRecord[kindOfRecord]=' .. kindOfRecord ..
        '&AutRecord[descriptiveCatalogingRules]=' .. descriptiveCatalogingRules ..
        '&AutRecord[subjectHeadingSystem]=' .. subjectHeadingSystem ..
        '&AutRecord[typeOfSeries]=' .. typeOfSeries ..
        '&AutRecord[numberedOrUnnumberedSeries]=' .. numberedOrUnnumberedSeries ..
        '&AutRecord[headingUseMainOrAddedEntry]=' .. headingUseMainOrAddedEntry ..
        '&AutRecord[headingUseSubjectAddedEntry]=' .. headingUseSubjectAddedEntry ..
        '&AutRecord[headingUseSeriesAddedEntry]=' .. headingUseSeriesAddedEntry ..
        '&AutRecord[typeOfSubjectSubdivision]=' .. typeOfSubjectSubdivision ..
        '&AutRecord[typeOfGovernmentAgency]=' .. typeOfGovernmentAgency ..
        '&AutRecord[referenceEvaluation]=' .. referenceEvaluation ..
        '&AutRecord[recordUpdateInProcess]=' .. recordUpdateInProcess ..
        '&AutRecord[undifferentiatedPersonalName]=' .. undifferentiatedPersonalName ..
        '&AutRecord[levelOfEstablishment]=' .. levelOfEstablishment ..
        '&AutRecord[modifiedRecord]=' .. modifiedRecord ..
        '&AutRecord[catalogingSource]=' .. catalogingSource ..
        fieldQueryString
    -- template string maker (part 1), Predefinição AutRecord
    firstTemplate = '<pre>{{AutRecord\n' ..
        '|dateEnteredOnFile=' .. dateEnteredOnFile .. '\n' ..
        '|recordStatus=' .. recordStatus .. '\n' ..
        '|encodingLevel=' .. encodingLevel .. '\n' ..
        '|punctuationPolicy=' .. punctuationPolicy .. '\n' ..
        '|directOrIndirectGeogSubdiv=' .. directOrIndirectGeogSubdiv .. '\n' ..
        '|romanizationScheme=' .. romanizationScheme .. '\n' ..
        '|languageOfCatalog=' .. languageOfCatalog .. '\n' ..
        '|kindOfRecord=' .. kindOfRecord .. '\n' ..
        '|descriptiveCatalogingRules=' .. descriptiveCatalogingRules .. '\n' ..
        '|subjectHeadingSystem=' .. subjectHeadingSystem .. '\n' ..
        '|typeOfSeries=' .. typeOfSeries .. '\n' ..
        '|numberedOrUnnumberedSeries=' .. numberedOrUnnumberedSeries .. '\n' ..
        '|headingUseMainOrAddedEntry=' .. headingUseMainOrAddedEntry .. '\n' ..
        '|headingUseSubjectAddedEntry=' .. headingUseSubjectAddedEntry .. '\n' ..
        '|headingUseSeriesAddedEntry=' .. headingUseSeriesAddedEntry .. '\n' ..
        '|typeOfSubjectSubdivision=' .. typeOfSubjectSubdivision .. '\n' ..
        '|typeOfGovernmentAgency=' .. typeOfGovernmentAgency .. '\n' ..
        '|referenceEvaluation=' .. referenceEvaluation .. '\n' ..
        '|recordUpdateInProcess=' .. recordUpdateInProcess .. '\n' ..
        '|undifferentiatedPersonalName=' .. undifferentiatedPersonalName .. '\n' ..
        '|levelOfEstablishment=' .. levelOfEstablishment .. '\n' ..
        '|modifiedRecord=' .. modifiedRecord .. '\n' ..
        '|catalogingSource=' .. catalogingSource ..
        '\n}}\n'
    -- cria o botão para a importação do registro
    formLink = frame:callParserFunction { name = '#formlink',
      args = { 'form=AutRecord', 'link text=Importar registro',
        'link type=post button', 'query string=' .. queryString } }
  end
  -- retorna todos os valores para a predefinição {{MARCimporter}}
  return formLink, firstTemplate, fieldTemplates, lastTemplate
end

return p