Require installing Gettext package from PEAR.
authorJan Schneider <jan@horde.org>
Mon, 19 Jan 2009 09:51:59 +0000 (10:51 +0100)
committerJan Schneider <jan@horde.org>
Mon, 19 Jan 2009 09:51:59 +0000 (10:51 +0100)
babel/lib/Gettext.php [deleted file]
babel/lib/Gettext/MO.php [deleted file]
babel/lib/Gettext/PO.php [deleted file]

diff --git a/babel/lib/Gettext.php b/babel/lib/Gettext.php
deleted file mode 100644 (file)
index 12b4019..0000000
+++ /dev/null
@@ -1,280 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * File::Gettext
- * 
- * PHP versions 4 and 5
- *
- * @category   FileFormats
- * @package    File_Gettext
- * @author     Michael Wallner <mike@php.net>
- * @copyright  2004-2005 Michael Wallner
- * @license    BSD, revised
- * @version    CVS: $Id: Gettext.php,v 1.7 2005/11/08 18:57:03 mike Exp $
- * @link       http://pear.php.net/package/File_Gettext
- */
-
-/**
- * Use PHPs builtin error messages
- */
-ini_set('track_errors', true);
-
-/** 
- * File_Gettext
- * 
- * GNU gettext file reader and writer.
- * 
- * #################################################################
- * # All protected members of this class are public in its childs. #
- * #################################################################
- *
- * @author      Michael Wallner <mike@php.net>
- * @version     $Revision: 1.7 $
- * @access      public
- */
-class File_Gettext
-{
-    /**
-     * strings
-     * 
-     * associative array with all [msgid => msgstr] entries
-     * 
-     * @access  protected
-     * @var     array
-    */
-    var $strings = array();
-    var $encstr = array();
-    var $refs = array();
-    var $status = array();
-    var $comments = array();
-    
-    /**
-     * meta
-     * 
-     * associative array containing meta 
-     * information like project name or content type
-     * 
-     * @access  protected
-     * @var     array
-     */
-    var $meta = array();
-    
-    /**
-     * file path
-     * 
-     * @access  protected
-     * @var     string
-     */
-    var $file = '';
-    
-    /**
-     * Factory
-     *
-     * @static
-     * @access  public
-     * @return  object  Returns File_Gettext_PO or File_Gettext_MO on success 
-     *                  or PEAR_Error on failure.
-     * @param   string  $format MO or PO
-     * @param   string  $file   path to GNU gettext file
-     */
-    function &factory($format, $file = '')
-    {
-        $format = strToUpper($format);
-        if (!@include_once 'File/Gettext/' . $format . '.php') {
-            return File_Gettext::raiseError($php_errormsg);
-        }
-        $class = 'File_Gettext_' . $format;
-        $obref = &new $class($file);
-        return $obref;
-    }
-
-    /**
-     * poFile2moFile
-     *
-     * That's a simple fake of the 'msgfmt' console command.  It reads the
-     * contents of a GNU PO file and saves them to a GNU MO file.
-     * 
-     * @static
-     * @access  public
-     * @return  mixed   Returns true on success or PEAR_Error on failure.
-     * @param   string  $pofile path to GNU PO file
-     * @param   string  $mofile path to GNU MO file
-     */
-    function poFile2moFile($pofile, $mofile)
-    {
-        if (!is_file($pofile)) {
-            return File_Gettext::raiseError("File $pofile doesn't exist.");
-        }
-        
-        include_once 'File/Gettext/PO.php';
-        
-        $PO = &new File_Gettext_PO($pofile);
-        if (true !== ($e = $PO->load())) {
-            return $e;
-        }
-        
-        $MO = &$PO->toMO();
-        if (true !== ($e = $MO->save($mofile))) {
-            return $e;
-        }
-        unset($PO, $MO);
-        
-        return true;
-    }
-    
-    /**
-     * prepare
-     *
-     * @static
-     * @access  protected
-     * @return  string
-     * @param   string  $string
-     * @param   bool    $reverse
-     */
-    function prepare($string, $reverse = false)
-    {
-        if ($reverse) {
-            $smap = array('"', "\n", "\t", "\r");
-            $rmap = array('\\"', '\\n"' . "\n" . '"', '\\t', '\\r');
-            return (string) str_replace($smap, $rmap, $string);
-        } else {
-            $smap = array('/"\s+"/', '/\\\\n/', '/\\\\r/', '/\\\\t/', '/\\\\"/');
-            $rmap = array('', "\n", "\r", "\t", '"');
-            return (string) preg_replace($smap, $rmap, $string);
-        }
-    }
-    
-    /**
-     * meta2array
-     *
-     * @static
-     * @access  public
-     * @return  array
-     * @param   string  $meta
-     */
-    function meta2array($meta)
-    {
-        $array = array();
-        foreach (explode("\n", $meta) as $info) {
-            if ($info = trim($info)) {
-                list($key, $value) = explode(':', $info, 2);
-                $array[trim($key)] = trim($value);
-            }
-        }
-        return $array;
-    }
-
-    /**
-     * toArray
-     * 
-     * Returns meta info and strings as an array of a structure like that:
-     * <code>
-     *   array(
-     *       'meta' => array(
-     *           'Content-Type'      => 'text/plain; charset=iso-8859-1',
-     *           'Last-Translator'   => 'Michael Wallner <mike@iworks.at>',
-     *           'PO-Revision-Date'  => '2004-07-21 17:03+0200',
-     *           'Language-Team'     => 'German <mail@example.com>',
-     *       ),
-     *       'strings' => array(
-     *           'All rights reserved'   => 'Alle Rechte vorbehalten',
-     *           'Welcome'               => 'Willkommen',
-     *           // ...
-     *       )
-     *   )
-     * </code>
-     * 
-     * @see     fromArray()
-     * @access  protected
-     * @return  array
-     */
-    function toArray()
-    {
-       return array('meta' => $this->meta, 'strings' => $this->strings);
-    }
-    
-    /**
-     * fromArray
-     * 
-     * Assigns meta info and strings from an array of a structure like that:
-     * <code>
-     *   array(
-     *       'meta' => array(
-     *           'Content-Type'      => 'text/plain; charset=iso-8859-1',
-     *           'Last-Translator'   => 'Michael Wallner <mike@iworks.at>',
-     *           'PO-Revision-Date'  => date('Y-m-d H:iO'),
-     *           'Language-Team'     => 'German <mail@example.com>',
-     *       ),
-     *       'strings' => array(
-     *           'All rights reserved'   => 'Alle Rechte vorbehalten',
-     *           'Welcome'               => 'Willkommen',
-     *           // ...
-     *       )
-     *   )
-     * </code>
-     * 
-     * @see     toArray()
-     * @access  protected
-     * @return  bool
-     * @param   array       $array
-     */
-    function fromArray($array)
-    {
-       if (!array_key_exists('strings', $array)) {
-           if (count($array) != 2) {
-                return false;
-           } else {
-               list($this->meta, $this->strings) = $array;
-            }
-       } else {
-            $this->meta = @$array['meta'];
-            $this->strings = @$array['strings'];
-        }
-        return true;
-    }
-    
-    /**
-     * toMO
-     *
-     * @access  protected
-     * @return  object  File_Gettext_MO
-     */
-    function &toMO()
-    {
-        include_once 'File/Gettext/MO.php';
-        $MO = &new File_Gettext_MO;
-        $MO->fromArray($this->toArray());
-        return $MO;
-    }
-    
-    /**
-     * toPO
-     *
-     * @access  protected
-     * @return  object      File_Gettext_PO
-     */
-    function &toPO()
-    {
-        include_once 'File/Gettext/PO.php';
-        $PO = &new File_Gettext_PO;
-        $PO->fromArray($this->toArray());
-        return $PO;
-    }
-    
-    /**
-     * Raise PEAR error
-     *
-     * @static
-     * @access  protected
-     * @return  object
-     * @param   string  $error
-     * @param   int     $code
-     */
-    function raiseError($error = null, $code = null)
-    {
-        include_once 'PEAR.php';
-        return PEAR::raiseError($error, $code);
-    }
-}
-?>
diff --git a/babel/lib/Gettext/MO.php b/babel/lib/Gettext/MO.php
deleted file mode 100644 (file)
index 521b489..0000000
+++ /dev/null
@@ -1,331 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * File::Gettext
- * 
- * PHP versions 4 and 5
- *
- * @category   FileFormats
- * @package    File_Gettext
- * @author     Michael Wallner <mike@php.net>
- * @copyright  2004-2005 Michael Wallner
- * @license    BSD, revised
- * @version    CVS: $Id: MO.php,v 1.8 2006/01/07 09:45:25 mike Exp $
- * @link       http://pear.php.net/package/File_Gettext
- */
-
-/**
- * Requires File_Gettext
- */
-require_once 'File/Gettext.php';
-
-/** 
- * File_Gettext_MO
- * 
- * GNU MO file reader and writer.
- *
- * @author      Michael Wallner <mike@php.net>
- * @version     $Revision: 1.8 $
- * @access      public
- */
-class File_Gettext_MO extends File_Gettext
-{
-    /**
-     * file handle
-     * 
-     * @access  private
-     * @var     resource
-     */
-    var $_handle = null;
-    
-    /**
-     * big endianess
-     * 
-     * Whether to write with big endian byte order.
-     * 
-     * @access  public
-     * @var     bool
-     */
-    var $writeBigEndian = false;
-    
-    /**
-     * Constructor
-     *
-     * @access  public
-     * @return  object      File_Gettext_MO
-     * @param   string      $file   path to GNU MO file
-     */
-    function File_Gettext_MO($file = '')
-    {
-        $this->file = $file;
-    }
-
-    /**
-     * _read
-     *
-     * @access  private
-     * @return  mixed
-     * @param   int     $bytes
-     */
-    function _read($bytes = 1)
-    {
-        if (0 < $bytes = abs($bytes)) {
-            return fread($this->_handle, $bytes);
-        }
-        return null;
-    }
-    
-    /**
-     * _readInt
-     *
-     * @access  private
-     * @return  int
-     * @param   bool    $bigendian
-     */
-    function _readInt($bigendian = false)
-    {
-        return current($array = unpack($bigendian ? 'N' : 'V', $this->_read(4)));
-    }
-    
-    /**
-     * _writeInt
-     *
-     * @access  private
-     * @return  int
-     * @param   int     $int
-     */
-    function _writeInt($int)
-    {
-        return $this->_write(pack($this->writeBigEndian ? 'N' : 'V', (int) $int));
-    }
-    
-    /**
-     * _write
-     *
-     * @access  private
-     * @return  int
-     * @param   string  $data
-     */
-    function _write($data)
-    {
-        return fwrite($this->_handle, $data);
-    }
-    
-    /**
-     * _writeStr
-     *
-     * @access  private
-     * @return  int
-     * @param   string  $string
-     */
-    function _writeStr($string)
-    {
-        return $this->_write($string . "\0");
-    }
-    
-    /**
-     * _readStr
-     *
-     * @access  private
-     * @return  string
-     * @param   array   $params     associative array with offset and length 
-     *                              of the string
-     */
-    function _readStr($params)
-    {
-        fseek($this->_handle, $params['offset']);
-        return $this->_read($params['length']);
-    }
-    
-    /**
-     * Load MO file
-     *
-     * @access   public
-     * @return   mixed   Returns true on success or PEAR_Error on failure.
-     * @param    string  $file
-     */
-    function load($file = null)
-    {
-        $this->strings = array();
-        
-        if (!isset($file)) {
-            $file = $this->file;
-        }
-        
-        // open MO file
-        if (!is_resource($this->_handle = @fopen($file, 'rb'))) {
-            return parent::raiseError($php_errormsg . ' ' . $file);
-        }
-        // lock MO file shared
-        if (!@flock($this->_handle, LOCK_SH)) {
-            @fclose($this->_handle);
-            return parent::raiseError($php_errormsg . ' ' . $file);
-        }
-        
-        // read (part of) magic number from MO file header and define endianess
-        switch ($magic = current($array = unpack('c', $this->_read(4))))
-        {
-            case -34:
-                $be = false;
-            break;
-            
-            case -107:
-                $be = true;
-            break;
-            
-            default:
-                return parent::raiseError("No GNU mo file: $file (magic: $magic)");
-        }
-
-        // check file format revision - we currently only support 0
-        if (0 !== ($_rev = $this->_readInt($be))) {
-            return parent::raiseError('Invalid file format revision: ' . $_rev);
-        }
-       
-        // count of strings in this file
-        $count = $this->_readInt($be);
-        
-        // offset of hashing table of the msgids
-        $offset_original = $this->_readInt($be);
-        // offset of hashing table of the msgstrs
-        $offset_translat = $this->_readInt($be);
-        
-        // move to msgid hash table
-        fseek($this->_handle, $offset_original);
-        // read lengths and offsets of msgids
-        $original = array();
-        for ($i = 0; $i < $count; $i++) {
-            $original[$i] = array(
-                'length' => $this->_readInt($be),
-                'offset' => $this->_readInt($be)
-            );
-        }
-        
-        // move to msgstr hash table
-        fseek($this->_handle, $offset_translat);
-        // read lengths and offsets of msgstrs
-        $translat = array();
-        for ($i = 0; $i < $count; $i++) {
-            $translat[$i] = array(
-                'length' => $this->_readInt($be),
-                'offset' => $this->_readInt($be)
-            );
-        }
-        
-        // read all
-        for ($i = 0; $i < $count; $i++) {
-            $this->strings[$this->_readStr($original[$i])] = 
-                $this->_readStr($translat[$i]);
-        }
-        
-        // done
-        @flock($this->_handle, LOCK_UN);
-        @fclose($this->_handle);
-        $this->_handle = null;
-        
-        // check for meta info
-        if (isset($this->strings[''])) {
-            $this->meta = parent::meta2array($this->strings['']);
-            unset($this->strings['']);
-        }
-        
-        return true;
-    }
-    
-    /**
-     * Save MO file
-     *
-     * @access  public
-     * @return  mixed   Returns true on success or PEAR_Error on failure.
-     * @param   string  $file
-     */
-    function save($file = null)
-    {
-        if (!isset($file)) {
-            $file = $this->file;
-        }
-        
-        // open MO file
-        if (!is_resource($this->_handle = @fopen($file, 'wb'))) {
-            return parent::raiseError($php_errormsg . ' ' . $file);
-        }
-        // lock MO file exclusively
-        if (!@flock($this->_handle, LOCK_EX)) {
-            @fclose($this->_handle);
-            return parent::raiseError($php_errormsg . ' ' . $file);
-        }
-        
-        // write magic number
-        if ($this->writeBigEndian) {
-            $this->_write(pack('c*', 0x95, 0x04, 0x12, 0xde));
-        } else {
-            $this->_write(pack('c*', 0xde, 0x12, 0x04, 0x95));
-        }
-        
-        // write file format revision
-        $this->_writeInt(0);
-        
-        $count = count($this->strings) + ($meta = (count($this->meta) ? 1 : 0));
-        // write count of strings
-        $this->_writeInt($count);
-        
-        $offset = 28;
-        // write offset of orig. strings hash table
-        $this->_writeInt($offset);
-        
-        $offset += ($count * 8);
-        // write offset transl. strings hash table
-        $this->_writeInt($offset);
-        
-        // write size of hash table (we currently ommit the hash table)
-        $this->_writeInt(0);
-        
-        $offset += ($count * 8);
-        // write offset of hash table
-        $this->_writeInt($offset);
-        
-        // unshift meta info
-        if ($meta) {
-            $meta = '';
-            foreach ($this->meta as $key => $val) {
-                $meta .= $key . ': ' . $val . "\n";
-            }
-            $strings = array('' => $meta) + $this->strings;
-        } else {
-            $strings = $this->strings;
-        }
-        
-        // write offsets for original strings
-        foreach (array_keys($strings) as $o) {
-            $len = strlen($o);
-            $this->_writeInt($len);
-            $this->_writeInt($offset);
-            $offset += $len + 1;
-        }
-        
-        // write offsets for translated strings
-        foreach ($strings as $t) {
-            $len = strlen($t);
-            $this->_writeInt($len);
-            $this->_writeInt($offset);
-            $offset += $len + 1;
-        }
-
-        // write original strings
-        foreach (array_keys($strings) as $o) {
-            $this->_writeStr($o);
-        }
-
-        // write translated strings
-        foreach ($strings as $t) {
-            $this->_writeStr($t);
-        }
-        
-        // done
-        @flock($this->_handle, LOCK_UN);
-        @fclose($this->_handle);
-        return true;
-    }
-}
-?>
diff --git a/babel/lib/Gettext/PO.php b/babel/lib/Gettext/PO.php
deleted file mode 100644 (file)
index e682f38..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
-
-/**
- * File::Gettext
- * 
- * PHP versions 4 and 5
- *
- * @category   FileFormats
- * @package    File_Gettext
- * @author     Michael Wallner <mike@php.net>
- * @copyright  2004-2005 Michael Wallner
- * @license    BSD, revised
- * @version    CVS: $Id: PO.php,v 1.6 2006/01/07 09:45:25 mike Exp $
- * @link       http://pear.php.net/package/File_Gettext
- */
-
-/**
- * Requires File_Gettext
- */
-require_once dirname(__FILE__) . '/../Gettext.php';
-
-/** 
- * File_Gettext_PO
- *
- * GNU PO file reader and writer.
- * 
- * @author      Michael Wallner <mike@php.net>
- * @version     $Revision: 1.6 $
- * @access      public
- */
-class File_Gettext_PO extends File_Gettext
-{
-    /**
-     * Constructor
-     *
-     * @access  public
-     * @return  object      File_Gettext_PO
-     * @param   string      path to GNU PO file
-     */
-    function File_Gettext_PO($file = '')
-    {
-        $this->file = $file;
-    }
-
-    /**
-     * Load PO file
-     *
-     * @access  public
-     * @return  mixed   Returns true on success or PEAR_Error on failure.
-     * @param   string  $file
-     */
-    function load($file = null)
-    {
-        $this->strings = array();
-        
-        if (!isset($file)) {
-            $file = $this->file;
-        }
-        
-        // load file
-        if (!$contents = @file($file)) {
-            return parent::raiseError($php_errormsg . ' ' . $file);
-        }
-       
-        $contents = explode("\n", implode('', $contents));
-       
-       $state = 0;
-       $comment = '';
-       
-       foreach($contents as $line) {
-           if( substr($line,0,1) == "#" ) {
-               $comment .= "$line\r\n";
-               continue;
-           }
-           
-           switch($state) {
-            case 0:
-               if( preg_match( '/^msgid\s+"(.*)"/', $line, $container ) ) {
-                   $state = 1;
-                   $msgid = $container[1];
-                   continue;
-               }
-               break;
-               
-            case 1:
-               if( preg_match( '/^msgstr\s+"(.*)"/', $line, $container ) ) {
-                   $msgstr = $container[1];
-                   $state = 2;
-               } else {
-                   $line = preg_replace( '/^"|"$/', "", $line );
-                   $msgid .= $line;
-               }
-               continue;
-               break;
-               
-            case 2:
-               if( preg_match( '/^\s*$/', $line ) ) {
-                   if( $msgid != "" ) {
-                       $this->status[parent::prepare($msgid)] = $this->status2array($comment);
-                       $this->ref[parent::prepare($msgid)] = $this->ref2array($comment);
-                       
-                       // $msgid = @preg_replace('/\s*msgid\s*"(.*)"\s*/s', '\\1', $matches[1][$i]);
-                       // $msgstr= @preg_replace('/\s*msgstr\s*"(.*)"\s*/s', '\\1', $matches[4][$i]);
-                       
-                       if( $msgstr == "" ) {
-                           $this->status[parent::prepare($msgid)][] = 'untranslated';
-                       } elseif (!in_array('fuzzy', $this->status[parent::prepare($msgid)])) {
-                           $this->status[parent::prepare($msgid)][] = 'translated';
-                       }
-
-                       $this->strings[parent::prepare($msgid)] = parent::prepare($msgstr);
-                       $this->encstr[base64_encode(parent::prepare($msgid))] = parent::prepare($msgid);
-                       $comment = preg_replace('/\r/', '', $comment);
-                       $this->comments[parent::prepare($msgid)] = $comment;
-
-                   } else {
-                       $this->meta = parent::meta2array(parent::prepare($msgstr));
-                   }
-                   $comment = "";
-                   $state = 0;
-               } else {
-                   $line = preg_replace( '/^"|"$/', "", $line );
-                   $msgstr .= $line;
-               }
-               break;
-           }
-       }
-
-        return true;
-    }
-
-    
-    function status2array($comment) {
-       $status = array();
-       $comment = explode("\n", $comment);
-       foreach($comment as $c) {
-           if (preg_match('/#,\s(.*)/', $c, $matches)) {
-               $st = preg_split('/,/', trim($matches[1]));
-               foreach($st as $s) {
-                   $status[] = trim($s);
-               }
-           }
-       }
-       return $status;
-    }
-    
-    function ref2array($comment) {
-       $refs = array();
-       $comment = explode("\n", $comment);
-       foreach($comment as $c) {
-           if (preg_match('/#:\s(.*)/', $c, $matches)) {
-               $st = preg_split('/\s/', trim($matches[1]));
-               foreach($st as $s) {
-                   $refs[] = trim($s);
-               }
-           }
-       }
-       return $refs;
-    }
-    
-    /**
-     * Save PO file
-     *
-     * @access  public
-     * @return  mixed   Returns true on success or PEAR_Error on failure.
-     * @param   string  $file
-     */
-    function save($file = null)
-    {
-        if (!isset($file)) {
-            $file = $this->file;
-        }
-        
-        // open PO file
-        if (!is_resource($fh = @fopen($file, 'w'))) {
-            return parent::raiseError($php_errormsg . ' ' . $file);
-        }
-        // lock PO file exclusively
-        if (!@flock($fh, LOCK_EX)) {
-            @fclose($fh);
-            return parent::raiseError($php_errmsg . ' ' . $file);
-        }
-        
-        // write meta info
-        if (count($this->meta)) {
-            $meta = 'msgid ""' . "\nmsgstr " . '""' . "\n";
-            foreach ($this->meta as $k => $v) {
-                $meta .= '"' . $k . ': ' . $v . '\n"' . "\n";
-            }
-            fwrite($fh, $meta . "\n");
-        }
-        // write strings
-        foreach ($this->strings as $o => $t) {
-           $c = @$this->comments[$o];
-            fwrite($fh,
-                $c . "\n" .
-                'msgid "'  . parent::prepare($o, true) . '"' . "\n" .
-                'msgstr "' . parent::prepare($t, true) . '"' . "\n\n"
-            );
-        }
-        
-        //done
-        @flock($fh, LOCK_UN);
-        @fclose($fh);
-        return true;
-    }
-}
-?>