Permanently protected module

Difference between revisions of "Module:Ruby"

From Yugipedia
Jump to: navigation, search
(concatenation has higher precedence than and/or, so this wouldn't've worked regardless)
(fix the base/top cases being reversed and (hopefully) not capturing non-Ruby text at the very beginning of the input)
Line 14: Line 14:
 
     local parts, match
 
     local parts, match
 
     parts = mw.text.split( args[1], '<ruby' )
 
     parts = mw.text.split( args[1], '<ruby' )
     match = mw.text.trim( args[2] ) ~= '' and '<rb>([^<]*)</rb>' or '<rt>([^<]*)</rt>'
+
     match = mw.text.trim( args[2] ) == '' and '<rb>([^<]*)</rb>' or '<rt>([^<]*)</rt>'
  
 
     for i=1, #parts do
 
     for i=1, #parts do
         parts[i] = ( mw.ustring.match( parts[i], match ) or '' ) .. ( mw.ustring.match( parts[i], '</ruby>(.*)$' ) or '' )
+
         parts[i] = ( mw.ustring.match( parts[i], '^([^<]*)' ) or '' ) .. ( mw.ustring.match( parts[i], match ) or '' ) .. ( mw.ustring.match( parts[i], '</ruby>(.*)$' ) or '' )
 
     end
 
     end
 
     return table.concat( parts, '' )
 
     return table.concat( parts, '' )

Revision as of 23:09, 2 March 2015

local p = {}

function p.split( frame )
    local args = frame:getParent().args
    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]
    end
    args[2] = args[2] or ''
    args[2] = args[2] == 'base' and '' or args[2]
    local parts, match
    parts = mw.text.split( args[1], '<ruby' )
    match = mw.text.trim( args[2] ) == '' and '<rb>([^<]*)</rb>' or '<rt>([^<]*)</rt>'

    for i=1, #parts do
        parts[i] = ( mw.ustring.match( parts[i], '^([^<]*)' ) or '' ) .. ( mw.ustring.match( parts[i], match ) or '' ) .. ( mw.ustring.match( parts[i], '</ruby>(.*)$' ) or '' )
    end
    return table.concat( parts, '' )
end

return p