From e019f2d0f2dc2fbfa345ab5d7ae85e67bfdd76b8 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Sat, 25 Sep 2010 09:03:53 -0400
Subject: [PATCH] - s/RoundCube/Roundcube/

---
 program/lib/utf8.class.php |   86 +++++++++++++++++++++----------------------
 1 files changed, 42 insertions(+), 44 deletions(-)

diff --git a/program/lib/utf8.class.php b/program/lib/utf8.class.php
index adcf31b..e0dc9e2 100644
--- a/program/lib/utf8.class.php
+++ b/program/lib/utf8.class.php
@@ -35,59 +35,50 @@
 */
 
 // Charset maps
-// Adapted to fit RoundCube
+// Adapted to fit Roundcube
 define("UTF8_MAP_DIR", "program/lib/encoding");
-$utf8_maps = array(
-  "CP1250" => UTF8_MAP_DIR . "/CP1250.map",
-  "CP1251" => UTF8_MAP_DIR . "/CP1251.map",
-  "CP1252" => UTF8_MAP_DIR . "/CP1252.map",
-  "CP1253" => UTF8_MAP_DIR . "/CP1253.map",
-  "CP1254" => UTF8_MAP_DIR . "/CP1254.map",
-  "CP1255" => UTF8_MAP_DIR . "/CP1255.map",
-  "CP1256" => UTF8_MAP_DIR . "/CP1256.map",
-  "CP1257" => UTF8_MAP_DIR . "/CP1257.map",
-  "CP1258" => UTF8_MAP_DIR . "/CP1258.map",
-  "ISO-8859-1" => UTF8_MAP_DIR . "/ISO-8859-1.map",
-  "ISO-8859-2" => UTF8_MAP_DIR . "/ISO-8859-2.map",
-  "ISO-8859-3" => UTF8_MAP_DIR . "/ISO-8859-3.map",
-  "ISO-8859-4" => UTF8_MAP_DIR . "/ISO-8859-4.map");
 
 //Error constants
-define("ERR_OPEN_MAP_FILE","ERR_OPEN_MAP_FILE");
+define("ERR_OPEN_MAP_FILE", "ERR_OPEN_MAP_FILE");
 
 //Class definition
-Class utf8{
+Class utf8 {
 
-  var $charset = CP1250;
+  var $charset = "ISO-8859-1";
   var $ascMap = array();
   var $utfMap = array();
-  
-  // made PHP5 capable by RoundCube
-  function __construct($charset="ISO-8859-1"){
+  var $aliases = array(
+    'KOI8-R' => 'KOI8R'
+  );
+  var $error = null;
+
+  function __construct($charset="ISO-8859-1") {
     $this->loadCharset($charset);
   }
   
-  //Constructor
-  function utf8($charset="ISO-8859-1"){
-    $this->__construct($charset);
-  }
-
   //Load charset
-  function loadCharset($charset){
-    global $utf8_maps;
+  function loadCharset($charset) {
     
-    if (!is_file($utf8_maps[$charset]))
-      {
-      $this->onError(ERR_OPEN_MAP_FILE, "Failed to open map file for $charset");
-      return;
-      }
+    $charset = preg_replace(array('/^WINDOWS-*125([0-8])$/', '/^CP-/'), array('CP125\\1', 'CP'), $charset);
+    if (isset($aliases[$charset]))
+      $charset = $aliases[$charset];
     
+    $this->charset = $charset;
+
     if (empty($this->ascMap[$charset]))
       {
-      $lines = file_get_contents($utf8_maps[$charset]);
+      $file = UTF8_MAP_DIR.'/'.$charset.'.map';
+    
+      if (!is_file($file)) {
+        $this->onError(ERR_OPEN_MAP_FILE, "Failed to open map file for $charset");
+        return;
+      }
+    
+      $lines = file_get_contents($file);
       $lines = preg_replace("/#.*$/m","",$lines);
       $lines = preg_replace("/\n\n/","",$lines);
       $lines = explode("\n",$lines);
+
       foreach($lines as $line){
         $parts = explode('0x',$line);
         if(count($parts)==3){
@@ -96,36 +87,42 @@
           $this->ascMap[$charset][$asc]=$utf;
         }
       }
+      
+      $this->utfMap = array_flip($this->ascMap[$charset]);
     }
-    
-    $this->charset = $charset;
-    $this->utfMap = array_flip($this->ascMap[$charset]);
   }
 
   //Error handler
   function onError($err_code,$err_text){
-    //print($err_code . " : " . $err_text . "<hr>\n");
-    raise_error(array('code' => 500,
-                      'file' => __FILE__,
-                      'message' => $err_text), TRUE, FALSE);
+    $this->error = $err_text;
+    return null;
   }
 
   //Translate string ($str) to UTF-8 from given charset
   function strToUtf8($str){
+    if (empty($this->ascMap[$this->charset]))
+      return null;
+
     $chars = unpack('C*', $str);
     $cnt = count($chars);
-    for($i=1;$i<=$cnt;$i++) $this->_charToUtf8($chars[$i]);
+    for($i=1; $i<=$cnt; $i++)
+      $this->_charToUtf8($chars[$i]);
+
     return implode("",$chars);
   }
 
   //Translate UTF-8 string to single byte string in the given charset
   function utf8ToStr($utf){
+    if (empty($this->ascMap[$this->charset]))
+      return null;
+
     $chars = unpack('C*', $utf);
     $cnt = count($chars);
     $res = ""; //No simple way to do it in place... concatenate char by char
-    for ($i=1;$i<=$cnt;$i++){
+
+    for ($i=1; $i<=$cnt; $i++)
       $res .= $this->_utf8ToChar($chars, $i);
-    }
+
     return $res;
   }
 
@@ -170,4 +167,5 @@
   }
 
 }
+
 ?>

--
Gitblit v1.9.1