| | |
| | | * @access public |
| | | */ |
| | | var $callback_search = array( |
| | | '/<(a) [^>]*href=("|\')([^"\']+)\2[^>]*>(.*?)<\/a>/i', |
| | | // <a href=""> |
| | | '/<(h)[123456][^>]*>(.*?)<\/h[123456]>/i', // H1 - H3 |
| | | '/<(b)[^>]*>(.*?)<\/b>/i', // <b> |
| | | '/<(strong)[^>]*>(.*?)<\/strong>/i', // <strong> |
| | | '/<(th)[^>]*>(.*?)<\/th>/i', // <th> and </th> |
| | | '/<(a) [^>]*href=("|\')([^"\']+)\2[^>]*>(.*?)<\/a>/i', // <a href=""> |
| | | '/<(h)[123456]( [^>]*)?>(.*?)<\/h[123456]>/i', // h1 - h6 |
| | | '/<(b)( [^>]*)?>(.*?)<\/b>/i', // <b> |
| | | '/<(strong)( [^>]*)?>(.*?)<\/strong>/i', // <strong> |
| | | '/<(th)( [^>]*)?>(.*?)<\/th>/i', // <th> and </th> |
| | | ); |
| | | |
| | | /** |
| | |
| | | /** |
| | | * Contains URL addresses from links to be rendered in plain text. |
| | | * |
| | | * @var string $_link_list |
| | | * @var array $_link_list |
| | | * @access private |
| | | * @see _build_link_list() |
| | | */ |
| | | var $_link_list = ''; |
| | | |
| | | /** |
| | | * Number of valid links detected in the text, used for plain text |
| | | * display (rendered similar to footnotes). |
| | | * |
| | | * @var integer $_link_count |
| | | * @access private |
| | | * @see _build_link_list() |
| | | */ |
| | | var $_link_count = 0; |
| | | var $_link_list = array(); |
| | | |
| | | /** |
| | | * Boolean flag, true if a table of link URLs should be listed after the text. |
| | |
| | | function set_html( $source, $from_file = false ) |
| | | { |
| | | if ( $from_file && file_exists($source) ) { |
| | | $this->html = file_get_contents($source); |
| | | $this->html = file_get_contents($source); |
| | | } |
| | | else |
| | | $this->html = $source; |
| | |
| | | function _convert() |
| | | { |
| | | // Variables used for building the link list |
| | | $this->_link_count = 0; |
| | | $this->_link_list = ''; |
| | | $this->_link_list = array(); |
| | | |
| | | $text = trim(stripslashes($this->html)); |
| | | |
| | |
| | | $this->_converter($text); |
| | | |
| | | // Add link list |
| | | if ( !empty($this->_link_list) ) { |
| | | $text .= "\n\nLinks:\n------\n" . $this->_link_list; |
| | | if (!empty($this->_link_list)) { |
| | | $text .= "\n\nLinks:\n------\n"; |
| | | foreach ($this->_link_list as $idx => $url) { |
| | | $text .= '[' . ($idx+1) . '] ' . $url . "\n"; |
| | | } |
| | | } |
| | | |
| | | $this->text = $text; |
| | |
| | | */ |
| | | function _build_link_list( $link, $display ) |
| | | { |
| | | if ( !$this->_do_links ) |
| | | if (!$this->_do_links || empty($link)) { |
| | | return $display; |
| | | } |
| | | |
| | | if ( preg_match('!^(https?://|mailto:)!', $link) ) { |
| | | $this->_link_count++; |
| | | $this->_link_list .= '[' . $this->_link_count . "] $link\n"; |
| | | $additional = ' [' . $this->_link_count . ']'; |
| | | } elseif ( substr($link, 0, 11) == 'javascript:' ) { |
| | | // Don't count the link; ignore it |
| | | $additional = ''; |
| | | // what about href="#anchor" ? |
| | | } else { |
| | | $this->_link_count++; |
| | | $this->_link_list .= '[' . $this->_link_count . '] ' . $this->url; |
| | | if ( substr($link, 0, 1) != '/' ) { |
| | | $this->_link_list .= '/'; |
| | | } |
| | | $this->_link_list .= "$link\n"; |
| | | $additional = ' [' . $this->_link_count . ']'; |
| | | // Ignored link types |
| | | if (preg_match('!^(javascript:|mailto:|#)!i', $link)) { |
| | | return $display; |
| | | } |
| | | |
| | | return $display . $additional; |
| | | if (preg_match('!^([a-z][a-z0-9.+-]+:)!i', $link)) { |
| | | $url = $link; |
| | | } |
| | | else { |
| | | $url = $this->url; |
| | | if (substr($link, 0, 1) != '/') { |
| | | $url .= '/'; |
| | | } |
| | | $url .= "$link"; |
| | | } |
| | | |
| | | if (($index = array_search($url, $this->_link_list)) === false) { |
| | | $index = count($this->_link_list); |
| | | $this->_link_list[] = $url; |
| | | } |
| | | |
| | | return $display . ' [' . ($index+1) . ']'; |
| | | } |
| | | |
| | | /** |
| | |
| | | { |
| | | // get the content of PRE element |
| | | while (preg_match('/<pre[^>]*>(.*)<\/pre>/ismU', $text, $matches)) { |
| | | $this->pre_content = $matches[1]; |
| | | |
| | | // Run our defined tags search-and-replace with callback |
| | | $this->pre_content = preg_replace_callback($this->callback_search, |
| | | array('html2text', '_preg_callback'), $this->pre_content); |
| | | |
| | | // convert the content |
| | | $this->pre_content = sprintf('<div><br>%s<br></div>', |
| | | preg_replace($this->pre_search, $this->pre_replace, $matches[1])); |
| | | preg_replace($this->pre_search, $this->pre_replace, $this->pre_content)); |
| | | |
| | | // replace the content (use callback because content can contain $0 variable) |
| | | $text = preg_replace_callback('/<pre[^>]*>.*<\/pre>/ismU', |
| | | $text = preg_replace_callback('/<pre[^>]*>.*<\/pre>/ismU', |
| | | array('html2text', '_preg_pre_callback'), $text, 1); |
| | | |
| | | // free memory |
| | | $this->pre_content = ''; |
| | | } |
| | |
| | | */ |
| | | private function _preg_callback($matches) |
| | | { |
| | | switch($matches[1]) { |
| | | switch (strtolower($matches[1])) { |
| | | case 'b': |
| | | case 'strong': |
| | | return $this->_toupper($matches[2]); |
| | | return $this->_toupper($matches[3]); |
| | | case 'th': |
| | | return $this->_toupper("\t\t". $matches[2] ."\n"); |
| | | return $this->_toupper("\t\t". $matches[3] ."\n"); |
| | | case 'h': |
| | | return $this->_toupper("\n\n". $matches[2] ."\n\n"); |
| | | return $this->_toupper("\n\n". $matches[3] ."\n\n"); |
| | | case 'a': |
| | | // Remove spaces in URL (#1487805) |
| | | $url = str_replace(' ', '', $matches[3]); |