Difference between revisions of "Module:Ruby"
Dinoguy1000 (talk | contribs) (concatenation has higher precedence than and/or, so this wouldn't've worked regardless) |
Dinoguy1000 (talk | contribs) (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] ) | + | 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