示例#1
0
文件: Page.php 项目: raz0rsdge/horde
 public function getProcessor($output_format = 'Xhtml')
 {
     if (isset($this->_proc)) {
         return $this->_proc;
     }
     $view_url = Wicked::url('%s')->setRaw(true)->add('referrer', $this->pageName());
     $view_url = str_replace(urlencode('%s'), '%s', $view_url);
     /* Create format-specific Text_Wiki object */
     $class = 'Text_Wiki_' . $GLOBALS['conf']['wicked']['format'];
     $this->_proc = new $class();
     /* Use a non-printable delimiter character that is still a valid UTF-8
      * character. See http://pear.php.net/bugs/bug.php?id=12490. */
     $this->_proc->delim = chr(1);
     /* Override rules */
     $this->_proc->insertRule('Heading2', 'Heading');
     $this->_proc->deleteRule('Heading');
     $this->_proc->loadParseObj('Paragraph');
     $skip = $this->_proc->parseObj['Paragraph']->getConf('skip');
     $skip[] = 'heading2';
     $this->_proc->setParseConf('Paragraph', 'skip', $skip);
     if ($GLOBALS['conf']['wicked']['format'] == 'Default' || $GLOBALS['conf']['wicked']['format'] == 'Cowiki' || $GLOBALS['conf']['wicked']['format'] == 'Tiki') {
         $this->_proc->insertRule('Toc2', 'Toc');
     }
     $this->_proc->deleteRule('Toc');
     switch ($output_format) {
         case 'Xhtml':
             if ($GLOBALS['conf']['wicked']['format'] != 'Creole') {
                 $this->_proc->insertRule('Code2', 'Code');
             }
             $this->_proc->deleteRule('Code');
             if ($GLOBALS['conf']['wicked']['format'] == 'BBCode') {
                 $this->_proc->insertRule('Wickedblock', 'Code2');
             } else {
                 $this->_proc->insertRule('Wikilink2', 'Wikilink');
                 $this->_proc->setParseConf('Wikilink2', 'utf-8', true);
                 $this->_proc->insertRule('Wickedblock', 'Raw');
             }
             $this->_proc->deleteRule('Wikilink');
             if ($GLOBALS['conf']['wicked']['format'] == 'Default' || $GLOBALS['conf']['wicked']['format'] == 'Cowiki' || $GLOBALS['conf']['wicked']['format'] == 'Tiki') {
                 $this->_proc->insertRule('Freelink2', 'Freelink');
             }
             $this->_proc->deleteRule('Freelink');
             $this->_proc->insertRule('Image2', 'Image');
             $this->_proc->deleteRule('Image');
             $this->_proc->insertRule('RegistryLink', 'Wickedblock');
             $this->_proc->insertRule('Attribute', 'RegistryLink');
             $this->_proc->deleteRule('Include');
             $this->_proc->deleteRule('Embed');
             $this->_proc->setFormatConf('Xhtml', 'charset', 'UTF-8');
             $this->_proc->setFormatConf('Xhtml', 'translate', HTML_SPECIALCHARS);
             $create = $this->allows(Wicked::MODE_CREATE) ? 1 : 0;
             $linkConf = array('pages' => $GLOBALS['wicked']->getPages(), 'view_url' => $view_url, 'new_url' => $create ? $view_url : false, 'new_text_pos' => false, 'css_new' => 'newpage', 'ext_chars' => true);
             $this->_proc->setRenderConf('Xhtml', 'Wikilink2', $linkConf);
             $this->_proc->setRenderConf('Xhtml', 'Freelink2', $linkConf);
             $this->_proc->setRenderConf('Xhtml', 'Toc2', array('title' => '<h2>' . _("Table of Contents") . '</h2>'));
             $this->_proc->setRenderConf('Xhtml', 'Table', array('css_table' => 'horde-table'));
             break;
         case 'Rst':
             require_once __DIR__ . '/Text_Wiki/Render/Rst.php';
             break;
     }
     $autoloader = $GLOBALS['injector']->getInstance('Horde_Autoloader');
     $autoloader->addClassPathMapper(new Horde_Autoloader_ClassPathMapper_Prefix('/^Text_Wiki_Render_' . $output_format . '/', WICKED_BASE . '/lib/Text_Wiki/Render/' . $output_format));
     $autoloader->addClassPathMapper(new Horde_Autoloader_ClassPathMapper_Prefix('/^Text_Wiki_Parse/', WICKED_BASE . '/lib/Text_Wiki/Parse/' . $GLOBALS['conf']['wicked']['format']));
     return $this->_proc;
 }