blueapple8259/wikipedia-ko huggingface dataset:
**아름다운 문학**(Belles-lettres)은 작문의 한 형태로 본래의 의미는 아름답거나 훌륭한 문체를 말한다. 이것은 소설, 시, 드라마와 같은 쟝르에 속하지 않으며 단지 언어의 미적인 부분에 중점을 둔 것을 말하기도 한다. 문자적으로 보면, 이 용어는 프랑스어로 아름다운 글을 말한다.

스코틀랜드의 수사학자인 케임즈 경은 아름다운 문학의 목적은 개인의 취향에 논리적 기초를 설계하는 것으로 정의하였다.

이런 쟝르의 또 다른 대표적인 인물로써 휴 블레어가 있다.
**루카: 더 비기닝**은 2021년 2월 1일부터 2021년 3월 9일까지 방송된 tvN 월화 드라마이다.

## 기획의도
특별한 능력 때문에 쫓기게 된 '지오'가 유일하게 그의 모습을 기억하는 강력반 형사 '구름'과 함께 거대한 음모에 맞서는 스펙터클 추격 액션극
-- Credit to http://stackoverflow.com/a/1283608/2644759
-- cc-by-sa 3.0
local function tableMerge
	for k,v in pairs(t2) do
		if type(v) == "table" and type(t1[k]) == "table" then
			-- since type(t1[k]) == type(v) == "table", so t1[k] and v is true
			tableMerge -- t2[k] == v
		else
			if overwrite or t1[k] == nil then t1[k] = v end
		end
	end
	return t1
end

function p.loadI18n
	local exist, res = pcall
	if exist and next(res) ~= nil then
		if i18n_arg then
			tableMerge
		elseif type(i18n) == "table" then
			-- merge to global i18n
			tableMerge
		end
	end
end

function p.loadI18nFrame
	p.loadI18n
end
local p = {};

--[=[---------------------------------------------------------------------

Reads a local copy of iso-639-3_Name_Index_YYYYMMDD.tab where (YYYYMMDD is the release date). Download that file
in zip form from http://www-01.sil.org/iso639-3/download.asp (use the UTF-8 zip)

useful lines in the file have the form:
	\n
where:
	 is the three-character ISO 639-3 language code
	 is the language 'name'
	 is the language in 'last-name, first-name(s)' form; this part ignored
	
	like this:
		aaq	Eastern Abnaki	Abnaki, Eastern

when a language code has more than one name, the code is repeated for each additional name:
	rar	Cook Islands Maori	Maori, Cook Islands
	rar	Rarotongan	Rarotongan

]=]

function p.ISO_639_3_extract (frame)
	local page = mw.title.getCurrentTitle;									-- get a page object for this page
	local content = page:getContent;											-- get unparsed content
	local lang_table = {};														-- languages go here

	local code;
	local names;

	local file_date = 'File-Date: ' .. frame.args["file-date"];									-- set the file date line from |file-date=

	for code, name in mw.ustring.gmatch (content, '%f[%a](%a%a%a)\t([^\t]+)\t[^\n]+\n') do		-- get code and 'forward' name
		if code then
			if string.find  then				-- if this is an additional name for code ('or' empty string for first time when lang_table[#lang_table] is nil)
				lang_table[#lang_table] = mw.ustring.gsub ;	-- remove trailing brace from previous name
				lang_table[#lang_table] = lang_table[#lang_table] .. ', \"' .. name .. '\"}';	-- add this name with new brace 
			else
				table.insert ;		-- make new table entry
			end
		elseif not code then
			table.insert ;						-- code should never be nil, but inserting an error entry in the final output can be helpful
		end
	end
																				-- make pretty output
	return "";
end
local function __coalesce(...)
 local coalesced = {}
 for _, langslist in ipairs{...} do
 for langcode, langnames in pairs(langslist) do
 for _, langname in pairs(langnames) do
 if not coalesced[langcode] then
 coalesced[langcode] = {}
 end
 table.insert
 end
 end
 end
 
 return coalesced
end

-- make the keys lowercase
local function __preprocess
 local preprocessed = {}
 if first_of_array_in_array then
 	-- keep only the 1st language name for each code, excluding synonyms
 for k, v in pairs(t) do
 preprocessed[k:lower] = {v[1]}
 end
 else
 for k, v in pairs(t) do
 preprocessed[k:lower] = v
 end
 end

 return preprocessed
end

-- all valid primary language subtags for BCP47 from IANA 
local __iana_languages = __preprocess(require("Module:Language/data/iana languages"));
-- ISO 639-3 contains additional 3-letter codes not inserted in the IANA database as they are aliased to 2-letter codes,
-- but excludes some deleted codes still valid in BCP47 (some of them are aliased)
local __iso_639_3 = __preprocess(require("Module:Language/data/ISO 639-3"));
-- Wikimedia wikis uses some non-standard codes and a subset of IANA codes, plus composite codes
local __wp_languages = __preprocess(require("Module:Language/data/wp languages"), true);
-- all valid script subtags for BCP47 from IANA (excluding special ISO 15924 codes)
local iana_scripts = __preprocess(require("Module:Language/data/iana scripts"));
-- all valid region subtags for BCP47 from IANA 
local iana_regions = __preprocess(require("Module:Language/data/iana regions"));

-- variant subtags from IANA; table format differs from the other IANA data tables
local iana_variants = __preprocess(require("Module:Language/data/iana variants"));
-- suppressed script subtags from IANA;
local iana_suppressed_scripts = __preprocess (require("Module:Language/data/iana suppressed scripts"));

return {
 lang = __coalesce,
 lang_iana = __iana_languages,
 script = iana_scripts,
 region = iana_regions,
 variant = iana_variants,
 suppressed = iana_suppressed_scripts,
return {
	["aar"] = "aa",
	["abk"] = "ab",
	["afr"] = "af",
	["aka"] = "ak",
	["amh"] = "am",
	["ara"] = "ar",
	["arg"] = "an",
	["asm"] = "as",
	["ava"] = "av",
	["ave"] = "ae",
	["aym"] = "ay",
	["aze"] = "az",
	["bak"] = "ba",
	["bam"] = "bm",
	["bel"] = "be",
	["ben"] = "bn",
	["bih"] = "bh",
	["bis"] = "bi",
	["bod"] = "bo",
	["bos"] = "bs",
	["bre"] = "br",
	["bul"] = "bg",
	["cat"] = "ca",
	["ces"] = "cs",
	["cha"] = "ch",
	["che"] = "ce",
	["chu"] = "cu",
	["chv"] = "cv",
	["cor"] = "kw",
	["cos"] = "co",
	["cre"] = "cr",
	["cym"] = "cy",
	["dan"] = "da",
	["deu"] = "de",
	["div"] = "dv",
	["dzo"] = "dz",
	["ell"] = "el",
	["eng"] = "en",
	["epo"] = "eo",
	["est"] = "et",
	["eus"] = "eu",
	["ewe"] = "ee",
	["fao"] = "fo",
	["fas"] = "fa",
	["fij"] = "fj",
	["fin"] = "fi",
	["fra"] = "fr",
	["fry"] = "fy",
	["ful"] = "ff",
	["gla"] = "gd",
	["gle"] = "ga",
	["glg"] = "gl",
	["glv"] = "gv",
	["grn"] = "gn",
	["guj"] = "gu",
	["hat"] = "ht",
	["hau"] = "ha",
	["heb"] = "he",
	["her"] = "hz",
	["hin"] = "hi",
	["hmo"] = "ho",
	["hrv"] = "hr",
	["hun"] = "hu",
	["hye"] = "hy",
	["ibo"] = "ig",
	["ido"] = "io",
	["iii"] = "ii",
	["iku"] = "iu",
	["ile"] = "ie",
	["ina"] = "ia",
	["ind"] = "id",
	["ipk"] = "ik",
	["isl"] = "is",
	["ita"] = "it",
	["jav"] = "jv",
	["jpn"] = "ja",
	["kal"] = "kl",
	["kan"] = "kn",
	["kas"] = "ks",
	["kat"] = "ka",
	["kau"] = "kr",
	["kaz"] = "kk",
	["khm"] = "km",
	["kik"] = "ki",
	["kin"] = "rw",
	["kir"] = "ky",
	["kom"] = "kv",
	["kon"] = "kg",
	["kor"] = "ko",
	["kua"] = "kj",
	["kur"] = "ku",
	["lao"] = "lo",
	["lat"] = "la",
	["lav"] = "lv",
	["lim"] = "li",
	["lin"] = "ln",
	["lit"] = "lt",
	["ltz"] = "lb",
	["lub"] = "lu",
	["lug"] = "lg",
	["mah"] = "mh",
	["mal"] = "ml",
	["mar"] = "mr",
	["mkd"] = "mk",
	["mlg"] = "mg",
	["mlt"] = "mt",
	["mon"] = "mn",
	["mri"] = "mi",
	["msa"] = "ms",
	["mya"] = "my",
	["nau"] = "na",
	["nav"] = "nv",
	["nbl"] = "nr",
	["nde"] = "nd",
	["ndo"] = "ng",
	["nep"] = "ne",
	["nld"] = "nl",
	["nno"] = "nn",
	["nob"] = "nb",
	["nor"] = "no",
	["nya"] = "ny",
	["oci"] = "oc",
	["oji"] = "oj",
	["ori"] = "or",
	["orm"] = "om",
	["oss"] = "os",
	["pan"] = "pa",
	["pli"] = "pi",
	["pol"] = "pl",
	["por"] = "pt",
	["pus"] = "ps",
	["que"] = "qu",
	["roh"] = "rm",
	["ron"] = "ro",
	["run"] = "rn",
	["rus"] = "ru",
	["sag"] = "sg",
	["san"] = "sa",
	["sin"] = "si",
	["slk"] = "sk",
	["slv"] = "sl",
	["sme"] = "se",
	["smo"] = "sm",
	["sna"] = "sn",
	["snd"] = "sd",
	["som"] = "so",
	["sot"] = "st",
	["spa"] = "es",
	["sqi"] = "sq",
	["srd"] = "sc",
	["srp"] = "sr",
	["ssw"] = "ss",
	["sun"] = "su",
	["swa"] = "sw",
	["swe"] = "sv",
	["tah"] = "ty",
	["tam"] = "ta",
	["tat"] = "tt",
	["tel"] = "te",
	["tgk"] = "tg",
	["tgl"] = "tl",
	["tha"] = "th",
	["tir"] = "ti",
	["ton"] = "to",
	["tsn"] = "tn",
	["tso"] = "ts",
	["tuk"] = "tk",
	["tur"] = "tr",
	["twi"] = "tw",
	["uig"] = "ug",
	["ukr"] = "uk",
	["urd"] = "ur",
	["uzb"] = "uz",
	["ven"] = "ve",
	["vie"] = "vi",
	["vol"] = "vo",
	["wln"] = "wa",
	["wol"] = "wo",
	["xho"] = "xh",
	["yid"] = "yi",
	["yor"] = "yo",
	["zha"] = "za",
	["zho"] = "zh",
	["zul"] = "zu"
return {
	["Arab"] = {"ar", "fa", "ps", "ur"},
	["Armn"] = {"hy"},
	["Beng"] = {"as", "bn"},
	["Blis"] = {"zbl"},
	["Cyrl"] = {"ab", "be", "bg", "kk", "mk", "ru", "uk"},
	["Deva"] = {"hi", "mr", "ne", "kok", "mai"},
	["Ethi"] = {"am", "ti"},
	["Geor"] = {"ka"},
	["Grek"] = {"el"},
	["Gujr"] = {"gu"},
	["Guru"] = {"pa"},
	["Hebr"] = {"he", "iw", "yi"},
	["Jpan"] = {"ja"},
	["Khmr"] = {"km"},
	["Knda"] = {"kn"},
	["Kore"] = {"ko"},
	["Laoo"] = {"lo"},
	["Latn"] = {"af", "ay", "bs", "ca", "ch", "cs", "cy", "da", "de", "en", "eo",
				"es", "et", "eu", "fi", "fj", "fo", "fr", "fy", "ga", "gl", "gn",
				"gv", "hr", "ht", "hu", "id", "in", "is", "it", "kl", "la", "lb",
				"ln", "lt", "lv", "mg", "mh", "mo", "ms", "mt", "na", "nb", "nd",
				"nl", "nn", "no", "nr", "ny", "om", "pl", "pt", "qu", "rm", "rn",
				"ro", "rw", "sg", "sk", "sl", "sm", "so", "sq", "ss", "st", "sv",
				"sw", "tl", "tn", "to", "tr", "ts", "ve", "vi", "xh", "zu", "dsb",
				"frr", "frs", "gsw", "hsb", "men", "nds", "niu", "nso", "tem", "tkl", "tmh",
				"tpi", "tvl"},
	["Mlym"] = {"ml"},
	["Mymr"] = {"my"},
	["Nkoo"] = {"nqo"},
	["Orya"] = {"or"},
	["Sinh"] = {"si"},
	["Taml"] = {"ta"},
	["Telu"] = {"te"},
	["Thaa"] = {"dv"},
	["Thai"] = {"th"},
	["Tibt"] = {"dz"}
local Array = require 'Module:Array'

local function pattern_escape(str)
	return (str:gsub)
end

function p.make_script_name_to_code(page_name)
	local property_value_aliases = assert(assert(mw.title.new(page_name)):getContent)

	local script_aliases = property_value_aliases:match(
		pattern_escape '# Script (sc)'
		.. '%s+(.-)%s+'
		.. pattern_escape '# Script_Extensions (scx)')

	local script_name_to_code = {}
	
	for code, name in script_aliases:gmatch 'sc%s+;%s+(%a+)%s+;%s+([%a_]+)' do
		script_name_to_code[name] = code
	end
	
	return script_name_to_code
end

function p.make_script_data
	local script_data = assert(assert(mw.title.new(scripts_txt)):getContent)
	
	local script_name_to_code = p.make_script_name_to_code(property_value_aliases_txt)
	setmetatable(script_name_to_code, { __index = function 
		error(('No code for "%s"'):format(k))
	end })
	
	local script_ranges = Array
	
	local prev_codepoint, prev_script_name, prev_script_range
	for codepoint1, codepoint2, script_name in script_data:gmatch '%f[^\n%z](%x+)%.?%.?(%x*)%s+;%s*([%w_]+)' do
		codepoint1, codepoint2 = tonumber, tonumber
		local script_range
		if prev_script_range and script_name == prev_script_name and codepoint1 - prev_codepoint == 1 then
			prev_script_range[2] = codepoint2 or codepoint1
		else
			script_range = { codepoint1, codepoint2 or codepoint1, script_name_to_code[script_name] }
			script_ranges:insert(script_range)
		end
		prev_codepoint, prev_script_name, prev_script_range =
			codepoint2 or codepoint1, script_name, script_range or prev_script_range
	end
	
	local singles = {}
	local i = 1
	
	while script_ranges[i] do
		local low, high, script_code = unpack(script_ranges[i])
		if low == high then
			singles[low] = script_code
			script_ranges:remove(i)
		else
			i = i + 1
		end
	end
	
	script_ranges:sort(
		function 
			return range1[1] < range2[1]
		end)
	
	local template = 
local data = {
	singles = {
...
	
	ranges = {
...
	-- Scripts.txt gives full names; here we consider them aliases to save space.
	aliases = {
...

	
	local printed_ranges = Array
	for _, range in ipairs(script_ranges) do
		local low, high, script_code = unpack(range)
		printed_ranges:insert(:format)
	end
	
	local printed_singles = Array
	for codepoint, script_code in require 'Module:TableTools'.sortedPairs(singles) do
		printed_singles:insert(:format)
	end
	
	local printed_script_name_to_code = Array
	for name, code in require 'Module:TableTools'.sortedPairs(script_name_to_code,
			function
				return script_name_to_code[name1] < script_name_to_code[name2]
			end) do
		printed_script_name_to_code:insert(:format(code, name:gsub))
	end
	
	local data = template
	
	return data
end

function p.highlight(lua_code)
	return mw.getCurrentFrame:extensionTag{
		name = "syntaxhighlight",
		content = lua_code,
		args = { lang = "lua" }
end

function p.main(frame)
	local dir = 'User:Erutuon/Unicode'
	local scripts_txt = dir .. '/Scripts.txt'
	local property_value_aliases_txt = dir ..'/PropertyValueAliases.txt'
	
	return p.highlight(p.make_script_data)
end
-- (U+AC00 to U+D7A3).
local Hangul = {}

-- The following leads, vowels, and trails come from here:
-- http://www.unicode.org/Public/UNIDATA/Jamo.txt
Hangul.leads = {
	[0] = "G", "GG", "N", "D", "DD", "R", "M", "B", "BB", "S", "SS",
	"", "J", "JJ", "C", "K", "T", "P", "H"
-- not actually used:
Hangul.lead_count = #Hangul.leads + 1

Hangul.vowels = {
	[0] = "A", "AE", "YA", "YAE", "EO", "E", "YEO", "YE", "O", "WA",
	"WAE", "OE", "YO", "U", "WEO", "WE", "WI", "YU", "EU", "YI",
	"I"
Hangul.vowel_count = #Hangul.vowels + 1

Hangul.trails = {
	[0] = "", "G", "GG", "GS", "N", "NJ", "NH", "D", "L", "LG", "LM", "LB",
	"LS", "LT", "LP", "LH", "M", "B", "BS", "S", "SS", "NG", "J", "C", "K",
	"T", "P", "H"
Hangul.trail_count = #Hangul.trails + 1

--For the term "final", see Syllable#Chinese model.
Hangul.final_count = Hangul.vowel_count * Hangul.trail_count
[ 0x4DC0 ] = "HEXAGRAM FOR THE CREATIVE HEAVEN",
	[ 0x4DC1 ] = "HEXAGRAM FOR THE RECEPTIVE EARTH",
	[ 0x4DC2 ] = "HEXAGRAM FOR DIFFICULTY AT THE BEGINNING",
	[ 0x4DC3 ] = "HEXAGRAM FOR YOUTHFUL FOLLY",
	[ 0x4DC4 ] = "HEXAGRAM FOR WAITING",
	[ 0x4DC5 ] = "HEXAGRAM FOR CONFLICT",
	[ 0x4DC6 ] = "HEXAGRAM FOR THE ARMY",
	[ 0x4DC7 ] = "HEXAGRAM FOR HOLDING TOGETHER",
	[ 0x4DC8 ] = "HEXAGRAM FOR SMALL TAMING",
	[ 0x4DC9 ] = "HEXAGRAM FOR TREADING",
	[ 0x4DCA ] = "HEXAGRAM FOR PEACE",
	[ 0x4DCB ] = "HEXAGRAM FOR STANDSTILL",
	[ 0x4DCC ] = "HEXAGRAM FOR FELLOWSHIP",
	[ 0x4DCD ] = "HEXAGRAM FOR GREAT POSSESSION",
	[ 0x4DCE ] = "HEXAGRAM FOR MODESTY",
	[ 0x4DCF ] = "HEXAGRAM FOR ENTHUSIASM",
	[ 0x4DD0 ] = "HEXAGRAM FOR FOLLOWING",
	[ 0x4DD1 ] = "HEXAGRAM FOR WORK ON THE DECAYED",
	[ 0x4DD2 ] = "HEXAGRAM FOR APPROACH",
	[ 0x4DD3 ] = "HEXAGRAM FOR CONTEMPLATION",
	[ 0x4DD4 ] = "HEXAGRAM FOR BITING THROUGH",
	[ 0x4DD5 ] = "HEXAGRAM FOR GRACE",
	[ 0x4DD6 ] = "HEXAGRAM FOR SPLITTING APART",
	[ 0x4DD7 ] = "HEXAGRAM FOR RETURN",
	[ 0x4DD8 ] = "HEXAGRAM FOR INNOCENCE",
	[ 0x4DD9 ] = "HEXAGRAM FOR GREAT TAMING",
	[ 0x4DDA ] = "HEXAGRAM FOR MOUTH CORNERS",
	[ 0x4DDB ] = "HEXAGRAM FOR GREAT PREPONDERANCE",
	[ 0x4DDC ] = "HEXAGRAM FOR THE ABYSMAL WATER",
	[ 0x4DDD ] = "HEXAGRAM FOR THE CLINGING FIRE",
	[ 0x4DDE ] = "HEXAGRAM FOR INFLUENCE",
	[ 0x4DDF ] = "HEXAGRAM FOR DURATION",
	[ 0x4DE0 ] = "HEXAGRAM FOR RETREAT",
	[ 0x4DE1 ] = "HEXAGRAM FOR GREAT POWER",
	[ 0x4DE2 ] = "HEXAGRAM FOR PROGRESS",
	[ 0x4DE3 ] = "HEXAGRAM FOR DARKENING OF THE LIGHT",
	[ 0x4DE4 ] = "HEXAGRAM FOR THE FAMILY",
	[ 0x4DE5 ] = "HEXAGRAM FOR OPPOSITION",
	[ 0x4DE6 ] = "HEXAGRAM FOR OBSTRUCTION",
	[ 0x4DE7 ] = "HEXAGRAM FOR DELIVERANCE",
	[ 0x4DE8 ] = "HEXAGRAM FOR DECREASE",
	[ 0x4DE9 ] = "HEXAGRAM FOR INCREASE",
	[ 0x4DEA ] = "HEXAGRAM FOR BREAKTHROUGH",
	[ 0x4DEB ] = "HEXAGRAM FOR COMING TO MEET",
	[ 0x4DEC ] = "HEXAGRAM FOR GATHERING TOGETHER",
	[ 0x4DED ] = "HEXAGRAM FOR PUSHING UPWARD",
	[ 0x4DEE ] = "HEXAGRAM FOR OPPRESSION",
	[ 0x4DEF ] = "HEXAGRAM FOR THE WELL",
	[ 0x4DF0 ] = "HEXAGRAM FOR REVOLUTION",
	[ 0x4DF1 ] = "HEXAGRAM FOR THE CAULDRON",
	[ 0x4DF2 ] = "HEXAGRAM FOR THE AROUSING THUNDER",
	[ 0x4DF3 ] = "HEXAGRAM FOR THE KEEPING STILL MOUNTAIN",
	[ 0x4DF4 ] = "HEXAGRAM FOR DEVELOPMENT",
	[ 0x4DF5 ] = "HEXAGRAM FOR THE MARRYING MAIDEN",
	[ 0x4DF6 ] = "HEXAGRAM FOR ABUNDANCE",
	[ 0x4DF7 ] = "HEXAGRAM FOR THE WANDERER",
	[ 0x4DF8 ] = "HEXAGRAM FOR THE GENTLE WIND",
	[ 0x4DF9 ] = "HEXAGRAM FOR THE JOYOUS LAKE",
	[ 0x4DFA ] = "HEXAGRAM FOR DISPERSION",
	[ 0x4DFB ] = "HEXAGRAM FOR LIMITATION",
	[ 0x4DFC ] = "HEXAGRAM FOR INNER TRUTH",
	[ 0x4DFD ] = "HEXAGRAM FOR SMALL PREPONDERANCE",
	[ 0x4DFE ] = "HEXAGRAM FOR AFTER COMPLETION",
	[ 0x4DFF ] = "HEXAGRAM FOR BEFORE COMPLETION",
local function read_page(title)
	return mw.title.new(title):getContent
end

function p.make_singles_and_ranges
	local text = read_page(derived_general_category_page)
	
	local singles, ranges = {}, {}
	for code_point1, code_point2, general_category in text:gmatch "%f[^\n%z](%x+)%.?%.?(%x*)%s*;%s*(%u%l)" do
		if general_category ~= "Cn" then
			code_point1 = tonumber
			
			-- XXXX..XXXX ; gc
			if code_point2 ~= "" then
				code_point2 = tonumber
				table.insert
			
			-- XXXX ; gc
			else
				singles[code_point1] = general_category
			end
		end
	end
	
	local property_value_aliases = read_page(property_value_aliases_page)
	local general_category_aliases = property_value_aliases:match "# General_Category[^\n]+%s*(.-)%s*%f[^\n]#"
	local long_names = {}
	for abbr, long_name in general_category_aliases:gmatch "gc%s*;%s*(%S+)%s*;%s*([%a_]+)" do
		long_names[abbr] = long_name
	end
	
	return singles, ranges, long_names
end

function p.print_data(data)
	local output = require "Module:array"
	local function writef(...)
		output:insert(string.format(...))
	end
	
	writef 
return {
	singles = {

	
	-- Check that maximum "singles" codepoint is less than 0x100000?
	for codepoint, category in require "Module:TableTools".sortedPairs(data.singles) do
		writef
	end
	
	writef 
	ranges = {

	
	local function compare_ranges
		return range1[1] < range2[1]
	end
	
	table.sort
	for _, range in ipairs(data.ranges) do
		writef('\t\t{ 0x%06X, 0x%06X, "%s" },\n', unpack(range))
	end
	
	writef 
	long_names = {

	for abbr, long_name in require "Module:TableTools".sortedPairs(data.long_names) do
		writef
	end
	
	writef [[

	return output:concat
end

function p.main(frame)
	local data = {}
	data.singles, data.ranges, data.long_names = p.make_singles_and_ranges
	return frame:extensionTag{
		name = "syntaxhighlight",
		content = p.print_data(data),
		args = { lang = "lua" }
end
function p.main(frame)
	local page = frame.args[1] or "User:Erutuon/Unicode/DerivedCoreProperties.txt"
	local text = assert(mw.title.new(page):getContent)
	local default_ignorable = text
	local singles, ranges = {}, {}
	for code_point1, code_point2 in default_ignorable:gmatch("%f[^\n%z](%x+)%.?%.?(%x*)") do
		code_point1, code_point2 = tonumber, tonumber
		local last_range = ranges[#ranges]
		if last_range and last_range[2] == code_point1 - 1 then
			last_range[2] = code_point2 or code_point1
		elseif singles[code_point1 - 1] then
			singles[code_point1 - 1] = nil
			table.insert
		else
			if not code_point2 then
				singles[code_point1] = true
			else
				table.insert
			end
		end
	end
	
		local template = 
local data = {}

data.default_ignorable = {
	singles = {
...
	ranges = {
...

return data

	local Array = require "Module:array"
	local printed_ranges = Array
	for _, range in ipairs(ranges) do
		local low, high, script_code = unpack(range)
		printed_ranges:insert(:format)
	end
	
	local printed_singles = Array
	for codepoint in require 'Module:TableTools'.sortedPairs(singles) do
		printed_singles:insert(:format(codepoint))
	end
	
	local data = template
	
	return mw.getCurrentFrame:extensionTag{
		name = "syntaxhighlight",
		content = data,
		args = { lang = "lua" }
end
function p.main(frame)
	local page = frame.args[1] or "User:Erutuon/Unicode/DerivedAge.txt"
	local text = assert(mw.title.new(page):getContent)
	local singles, ranges = {}, {}
	for code_point1, code_point2, age in text:gmatch("%f[^\n%z](%x+)%.?%.?(%x*)%s*;%s*([%d.]+)") do
		code_point1, code_point2 = tonumber, tonumber
		local last_range = ranges[#ranges]
		if last_range and last_range[2] == code_point1 - 1 and last_range[3] == age then
			last_range[2] = code_point2 or code_point1
		elseif singles[code_point1 - 1] == age then
			singles[code_point1 - 1] = nil
			table.insert
		else
			if not code_point2 then
				singles[code_point1] = age
			else
				table.insert
			end
		end
	end
	
		local template = 
return {
	singles = {
...
	ranges = {
...
	aliases = {
...

	table.sort(
		ranges,
		function
			return range1[1] < range2[1]
		end)
	
	local function make_padding(age)
		return (" "):rep(#'"12.1"' - (#age + 2))
	end
	
	local Array = require "Module:array"
	local printed_ranges = Array
	for _, range in ipairs(ranges) do
		local low, high, age = unpack(range)
		printed_ranges:insert(
	end
	
	local printed_singles = Array
	for codepoint, age in require 'Module:TableTools'.sortedPairs(singles) do
		printed_singles:insert(
	end
	
	local printed_aliases = Array
	local property_value_aliases = mw.title.new "User:Erutuon/Unicode/PropertyValueAliases.txt":getContent
	local age_aliases = property_value_aliases:match "# Age[^\n]+%s*(.-)%s*%f[^\n]#"
	for age, alias in age_aliases:gmatch "age%s*;%s*(%S+)%s*;%s*(%S+)" do
		printed_aliases:insert(
	end
	
	local data = template
	
	return mw.getCurrentFrame:extensionTag{
		name = "syntaxhighlight",
		content = data,
		args = { lang = "lua" }
end
local output_mt = {}
function output_mt:insert(str)
	self.n = self.n + 1
	self[self.n] = str
end

function output_mt:insert_format(...)
	self:insert(string.format(...))
end

output_mt.join = table.concat

output_mt.__index = output_mt

local function Output
	return setmetatable
end

function p.show_modules
	local output = Output
	
	output:insert -'
	
	local prev = -1
	local row
	local found_module = false
	for i = 0, 0x10F do
		local first_two_digits = math.floor(i / 0x10)
		if first_two_digits ~= prev then
			if found_module then
				output:insert(row:join)
			end
			found_module = false
				
			row = Output{}
			row:insert_format
			prev = first_two_digits
		end
		
		row:insert '\n| '
		local name_module = ('Module:Unicode data/names/%03X'):format(i)
		if mw.title.new(name_module).exists then
			local first_cp = i * 0x1000
			row:insert_format
			found_module = true
		end
	end
	output:insert "\n|}"
	
	return output:join
end
**브로드웨이 42번가**는 미국 브로드웨이의 인기 뮤지컬 작품이다. 대공황 시대를 배경으로 하고 있으며 해리 워런이 음악을, 앨 더빈·조니 머서가 가사를, 마이클 스튜어트·마크 브램블이 책을, 가워 챔피언이 감독을, 필립 J. 랭이 조율을 담당했다. 토니상, 로런스 올리비에상 뮤지컬 부문을 수상한 인기 뮤지컬 작품이기도 하다.

1932년에 브래드퍼드 로프스의 소설을 원작으로 한 헐리우드 영화 42번가가 1933년에 만들어졌고, 뮤지컬은 1980년 8월 25일에 브로드웨이 윈터 가든 극장에서 처음 상연되었다. 대한민국에서는 1996년 호암아트홀에서 처음 소개된 이후에 꾸준히 재공연되고 있다.

## 줄거리
브로드웨이 최고의 연출가 줄리안에게 '프리티레이디'는 반드시 성공시켜야 할 중요한 공연이다. 줄리안은 여배우 도로시를 캐스팅하면 '프리티레이디'에 10만 달러를 투자하겠다는 애브너의 제안에 이제는 한물간 프리마돈나 도로시를 주인공으로 캐스팅한다. 브로드웨이 댄서를 꿈꾸는 시골 출신의 페기는 두려움에 망설이다 '프리티레이디'의 오디션 기회를 놓쳐버리지만, 안무가가 우연히 그녀의 춤을 보고 재능을 발견, 코러스걸로 전격 캐스팅한다. '프리티레이디'의 첫 공연. 주인공 도로시가 넘어져 부상을 당하게 되고 공연은 취소될 위기에 놓인다. 페기의 실수로 도로시가 다쳤다고 생각한 줄리안은 페기를 해고시켜버리지만, 도로시의 역할을 소화할 사람은 오직 '페기소여' 뿐임을 깨닫는다. 남은 시간은 단 36시간! 25페이지 분량의 대사, 노래 6곡, 10종류의 댄스를 소화 해야하는 페기소여! 그녀는 과연 브로드웨이의 새로운 스타로 태어날 수 있을까?
name = '미국',
	x = '50.0 + 124.03149777329222 * ((1.9694462586094064-($1 * pi / 180)) * sin(0.6010514667026994 * ($2 + 96) * pi / 180))',
	y = '50.0 + 1.6155950752393982 * 124.03149777329222 * ( 0.02613325650382181 - (1.3236744353715044 - (1.9694462586094064 - ($1 * pi / 180)) * cos(0.6010514667026994 * ($2 + 96) * pi / 180)))',
	image = 'Usa edcp location map.svg',
	image1 = 'Usa edcp relief location map.png'
name = '러시아',
	x = '50.0 + 100.0*(1.17998895761064 - 0.0123530472371397*$1)*sin(((((cos((49*pi)/180) - cos((59*pi)/180))/(((10*pi)/180)))*pi)/180)*(($2 + ($2<0)*360.0) - 97))',
	y = '-15.7279772605764 + 2.24618149146451*(95.5220954764086 - $1)*cos(((((cos((49*pi)/180) - cos((59*pi)/180))/(((10*pi)/180)))*pi)/180)*(($2 + ($2<0)*360.0) - 97))',
	image = 'Russia administrative location map.svg',
	image1 = 'Russia rel location map.png'
name = '일본',
	x = '100*(($1>30.90)*($2-128.24)/(149.27-128.24)+($1<=30.90)*($2-110.43)/(131.44-110.43))',
	y = '100*(($1>30.90)*($1-45.86)/(30.02-45.86)+($1<=30.90)*($1-39.54)/(23.71-39.54))',
	image = 'Japan location map with side map of the Ryukyu Islands.svg',
	image1 = 'Japan natural location map with side map of the Ryukyu Islands.jpg',
	image2 = 'Japan bluemarble location map with side map of the Ryukyu Islands.jpg'
name = '유럽',
	y = '55.11 - 153.610*( cos( 52* pi/180)*sin( $1*pi/180 ) - sin( 52*pi/180 )*cos( $1*pi/180 )*cos( ($2-10)*pi/180 ) ) * ( ((1 + sin( $1*pi/180 )*sin( 52*pi/180 ) + cos( $1*pi/180 )*cos( 52*pi/180 )*cos( ($2-10)*pi/180 ) ) *0.5)^ -0.5)',
	x = '131.579*( cos( $1*pi/180 )*sin( ($2-10)*pi/180 ) ) * ( ((1 + sin( $1*pi/180 )*sin( 52*pi/180 ) + cos( $1*pi/180 )*cos( 52*pi/180 )*cos( ($2-10)*pi/180 ) ) *0.5)^ -0.5) - (-36.388)',
	image = 'Europe blank laea location map.svg',
	image1 = 'Europe relief laea location map.jpg'