본문으로 이동

모듈:reference section/table

위키낱말사전, 말과 글의 누리

이 모듈에 대한 설명문서는 모듈:reference section/table/설명문서에서 만들 수 있습니다

local export = {}

local script_utilities_module = "모듈:script utilities"

local css_classes = {
	qualifier = 'e-qualifier',
	title = 'r-title',
	subtitle = 'r-subtitle'
}

-- HTML 시맨틱 태그 생성기. mw.htmlcreate()과 유사하게 기능
local function wrap(tag, class, style, text)
	if text and style and class then
		return table.concat{'<', tag, ' class="', class, '" style="', style, '">', text, '</', tag, '>'}
	else
		if text and class then
			return table.concat{'<', tag, ' class="', class, '">', text, '</', tag, '>'}
		else
			return nil
		end
	end
end

-- span, table 시맨틱 태그를 생성함
local function span(class, text) return wrap('span', class, nil, text) end
local function tab(class, style, text) 
	if style then
		return wrap('table', class, style, text)
	else
		return wrap('table', class, false, text)
	end
end
local function th(style, text) return wrap('th', "", style, text) end

-- 영위낱 고유링크 80187774#L-86 부분
local function convert_to_raw_text(text)
	text = rsub(text, "<.->", "")
	if text:find("%[%[") then
		text = require(links_module).remove_links(text)
	end
	return text
end

local function process_ref_section_text(data)
	local langcode = data.langcode
	local scriptcode = data.scriptcode
	local title = data.title
	local subtitle = data.subtitle
	local journal = data.journal
	local identifier = data.identifier
	local publisher = data.publisher
	local year = data.year
	local month = data.month
	local day = data.day
	local vol = data.vol
	local issue = data.issue
	local sing = data.sing
	local edition = data.edition
	local author = data.author
	local proofreader = data.proofreader
	local cowork = data.cowork
	local ref_type = data.ref_type
	local page = data,page
	
	if subtitle then 
		subtitle = ":" .. subtitle -- ':부제'와 같은 형식으로 포맷팅
	else 
		subtitle = "" -- 빈 스트링
	end
	if journal then 
		subtitle = "〈"..span(css_classes.subtitle, title .. subtitle ).."〉"
		title = "《"..span(css_classes.title, journal ).."》"
	else
		title = "《"..span(css_classes.title, title ).."》"
	end
	
	if publisher then 
		publisher = "("..span(css_classes.subtitle, publisher )..")"
	end

	return {
		author,
		identifier,
		title,
		subtitle,
		publisher,
	}
end

--[==[
포맷팅.
* lang: 텍스트에 대한 언어 오브제.
* title: 포맷팅할 텍스트.
* subtitle: title과 합칠 텍스트. 참일 경우 사이에 클론이 낌
* journal: 참일 경우 텍스트를 합치지 않고 큰꺽쇠와 작은 꺽쇠로 구분함
* identifier: 참고문헌을 불러오는 식별자. 필수.
]==]

function export.format_ref_section(data)
	local author = data.author
	local proofreader = data.proofreader
	local langcode = data.langcode
	local scriptcode = data.scriptcode
	local title = data.title
	local subtitle = data.subtitle
	local journal = data.journal
	local identifier = data.id
	local publisher = data.publisher
	local desc = data.desc
	
	-- 문자체제 코드가 입력되지 않아도 제목을 바탕으로 최적의 문자열을 찾아내는 도구
	local script = require("모듈:languages").getByCode(scriptcode or "und", langparam, "allow etym")
	if not scriptcode then
		scriptcode = script:findBestScript(title)
	end
	
	-- templatestyles는 만들지 않았음
	local shortcutbox_css = {
		"border:1px solid #aaa;" ,
		"background:#fff;",
		"margin: .3em .3em .3em 1em;",
		"padding:3px; float:right;",
		"text-align:center"
	}
	local th_css = "border: none; background: transparent;"
	
	if identifier then
		local style = table.concat(shortcutbox_css, " ")
		identifier = tab("shortcutbox noprint", style, th( th_css, "식별자" .. "<br>" .. identifier ) )
	end
	
	local ref_type = desc and "사전" or "논문"
	
	local obj = process_ref_section_text {
		title = data.title,
		subtitle = data.subtitle,
		journal = data.journal,
		identifier = identifier,
		year = data.year,
		month = data.month,
		day = data.day,
		isbn = data.isbn,
		issn = data.issn,
		vol = data.vol,
		issue = data.issue,
		sing = data.sing,
		edition = data.edition,
		author = data.author,
		proofreader = data.proofreader,
		cowork = data.cowork,
		publisher = data.publisher,
		page = data,page,
		ref_type = ref_type
	}
	
	res = table.concat(obj)
	
	return res
end

return export