Módulo:Directory: mudanças entre as edições
Ir para navegação
Ir para pesquisar
Sem resumo de edição |
Sem resumo de edição |
||
(2 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 3: | Linha 3: | ||
local p = {} |
local p = {} |
||
function p.makeDirectory ( frame ) |
function p.makeDirectory ( frame ) |
||
if not mw.smw then |
|||
return "mw.smw module not found" |
|||
end |
|||
-- Retorna os Field lengths dos subobjetos (campos) |
|||
-- Template:ISO2709/ControlFieldDirectoryBuilder e |
|||
-- Template:ISO2709/DataFieldDirectoryBuilder |
|||
-- fazem o trabalho de saída para as consultas #ask |
|||
local fieldLengths = frame:preprocess( |
|||
[=[{{#ask: [[-Has subobject::{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}]] |
|||
[[Control field data::+]] |
|||
|?Control field data |
|||
|format=plainlist |
|||
|link=none |
|||
|order=asc |
|||
|headers=hide |
|||
|outro=,|propsep=,|valuesep=&&&&|sep=,|template=ISO2709/ControlFieldDirectoryBuilder |
|||
}}{{#ask: [[-Has subobject::{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}]] |
|||
[[Field data::+]] |
|||
|?Field data |
|||
|format=plainlist |
|||
|limit=100 |
|||
|link=none |
|||
|order=asc |
|||
|headers=hide |
|||
|propsep=,|valuesep=&&&&|sep=,|template=ISO2709/DataFieldDirectoryBuilder |
|||
}}]=]):gsub( '%[%[SMW::...?%]%]', '' ) or '0' |
|||
local sum = 0 |
local sum = 0 |
||
local directory = '' |
local directory = '' |
||
for index, tagAndLenght in ipairs( |
for index, tagAndLenght in ipairs( |
||
mw.text.split ( |
mw.text.split ( fieldLengths, ',' , true ) |
||
) do |
) do |
||
-- fieldLengths é o resultado das consultas #ask. Retorna, portanto, |
|||
-- frame.args[1] captura o primeiro e único argumento da chamada |
|||
⚫ | |||
-- {{#invoke:Directory|makeDirectory|...}} que é o resultado das consultas |
|||
-- #ask da Predefinição:Directory. Ele retorna, portanto, valores como: |
|||
⚫ | |||
-- É necessário remover as marcações invisíveis [[SMW::off]] e [[SMW::on]] |
-- É necessário remover as marcações invisíveis [[SMW::off]] e [[SMW::on]] |
||
-- para que a conta abaixo seja efetuada com sucesso. |
-- para que a conta abaixo seja efetuada com sucesso. |
||
Linha 25: | Linha 50: | ||
-- a cada iteração, os últimos 4 números de 'tagAndLenght' são somados e |
-- a cada iteração, os últimos 4 números de 'tagAndLenght' são somados e |
||
-- armazenados na variável 'sum'. |
-- armazenados na variável 'sum'. |
||
end |
|||
--[[ O diretório completo é armazenado na propriedade Directory do subobjeto |
|||
000 (para posterior uso na Predefinição ISO 2709. Ao final, o |
|||
Base address of data (número de caracteres do Líder (24) + o número de |
|||
caracteres do Diretório + 1 caractere de "Field terminator") é calculado e |
|||
armazenado também no subobjeto 000 (para uso no Líder das Predefinições |
|||
Bibliographic record e Authority record). |
|||
--]] |
|||
local baseAddressOfData = string.format("%05d", #directory + 25) |
|||
-- Cálculo do "Record length": |
|||
-- "Field length" + "Base address of data" + 1 caractere de "Record terminator" |
|||
local recordLength = string.format("%05d", sum + baseAddressOfData + 1) |
|||
local dataStore = { |
|||
'Directory=' .. directory, |
|||
'Base address of data=' .. baseAddressOfData, |
|||
'Record length=' .. recordLength |
|||
} |
|||
local result = mw.smw.subobject( dataStore, '000' ) |
|||
if result == true then |
|||
-- everything ok |
|||
else |
|||
return 'An error occurred during the subobject storage process. Message reads ' .. result.error |
|||
end |
end |
||
return directory |
|||
-- retorna o diretório completo: |
|||
-- '001000700000003000900007005001700016008004100033' |
|||
end |
end |
||
return p |
return p |
Edição atual tal como às 14h58min de 7 de janeiro de 2023
A documentação para este módulo pode ser criada em Módulo:Directory/doc
-- Author: @vitorsilverio
-- Author: @jaideraf
local p = {}
function p.makeDirectory ( frame )
if not mw.smw then
return "mw.smw module not found"
end
-- Retorna os Field lengths dos subobjetos (campos)
-- Template:ISO2709/ControlFieldDirectoryBuilder e
-- Template:ISO2709/DataFieldDirectoryBuilder
-- fazem o trabalho de saída para as consultas #ask
local fieldLengths = frame:preprocess(
[=[{{#ask: [[-Has subobject::{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}]]
[[Control field data::+]]
|?Control field data
|format=plainlist
|link=none
|order=asc
|headers=hide
|outro=,|propsep=,|valuesep=&&&&|sep=,|template=ISO2709/ControlFieldDirectoryBuilder
}}{{#ask: [[-Has subobject::{{{1|{{#urldecode:{{#urlget:fullpagename|{{FULLPAGENAME}}}}}}}}}]]
[[Field data::+]]
|?Field data
|format=plainlist
|limit=100
|link=none
|order=asc
|headers=hide
|propsep=,|valuesep=&&&&|sep=,|template=ISO2709/DataFieldDirectoryBuilder
}}]=]):gsub( '%[%[SMW::...?%]%]', '' ) or '0'
local sum = 0
local directory = ''
for index, tagAndLenght in ipairs(
mw.text.split ( fieldLengths, ',' , true )
) do
-- fieldLengths é o resultado das consultas #ask. Retorna, portanto,
-- valores como: '0010007,0030009,0050017,0080041'.
-- É necessário remover as marcações invisíveis [[SMW::off]] e [[SMW::on]]
-- para que a conta abaixo seja efetuada com sucesso.
-- mw.text.split divide a string recebida, tendo como delimitadora,
-- literalmente (true), a vírgula, e armazena os dados em uma tabela:
-- { '0010007', '0030009', '0050017', '0080041' }
-- os valores capturados são passados para a variável 'tagAndLenght'.
directory = string.format( '%s%s%05d', directory, tagAndLenght, sum )
-- o diretório é montado concatenando as variáveis 'directory', 'tagAndLenght'
-- e 'sum'. '%s%s%05d' significa que 'directory' é uma string,
-- 'tagAndLenght' é uma string e 'sum' são 5 dígitos completados com 0)
sum = sum + tagAndLenght:sub( 4, 7 )
-- a cada iteração, os últimos 4 números de 'tagAndLenght' são somados e
-- armazenados na variável 'sum'.
end
--[[ O diretório completo é armazenado na propriedade Directory do subobjeto
000 (para posterior uso na Predefinição ISO 2709. Ao final, o
Base address of data (número de caracteres do Líder (24) + o número de
caracteres do Diretório + 1 caractere de "Field terminator") é calculado e
armazenado também no subobjeto 000 (para uso no Líder das Predefinições
Bibliographic record e Authority record).
--]]
local baseAddressOfData = string.format("%05d", #directory + 25)
-- Cálculo do "Record length":
-- "Field length" + "Base address of data" + 1 caractere de "Record terminator"
local recordLength = string.format("%05d", sum + baseAddressOfData + 1)
local dataStore = {
'Directory=' .. directory,
'Base address of data=' .. baseAddressOfData,
'Record length=' .. recordLength
}
local result = mw.smw.subobject( dataStore, '000' )
if result == true then
-- everything ok
else
return 'An error occurred during the subobject storage process. Message reads ' .. result.error
end
end
return p