Permanently protected module

Module:Ruby

From Yugipedia
Revision as of 23:51, 6 May 2018 by Dinoguy1000 (talk | contribs) (add a few comments to help explain things I had to re-puzzle out just now)
Jump to: navigation, search
-- <pre>
local p = {}

function p.split( frame )
	--
	-- implements {{Ruby/split}}
	--
	local args
	if frame == mw.getCurrentFrame() then
		args = frame:getParent().args
	else
		args = frame
	end
	if not args[1] then
		return -- nothing was passed to the module
	end

	args[1] = mw.text.trim( args[1] )

	if not mw.ustring.find( args[1], '<ruby' ) then
		return args[1] -- if there's no Ruby markup in the input, just return it
	end

	args[2] = args[2] and ( mw.text.trim( args[2] ) == 'base' and '' or mw.text.trim( args[2] ) ) or ''

	local first, parts, match
	first = mw.ustring.match( args[1], '^(.-)<ruby' ) or '' -- grab anything before the first <ruby> tag since otherwise it'll be lost
	parts = mw.text.split( args[1], '<ruby' )
	match = args[2] == '' and '<rb[^>]*>(.-)</rb>' or '<rt[^>]*>(.-)</rt>'

	for i = 1, #parts do
		parts[i] = ( mw.ustring.match( parts[i], match ) or '' )
				.. ( mw.ustring.match( parts[i], '</ruby>(.*)$' ) or '' ) -- grab anything between </ruby> and the next <ruby> (or the ed of the string, if this is the last part)
	end

	return first, table.concat( parts, '' )
end

return p
-- </pre>