text * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @author Etienne Mauvais based on xterm plugin by Tom Trenker */ if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/'); if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); require_once(DOKU_PLUGIN.'syntax.php'); /** * All DokuWiki plugins to extend the parser/rendering mechanism * need to inherit from this class */ class syntax_plugin_xtermrtf extends DokuWiki_Syntax_Plugin { /** * return some info */ function getInfo(){ return array( 'author' => 'Etienne M.', 'email' => 'emauvaisfr@yahoo.fr', 'date' => '2008-10-07', 'name' => 'xtermrtf Plugin', 'desc' => 'Affiche du texte au format RTF sous forme de terminal. Pratique pour reproduire un affichage en couleurs issu de PuTTY. Ce plugin n\'a ete teste qu\'avec du RTF genere par PuTTY (tres basique : pas de tableaux, pas de listes a puces, etc...) Displays RTF text into a terminal. Good to reproduce color PuTTY display. This plugin has just been tested with RTF paste from PuTTY (very basic: no arrays, no bullet lists, etc...)', 'url' => 'http://www.dokuwiki.org/plugin:xtermrtf', ); } /** * What kind of syntax are we? */ function getType(){ return 'disabled'; } /** * What kind of syntax do we allow (optional) */ function getAllowedTypes() { return array('disabled'); } /** * What about paragraphs? (optional) */ function getPType(){ return 'normal'; } /** * Where to sort in? */ function getSort(){ return 30; } /** * Connect pattern to lexer */ function connectTo($mode) { $this->Lexer->addEntryPattern('\x3Cxtermrtf\x3E(?=.*\x3C/xtermrtf\x3E)',$mode,'plugin_xtermrtf'); } function postConnect() { $this->Lexer->addExitPattern('\x3C/xtermrtf\x3E', 'plugin_xtermrtf'); } /** * Handle the match */ function handle($match, $state, $pos, &$handler){ switch ($state) { case DOKU_LEXER_ENTER : break; case DOKU_LEXER_MATCHED : break; case DOKU_LEXER_UNMATCHED : break; case DOKU_LEXER_EXIT : break; case DOKU_LEXER_SPECIAL : break; } return array($match, $state); } /** * Create output */ function render($mode, &$renderer, $data) { if($mode == 'xhtml'){ if ($data[1] == DOKU_LEXER_ENTER){ $renderer->doc .= '
';       #     
';
            } else if ($data[1] == DOKU_LEXER_UNMATCHED){
                //$renderer->doc .= rtf2html($renderer->_xmlEntities($data[0]));
                $renderer->doc .= rtf2html($data[0]);
            } else if ($data[1] == DOKU_LEXER_EXIT){
                $renderer->doc .= '
'; # '
'; } return true; } return false; } } //Conversion du format rtf "de PuTTY" en html //Attention : cette fonction n'a ete testee qu'avec des rtf issus de PuTTY. Elle est des plus basiques (ne gere pas les tableaux, les listes a puces, etc...) function rtf2html($rtf) { //On recupere la colortbl preg_match("/{\\\colortbl ;(.*?);}/i", $rtf, $colortbl); if ($colortbl) { //On recupere les couleurs $couleurs=split(";", $colortbl[1]); if ($couleurs) { for ($i=0; $i"; $closeFont=1; } //sinon si le "mot" est de la forme highlight else if (preg_match("/^highlight(.*)/i",$corps[$i],$val)) { $idx=$val[1]-1; if ($idx==-1) $coul="#000000"; else $coul=$couleurs[$idx]; if ($closeSpan) $out.=""; $out.="$close"; $closeSpan=1; } //sinon si le "mot" est de la forme par else if (preg_match("/^par/i",$corps[$i],$val)) { $out.="
"; } //sinon si le "mot" est de la forme ulnone else if (preg_match("/^ulnone/i",$corps[$i],$val)) { $out.=""; } //sinon si le "mot" est de la forme ul else if (preg_match("/^ul/i",$corps[$i],$val)) { $out.=""; } //sinon si le "mot" est de la forme b0 else if (preg_match("/^b0/i",$corps[$i],$val)) { $out.=""; } //sinon si le "mot" est de la forme b else if (preg_match("/^b/i",$corps[$i],$val)) { $out.=""; } //sinon si le "mot" est de la forme i0 else if (preg_match("/^i0/i",$corps[$i],$val)) { $out.=""; } //sinon si le "mot" est de la forme ul else if (preg_match("/^i/i",$corps[$i],$val)) { $out.=""; } //Sinon (on n'a pas reconnu une mot clef rtf, on affiche le mot (qui perd son \ au passage...) else { $out.=htmlentities($corps[$i]); continue; } //Si le mot contient un code rtf _et_ du texte, on recupere le texte et on l'affiche if (preg_match("/^.*? (.*?)$/",$corps[$i],$val)) { $out.=htmlentities($val[1]); } } //On ferme d'éventuelles balises span ou font if ($closeFont) $out.=""; if ($closeSpan) $out.="
"; } else $out=htmlspecialchars($rtf); $out.=""; //On remet les \ "du texte" en place $out=preg_replace("/\*antislash\*/","\\",$out); return $out; }