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 + -
显示快捷键?