モジュール:5chlog

提供: 2ちゃんねるウィキペディアスレまとめwiki
Jump to navigation Jump to search

このモジュールについての説明文ページを モジュール:5chlog/doc に作成できます

local p = {}

local function parse(content, id)
	local r = {}
	content = mw.ustring.gsub(('\n\n' .. content), '\n\n\n*(%d+)[^:]-%s?([^2][^0][^01]%D[^/:]-)%s?(20[01]%d[^\n]+)', '\n\n%1:%2:%3\n') --過去ログのフォーマットに合わせる
	content = content:gsub('\n+(%d+)%s*:%s*([^:]+)%s*:%s*([^\n]+)\n*', '\a%1:%2:%3\n'):gsub('\a', '', 1)
	for s in mw.text.gsplit(content, '\a') do
		local number, name, dateid, message = s:match('(%d+):([^:]*):(.-)\n%s*(.*)')
		r[#r + 1] = '<div id="' .. id .. '-' .. number .. '" style="background:#efefef;border:1px #ddd;border-style:none solid solid none;margin:.25em;padding:.5em"><div style="font-size:90%;">' .. number .. ':<b class=u style="color:#00f;">' .. name .. '</b>:' .. dateid .. '</div><p style="line-height:1.2">' .. message:gsub('\n[ ]*', '<br>'):gsub('>>(%d+)', '[[#' .. id .. '-%1|>>%1]]') .. '</p></div>'
	end
	return r
end

function p.main(frame)
	local caption = frame.args.caption
	caption = caption == '' and '' or '<b>' .. caption .. '</b>'
	local cite = frame.args.cite
	local url = cite:match('%[(%S+)', 1)
	local res = parse(frame.args.content, frame.args.id)
	return '<div class=center><div class=bbslog style="display:inline-block;">' .. caption .. '<blockquote cite="' .. url .. '" id="' .. frame.args.id .. '" class="flex noquotes plainlinks" style="flex-direction:column;align-items:flex-start;background:#f2f3f7;border:0;margin:0;padding:.25em;text-align:left;">' .. table.concat(res) .. '</blockquote><small style="display:block;text-align:right;">出典:<cite>' .. cite .. '</cite></small></div></div>'
end

return p