while($next = (extract_bracketed($text, '{}', '[^{}]*' ))[0]) #this is general. { $holder = $next; if($bext = (extract_bracketed($next, '{}', '(?s).*?(?=\{ctext|\{code|\{example|\{pre)' ))[0]) #this handles "code" and the like. { $bolder = $bext; while($cext = (extract_bracketed($bext, '{}', '(?s).*?(?=\{escape)' ))[0]) #this is for escaped "code" and the like. { $colder = $cext; $cext =~ s/\{([^ \s|\}]*?)\}/<$1\/>/gix; $cext =~ s/\{([\w|-]*)(.*)\}/<$1>$2<\/$1>/osi; $bext =~ s/$colder/$cext/sgi; } $bext =~ s/\{pre(.*)\}/\
$1<\/pre>/gosix;
$bext =~ s/\{ctext(.*)\}/\$1<\/ctext>/gosix;
$bext =~ s/\{code(.*)\}/\$1<\/code>/gosix;
$bext =~ s/\{example(.*)\}/\$1<\/example>/gosix;
$bext =~ s/\}/ebrac/g;
$bext =~ s/\{/obrac/g;
$next =~ s/$bolder/$bext/sgi;
}
$next =~ s/\{([^ \s|\}]*?)\}/<$1\/>/gix;
$next =~ s/\{([\w|-]*)(.*)\}/<$1>$2<\/$1>/osi;
$text =~ s/$holder/$next/sgi;
}