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

De Wikincat
Ir para navegação Ir para pesquisar
m (formatter)
Etiqueta: Revertido
(teste)
Etiqueta: Reversão manual
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 = 0
local dataValuesGroup = ''
local dataValuesGroup = ''
-- inicializa as variáveis auxiliares
-- inicializa as variáveis auxiliares
local directoryEntry = 0
local directoryEntry = 0
local entryTag = 0
local entryTag = 0
local entryDataLength = 0
local entryDataLength = 0
local entryInitPosition = 0
local entryInitPosition = 0
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 0
--> 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)
controlField003 = mw.text.trim( controlField003 )
controlField006 = record:match('\n006%s([a-z].-)\n') or ''
controlField006 = record:match( '\n006%s([a-z].-)\n' ) or ''
controlField006 = controlField006:gsub('[|#$]', ' ')
controlField006 = controlField006:gsub( '[|#$]', ' ' )
controlField007 = record:match('\n007%s([a-z].-)\n') or ''
controlField007 = record:match( '\n007%s([a-z].-)\n' ) or ''
controlField007 = controlField007:gsub('[|#$\r]', ' ')
controlField007 = controlField007:gsub( '[|#$\r]', ' ' )
controlField008 = record:match('008%s([%d%s][%d%s][%d%s][%d%s][%d%s][%d%s].-)\n') or ''
controlField008 = record:match( '008%s([%d%s][%d%s][%d%s][%d%s][%d%s][%d%s].-)\n' ) or ''
controlField008 = controlField008:gsub('[|#$-]', ' ')
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' )
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 o registro for da LC
if leader:sub(7, 7) == 'z' and tag040:match('DLC')
if leader:sub( 7, 7 ) == 'z' and tag040:match( 'a DLC' )
then
then
-- cria uma tabela com os dados...
-- cria uma tabela com os dados...
dataField = {
dataField = {
tag = '670',
tag = '670',
data = '## $a CA-LC ' .. os.date('%Y')
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
-- se não há campo 040, então será criado agora
if tag040 == ''
if tag040 == ''
then
then
-- cria uma tabela com os dados...
-- cria uma tabela com os dados...
dataField = {
dataField = {
tag = '040',
tag = '040',
data = '## $a BR-FlWIK $b por $c BR-FlWIK'
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
-- guarda a ordem original do campo para posterior inclusão de outros
-- campos (mantendo a ordem original)
-- 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)
table.sort( dataFields, sortByTag )
for index, dataField in ipairs(dataFields)
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].data:sub( 1, 1 ):gsub( '[ _]', '#' )
dataFields[index].ind2 =
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 ) == 10 or
tonumber(dataFields[index].tag) > 12 and
tonumber( dataFields[index].tag ) > 12 and
tonumber(dataFields[index].tag) < 831 or
tonumber( dataFields[index].tag ) < 831 or
tonumber(dataFields[index].tag) == 856
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 .. '][tag]=' .. dataField.tag ..
'&Field[' .. index .. '][ind1]=' .. dataField.ind1 ..
'&Field[' .. index .. '][ind1]=' .. dataField.ind1 ..
'&Field[' .. index .. '][ind2]=' .. dataField.ind2 ..
'&Field[' .. index .. '][ind2]=' .. dataField.ind2 ..
'&Field[' .. index .. '][data]=' .. mw.uri.encode(dataField.data:sub(4), 'PATH')
'&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|tag=' .. dataField.tag ..
'\n|ind1=' .. dataField.ind1 ..
'\n|ind1=' .. dataField.ind1 ..
'\n|ind2=' .. dataField.ind2 ..
'\n|ind2=' .. dataField.ind2 ..
'\n|data=' .. dataField.data:sub(4) ..
'\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 recordStatus = leader:sub( 6, 6 )
local typeOfRecord = leader:sub(7, 7)
local typeOfRecord = leader:sub( 7, 7 )
local bibliographicLevel = leader:sub(8, 8)
local bibliographicLevel = leader:sub( 8, 8 )
local encodingLevel = leader:sub(18, 18)
local encodingLevel = leader:sub( 18, 18 )
if encodingLevel == ' '
if encodingLevel == ' '
then
then
encodingLevel = ''
encodingLevel = ''
end
end
local descriptiveCatalogingForm = leader:sub(19, 19)
local descriptiveCatalogingForm = leader:sub( 19, 19 )
if descriptiveCatalogingForm == ' '
if descriptiveCatalogingForm == ' '
then
then
descriptiveCatalogingForm = ''
descriptiveCatalogingForm = ''
end
end
local multipartResourceRecordLevel = leader:sub(20, 20)
local multipartResourceRecordLevel = leader:sub( 20, 20 )
if multipartResourceRecordLevel == ' '
if multipartResourceRecordLevel == ' '
then
then
multipartResourceRecordLevel = ''
multipartResourceRecordLevel = ''
end
end
-- control field 008
-- control field 008
local dateEnteredOnFile = controlField008:sub(1, 6)
local dateEnteredOnFile = controlField008:sub( 1, 6 )
local typeOfDate = controlField008:sub(7, 7)
local typeOfDate = controlField008:sub( 7, 7 )
local date1 = controlField008:sub(8, 11)
local date1 = controlField008:sub( 8, 11 )
local date2 = controlField008:sub(12, 15)
local date2 = controlField008:sub( 12, 15 )
local placeOfPublication = controlField008:sub(16, 18)
local placeOfPublication = controlField008:sub( 16, 18 )
local illustrations = controlField008:sub(19, 19)
local illustrations = controlField008:sub( 19, 19 )
if illustrations == ' '
if illustrations == ' '
then
then
illustrations = ''
illustrations = ''
end
end
local targetAudience = controlField008:sub(23, 23)
local targetAudience = controlField008:sub( 23, 23 )
if targetAudience == ' '
if targetAudience == ' '
then
then
targetAudience = ''
targetAudience = ''
end
end
local formOfItem = controlField008:sub(24, 24)
local formOfItem = controlField008:sub( 24, 24 )
if formOfItem == ' '
if formOfItem == ' '
then
then
formOfItem = 'r'
formOfItem = 'r'
end
end
local natureOfContents = controlField008:sub(25, 25)
local natureOfContents = controlField008:sub( 25, 25 )
if natureOfContents == ' '
if natureOfContents == ' '
then
then
natureOfContents = ''
natureOfContents = ''
end
end
local governmentPublication = controlField008:sub(29, 29)
local governmentPublication = controlField008:sub( 29, 29 )
if governmentPublication == ' ' or governmentPublication == '0'
if governmentPublication == ' ' or governmentPublication == '0'
then
then
governmentPublication = ''
governmentPublication = ''
end
end
local conferencePublication = controlField008:sub(30, 30)
local conferencePublication = controlField008:sub( 30, 30 )
if conferencePublication == '0'
if conferencePublication == '0'
then
then
conferencePublication = ''
conferencePublication = ''
end
end
local festschrift = controlField008:sub(31, 31)
local festschrift = controlField008:sub( 31, 31 )
if festschrift == '0'
if festschrift == '0'
then
then
festschrift = ''
festschrift = ''
end
end
local index = controlField008:sub(32, 32)
local index = controlField008:sub( 32, 32 )
if index == '0' or index == ' '
if index == '0' or index == ' '
then
then
index = ''
index = ''
end
end
local literaryForm = controlField008:sub(34, 34)
local literaryForm = controlField008:sub( 34, 34 )
if literaryForm == '0' or literaryForm == ' '
if literaryForm == '0' or literaryForm == ' '
then
then
literaryForm = ''
literaryForm = ''
end
end
local biography = controlField008:sub(35, 35)
local biography = controlField008:sub( 35, 35 )
if biography == ' '
if biography == ' '
then
then
biography = ''
biography = ''
end
end
local language = controlField008:sub(36, 38)
local language = controlField008:sub( 36, 38 )
local modifiedRecord = controlField008:sub(39, 39)
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)
local catalogingSource = controlField008:sub( 40, 40 )
if catalogingSource == ' '
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[dateEnteredOnFile]=' .. dateEnteredOnFile ..
'&BibRecord[recordStatus]=' .. recordStatus ..
'&BibRecord[recordStatus]=' .. recordStatus ..
'&BibRecord[typeOfRecord]=' .. typeOfRecord ..
'&BibRecord[typeOfRecord]=' .. typeOfRecord ..
'&BibRecord[bibliographicLevel]=' .. bibliographicLevel ..
'&BibRecord[bibliographicLevel]=' .. bibliographicLevel ..
'&BibRecord[encodingLevel]=' .. encodingLevel ..
'&BibRecord[encodingLevel]=' .. encodingLevel ..
'&BibRecord[descriptiveCatalogingForm]=' .. descriptiveCatalogingForm ..
'&BibRecord[descriptiveCatalogingForm]=' .. descriptiveCatalogingForm ..
'&BibRecord[multipartResourceRecordLevel]=' .. multipartResourceRecordLevel ..
'&BibRecord[multipartResourceRecordLevel]=' .. multipartResourceRecordLevel ..
'&BibRecord[controlField006]=' .. controlField006 ..
'&BibRecord[controlField006]=' .. controlField006 ..
'&BibRecord[controlField007]=' .. controlField007 ..
'&BibRecord[controlField007]=' .. controlField007 ..
'&BibRecord[typeOfDate]=' .. typeOfDate ..
'&BibRecord[typeOfDate]=' .. typeOfDate ..
'&BibRecord[date1]=' .. date1 ..
'&BibRecord[date1]=' .. date1 ..
'&BibRecord[date2]=' .. date2 ..
'&BibRecord[date2]=' .. date2 ..
'&BibRecord[placeOfPublication]=' .. placeOfPublication ..
'&BibRecord[placeOfPublication]=' .. placeOfPublication ..
'&BibRecord[illustrations]=' .. illustrations ..
'&BibRecord[illustrations]=' .. illustrations ..
'&BibRecord[targetAudience]=' .. targetAudience ..
'&BibRecord[targetAudience]=' .. targetAudience ..
'&BibRecord[formOfItem]=' .. formOfItem ..
'&BibRecord[formOfItem]=' .. formOfItem ..
'&BibRecord[natureOfContents]=' .. natureOfContents ..
'&BibRecord[natureOfContents]=' .. natureOfContents ..
'&BibRecord[governmentPublication]=' .. governmentPublication ..
'&BibRecord[governmentPublication]=' .. governmentPublication ..
'&BibRecord[conferencePublication]=' .. conferencePublication ..
'&BibRecord[conferencePublication]=' .. conferencePublication ..
'&BibRecord[festschrift]=' .. festschrift ..
'&BibRecord[festschrift]=' .. festschrift ..
'&BibRecord[index]=' .. index ..
'&BibRecord[index]=' .. index ..
'&BibRecord[literaryForm]=' .. literaryForm ..
'&BibRecord[literaryForm]=' .. literaryForm ..
'&BibRecord[biography]=' .. biography ..
'&BibRecord[biography]=' .. biography ..
'&BibRecord[language]=' .. language ..
'&BibRecord[language]=' .. language ..
'&BibRecord[modifiedRecord]=' .. modifiedRecord ..
'&BibRecord[modifiedRecord]=' .. modifiedRecord ..
'&BibRecord[catalogingSource]=' .. catalogingSource ..
'&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' ..
'|dateEnteredOnFile=' .. dateEnteredOnFile .. '\n' ..
'|recordStatus=' .. recordStatus .. '\n' ..
'|recordStatus=' .. recordStatus .. '\n' ..
'|typeOfRecord=' .. typeOfRecord .. '\n' ..
'|typeOfRecord=' .. typeOfRecord .. '\n' ..
'|bibliographicLevel=' .. bibliographicLevel .. '\n' ..
'|bibliographicLevel=' .. bibliographicLevel .. '\n' ..
'|encodingLevel=' .. encodingLevel .. '\n' ..
'|encodingLevel=' .. encodingLevel .. '\n' ..
'|descriptiveCatalogingForm=' .. descriptiveCatalogingForm .. '\n' ..
'|descriptiveCatalogingForm=' .. descriptiveCatalogingForm .. '\n' ..
'|multipartResourceRecordLevel=' .. multipartResourceRecordLevel .. '\n' ..
'|multipartResourceRecordLevel=' .. multipartResourceRecordLevel .. '\n' ..
'|controlField006=' .. controlField006 .. '\n' ..
'|controlField006=' .. controlField006 .. '\n' ..
'|controlField007=' .. controlField007 .. '\n' ..
'|controlField007=' .. controlField007 .. '\n' ..
'|typeOfDate=' .. typeOfDate .. '\n' ..
'|typeOfDate=' .. typeOfDate .. '\n' ..
'|date1=' .. date1 .. '\n' ..
'|date1=' .. date1 .. '\n' ..
'|date2=' .. date2 .. '\n' ..
'|date2=' .. date2 .. '\n' ..
'|placeOfPublication=' .. placeOfPublication .. '\n' ..
'|placeOfPublication=' .. placeOfPublication .. '\n' ..
'|illustrations=' .. illustrations .. '\n' ..
'|illustrations=' .. illustrations .. '\n' ..
'|targetAudience=' .. targetAudience .. '\n' ..
'|targetAudience=' .. targetAudience .. '\n' ..
'|formOfItem=' .. formOfItem .. '\n' ..
'|formOfItem=' .. formOfItem .. '\n' ..
'|natureOfContents=' .. natureOfContents .. '\n' ..
'|natureOfContents=' .. natureOfContents .. '\n' ..
'|governmentPublication=' .. governmentPublication .. '\n' ..
'|governmentPublication=' .. governmentPublication .. '\n' ..
'|conferencePublication=' .. conferencePublication .. '\n' ..
'|conferencePublication=' .. conferencePublication .. '\n' ..
'|festschrift=' .. festschrift .. '\n' ..
'|festschrift=' .. festschrift .. '\n' ..
'|index=' .. index .. '\n' ..
'|index=' .. index .. '\n' ..
'|literaryForm=' .. literaryForm .. '\n' ..
'|literaryForm=' .. literaryForm .. '\n' ..
'|biography=' .. biography .. '\n' ..
'|biography=' .. biography .. '\n' ..
'|language=' .. language .. '\n' ..
'|language=' .. language .. '\n' ..
'|modifiedRecord=' .. modifiedRecord .. '\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 recordStatus = leader:sub( 6, 6 )
local encodingLevel = leader:sub(18, 18)
local encodingLevel = leader:sub( 18, 18 )
if encodingLevel == ' '
if encodingLevel == ' '
then
then
encodingLevel = ''
encodingLevel = ''
end
end
local punctuationPolicy = leader:sub(19, 19)
local punctuationPolicy = leader:sub( 19, 19 )
if punctuationPolicy == ' ' or punctuationPolicy == '4'
if punctuationPolicy == ' ' or punctuationPolicy == '4'
then
then
punctuationPolicy = ''
punctuationPolicy = ''
end
end
-- control field 008
-- control field 008
local dateEnteredOnFile = controlField008:sub(1, 6)
local dateEnteredOnFile = controlField008:sub( 1, 6 )
local directOrIndirectGeogSubdiv = controlField008:sub(7, 7)
local directOrIndirectGeogSubdiv = controlField008:sub( 7, 7 )
if directOrIndirectGeogSubdiv == ' '
if directOrIndirectGeogSubdiv == ' '
then
then
directOrIndirectGeogSubdiv = ''
directOrIndirectGeogSubdiv = ''
end
end
local romanizationScheme = controlField008:sub(8, 8)
local romanizationScheme = controlField008:sub( 8, 8 )
local languageOfCatalog = controlField008:sub(9, 9)
local languageOfCatalog = controlField008:sub( 9, 9 )
if languageOfCatalog == ' '
if languageOfCatalog == ' '
then
then
languageOfCatalog = ''
languageOfCatalog = ''
end
end
local kindOfRecord = controlField008:sub(10, 10)
local kindOfRecord = controlField008:sub( 10, 10 )
local descriptiveCatalogingRules = controlField008:sub(11, 11)
local descriptiveCatalogingRules = controlField008:sub( 11, 11 )
local subjectHeadingSystem = controlField008:sub(12, 12)
local subjectHeadingSystem = controlField008:sub( 12, 12 )
local typeOfSeries = controlField008:sub(13, 13)
local typeOfSeries = controlField008:sub( 13, 13 )
local numberedOrUnnumberedSeries = controlField008:sub(14, 14)
local numberedOrUnnumberedSeries = controlField008:sub( 14, 14 )
if numberedOrUnnumberedSeries == ' '
if numberedOrUnnumberedSeries == ' '
then
then
numberedOrUnnumberedSeries = ''
numberedOrUnnumberedSeries = ''
end
end
local headingUseMainOrAddedEntry = controlField008:sub(15, 15)
local headingUseMainOrAddedEntry = controlField008:sub( 15, 15 )
local headingUseSubjectAddedEntry = controlField008:sub(16, 16)
local headingUseSubjectAddedEntry = controlField008:sub( 16, 16 )
if headingUseSubjectAddedEntry == ' '
if headingUseSubjectAddedEntry == ' '
then
then
headingUseSubjectAddedEntry = ''
headingUseSubjectAddedEntry = ''
end
end
local headingUseSeriesAddedEntry = controlField008:sub(17, 17)
local headingUseSeriesAddedEntry = controlField008:sub( 17, 17 )
local typeOfSubjectSubdivision = controlField008:sub(18, 18)
local typeOfSubjectSubdivision = controlField008:sub( 18, 18 )
if typeOfSubjectSubdivision == ' '
if typeOfSubjectSubdivision == ' '
then
then
typeOfSubjectSubdivision = ''
typeOfSubjectSubdivision = ''
end
end
local typeOfGovernmentAgency = controlField008:sub(29, 29)
local typeOfGovernmentAgency = controlField008:sub( 29, 29 )
if typeOfGovernmentAgency == ' '
if typeOfGovernmentAgency == ' '
then
then
typeOfGovernmentAgency = ''
typeOfGovernmentAgency = ''
end
end
local referenceEvaluation = controlField008:sub(30, 30)
local referenceEvaluation = controlField008:sub( 30, 30 )
if referenceEvaluation == ' '
if referenceEvaluation == ' '
then
then
referenceEvaluation = ''
referenceEvaluation = ''
end
end
local recordUpdateInProcess = controlField008:sub(32, 32)
local recordUpdateInProcess = controlField008:sub( 32, 32 )
local undifferentiatedPersonalName = controlField008:sub(33, 33)
local undifferentiatedPersonalName = controlField008:sub( 33, 33 )
if undifferentiatedPersonalName == ' '
if undifferentiatedPersonalName == ' '
then
then
undifferentiatedPersonalName = ''
undifferentiatedPersonalName = ''
end
end
local levelOfEstablishment = controlField008:sub(34, 34)
local levelOfEstablishment = controlField008:sub( 34, 34 )
if levelOfEstablishment == ' '
if levelOfEstablishment == ' '
then
then
levelOfEstablishment = ''
levelOfEstablishment = ''
end
end
local modifiedRecord = controlField008:sub(39, 39)
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)
local catalogingSource = controlField008:sub( 40, 40 )
if catalogingSource == ' '
if catalogingSource == ' '
then
then
catalogingSource = ''
catalogingSource = ''
end
end
-- query string maker (part 1), Predefinição AutRecord
-- query string maker (part 1), Predefinição AutRecord
queryString =
queryString =
'AutRecord[dateEnteredOnFile]=' .. dateEnteredOnFile ..
'AutRecord[dateEnteredOnFile]=' .. dateEnteredOnFile ..
'&AutRecord[recordStatus]=' .. recordStatus ..
'&AutRecord[recordStatus]=' .. recordStatus ..
'&AutRecord[encodingLevel]=' .. encodingLevel ..
'&AutRecord[encodingLevel]=' .. encodingLevel ..
'&AutRecord[punctuationPolicy]=' .. punctuationPolicy ..
'&AutRecord[punctuationPolicy]=' .. punctuationPolicy ..
'&AutRecord[directOrIndirectGeogSubdiv]=' .. directOrIndirectGeogSubdiv ..
'&AutRecord[directOrIndirectGeogSubdiv]=' .. directOrIndirectGeogSubdiv ..
'&AutRecord[romanizationScheme]=' .. romanizationScheme ..
'&AutRecord[romanizationScheme]=' .. romanizationScheme ..
'&AutRecord[languageOfCatalog]=' .. languageOfCatalog ..
'&AutRecord[languageOfCatalog]=' .. languageOfCatalog ..
'&AutRecord[kindOfRecord]=' .. kindOfRecord ..
'&AutRecord[kindOfRecord]=' .. kindOfRecord ..
'&AutRecord[descriptiveCatalogingRules]=' .. descriptiveCatalogingRules ..
'&AutRecord[descriptiveCatalogingRules]=' .. descriptiveCatalogingRules ..
'&AutRecord[subjectHeadingSystem]=' .. subjectHeadingSystem ..
'&AutRecord[subjectHeadingSystem]=' .. subjectHeadingSystem ..
'&AutRecord[typeOfSeries]=' .. typeOfSeries ..
'&AutRecord[typeOfSeries]=' .. typeOfSeries ..
'&AutRecord[numberedOrUnnumberedSeries]=' .. numberedOrUnnumberedSeries ..
'&AutRecord[numberedOrUnnumberedSeries]=' .. numberedOrUnnumberedSeries ..
'&AutRecord[headingUseMainOrAddedEntry]=' .. headingUseMainOrAddedEntry ..
'&AutRecord[headingUseMainOrAddedEntry]=' .. headingUseMainOrAddedEntry ..
'&AutRecord[headingUseSubjectAddedEntry]=' .. headingUseSubjectAddedEntry ..
'&AutRecord[headingUseSubjectAddedEntry]=' .. headingUseSubjectAddedEntry ..
'&AutRecord[headingUseSeriesAddedEntry]=' .. headingUseSeriesAddedEntry ..
'&AutRecord[headingUseSeriesAddedEntry]=' .. headingUseSeriesAddedEntry ..
'&AutRecord[typeOfSubjectSubdivision]=' .. typeOfSubjectSubdivision ..
'&AutRecord[typeOfSubjectSubdivision]=' .. typeOfSubjectSubdivision ..
'&AutRecord[typeOfGovernmentAgency]=' .. typeOfGovernmentAgency ..
'&AutRecord[typeOfGovernmentAgency]=' .. typeOfGovernmentAgency ..
'&AutRecord[referenceEvaluation]=' .. referenceEvaluation ..
'&AutRecord[referenceEvaluation]=' .. referenceEvaluation ..
'&AutRecord[recordUpdateInProcess]=' .. recordUpdateInProcess ..
'&AutRecord[recordUpdateInProcess]=' .. recordUpdateInProcess ..
'&AutRecord[undifferentiatedPersonalName]=' .. undifferentiatedPersonalName ..
'&AutRecord[undifferentiatedPersonalName]=' .. undifferentiatedPersonalName ..
'&AutRecord[levelOfEstablishment]=' .. levelOfEstablishment ..
'&AutRecord[levelOfEstablishment]=' .. levelOfEstablishment ..
'&AutRecord[modifiedRecord]=' .. modifiedRecord ..
'&AutRecord[modifiedRecord]=' .. modifiedRecord ..
'&AutRecord[catalogingSource]=' .. catalogingSource ..
'&AutRecord[catalogingSource]=' .. catalogingSource ..
fieldQueryString
fieldQueryString
-- template string maker (part 1), Predefinição AutRecord
-- template string maker (part 1), Predefinição AutRecord
firstTemplate = '<pre>{{AutRecord\n' ..
firstTemplate = '<pre>{{AutRecord\n' ..
'|dateEnteredOnFile=' .. dateEnteredOnFile .. '\n' ..
'|dateEnteredOnFile=' .. dateEnteredOnFile .. '\n' ..
'|recordStatus=' .. recordStatus .. '\n' ..
'|recordStatus=' .. recordStatus .. '\n' ..
'|encodingLevel=' .. encodingLevel .. '\n' ..
'|encodingLevel=' .. encodingLevel .. '\n' ..
'|punctuationPolicy=' .. punctuationPolicy .. '\n' ..
'|punctuationPolicy=' .. punctuationPolicy .. '\n' ..
'|directOrIndirectGeogSubdiv=' .. directOrIndirectGeogSubdiv .. '\n' ..
'|directOrIndirectGeogSubdiv=' .. directOrIndirectGeogSubdiv .. '\n' ..
'|romanizationScheme=' .. romanizationScheme .. '\n' ..
'|romanizationScheme=' .. romanizationScheme .. '\n' ..
'|languageOfCatalog=' .. languageOfCatalog .. '\n' ..
'|languageOfCatalog=' .. languageOfCatalog .. '\n' ..
'|kindOfRecord=' .. kindOfRecord .. '\n' ..
'|kindOfRecord=' .. kindOfRecord .. '\n' ..
'|descriptiveCatalogingRules=' .. descriptiveCatalogingRules .. '\n' ..
'|descriptiveCatalogingRules=' .. descriptiveCatalogingRules .. '\n' ..
'|subjectHeadingSystem=' .. subjectHeadingSystem .. '\n' ..
'|subjectHeadingSystem=' .. subjectHeadingSystem .. '\n' ..
'|typeOfSeries=' .. typeOfSeries .. '\n' ..
'|typeOfSeries=' .. typeOfSeries .. '\n' ..
'|numberedOrUnnumberedSeries=' .. numberedOrUnnumberedSeries .. '\n' ..
'|numberedOrUnnumberedSeries=' .. numberedOrUnnumberedSeries .. '\n' ..
'|headingUseMainOrAddedEntry=' .. headingUseMainOrAddedEntry .. '\n' ..
'|headingUseMainOrAddedEntry=' .. headingUseMainOrAddedEntry .. '\n' ..
'|headingUseSubjectAddedEntry=' .. headingUseSubjectAddedEntry .. '\n' ..
'|headingUseSubjectAddedEntry=' .. headingUseSubjectAddedEntry .. '\n' ..
'|headingUseSeriesAddedEntry=' .. headingUseSeriesAddedEntry .. '\n' ..
'|headingUseSeriesAddedEntry=' .. headingUseSeriesAddedEntry .. '\n' ..
'|typeOfSubjectSubdivision=' .. typeOfSubjectSubdivision .. '\n' ..
'|typeOfSubjectSubdivision=' .. typeOfSubjectSubdivision .. '\n' ..
'|typeOfGovernmentAgency=' .. typeOfGovernmentAgency .. '\n' ..
'|typeOfGovernmentAgency=' .. typeOfGovernmentAgency .. '\n' ..
'|referenceEvaluation=' .. referenceEvaluation .. '\n' ..
'|referenceEvaluation=' .. referenceEvaluation .. '\n' ..
'|recordUpdateInProcess=' .. recordUpdateInProcess .. '\n' ..
'|recordUpdateInProcess=' .. recordUpdateInProcess .. '\n' ..
'|undifferentiatedPersonalName=' .. undifferentiatedPersonalName .. '\n' ..
'|undifferentiatedPersonalName=' .. undifferentiatedPersonalName .. '\n' ..
'|levelOfEstablishment=' .. levelOfEstablishment .. '\n' ..
'|levelOfEstablishment=' .. levelOfEstablishment .. '\n' ..
'|modifiedRecord=' .. modifiedRecord .. '\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=AutRecord', 'link text=Importar registro',
args = { 'form=AutRecord', 'link text=Importar registro',
'link type=post button', 'query string=' .. queryString } }
'link type=post button', 'query string=' .. queryString } }
end
end
-- retorna todos os valores para a predefinição {{MARCimporter}}
-- retorna todos os valores para a predefinição {{MARCimporter}}
return formLink, firstTemplate, fieldTemplates, lastTemplate
return formLink, firstTemplate, fieldTemplates, lastTemplate
end
end

return p
return p

Edição das 15h49min de 7 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 = 0
	local dataValuesGroup = ''
	-- inicializa as variáveis auxiliares
	local directoryEntry = 0
	local entryTag = 0
	local entryDataLength = 0
	local entryInitPosition = 0
	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 0
		--> 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' )
	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 = 'r'
	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 == '0'
	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 )
	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