Difference between pages "Module:Ruby" and "Module:Ruby/sandbox"
(Difference between pages)
(avoid error if args isn't even an array) |
Dinoguy1000 (talk | contribs) (non-greedy matches should do it) |
||
Line 2: | Line 2: | ||
function p.split( frame ) | function p.split( frame ) | ||
− | + | -- | |
− | + | -- implements {{Ruby/split}} | |
− | + | -- | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | if frame == mw.getCurrentFrame() then | |
− | + | args = frame:getParent().args | |
− | + | else | |
+ | args = frame | ||
+ | end | ||
+ | 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] 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 '' | ||
+ | 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 '' ) | ||
+ | end | ||
+ | |||
+ | return first, table.concat( parts, '' ) | ||
end | end | ||
return p | return p |