跳转到内容

模組:Special wikitext

本页使用了标题或全文手工转换
被永久保护的模块
维基百科,自由的百科全书

这是本页的一个历史版本,由A2569875留言 | 贡献2021年5月1日 (六) 15:23 (參數整合管理)编辑。这可能和当前版本存在着巨大的差异。

local p={
	wikiTextKey = '_addText'
}
function p.check()
	local file_name = mw.title.getCurrentTitle().fullText
	local file_name_spilt = mw.text.split(file_name, "%.")
	local file_ext = file_name_spilt[#file_name_spilt]
	if #file_name_spilt < 2 then return '' end
	if mw.ustring.lower(file_ext) == 'json' then
		return p.getJSONwikitext()
	elseif mw.ustring.lower(file_ext) == 'js' then
		return p.getJSwikitext()
	elseif mw.ustring.lower(file_ext) == 'css' then
		return p.getCSSwikitext()
	end
end
function _getContentText(str)
	local wikitext = ''
	xpcall( function()
		local it=mw.ustring.gmatch(str, p.wikiTextKey .. "%s*%{[^c%}]*content%s*:%s*[\"\'][^\n]*")
		local text=it()
		while text do
			local temp_text = mw.ustring.gsub(mw.text.trim(
				mw.ustring.match(text,"content%s*:%s*[\"\'][^\n]*"), "\t\r\n\f ;}"
			),"%s*content%s*:%s*","")
			--不支持非字串的模式
			if mw.ustring.match(mw.ustring.sub(mw.text.trim(temp_text),1,1),"[\"']") then
				if wikitext ~= '' then wikitext = wikitext .. '\n' end
				wikitext = wikitext .. mw.ustring.sub(temp_text,2,-2)
			end
			text=it()
		end
	end, function()end )
	return wikitext
end
function _addText(input_str,new_str)
	if new_str~='' then
		if input_str~='' then input_str = input_str .. '\n' end
		input_str = input_str .. new_str
	end
	return input_str
end
function _getObjText(str)
	local wikitext = ''
	xpcall( function()
		local it=mw.ustring.gmatch(str, p.wikiTextKey .. "%s*[%=:]%s*[\"\'][^\n]*")
		local text=it()
		while text do
			local temp_text = mw.ustring.gsub(
				mw.text.trim(text, "\t\r\n\f ;}"),
			p.wikiTextKey .. "%s*[%=:]%s*","")
			--不支持非字串的模式
			if mw.ustring.match(mw.ustring.sub(mw.text.trim(temp_text),1,1),"[\"']") then
				if wikitext ~= '' then wikitext = wikitext .. '\n' end
				wikitext = wikitext .. mw.ustring.sub(temp_text,2,-2)
			end
			text=it()
		end
	end, function()end )
	return wikitext
end
function p.getCSSwikitext()
	local this_frame = mw.getCurrentFrame()
	local wikitext = ''
	local css_text = mw.title.getCurrentTitle():getContent()
	wikitext = _addText(wikitext, _getContentText(css_text))
	wikitext = _addText(wikitext, _getObjText(css_text))
	if wikitext ~= '' then wikitext = this_frame:preprocess(wikitext) end
	return wikitext
end
function p.getJSwikitext()
	local this_frame = mw.getCurrentFrame()
	local wikitext = ''
	local js_text = mw.title.getCurrentTitle():getContent()
	wikitext = _addText(wikitext, _getObjText(js_text))
	if wikitext ~= '' then wikitext = this_frame:preprocess(wikitext) end
	return wikitext
end
function p.getJSONwikitext()
	local this_frame = mw.getCurrentFrame()
	local wikitext = ''
	xpcall( function()
		local json_data = mw.text.jsonDecode(mw.title.getCurrentTitle():getContent())
		for k,v in pairs(json_data) do 
			if k == p.wikiTextKey and type(v) == type('')then
				wikitext = wikitext .. '\n' .. v
			end
			if v[p.wikiTextKey] and type(v[p.wikiTextKey]) == type('')then
				wikitext = wikitext .. '\n' ..v[p.wikiTextKey]
			end
		end
	end, function()end )
	if wikitext ~= '' then wikitext = this_frame:preprocess(wikitext) end
	return wikitext
end
return p