delegate,$method)) {
- $result = $this->delegate->$method($result);
- }
- //echo "$$$$$ ".$result."\n";
-
- return $result;
-
- }
-}
-
-
-?>
-
-// high level
-$parser = create_wiki_parser();
-$html_text = $parser->parse($wiki_text);
-
-// low level
- $parser = new Gakoparser();
- $parser->setDelegate(new MarkupInterpreter());
- $parser->addDelim('bold','**');
- echo $parser->parse('hello **world**');
-
-
- */
-
-
-class GakowikiMarkupToHTMLTranslator {
-
- var $toc = array();
-
- var $references = array();
-
- /** replaces all line breaks by "__newline__" that are meant to replaced back by a call to __post() */
- function __pre($str) {
- $result = $str;
-
- // we often use nelines to have pretty HTML code
- // such as in tables
- // however, they are no "real" newlines to be transformed in
- $result = preg_replace("/>\s*(\n|\r\n)/",'>__newline__',$result);
- return $result;
- }
-
- function bib($str) {
- $this->references[] = $str;
- return '['.count($this->references).'] '.$str;
- }
-
- function cite($str) {
- return "@@@".$str."@@@";
- }
-
- function escape_newline($str) {
- return preg_replace("/(\n|\r\n)/","__newline__",$str);
- }
-
- function toc($str) {
- return '+++TOC+++';
- }
-
- function __post($str) {
- $result = $str;
- $result = preg_replace("/(\n|\r\n)/","
\n",$result);
-
- // workaround to support the semantics change in pre mode
- // and the semantics of embedded HTML
- $result = preg_replace("/__newline__/","\n",$result);// must be at the end
-
- // cleaning the additional
- // this is really nice
- $result = preg_replace("/(<\/h.>)
/i","\\1 ",$result);
-
- // adding the table of contents
- $result = str_replace($this->toc(''),implode('
',$this->toc),$result);
-
- // adding the references
- $citeregexp = '/@@@(.*?)@@@/';
- if (preg_match_all($citeregexp,$result,$matches)) {
- foreach($matches[1] as $m) {
- $theref = '';
- foreach ($this->references as $k => $ref) {
- if (preg_match('/'.preg_quote($m).'/i', $ref)) {
-//echo $m.' '.$ref;
- // if we have already a match it is not deterministic
- if ($theref!='') $result = "undeterministic citation: ".$m;
- $theref = $ref;
- $result = preg_replace('/@@@'.preg_quote($m).'@@@/i', '['.($k+1).']', $result);
- }
- }
- }
- }
-
- return $result;
- }
-
- /** adds tags and prevents newline to be replaced by
by __post */
- function pre($str) {
- return ''.$this->escape_newline($str).'
';
- }
-
- /** prevents newline to be replaced by
by __post */
- function unwrap($str) {
- return $this->escape_newline($str);
- }
-
- /** adds tags */
- function bold($str) {
- return ''.$str.'';
- }
-
- /** adds tags */
- function italic($str) {
- return ''.$str.'';
- }
-
- function table($str) {
- $result = '';
- foreach(preg_split('/\n/',$str) as $line) {
- if (strlen(trim($line))>0) {
- $result .= '';
- foreach(preg_split('/&&/',$line) as $field) {
- $result .= ''.$field.' | ';
-
- }
- $result .= '
';
- }
- }
-
- return '';
- }
-
-
- function __create_anchor($m) {
- return preg_replace("/[^a-zA-Z]/","",$m);
- }
- function h2($str) {
- $tag = $this->__create_anchor($str);
- $this->toc[] = "".$str."";
- return ''.''.$str."
";
- }
-
- function h3($str) {
- $tag = $this->__create_anchor($str);
- $this->toc[] = " ".$str."";
- return ''.''.$str."
";
- }
-
- function monotype($str) {
- return ''.str_replace('<','<',$str).'
';
- }
-
- function link($str) {
-
- if (preg_match('/(.*)\|(.*)/',$str, $matches)) {
- $rawurl = $matches[1];
- $text = $matches[2];
- } else {$rawurl=$str;$text=$str;}
-
- $url=$rawurl;
-
- if (!preg_match("/(#|^http|^mailto)/",$rawurl)) {
- if (function_exists('logical2url')) {
- $url=logical2url($rawurl);
- } else {
- $url=$rawurl;
-
- }
- }
-
- return ''.trim($text).'';
- }
-
- function phpcode($str) {
- ob_start();
- eval($str);
- return $this->escape_newline(ob_get_clean());
- }
-
- function phpcode2($str) {
- return gk_wiki2html($this->phpcode($str));
- }
-
- function a($str) {
- return '';
- }
-
- function script($str) {
- return '';
- }
-
- function img($str) {
- return '
';
- }
-
- function img2($str) {
- return '
';
- }
-
-
- function html($str) {
- return '<'.$str.'>';
- }
-
- function iframe($str) {
- return '