Module:Bibliographical item

From International Robin Hood Bibliography

Documentation for this module may be created at Module:Bibliographical item/doc

-- This module is no longer used.

local p = {}
local f = nil
local t = nil
local s = require "Module:StringUtilities"
local v = require "Module:PageVariables"
local b = require "Module:BibliographicalProperties"


local function assembleSingleValue(microDataName, value)
	return "<span itemprop='" .. microDataName .. "'>" .. value .. "</span>"
end


local function prepareSingleValue(variableName, microDataName, prefix, suffix, fullStop)
	local prefix = prefix or ""
	local suffix = suffix or ""
	local fullStop = fullStop or false
	local value = v.readVariable(f, variableName)
	if value ~= "" then 
		value = assembleSingleValue(microDataName, value) .. "."
		value = string.gsub(value, "%.%<%/span%>%.$", "</span>.")
		value = prefix .. value .. suffix
	end
	return value
end


local function prepareMultiPartValue(variableName)
	local strValue = v.readVariable(f, variableName)
	strValue = string.gsub(strValue, t .. " ", "")
	local arStrValue = s.splitString(strValue, "▚")
	for i, contrib in ipairs(arStrValue) do
		arStrValue[i] = string.sub(arStrValue[i], 2)
		arStrValue[i] = arStrValue[i]:sub(1, #string - 2)
	end
	return arStrValue
end


local function prepareDownload(downloadData)
	downloadData = string.gsub(downloadData, "Download, ", "")
	local arStrDownloadData = s.splitString(downloadData, ",")
	for i, download in ipairs(arStrDownloadData) do
		if (i > 3) then arStrDownloadData[3] = arStrDownloadData[3] .. arStrDownloadData[i] end
	end
	local value = ""
	local url = s.trim(arStrDownloadData[1])
	local text = s.trim(arStrDownloadData[2])
	local comment = s.trim(arStrDownloadData[3])
	if (url ~= "") 
		then value = "\n* [" .. url .. " " .. text .. "]"
		else value = text
	end
	if (comment ~= nil and comment ~= "?") then value = value .. " &ndash; " .. comment end
	return value
end


local function prepareCopy(copyData)
	local posRecordClass = copyData:find(", Copy, ")
	local libraryCollection = string.sub(copyData, 1, posRecordClass - 1)
	libraryCollection = s.trim(libraryCollection)
	local afterRecordClass = string.sub(copyData, posRecordClass + string.len(", Copy, ") )
	local text = ""
	local url = ""
	local posLastComma = string.find(afterRecordClass, ",[^,]*$")
	if (posLastComma ~= nil) 
		then text = string.sub(afterRecordClass, 0, posLastComma - 1)
			text = s.trim(text)
			url = string.sub(afterRecordClass, posLastComma + 1)
			url = s.trim(url)
	end
	if (text == "?") then text = "" else text = " &ndash; " .. text end
	if (url ~= "?") 
		then libraryCollection = "[" .. url .. " " .. libraryCollection .. "]"
	end
	libraryCollection = libraryCollection .. text
	if libraryCollection ~= "" then libraryCollection = "\n* " .. libraryCollection end
	return libraryCollection
end


local function prepareBibliographicalSource(bibliographicalSourceData)
	local posRecordClass = bibliographicalSourceData:find(", BibliographicalSource, ")
	local beforeRecordClass = string.sub(bibliographicalSourceData, 1, posRecordClass - 1)
	beforeRecordClass = s.trim(beforeRecordClass)
	local comment = string.sub(bibliographicalSourceData, posRecordClass + string.len(", BibliographicalSource, ") )
	comment = s.trim(comment)
	local posBool = string.find(beforeRecordClass, ", false,")
	local isIrhbPage
	if posBool == nil 
		then posBool = string.find(beforeRecordClass, ", true,") 
			isIrhbPage = ", true,"
		else isIrhbPage = ", false,"
	end
	local text = string.sub(beforeRecordClass, 1, posBool - 1)
	local url = string.sub(beforeRecordClass, posBool + string.len(isIrhbPage) + 1)
	if isIrhbPage ~= ", true,"
		then text = "[" .. url .. " " .. text .. "]"
		else text = "{{:" .. text .. "}}"
	end
	if comment ~= "?" then text = text .. " &ndash; " .. comment end
	if text ~= "" then text = "\n* " .. text end
	return text
-- BL Catalogue;false;http://www.bl.uk;BibliographicalSource;
-- Gable, John Harris 1939a;true;;BibliographicalSource;No. 2
-- Walker, Violet Winifred 1933a;false;;BibliographicalSource;
-- BookBibliographicalSourceText; BookIsPage; Url; RecordClass; Comment
--]]	
end


local function prepareList(variableName, formatter, heading)
	local arStr = prepareMultiPartValue(variableName)
	local value = ""
	for i, item in ipairs(arStr) do
		value = value .. formatter(arStr[i])
	end
	if (value ~= "") then value = "'''" .. heading .. "'''" .. value end
	value = f:preprocess(value)
	return "<p class='biblioItem'><br/>" .. value .. "</p>"
end


local function prepareDimensions(suffix)
	local suffix = suffix or ""
	local dim = prepareSingleValue("BookHeight", b.Height, "", " ", false)
	if dim ~= "" 
		then dim = dim .. prepareSingleValue("BookWidth", b.Width, "x ", " ", true) 
		else dim = prepareSingleValue("BookFormat", b.Format, "", " ", true)
	end
	return dim
end


local function prepareIsbns()
	local arStrIsbns = prepareMultiPartValue("BookIsbn")
	local isbns = ""
	for i, isbn in ipairs(arStrIsbns) do
		arStrIsbns[i] = string.gsub(arStrIsbns[i], "Isbn, ", "<span itemprop='" .. b.IsbnNumber .. "'>")
		arStrIsbns[i] = string.gsub(arStrIsbns[i], ", ", "</span> (<span itemprop='" .. b.IsbnNote .. "'>")
		if arStrIsbns[i]:find("%(") ~= nil 
			then arStrIsbns[i] = arStrIsbns[i] .. "</span>)" 
		end
		isbns = isbns .. "<span itemscope='' itemtype='" .. b.Isbn .. "'>" .. arStrIsbns[i] .. "</span>; "
	end
	isbns = string.gsub(isbns, "%; $", ". ")
	isbns = string.gsub(isbns, "%.%. $", ".") .. " "
	return isbns
end


local function prepareImprints()
	local arStrImprints = prepareMultiPartValue("BookImprint")
	local imprints = ""
	for i, imprint in ipairs(arStrImprints) do
		imprints = imprints .. "<span itemscope itemtype='" .. b.Imprint .. "'><span itemprop='" .. b.Place .. "'>" 
		imprints = imprints .. string.gsub(arStrImprints[i], ", Imprint,", "</span>: <span itemprop='" .. b.Publisher .. "'>")
		imprints = imprints .. "</span></span>; "
	end
	imprints = string.gsub(imprints, "%; $", ". ")
	imprints = string.gsub(imprints, "%.</span></span>%. $", "</span></span>.")
	return imprints
end


local function prepareSeries(suffix)
	local suffix = suffix or ""
	local seriesData = prepareSingleValue("BookSeriesTitle", b.SeriesTitle, "(<i>", "</i>", false)
	local seriesNumber = prepareSingleValue("BookSeriesNumber", b.SeriesNumber, "", "", false)
	if seriesData ~= "" 
		then if seriesNumber ~= "" then seriesData = seriesData .. ", " .. seriesNumber end
			seriesData = seriesData .. ")" .. suffix
		else if seriesNumber ~= "" then seriesData = "(" .. seriesNumber .. ")" .. suffix end
	end
	return seriesData
end



local function prepareMonographBaseData()
	local baseData = prepareSingleValue("BookTitle", b.Title, "<i>", "</i>", false)
	baseData = baseData .. prepareSingleValue("BookEdition", b.Edition, ". ", "", false)
	baseData = string.gsub(baseData, "%.%<%/i%>.", ".</i>")
	baseData = baseData .. prepareSingleValue("BookAttribution", b.Attribution, " / ", "", false)
	baseData = baseData .. prepareSeries(".") .. " " .. prepareImprints()
	baseData = baseData .. prepareSingleValue("DateString", b.DateString, ", ", " ", true)
	baseData = baseData .. prepareSingleValue("BookVolumes", b.Volumes, "", " ", true)
	baseData = baseData .. prepareSingleValue("BookCollation", b.Collation, "", " ", true)
	baseData = baseData .. prepareDimensions(" ")
	baseData = baseData .. prepareSingleValue("BookIllustrations", b.Illustrations, "", " ", false)
	baseData = baseData .. prepareSingleValue("BookBinding", b.Binding, "", " ", false)
	baseData = baseData .. prepareSingleValue("BookIssn", b.ISSN, "", " ", false) .. prepareIsbns()
	baseData = baseData .. prepareSingleValue("BookLccn", b.LCCN, "", " ", false)
	return baseData
end


local function preparePaperBaseData()
	local basedata = "'" .. v.readVariable(f, "BookTitle" ) .. "'"
	return basedata
end


local function prepareContributors()
	local arStrContributors = prepareMultiPartValue("BookContributors")
	local originators = ""
	for i, contrib in ipairs(arStrContributors) do
		arStrContributors[i] = string.gsub(arStrContributors[i], "%, ", "⬛",  1)	
		arStrContributors[i] = string.gsub(arStrContributors[i], "%, Contributor%, ", "⬛",  1)
		local arStrOrig = s.splitString(arStrContributors[i], "⬛")
		local name = arStrOrig[2]
		local arStrName = s.splitString(name, ", ")
		local surname = table.remove(arStrName, 1)
		surname = assembleSingleValue(b.Surname, surname)
		local givenNames = table.concat(arStrName, " ")
		if givenNames ~= "?" 
			then givenNames = ", " .. assembleSingleValue(b.GivenNames, givenNames)
			else givenNames = ""
		end
		local role = arStrOrig[1]
		if role ~= "?" 
			then role = ", " .. assembleSingleValue(b.Role, role)
			else role = ""
		end
		originators = originators .. " <span itemscope itemtype='" .. b.Contributor .. "'>"
		originators = originators .. surname .. givenNames .. role .. "</span>; "
	end
	originators = string.gsub(originators, "%; $", ". ")
	return originators
end


function p.prepare( frame )
	f = frame
	t = v.readVariable(f, 'PageName' )
	local bookType = v.readVariable(f, "BookType" )
	local baseData = "<span itemscope itemtype='" .. bookType .. "'>"
	baseData = baseData .. prepareContributors() .. " "
	if bookType == "Monograph" then baseData = baseData .. prepareMonographBaseData() 
		elseif bookType == "Paper" then baseData = baseData .. preparePaperBaseData()
	end
	baseData = baseData .. "</span>"
	v.defineVariable(f, "BaseData", baseData)
	v.defineVariable(f, "Comment", prepareSingleValue("BookComment", b.Comment, "<br/><br/><p class='biblioItem'>", "</p>", false)	)
	v.defineVariable(f, "Downloads", prepareList("BookDownload", prepareDownload, "Downloads") )
	v.defineVariable(f, "Copies", prepareList("BookCopy", prepareCopy, "Copies") )
	v.defineVariable(f, "BibliographicalSources", prepareList("BookBibliographicalSource", prepareBibliographicalSource, "Bibliographical sources") )
    return ""
	
end


return p

--[[
	p.Image = "Image"
	-- ToDo: Add ImageText and other properties as required
	p.Language = "Language"
	p.PageReference = "Page_Reference"
	BookIsTranslation
--]]