モジュール:書誌情報
表示
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> </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 ..'. ' ..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