[ 'entry' => '\*\*(?=.*\*\*)', 'exit' => '\*\*', 'sort' => 70 ], 'emphasis' => [ 'entry' => '//(?=[^\x00]*[^:])', //hack for bugs #384 #763 #1468 'exit' => '//', 'sort' => 80, ], 'underline' => [ 'entry' => '__(?=.*__)', 'exit' => '__', 'sort' => 90 ], 'monospace' => [ 'entry' => '\x27\x27(?=.*\x27\x27)', 'exit' => '\x27\x27', 'sort' => 100 ], 'subscript' => [ 'entry' => '(?=.*)', 'exit' => '', 'sort' => 110 ], 'superscript' => [ 'entry' => '(?=.*)', 'exit' => '', 'sort' => 120 ], 'deleted' => [ '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']; } }