* @author Dougal Campbell * @link http://dougal.gunters.org/blog/2004/08/30/text-filter-suite * @license GPL */ // must be run within Dokuwiki if(!defined('DOKU_INC')) die(); // we inherit from the XHTML renderer instead directly of the base renderer require_once DOKU_INC.'inc/parser/xhtml.php'; /** * The Renderer */ class renderer_plugin_mundart extends Doku_Renderer_xhtml { /** * return some info */ function getInfo(){ return array( 'author' => 'Christoph Lang', 'email' => 'c.lang@cc-tech.de', 'date' => '2009-12-02', 'name' => 'Mundart', 'desc' => 'Apply german Mundarts to your (X)Html Output', 'url' => 'http://wiki.splitbrain.org/plugin:mundart', ); } function canRender($format) { return ($format=='xhtml'); } private $header = false; function cdata($text) { if($this->getConf('mundart_alwayson') == '0'){ $aDays = explode(";",$this->getConf('mundart_timer')); if(!in_array(date('m-d'),$aDays)){ $this->doc .= $this->_xmlEntities($text); return; } } switch($this->getConf('mundart_type')){ case '0': $this->doc .= $this->_xmlEntities($text); return; case '1': $filter = 'schwabe_filter'; break; case '2': $filter = 'sachse_filter'; break; case '3': $filter = 'ghetto_filter'; break; case '4': $filter = 'leet_filter'; break; default: $this->doc .= $this->_xmlEntities($text); return; } $this->doc .= $this->_xmlEntities($this->$filter($text)); if($this->getConf('mundart_headeron') == '1') if(!$this->header){ $this->header=true; $info = $this->getInfo(); $text = str_replace('[url]',$info['url'],$this->getLang('header')); $this->doc = '
'.$text.'
'.$this->doc; } } /** * This function takes an array of ('/pattern/' => 'replacement') pairs * and applies them all to $content. */ function _array_apply_regexp($patterns,$content) { // Extract the values: $keys = array_keys($patterns); $values = array_values($patterns); // Replace the words: $content = preg_replace($keys,$values,$content); return $content; } function sachse_filter($content) { $patterns = array( '%\bdas\b%' => 'des', '%Ka%' => 'Ga', '%rk%' => 'rg', '%Pr%' => 'Br', '%akt%' => 'agd', '%st%' => 'schd', '%ta%' => 'da', '%tu%' => 'du', '%len%' => 'ln', '%sp%' => 'schb', '%gen%' => 'gn', '%ekt%' => 'egd', '%Ku%' => 'Gu', '%Te%' => 'De', '%ik%' => 'ig', '%ten%' => 'den', '%ich%' => 'isch', '%ati%' => 'adsi', '%at%' => 'ad', '%ech%' => 'esch', '%äch%' => 'äsch', '%ein%' => 'een', '%enen\b%' => 'en\'', '%nen\b%' => 'en\'', '%en%' => 'n', '%tz%' => 'dz', '%ay%' => 'aü', '%te%' => 'de', '%TE%' => 'DE', '%et%' => 'ed', '%pr%' => 'br', '%uk%' => 'ug', '%ko%' => 'go', '%ka%' => 'ga', '%kö%' => 'gö', '%tr%' => 'dr', '%nk%' => 'ng', '%ti%' => 'di', '%lt%' => 'ld', '%ft%' => 'fd', '%wa%' => 'we', '%tw%' => 'dw', '%ck%' => 'gg', '%it%' => 'id', '%rt%' => 'rd', '%pe%' => 'be', '%und\b%' => 'unn', '%\beine\b%' => 'eene', '%\bdie\b%' => 'de', '%\bder\b%' => 'dor', '/ing\b/' => "in'", '/ings\b/' => "in's", // These next two do cool random substitutions '/(\.\s)/e' => 'renderer_plugin_mundart::avast("$0",3)', '/([!\?]\s)/e' => 'renderer_plugin_mundart::avast("$0",2)', // Greater chance after exclamation ); // Replace the words: $content = $this->_array_apply_regexp($patterns,$content); return $content; } function schwabe_filter($content) { $patterns = array( '%Google%' => 'Datenkrake', '%cken%' => 'gga', '%tte%' => 'dde', '%st%' => 'schd', '%te%' => 'de', '%on\b%' => 'o', '%en\b%' => 'et', '%er\b%' => 'r', '%\bauf\b%' => 'uf', '%che\b%' => 'ch\'', '%ein%' => 'oi', '%pe%' => 'be', '%ta%' => 'da', '%ge\b%' => 'g', '%rt%' => 'rd', '%\bund\b%' => 'un', '%en\b%' => 'a', '%at\b%' => 'edd', '%ati%' => 'azi', '%kt%' => 'kd', '%tu%' => 'du', '%ck%' => 'gg', '%t\b%' => 'd', '%ki%' => 'ggi', '%k\b%' => 'g', '%er\b%' => 'r', '%lt%' => 'ld', '%ft%' => 'fd', '%\brichtig\b%' => 'rechte', '%\bnicht\b%' => 'nedd', '%\bdenn\b%' => 'noh', '%\bsich\b%' => 'si', '%\bdie\b%' => 'd', '%\bdas\b%' => 'des', '%\?%' => ', gell?', ); // Replace the words: $content = $this->_array_apply_regexp($patterns,$content); return $content; } function leet_filter($content) { $patterns = array( '%a%' => '4', '%b%' => 'B', '%c%' => '(', '%d%' => 'D', '%e%' => '3', '%f%' => 'Ph', '%g%' => '9', '%h%' => '|-|', '%i%' => '1', '%j%' => 'j', '%k%' => '|<', '%l%' => 'L', '%m%' => '/\\/\\', '%n%' => '|\\|', '%o%' => '0', '%p%' => 'P', '%q%' => 'Q', '%r%' => 'r', '%s%' => '$', '%t%' => '7', '%u%' => 'U', '%v%' => '\\/', '%w%' => '\\/\\/', '%x%' => '><', '%y%' => '\'/', '%z%' => 'Z', ); // Replace the words: $content = $this->_array_apply_regexp($patterns,$content); return $content; } function ghetto_filter($content) { $patterns = array( '%\bein\b%' => '', '%\bnur\b%' => '', '%\Ihre\b%' => 'Dein', '%\ihr\b%' => 'du', '%\beuch\b%' => '', '%\bSie\b%' => 'Du', '%\bIch\b%' => 'Isch', '%\bbin\b%' => 'war', '%\bso\b%' => '', '%ei%' => 'ai', '%zw%' => 'sw', '%er\b%' => 'a', '%e\b%' => '', '%em\b%' => 'es', '%tt%' => 'dd', '%ten\b%' => 'dn', '%nen\b%' => 'n', '%en\b%' => 'n', '%ss\b%' => 's', ); // Replace the words: $content = $this->_array_apply_regexp($patterns,$content); return $content; } /** * support function for pirate() * this could probably be refactored to make it more generic, allowing * different filters to pass their own patterns in. */ function avast($stub = '',$chance = 5) { $shouts = array( ", des kennste abr glaubn$stub", ); shuffle($shouts); return (((1 == rand(1,$chance))?array_shift($shouts):$stub) . ' '); } } ?>