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

De Wikincat
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 ( frame.args[1]:gsub( '%[%[SMW::...?%]%]', '' ), ',' , true )
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
-- valores como: '0010007,0030009,0050017,0080041'.
-- {{#invoke:Directory|makeDirectory|...}} que é o resultado das consultas
-- #ask da Predefinição:Directory. Ele retorna, portanto, valores como:
-- '0010007,0030009,0050017,0080041'.
-- É 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