Permanently protected module

Difference between revisions of "Module:Ruby"

From Yugipedia
Jump to: navigation, search
(I probably worry way too much about this)
m (Protected "Module:Ruby": High traffic page ([Edit=Allow only administrators] (indefinite) [Move=Allow only administrators] (indefinite)))
(7 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 +
-- <pre>
 
local p = {}
 
local p = {}
  
 
function p.split( frame )
 
function p.split( frame )
    --
+
--
    -- implements {{Ruby/split}}
+
-- 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
  
    local args = frame:getParent().args
+
args[1] = mw.text.trim( args[1] )
    if not args[1] then
 
        return
 
    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
  
    if not mw.ustring.find( args[1], '<ruby' ) then
+
args[2] = args[2] and ( mw.text.trim( args[2] ) == 'base' and '' or mw.text.trim( args[2] ) ) or ''
        return args[1]
 
    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>'
  
    local first, parts, match
+
for i = 1, #parts do
    first = mw.ustring.match( args[1], '^([^<]*)' ) or ''
+
parts[i] = ( mw.ustring.match( parts[i], match ) or '' )
    parts = mw.text.split( args[1], '<ruby' )
+
.. ( mw.ustring.match( parts[i], '</ruby>(.*)$' ) or '' ) -- grab anything between </ruby> and the next <ruby> (or the end of the string, if this is the last part)
    match = args[2] == '' and '<rb>([^<]*)</rb>' or '<rt>([^<]*)</rt>'
+
end
  
    for i=1, #parts do
+
return first, table.concat( parts, '' )
        parts[i] = ( mw.ustring.match( parts[i], match ) or '' )
 
                .. ( mw.ustring.match( parts[i], '</ruby>(.*)$' ) or '' )
 
    end
 
 
 
    return first, table.concat( parts, '' )
 
 
end
 
end
  
 
return p
 
return p
 +
-- </pre>

Revision as of 01:38, 13 June 2019

-- <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 end of the string, if this is the last part)
	end

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

return p
-- </pre>