From ae529bfd53296d17e71f3db9af3767c00330a2f4 Mon Sep 17 00:00:00 2001 From: Jan Schneider Date: Mon, 19 Jan 2009 10:51:59 +0100 Subject: [PATCH] Require installing Gettext package from PEAR. --- babel/lib/Gettext.php | 280 --------------------------------------- babel/lib/Gettext/MO.php | 331 ----------------------------------------------- babel/lib/Gettext/PO.php | 209 ------------------------------ 3 files changed, 820 deletions(-) delete mode 100644 babel/lib/Gettext.php delete mode 100644 babel/lib/Gettext/MO.php delete mode 100644 babel/lib/Gettext/PO.php diff --git a/babel/lib/Gettext.php b/babel/lib/Gettext.php deleted file mode 100644 index 12b401901..000000000 --- a/babel/lib/Gettext.php +++ /dev/null @@ -1,280 +0,0 @@ - - * @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 - * @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: - * - * array( - * 'meta' => array( - * 'Content-Type' => 'text/plain; charset=iso-8859-1', - * 'Last-Translator' => 'Michael Wallner ', - * 'PO-Revision-Date' => '2004-07-21 17:03+0200', - * 'Language-Team' => 'German ', - * ), - * 'strings' => array( - * 'All rights reserved' => 'Alle Rechte vorbehalten', - * 'Welcome' => 'Willkommen', - * // ... - * ) - * ) - * - * - * @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: - * - * array( - * 'meta' => array( - * 'Content-Type' => 'text/plain; charset=iso-8859-1', - * 'Last-Translator' => 'Michael Wallner ', - * 'PO-Revision-Date' => date('Y-m-d H:iO'), - * 'Language-Team' => 'German ', - * ), - * 'strings' => array( - * 'All rights reserved' => 'Alle Rechte vorbehalten', - * 'Welcome' => 'Willkommen', - * // ... - * ) - * ) - * - * - * @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 index 521b489b8..000000000 --- a/babel/lib/Gettext/MO.php +++ /dev/null @@ -1,331 +0,0 @@ - - * @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 - * @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 index e682f384c..000000000 --- a/babel/lib/Gettext/PO.php +++ /dev/null @@ -1,209 +0,0 @@ - - * @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 - * @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; - } -} -?> -- 2.11.0