include','/^(!{1,6})(?:\s*)(.*)$/e', "MkNumTitle(strlen('$1'),PSS('$2'))");
Markup('^Q:toc','>include','/^Q:(.*)$/e', "MkQref(PSS('$1'))"); 
Markup('toc','directives','/\\(:(no)?toc:\\)/e', "RunToc('$1')");
Markup('indent','directives','/\\(:(no)?indent:\\)/e', "RunIndent('$1')");
Markup('num','directives','/\\(:(no)?num(?:\s+(.*?))?:\\)/e', "RunNum('$1',PSS('$2'))");
$MarkupFrameBase['posteval']['toc'] =
  "\$out=str_replace('{toc}','
'.\$GLOBALS['Ntoc'].'
',\$out);";
$GroupFooterFmt .= '(:nonum:)(:noindent:)(:notoc:)';
define('NumToc',1);
$NumTOCMaxLevel = 6;
	  
function MkNumTitle ($level, $text) {
  global $tcount, $CurLvl, $DefNum, $HdrIndStyle, $Ntoc, $NumHdr, $IndentHdr, $SetToc, $indentoffset, $NumTOCMaxLevel;
  static $TcNb, $OrNb, $sp, $numoffset;
  if ($level>$NumTOCMaxLevel) $level=$NumTOCMaxLevel;
  if ($CurLvl>0 and $IndentHdr) $hdr = "";
  else $hdr='';
  if (!isset($CurLvl)) $CurLvl=0;
  if ($CurLvl==0) {
    SDV ($DefNum, '1.1.1.1.1.1. ');
	SDV ($HdrIndStyle, 'text-indent:-1em;');
    $CurLvl++;
	$sp[1] = '';	
	for ($i=1; $i<=$NumTOCMaxLevel; $i++) {
	  $sp[$i+1] = $DefNum[$i+$i-1];
	  $OrNb[$i] = chr(ord($DefNum[$i+$i-2])-1); // dec don't work on alpha char
	  $TcNb[$i] = $OrNb[$i];
	}  
	$sp[$NumTOCMaxLevel+1] = substr($DefNum,$NumTOCMaxLevel*2-1); 
  }
  $CurLvl = $level++;
  if ($NumHdr) {
    if (!isset($numoffset)) $numoffset = $CurLvl;
	$level-=$numoffset;
	$TcNb[$level] = IncNum($TcNb[$level]);
	for ($i=1; $i<=$level; $i++) $num.= $sp[$i].$TcNb[$i];	
	for ($i=$level+1; $i<=$NumTOCMaxLevel; $i++) $TcNb[$i]= $OrNb[$i];
    $num.= $sp[$NumTOCMaxLevel+1];
	$pref= $num;
  }
  else 
    $pref = "- ";
  if ($IndentHdr) {
    if (!isset($indentoffset)) $indentoffset = $CurLvl-1;
	$idlvl = $CurLvl-$indentoffset;
	$indent = " style='$HdrIndStyle'";
	$classblk = "";
  }	
  if ($SetToc) {
	$title = preg_replace ("/\\[\\[(?:#.*)?(?:.*?\\|)?(.*?)(->.*?)?\\]\\]/", "\\1", $text); //remove links
	$title = preg_replace ("/(%.*?%)([^%]*)/", "\\2", $title); //remove styling %...%
	$idtoc = $CurLvl-$indentoffset;
    $Ntoc.= "\n
      $pref$title";
	$reftoc = "[[#ntoc$tcount]]";  
  }  
  return ("$hdr\n
$classblk\n$reftoc$num$text
"); 
}
function IncNum ($num) {
  if (is_numeric($num)) 
    return ++$num; 
  else 
    return chr(ord($num)+1);
}
function MkQref ($text) {
  global $tcount, $CurLvl, $Ntoc, $SetToc, $indentoffset;
  if ($SetToc) {
	$idtoc = $CurLvl-$indentoffset;
    $Ntoc.= "\n
      $text
";
	$anc = "[[#ntoc$tcount]]"; 
  }	
  return "Q:$anc$text";
} 
function RunToc ($notoc) {
  if ($GLOBALS['SetToc'] =($notoc!='no')) return '{toc}';
}  
function RunIndent ($noindent) {
  global $IndentHdr;
  $wasindent = $IndentHdr;
  if (!$IndentHdr=($noindent!='no') and $wasindent) return '