function toggle(obj) { var elstyle = document.getElementById(obj).style; var text = document.getElementById(obj + \"tog\"); if (elstyle.display == 'none') { elstyle.display = 'block'; text.innerHTML = \"{$ToggleText[0]}\"; } else { elstyle.display = 'none'; text.innerHTML = \"{$ToggleText[1]}\"; } } "; ## in-page cross-references Markup('[[#|#','>nl1','/\[\[#([A-Za-z][-.:\w]*)\s*\|\s*#\]\]/e', "'[[#$1 | '.CrossReference(\$pagename,\$x,'$1').']]'"); Markup('[[#|*','<[[|','/\[\[#([A-Za-z][-.:\w]*)\s*\|\s*\*\]\]/', '[[#$1 | $1]]'); Markup('[[#|+','<[[|','/\[\[#([A-Za-z][-.:\w]*)\s*\|\s*\+\]\]/', '[[#$1 | Back to $1]]'); Markup("[^#",'<[[#|#','/\[\^#([A-Za-z][-.:\w]*)\^\]/e',"Shortcut(\$x,'$1')"); SDVA($LinkCleanser, array( '/`\..*?$/' => '...', "/\\[\\[([^|\\]]+)\\|\\s*(.*?)\\]\\]($SuffixPattern)/e" => "MakeLink(\$pagename,PSS('$1'),PSS('$2'),'$3','\$LinkText')", "/\\[\\[([^\\]]+?)\\s*-+>\\s*(.*?)\\]\\]($SuffixPattern)/e" => "MakeLink(\$pagename,PSS('$2'),PSS('$1'),'$3','\$LinkText')", '/\\[\\[#([A-Za-z][-.:\\w]*)\\]\\]/' => "", "/\\[\\[(.*?)\\]\\]($SuffixPattern)/e" => "MakeLink(\$pagename,PSS('$1'),NULL,'$2','\$LinkText')", '/[\\[\\{](.*?)\\|(.*?)[\\]\\}]/' => '$1', "/`(($GroupPattern([\\/.]))?($WikiWordPattern))/" => '$1', "/$GroupPattern\\/($WikiWordPattern)/" => '$1' )); function CrossReference($pagename,$text,$anchor) { global $LinkCleanser; $r = Shortcut($text,$anchor); foreach ($LinkCleanser as $p => $c) $r = preg_replace($p,$c,$r); return $r; } function Shortcut($text,$anchor) { if (preg_match("/\\[\\[#+$anchor\\]\\]\\n?([^\n]+)/",$text,$match)) { return preg_replace("/^[#*!:]+\s*/","", preg_replace("/([^!]+)!.+/","$1",$match[1])); } else { return "$anchor not found"; } } ## [[##visibleanchor]] SDV($VisibleAnchor,'§'); SDV($VisibleAnchorLinks,false); SDV($DefaultTocAnchor,'toc'); $RefOrTitle = ($VisibleAnchorLinks) ? 'href' : 'title'; ## autonumber anchors Markup('^!#','" . Keep("
" .
      wordwrap($texta, 70) .  "
") . "\n$textb\n(:divend:)
\n"; } Markup('`markup','links',"/`\./",''); ## included in extendmarkup.php ## page table of contents $IdPattern = "[A-Za-z][-.:\w]*"; if ($format=='pdf') { SDV($DefaultTocTitle,'Contents'); SDV($TocHeaderFmt, '[[#toc]]$TocTitle'); SDV($RemoteTocFmt, 'Contents of [[$Toc(#toc)]]'); } else { SDV($DefaultTocTitle,'On this page...'); SDV($TocHeaderFmt,'[[#toc]]$TocTitle'); SDV($RemoteTocFmt,'On page [[$Toc(#toc)]]...'); } SDV($NumberToc,true); SDV($L1TocChar, '.'); SDV($OmitQMarkup,false); if ($action=="print" || $action=="publish") { Markup('[[##','<[[#','/\[\[##([A-Za-z][-.:\w]*)\]\]/','[[#$1]]'); if ($action=='publish') Markup('toc','>include', '/\(:([#\*])?toc(?:-(float|hide))?(?:\s+anchors=(v)isible)?(?:\s+(.*?))?:\)/', ''); Markup('tocback','directives','/\(:toc-back(?:\s+(.*?))?:\)/',''); } else { Markup('[[##','<[[#','/\[\[##([A-Za-z][-.:\w]*)\]\]/e', "Keep(\"$VisibleAnchor\", 'L')"); } Markup('toc','>nl1', '/\(:([#\*])?toc(?:-(float|hide))?(?:\s+anchors=(v)isible)?(?:\s+(.*?))?(?:\s+(Q))?:\)(.*)$/se', "TableOfContents(\$pagename,'$1','$2',PSS('$4'),'$5',PSS('$6')). TocEntryAnchors('$3',PSS('$6'))"); SDV($TocBackFmt,'↑ Contents'); Markup('tocback','directives','/\(:toc-back(?:\s+(.*?))?:\)/e', "'[[#toc | '.TocLinkText(PSS('$1')).']]'"); Markup('tocpage','directives','/\(:toc-page\s+(.*?)(?:\s+self=([01]))?:\)/e', "RemoteTableOfContents(\$pagename,'$1','$2')"); function RemoteTableOfContents($pagename,$ref,$self=0) { global $TocHeaderFmt,$RemoteTocFmt; $oTocHeader = $TocHeaderFmt; $TocHeaderFmt = str_replace('$Toc',$ref,$RemoteTocFmt); $tocname = MakePageName($pagename,$ref); if ($tocname==$pagename && $self==0) return ''; $tocpage=RetrieveAuthPage($tocname,'read',false); $toctext=@$tocpage['text']; if (preg_match('/\(:([#\*])?toc(?:-(float|hide))?(?:\s+anchors=(v)isible)?(?:\s+(.*?))?(?:\s+(Q))?:\)(.*)$/se',$toctext,$m)) $toc = str_replace('[[#',"[[$ref#", TableOfContents($tocname,$m[1],'page','',$m[5],PSS($m[6]))); $TocHeaderFmt = $oTocHeader; return $toc; } function TocLinkText($text) { global $TocBackFmt; if ($text) $TocBackFmt = $text; return $TocBackFmt; } function TocEntryAnchors($visible,$text) { global $IdPattern; return preg_replace("/\n(!+|Q:)((\[\[#+$IdPattern\]\])|##?)?/e", '"\n$1".InsertAnchor($visible,"$1","$2")',$text); } function InsertAnchor($visible,$h,$mark) { global $OmitQMarkup, $NumberToc, $L1TocChar; static $l1,$l2,$toc1,$toc2; if ($h=='Q:' && $OmitQMarkup) return $mark; if ($mark=='') $visibility = ($visible=='') ? '#' : '##'; else $visibility = $mark; if ($h=='Q:') return $visibility; $r = ''; $len = strlen($h); if ($l1==0) { $l1 = $len; } else if ($len!=$l1 && $l2==0) { $l2 = $len; } # if ($l1==$len || $l2==$len) $r = $visibility; if ($l1==$len) { $toc1++; $toc2 = 0; $r = $visibility; if ($NumberToc) $r .= "$toc1$L1TocChar "; } elseif ($l2==$len) { $toc2++; $r = $visibility; if ($NumberToc) $r .= "$toc1.$toc2 "; } return $r; } function TableOfContents($pagename,$number,$float,$title,$includeq,$text) { global $DefaultTocTitle,$TocHeaderFmt,$IdPattern,$NumberToc,$OmitQMarkup, $format,$L1TocChar,$DefaultTocAnchor,$TocFloat,$HTMLHeaderFmt, $ToggleText; if ($includeq) $OmitQMarkup = (!$OmitQMarkup); if ($float=='float') $TocFloat = (!$TocFloat); $l1 = 0; $l2 = 0; $l3 = 0; $q = 0; $prelen = 1; $counter = 0; $r = ''; $toc1 = 0; if (!$title) $title = $DefaultTocTitle; $toc = str_replace('$TocTitle',$title,$TocHeaderFmt); if ($number=='*') $NumberToc = false; elseif ($number=='#') $NumberToc = true; $closel = 0; if ($format=='pdf') { $l = 'tbook:item'; $s = ($NumberToc) ? 'tbook:enumerate' : 'tbook:itemize'; $sc = $s; $toc = "$toc". "<$sc><$l>\$List"; } elseif ($float=='hide') { return ''; } else { $tocid = ($float=='page') ? 'ptocid' : 'tocid'; // remote toc? $toggle = " ({$ToggleText[0]})"; $l = 'li'; $s = ($NumberToc) ? 'ol' : 'ul'; $sc = "$s class='toc'"; $f = ($TocFloat) ? 'float' : ''; $toc = "

$toc$toggle

" . "<$sc id='$tocid'><$l>\$List
"; } preg_match_all("/\n(!+|Q?:)\s*(\[\[#+$IdPattern\]\]|#*)([^\n]*)/",$text, $match); for ($i=0;$i