thomascube
2010-10-06 2fe8d6bdebbaa160ee062b18e78fe7e77b430e00
program/lib/html2text.php
@@ -148,7 +148,6 @@
        '/[ ]{2,}/',                             // Runs of spaces, pre-handling
        '/<script[^>]*>.*?<\/script>/i',         // <script>s -- which strip_tags supposedly has problems with
        '/<style[^>]*>.*?<\/style>/i',           // <style>s -- which strip_tags supposedly has problems with
        //'/<!-- .* -->/',                         // Comments -- which strip_tags might have problem a with
        '/<p[^>]*>/i',                           // <P>
        '/<br[^>]*>/i',                          // <br>
        '/<i[^>]*>(.*?)<\/i>/i',                 // <i>
@@ -158,6 +157,7 @@
        '/<li[^>]*>(.*?)<\/li>/i',               // <li> and </li>
        '/<li[^>]*>/i',                          // <li>
        '/<hr[^>]*>/i',                          // <hr>
        '/<div[^>]*>/i',                         // <div>
        '/(<table[^>]*>|<\/table>)/i',           // <table> and </table>
        '/(<tr[^>]*>|<\/tr>)/i',                 // <tr> and </tr>
        '/<td[^>]*>(.*?)<\/td>/i',               // <td> and </td>
@@ -192,8 +192,7 @@
        ' ',                                    // Runs of spaces, pre-handling
        '',                                     // <script>s -- which strip_tags supposedly has problems with
        '',                                     // <style>s -- which strip_tags supposedly has problems with
        //'',                                     // Comments -- which strip_tags might have problem a with
        "\n\n",                               // <P>
        "\n\n",                                 // <P>
        "\n",                                   // <br>
        '_\\1_',                                // <i>
        '_\\1_',                                // <em>
@@ -201,8 +200,9 @@
        "\n\n",                                 // <ol> and </ol>
        "\t* \\1\n",                            // <li> and </li>
        "\n\t* ",                               // <li>
       "\n-------------------------\n",        // <hr>
       "\n\n",                                 // <table> and </table>
        "\n-------------------------\n",        // <hr>
        "<div>\n",                                   // <div>
        "\n\n",                                 // <table> and </table>
        "\n",                                   // <tr> and </tr>
        "\t\t\\1\n",                            // <td> and </td>
        ' ',                                    // Non-breaking space
@@ -247,11 +247,11 @@
    *  @see $pre_replace
    */
    var $pre_search = array(
   "/\n/",
   "/\t/",
   '/ /',
   '/<pre[^>]*>/',
   '/<\/pre>/'
        "/\n/",
        "/\t/",
        '/ /',
        '/<pre[^>]*>/',
        '/<\/pre>/'
    );
    /**
@@ -262,11 +262,11 @@
     *  @see $pre_search
     */
    var $pre_replace = array(
   '<br>',
   '&nbsp;&nbsp;&nbsp;&nbsp;',
   '&nbsp;',
   '',
   ''
        '<br>',
        '&nbsp;&nbsp;&nbsp;&nbsp;',
        '&nbsp;',
        '',
        ''
    );
    /**
@@ -342,10 +342,10 @@
        if ( !empty($source) ) {
            $this->set_html($source, $from_file);
        }
        $this->set_base_url();
   $this->_do_links = $do_links;
   $this->width = $width;
        $this->_do_links = $do_links;
        $this->width = $width;
    }
    /**
@@ -359,10 +359,10 @@
    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;
            $this->html = $source;
        $this->_converted = false;
    }
@@ -463,18 +463,20 @@
        $text = trim(stripslashes($this->html));
   // Convert <PRE>
        // Convert <PRE>
        $this->_convert_pre($text);
        // Run our defined search-and-replace
        $text = preg_replace($this->search, $this->replace, $text);
        // Replace known html entities
        $text = html_entity_decode($text, ENT_COMPAT, 'UTF-8');
        // Run our defined search-and-replace with callback
        $text = preg_replace_callback($this->callback_search, array('html2text', '_preg_callback'), $text);
   // Replace known html entities
   $text = html_entity_decode($text, ENT_COMPAT, 'UTF-8');
        // Remove unknown/unhandled entities (this cannot be done in search-and-replace block)
        $text = preg_replace('/&[^&;]+;/i', '', $text);
        $text = preg_replace('/&#?[a-z0-9]{2,7};/i', '', $text);
        // Strip any other HTML tags
        $text = strip_tags($text, $this->allowed_tags);
@@ -522,9 +524,9 @@
            $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 = '';
   } elseif ( substr($link, 0, 11) == 'javascript:' ) {
      // Don't count the link; ignore it
      $additional = '';
      // what about href="#anchor" ?
        } else {
            $this->_link_count++;
@@ -547,11 +549,10 @@
     */
    function _convert_pre(&$text)
    {
   while(preg_match('/<pre[^>]*>(.*)<\/pre>/ismU', $text, $matches))
   {
       $result = preg_replace($this->pre_search, $this->pre_replace, $matches[1]);
       $text = preg_replace('/<pre[^>]*>.*<\/pre>/ismU', '<div><br>' . $result . '<br></div>', $text, 1);
   }
        while(preg_match('/<pre[^>]*>(.*)<\/pre>/ismU', $text, $matches)) {
            $result = preg_replace($this->pre_search, $this->pre_replace, $matches[1]);
            $text = preg_replace('/<pre[^>]*>.*<\/pre>/ismU', '<div><br>' . $result . '<br></div>', $text, 1);
        }
    }
    /**
@@ -563,18 +564,17 @@
     */
    function _preg_callback($matches)
    {
   switch($matches[1])
   {
       case 'b':
       case 'strong':
      return $this->_strtoupper($matches[2]);
       case 'hr':
      return $this->_strtoupper("\t\t". $matches[2] ."\n");
       case 'h':
      return $this->_strtoupper("\n\n". $matches[2] ."\n\n");
       case 'a':
               return $this->_build_link_list($matches[3], $matches[4]);
   }
        switch($matches[1]) {
        case 'b':
        case 'strong':
            return $this->_strtoupper($matches[2]);
        case 'th':
            return $this->_strtoupper("\t\t". $matches[2] ."\n");
        case 'h':
            return $this->_strtoupper("\n\n". $matches[2] ."\n\n");
        case 'a':
            return $this->_build_link_list($matches[3], $matches[4]);
        }
    }
    
    /**
@@ -586,10 +586,10 @@
     */
    function _strtoupper($str)
    {
   if (function_exists('mb_strtoupper'))
           return mb_strtoupper($str);
       else
       return strtoupper($str);
        if (function_exists('mb_strtoupper'))
            return mb_strtoupper($str);
        else
            return strtoupper($str);
    }
}