コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

モジュール:書誌情報

モジュールの解説[表示] [編集] [履歴] [キャッシュを破棄]

使用法

[編集]
{{#invoke:書誌情報|main}}

local p = {}

function p.main( frame )
local args = require( 'Module:Arguments' ).getArgs( frame, { wrappers = 'Template:書誌情報', removeBlanks = false } )

-- ◆ nil避け ◆
	-- 文頭ドット / 仮line / 最終戻り値変数
	local dot = '<span style="color: #00528c; font-weight: bold;">・</span>';
	local line = '';
	local line_temp = '';
	local td = { '<td>', '</td>' };

	local title = '';
	local author = '';
	local publisher = '';
	local date = '';
	local isbn = '';

	local table_start = '';
	local nbsp = '';

	-- 各種スタイルのスイッチ
	local wikitable = args.wikitable or '';
	local toc = args.toc or '';
	local bordercolor = args.bordercolor or '#aaa';
	local shownumber = args['番号表示'] or '';
	local start = args['開始番号'] or '';
	local style = args.style or '';

	-- 列表示スイッチ
	local block_title = args['タイトル列'] or '';
	local block_author = args['著者列'] or '';
	local block_publisher = args['出版社列'] or '';
	local block_date = args['発売日列'] or '';

	-- 見出し行表示判定用
	local tt = { 'タイトル', '著者', '出版社', '発売日', 'ISBN' };
	local bf = { block_title, block_author, block_publisher, block_date };

-- ◆ ここから各種判定開始 ◆

	-- wikitable判定
	if wikitable == '' then
		table_start = '<table style="margin-left: 1em; ' ..style ..'">';
		nbsp = '<td>&nbsp;</td>';
	else
		table_start = '<table class="wikitable" style="margin-left: 1em; ' ..style ..'">';
		nbsp = '';
	end

	line_temp = '';

	if toc == '' then
		line_temp = '<tr style="font-weight: bold;">' ..nbsp;
		for i = 1, 4 do
			if bf[i] == '' then
				line_temp = line_temp ..'<td style="border-bottom: 1px solid ' ..bordercolor ..';">' ..tt[i] ..'</td>' ..nbsp;
			end
		end
		-- ISBN列 ※ここは省略出来ない
		line_temp = line_temp ..'<td style="border-bottom: 1px solid ' ..bordercolor ..';">ISBN</td></tr>';
	end

	-- ◆ここまでを table_start へ入れておく◆
	table_start = table_start ..line_temp;

	-- 書誌情報行 繰り返し処理 / 最大200行
	local j = start;
	if j == '' then
		j = 1;
	end

	local t = {};
--	for key, value in pairs(args) do
	for i = 1, 200 do	--最大200行
		line_temp = '';

		t1 = tt[1] ..i;
		t2 = tt[2] ..i;
		t3 = tt[3] ..i;
		t4 = tt[4] ..i;
		t5 = tt[5] ..i;

		title = '';
		title = args[t1] or '';
		author = args[t2] or '';
		publisher = args[t3] or '';
		date = args[t4] or '';
		isbn = args[t5] or '';

		line_temp = title ..author ..publisher ..date ..isbn;
		if line_temp == '' then
			break
		end
		line_temp = '';

		-- 行頭列 表示判定
		if wikitable == '' then
			if shownumber == '' then
				line_temp = line_temp ..td[1] ..dot ..td[2];	-- 空欄ならdot
			else
				line_temp = line_temp ..'<td style="text-align: right;">' ..j ..'.&nbsp;' ..td[2]; -- 指定があれば数字
			end
		end

		-- 列表示スイッチ判定 / タイトル
		if block_title == '' then
			if title ~= '' then
				line_temp = line_temp ..td[1] ..'『' ..title ..'』' ..td[2] ..nbsp;
			end
		end

		-- 列表示スイッチ判定 / 著者
		if block_author == '' then
			if author ~= '' then
				line_temp = line_temp ..td[1] ..author ..td[2] ..nbsp;
			end
		end

		-- 列表示スイッチ判定 / 出版社
		if block_publisher == '' then
			if publisher ~= '' then
				line_temp = line_temp ..td[1] ..publisher ..td[2] ..nbsp;
			end
		end

		-- 列表示スイッチ判定 / 発売日
		if block_date == '' then
			if date ~= '' then
				line_temp = line_temp ..td[1] ..frame:expandTemplate{ title = 'Citation/showdate', args = { date } } ..td[2] ..nbsp;
			end
		end

		-- ISBN 存在判定
		if isbn ~= '' then
				line_temp = line_temp ..td[1] ..'ISBN ' ..isbn ..td[2];
		end

		-- lineに追加
		line = line ..'<tr>' ..line_temp ..'</tr>';
		j = j + 1;
	end

	-- 戻り値 + テーブル終了
	return table_start ..line ..'</table>'
end
 
return p