array( 'entry' => '\*\*(?=.*\*\*)', 'exit' => '\*\*', 'sort' => 70 ), 'emphasis' => array( 'entry' => '//(?=[^\x00]*[^:])', //hack for bugs #384 #763 #1468 'exit' => '//', 'sort' => 80 ), 'underline' => array( 'entry' => '__(?=.*__)', 'exit' => '__', 'sort' => 90 ), 'monospace' => array( 'entry' => '\x27\x27(?=.*\x27\x27)', 'exit' => '\x27\x27', 'sort' => 100 ), 'subscript' => array( 'entry' => '(?=.*)', 'exit' => '', 'sort' => 110 ), 'superscript' => array( 'entry' => '(?=.*)', 'exit' => '', 'sort' => 120 ), 'deleted' => array( 'entry' => '(?=.*)', 'exit' => '', 'sort' => 130 ), ); /** * @param string $type */ public function __construct($type) { global $PARSER_MODES; if (!array_key_exists($type, $this->formatting)) { trigger_error('Invalid formatting type ' . $type, E_USER_WARNING); } $this->type = $type; // formatting may contain other formatting but not it self $modes = $PARSER_MODES['formatting']; $key = array_search($type, $modes); if (is_int($key)) { unset($modes[$key]); } $this->allowedModes = array_merge( $modes, $PARSER_MODES['substition'], $PARSER_MODES['disabled'] ); } /** @inheritdoc */ public function connectTo($mode) { // Can't nest formatting in itself if ($mode == $this->type) { return; } $this->Lexer->addEntryPattern( $this->formatting[$this->type]['entry'], $mode, $this->type ); } /** @inheritdoc */ public function postConnect() { $this->Lexer->addExitPattern( $this->formatting[$this->type]['exit'], $this->type ); } /** @inheritdoc */ public function getSort() { return $this->formatting[$this->type]['sort']; } }