##
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;
}