class_editor_rte.php
来自「sabreipb 2.1.6 utf-8中文版本!」· PHP 代码 · 共 1,216 行 · 第 1/3 页
PHP
1,216 行
print "<hr>"; print nl2br($t); print "<hr>"; exit(); } //----------------------------------------- // Done //----------------------------------------- return $t; } /*-------------------------------------------------------------------------*/ // Parse list tags /*-------------------------------------------------------------------------*/ /** * RTE: Parse List tag * * @param string Tag * @param string Text between opening and closing tag * @param string Opening tag complete * @param string Parse tag * @return string Converted text */ function _parse_list_tag( $tag, $between_text, $opening_tag, $parse_tag ) { $list_type = trim( preg_replace( '#"?list-style-type:\s+?([\d\w\_\-]+);?"?#si', '\\1', $this->_get_value_of_option( 'style', $opening_tag ) ) ); //----------------------------------------- // Set up a default... //----------------------------------------- if ( ! $list_type and $tag == 'ol' ) { $list_type = 'decimal'; } //----------------------------------------- // Tricky regex to clean all list items //----------------------------------------- $between_text = preg_replace('#<li>((.(?!</li))*)(?=</?ul|</?ol|\[list|<li|\[/list)#siU', '<li>\\1</li>', $between_text); $between_text = $this->_recurse_and_parse( 'li', $between_text, "_parse_listelement_tag" ); $allowed_types = array( 'upper-alpha' => 'A', 'upper-roman' => 'I', 'lower-alpha' => 'a', 'lower-roman' => 'i', 'decimal' => '1' ); if ( ! $allowed_types[ $list_type ] ) { $open_tag = '[list]'; } else { $open_tag = '[list='.$allowed_types[ $list_type ].']'; } return $open_tag . $this->_recurse_and_parse( $tag, $between_text, '_parse_list_tag' ) . '[/list]'; } /*-------------------------------------------------------------------------*/ // Parse anchor tags /*-------------------------------------------------------------------------*/ /** * RTE: Parse List Element tag * * @param string Tag * @param string Text between opening and closing tag * @param string Opening tag complete * @param string Parse tag * @return string Converted text */ function _parse_listelement_tag( $tag, $between_text, $opening_tag, $parse_tag ) { return '[*]' . rtrim( $between_text ); } /*-------------------------------------------------------------------------*/ // Parse anchor tags /*-------------------------------------------------------------------------*/ /** * RTE: Parse paragraph tags * * @param string Tag * @param string Text between opening and closing tag * @param string Opening tag complete * @param string Parse tag * @return string Converted text */ function _parse_paragraph_tag( $tag, $between_text, $opening_tag, $parse_tag ) { //----------------------------------------- // Reset local start tags //----------------------------------------- $start_tags = ""; $end_tags = ""; //----------------------------------------- // Check for inline style moz may have added //----------------------------------------- $this->_parse_style_attributes( $opening_tag, $start_tags, $end_tags ); //----------------------------------------- // Now parse align and style (if any) //----------------------------------------- $align = $this->_get_value_of_option( 'align', $opening_tag ); $style = $this->_get_value_of_option( 'style', $opening_tag ); if ( $align == 'center' ) { $start_tags .= '[center]'; $end_tags .= '[/center]'; } else if ( $align == 'left' ) { $start_tags .= '[left]'; $end_tags .= '[/left]'; } else if ( $align == 'right' ) { $start_tags .= '[right]'; $end_tags .= '[/right]'; } else { # No align? Make paragraph $end_tags .= "\n"; } $end_tags .= "\n"; return $start_tags . $this->_recurse_and_parse( 'p', $between_text, '_parse_paragraph_tag' ) . $end_tags; } /*-------------------------------------------------------------------------*/ // Parse anchor tags /*-------------------------------------------------------------------------*/ /** * RTE: Parse Span tag * * @param string Tag * @param string Text between opening and closing tag * @param string Opening tag complete * @param string Parse tag * @return string Converted text */ function _parse_span_tag( $tag, $between_text, $opening_tag, $parse_tag ) { $start_tags = ""; $end_tags = ""; //----------------------------------------- // Check for inline style moz may have added //----------------------------------------- $this->_parse_style_attributes( $opening_tag, $start_tags, $end_tags ); return $start_tags . $this->_recurse_and_parse( 'span', $between_text, '_parse_span_tag' ) . $end_tags; } /*-------------------------------------------------------------------------*/ // Parse anchor tags /*-------------------------------------------------------------------------*/ /** * RTE: Parse DIV tag * * @param string Tag * @param string Text between opening and closing tag * @param string Opening tag complete * @param string Parse tag * @return string Converted text */ function _parse_div_tag( $tag, $between_text, $opening_tag, $parse_tag ) { //----------------------------------------- // Reset local start tags //----------------------------------------- $start_tags = ""; $end_tags = ""; //----------------------------------------- // #DEBUG //----------------------------------------- if ( $this->debug == 2 ) { print "<b><span style='color:red'>DIV FIRED</b></span><br />Start tags: {$this->start_tags}<br />End tags: {$this->end_tags}<br />Between text:<br />".htmlspecialchars($between_text)."<hr />"; } //----------------------------------------- // Check for inline style moz may have added //----------------------------------------- $this->_parse_style_attributes( $opening_tag, $start_tags, $end_tags ); //----------------------------------------- // Now parse align (if any) //----------------------------------------- $align = $this->_get_value_of_option( 'align', $opening_tag ); if ( $align == 'center' ) { $start_tags .= '[center]'; $end_tags .= '[/center]'; } else if ( $align == 'left' ) { $start_tags .= '[left]'; $end_tags .= '[/left]'; } else if ( $align == 'right' ) { $start_tags .= '[right]'; $end_tags .= '[/right]'; } //$end_tags .= "\n"; //----------------------------------------- // Get recursive text //----------------------------------------- $final = $this->_recurse_and_parse( 'div', $between_text, '_parse_div_tag' ); //----------------------------------------- // #DEBUG //----------------------------------------- if ( $this->debug == 2 ) { print "\n<hr><b style='color:green'>FINISHED</b><br/ >".$start_tags . $final . $end_tags."<hr>"; } //----------------------------------------- // Now return //----------------------------------------- return $start_tags . $final . $end_tags; } /*-------------------------------------------------------------------------*/ // Parse style attributes /*-------------------------------------------------------------------------*/ /** * RTE: Parse style attributes (color, font, size, b, i..etc) * * @param string Opening tag complete * @return string Converted text */ function _parse_style_attributes( $opening_tag, &$start_tags, &$end_tags ) { $style_list = array( array('tag' => 'color' , 'rx' => '(?<!\w)color:\s*([^;]+);?' , 'match' => 1), array('tag' => 'font' , 'rx' => 'font-family:\s*([^;]+);?' , 'match' => 1), array('tag' => 'size' , 'rx' => 'font-size:\s*([\d]+);?' , 'match' => 1), array('tag' => 'b' , 'rx' => 'font-weight:\s*(bold);?'), array('tag' => 'i' , 'rx' => 'font-style:\s*(italic);?'), array('tag' => 'u' , 'rx' => 'text-decoration:\s*(underline);?'), array('tag' => 'left' , 'rx' => 'text-align:\s*(left);?'), array('tag' => 'center', 'rx' => 'text-align:\s*(center);?'), array('tag' => 'right' , 'rx' => 'text-align:\s*(right);?'), ); //----------------------------------------- // get style option //----------------------------------------- $style = $this->_get_value_of_option( 'style', $opening_tag ); //----------------------------------------- // Convert RGB to hex //----------------------------------------- $style = preg_replace( '#(?<!\w)color:\s+?rgb\((\d+,\s+?\d+,\s+?\d+)\)(;?)#ie', "'color: '.\$this->_rgb_to_hex( '\\1','\\2' );", $style ); //----------------------------------------- // Pick through possible styles //----------------------------------------- foreach( $style_list as $data ) { if ( preg_match( '#'.$data['rx'].'#i', $style, $match ) ) { if ( $data['match'] ) { if ( $data['tag'] != 'size' ) { $start_tags .= "[{$data['tag']}={$match[$data['match']]}]"; } else { $start_tags .= "[{$data['tag']}=" . $this->convert_realsize_to_bbsize($match[$data['match']]) ."]"; } } else { $start_tags .= "[{$data['tag']}]"; } $end_tags = "[/{$data['tag']}]" . $end_tags; } } } /*-------------------------------------------------------------------------*/ // Parse font tags /*-------------------------------------------------------------------------*/ /** * RTE: Parse FONT tag * * @param string Tag * @param string Text between opening and closing tag * @param string Opening tag complete * @param string Parse tag * @return string Converted text */ function _parse_font_tag( $tag, $between_text, $opening_tag, $parse_tag ) { $font_tags = array( 'font' => 'face', 'size' => 'size', 'color' => 'color' ); $start_tags = ""; $end_tags = ""; //----------------------------------------- // Check for attributes //----------------------------------------- foreach( $font_tags as $bbcode => $string ) { $option = $this->_get_value_of_option( $string, $opening_tag ); if ( $option ) { $start_tags .= "[$bbcode=\"$option\"]"; $end_tags = "[/$bbcode]" . $end_tags; if ( $this->debug == 2 ) { print "<br />Got bbcode=$bbcode / opening_tag=$opening_tag"; print "<br />- Adding [$bbcode=\"$option\"] [/$bbcode]"; print "<br />-- start tags now: {$start_tags}"; print "<br />-- end tags now: {$end_tags}"; } } } //----------------------------------------- // Now check for inline style moz may have // added //----------------------------------------- $this->_parse_style_attributes( $opening_tag, $start_tags, $end_tags ); return $start_tags . $this->_recurse_and_parse( 'font', $between_text, '_parse_font_tag' ) . $end_tags; } /*-------------------------------------------------------------------------*/ // Parse anchor tags /*-------------------------------------------------------------------------*/ /** * RTE: Simple tags * * @param string Tag * @param string Text between opening and closing tag * @param string Opening tag complete * @param string Parse tag * @return string Converted text */ function _parse_simple_tag( $tag, $between_text, $opening_tag, $parse_tag ) { if ( ! $parse_tag ) { $parse_tag = $tag; } return "[$parse_tag]".$this->_recurse_and_parse( $tag, $between_text, '_parse_simple_tag', $parse_tag )."[/$parse_tag]"; } /*-------------------------------------------------------------------------*/ // Parse simple tag /*-------------------------------------------------------------------------*/ /** * RTE: Parse A HREF tag * * @param string Tag * @param string Text between opening and closing tag * @param string Opening tag complete * @param string Parse tag * @return string Converted text
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?