Модуль:DecodeEncode

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
{{i}} Документація модуля[перегляд] [редагувати] [історія] [очистити кеш]

Модуль для виклику функцій mw.text.decode, mw.text.encode. Копія з АнглВікі.

{{#invoke:decodeEncode|decode|s=Source text©}}Source text©

Дивіться Список позначень символів у XML та HTML.

Функція decode (© → ©)

Декодує іменований символ from у звичайний символ into:
©©
>>
Наприклад, речення:
"Вода закипає при температурі 100 °C"
В коді:
Вода закипає при температурі 100 °C - вікітекст
Результат декодування:
{{#invoke:decodeEncode|decode|s=Вода закипає при температурі 100 °C}}
Вода закипає при температурі 100 °C

Мінімальне декодування

Якщо задати параметр |subset_only=true, тільки 5 символів буде опрацьовано: &lt;, &gt;, &amp;, &quot;, &nbsp; (<, >, &, " та нерозривний пробіл).

Функція encode (© → &copy;)

encode закодовує звичайні символи у іменовані (наприклад: &&amp;).

Regular sentence:

Вода закипає при температурі 100 °C

У коді:

Вода закипає при температурі 100 °C

Результат кодування:

{{#invoke:decodeEncode|encode|s=Вода закипає при температурі 100 °C|charset=&<>{{!}}°"'&©}}
Вода закипає при температурі 100 &#176;C


Закодовані символі

За промовчанням, тільки невеликий набір символів опрацьовуються. Його можна розширити параметром |charset=.

Наприклад: |charset=<>" \'& (за промовчанням), |charset=<>°"'&©{{!}}; нестандартні символи буде замінено десятковими позначеннями: ©&#169;

Див. також

require('strict')
local p = {}

local function _getBoolean( boolean_str )
	-- from: module:String; adapted
	-- requires an explicit true
	local boolean_value

	if type( boolean_str ) == 'string' then
		boolean_str = boolean_str:lower()
		if boolean_str == 'true' or boolean_str == 'yes' or boolean_str == '1' then
			boolean_value = true
		else
			boolean_value = false
		end
	elseif type( boolean_str ) == 'boolean' then
		boolean_value = boolean_str
	else
		boolean_value = false
	end
	return boolean_value
end

function p.decode( frame )
	local s = frame.args['s'] or ''
	local subset_only = _getBoolean(frame.args['subset_only'] or false)

	return p._decode( s, subset_only )
end

function p._decode( s, subset_only )
	-- U+2009 THIN SPACE: workaround for bug: HTML entity &thinsp; is decoded incorrect. Entity &ThinSpace; gets decoded properly
	s = mw.ustring.gsub( s, '&thinsp;', '&ThinSpace;' )
	-- U+03B5 ε GREEK SMALL LETTER EPSILON: workaround for bug (phab:T328840): HTML entity &epsilon; is decoded incorrect for gsub(). Entity &epsi; gets decoded properly
	s = mw.ustring.gsub( s, '&epsilon;', '&epsi;' )

	local ret = mw.text.decode( s, not subset_only )

	return ret
end

function p.encode( frame )
	local s = frame.args['s'] or ''
	local charset = frame.args['charset']

	return p._encode( s, charset )
end

function p._encode( s, charset )
	-- example: charset = '_&©−°\\\"\'\=' -- do escape with backslash not %;
	local ret

	if charset and charset ~= '' then
		ret = mw.text.encode( s, charset )
	else
		-- use default: chartset = '<>&"\' ' (outer quotes = lua required; space = NBSP)
		ret = mw.text.encode( s )
	end 
	
	return ret
end

return p