Remove 3rd party libs from our repository and define the dependencies in composer.json-dist.
Also remove the ancient utf8 lib and replace it with 'Patchwork UTF-8 for PHP'. For direct git checkouts, copy composer.json-dist into composer.json and run `php composer.phar install` to install the dependencies.pull/215/head
parent
812f37c5d1
commit
a98a4f8bb5
@ -1,125 +0,0 @@
|
|||||||
<?php
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
// | Copyright (c) 2002-2003 Richard Heyes |
|
|
||||||
// | All rights reserved. |
|
|
||||||
// | |
|
|
||||||
// | Redistribution and use in source and binary forms, with or without |
|
|
||||||
// | modification, are permitted provided that the following conditions |
|
|
||||||
// | are met: |
|
|
||||||
// | |
|
|
||||||
// | o Redistributions of source code must retain the above copyright |
|
|
||||||
// | notice, this list of conditions and the following disclaimer. |
|
|
||||||
// | o Redistributions in binary form must reproduce the above copyright |
|
|
||||||
// | notice, this list of conditions and the following disclaimer in the |
|
|
||||||
// | documentation and/or other materials provided with the distribution.|
|
|
||||||
// | o The names of the authors may not be used to endorse or promote |
|
|
||||||
// | products derived from this software without specific prior written |
|
|
||||||
// | permission. |
|
|
||||||
// | |
|
|
||||||
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
|
||||||
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
|
||||||
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
|
||||||
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
|
||||||
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
|
||||||
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
|
||||||
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
|
||||||
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
|
||||||
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
|
||||||
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
|
||||||
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
|
||||||
// | |
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
// | Author: Richard Heyes <richard@php.net> |
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Client implementation of various SASL mechanisms
|
|
||||||
*
|
|
||||||
* @author Richard Heyes <richard@php.net>
|
|
||||||
* @access public
|
|
||||||
* @version 1.0
|
|
||||||
* @package Auth_SASL
|
|
||||||
*/
|
|
||||||
|
|
||||||
require_once('PEAR.php');
|
|
||||||
|
|
||||||
class Auth_SASL
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Factory class. Returns an object of the request
|
|
||||||
* type.
|
|
||||||
*
|
|
||||||
* @param string $type One of: Anonymous
|
|
||||||
* Plain
|
|
||||||
* CramMD5
|
|
||||||
* DigestMD5
|
|
||||||
* SCRAM-* (any mechanism of the SCRAM family)
|
|
||||||
* Types are not case sensitive
|
|
||||||
*/
|
|
||||||
function &factory($type)
|
|
||||||
{
|
|
||||||
switch (strtolower($type)) {
|
|
||||||
case 'anonymous':
|
|
||||||
$filename = 'Auth/SASL/Anonymous.php';
|
|
||||||
$classname = 'Auth_SASL_Anonymous';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'login':
|
|
||||||
$filename = 'Auth/SASL/Login.php';
|
|
||||||
$classname = 'Auth_SASL_Login';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'plain':
|
|
||||||
$filename = 'Auth/SASL/Plain.php';
|
|
||||||
$classname = 'Auth_SASL_Plain';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'external':
|
|
||||||
$filename = 'Auth/SASL/External.php';
|
|
||||||
$classname = 'Auth_SASL_External';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'crammd5':
|
|
||||||
// $msg = 'Deprecated mechanism name. Use IANA-registered name: CRAM-MD5.';
|
|
||||||
// trigger_error($msg, E_USER_DEPRECATED);
|
|
||||||
case 'cram-md5':
|
|
||||||
$filename = 'Auth/SASL/CramMD5.php';
|
|
||||||
$classname = 'Auth_SASL_CramMD5';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'digestmd5':
|
|
||||||
// $msg = 'Deprecated mechanism name. Use IANA-registered name: DIGEST-MD5.';
|
|
||||||
// trigger_error($msg, E_USER_DEPRECATED);
|
|
||||||
case 'digest-md5':
|
|
||||||
// $msg = 'DIGEST-MD5 is a deprecated SASL mechanism as per RFC-6331. Using it could be a security risk.';
|
|
||||||
// trigger_error($msg, E_USER_NOTICE);
|
|
||||||
$filename = 'Auth/SASL/DigestMD5.php';
|
|
||||||
$classname = 'Auth_SASL_DigestMD5';
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
$scram = '/^SCRAM-(.{1,9})$/i';
|
|
||||||
if (preg_match($scram, $type, $matches))
|
|
||||||
{
|
|
||||||
$hash = $matches[1];
|
|
||||||
$filename = dirname(__FILE__) .'/SASL/SCRAM.php';
|
|
||||||
$classname = 'Auth_SASL_SCRAM';
|
|
||||||
$parameter = $hash;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return PEAR::raiseError('Invalid SASL mechanism type');
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
require_once($filename);
|
|
||||||
if (isset($parameter))
|
|
||||||
$obj = new $classname($parameter);
|
|
||||||
else
|
|
||||||
$obj = new $classname();
|
|
||||||
return $obj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
@ -1,71 +0,0 @@
|
|||||||
<?php
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
// | Copyright (c) 2002-2003 Richard Heyes |
|
|
||||||
// | All rights reserved. |
|
|
||||||
// | |
|
|
||||||
// | Redistribution and use in source and binary forms, with or without |
|
|
||||||
// | modification, are permitted provided that the following conditions |
|
|
||||||
// | are met: |
|
|
||||||
// | |
|
|
||||||
// | o Redistributions of source code must retain the above copyright |
|
|
||||||
// | notice, this list of conditions and the following disclaimer. |
|
|
||||||
// | o Redistributions in binary form must reproduce the above copyright |
|
|
||||||
// | notice, this list of conditions and the following disclaimer in the |
|
|
||||||
// | documentation and/or other materials provided with the distribution.|
|
|
||||||
// | o The names of the authors may not be used to endorse or promote |
|
|
||||||
// | products derived from this software without specific prior written |
|
|
||||||
// | permission. |
|
|
||||||
// | |
|
|
||||||
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
|
||||||
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
|
||||||
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
|
||||||
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
|
||||||
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
|
||||||
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
|
||||||
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
|
||||||
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
|
||||||
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
|
||||||
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
|
||||||
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
|
||||||
// | |
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
// | Author: Richard Heyes <richard@php.net> |
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implmentation of ANONYMOUS SASL mechanism
|
|
||||||
*
|
|
||||||
* @author Richard Heyes <richard@php.net>
|
|
||||||
* @access public
|
|
||||||
* @version 1.0
|
|
||||||
* @package Auth_SASL
|
|
||||||
*/
|
|
||||||
|
|
||||||
require_once('Auth/SASL/Common.php');
|
|
||||||
|
|
||||||
class Auth_SASL_Anonymous extends Auth_SASL_Common
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Not much to do here except return the token supplied.
|
|
||||||
* No encoding, hashing or encryption takes place for this
|
|
||||||
* mechanism, simply one of:
|
|
||||||
* o An email address
|
|
||||||
* o An opaque string not containing "@" that can be interpreted
|
|
||||||
* by the sysadmin
|
|
||||||
* o Nothing
|
|
||||||
*
|
|
||||||
* We could have some logic here for the second option, but this
|
|
||||||
* would by no means create something interpretable.
|
|
||||||
*
|
|
||||||
* @param string $token Optional email address or string to provide
|
|
||||||
* as trace information.
|
|
||||||
* @return string The unaltered input token
|
|
||||||
*/
|
|
||||||
function getResponse($token = '')
|
|
||||||
{
|
|
||||||
return $token;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
@ -1,105 +0,0 @@
|
|||||||
<?php
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
// | Copyright (c) 2002-2003 Richard Heyes |
|
|
||||||
// | All rights reserved. |
|
|
||||||
// | |
|
|
||||||
// | Redistribution and use in source and binary forms, with or without |
|
|
||||||
// | modification, are permitted provided that the following conditions |
|
|
||||||
// | are met: |
|
|
||||||
// | |
|
|
||||||
// | o Redistributions of source code must retain the above copyright |
|
|
||||||
// | notice, this list of conditions and the following disclaimer. |
|
|
||||||
// | o Redistributions in binary form must reproduce the above copyright |
|
|
||||||
// | notice, this list of conditions and the following disclaimer in the |
|
|
||||||
// | documentation and/or other materials provided with the distribution.|
|
|
||||||
// | o The names of the authors may not be used to endorse or promote |
|
|
||||||
// | products derived from this software without specific prior written |
|
|
||||||
// | permission. |
|
|
||||||
// | |
|
|
||||||
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
|
||||||
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
|
||||||
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
|
||||||
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
|
||||||
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
|
||||||
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
|
||||||
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
|
||||||
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
|
||||||
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
|
||||||
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
|
||||||
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
|
||||||
// | |
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
// | Author: Richard Heyes <richard@php.net> |
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Common functionality to SASL mechanisms
|
|
||||||
*
|
|
||||||
* @author Richard Heyes <richard@php.net>
|
|
||||||
* @access public
|
|
||||||
* @version 1.0
|
|
||||||
* @package Auth_SASL
|
|
||||||
*/
|
|
||||||
|
|
||||||
class Auth_SASL_Common
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Function which implements HMAC MD5 digest
|
|
||||||
*
|
|
||||||
* @param string $key The secret key
|
|
||||||
* @param string $data The data to hash
|
|
||||||
* @param bool $raw_output Whether the digest is returned in binary or hexadecimal format.
|
|
||||||
*
|
|
||||||
* @return string The HMAC-MD5 digest
|
|
||||||
*/
|
|
||||||
function _HMAC_MD5($key, $data, $raw_output = FALSE)
|
|
||||||
{
|
|
||||||
if (strlen($key) > 64) {
|
|
||||||
$key = pack('H32', md5($key));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strlen($key) < 64) {
|
|
||||||
$key = str_pad($key, 64, chr(0));
|
|
||||||
}
|
|
||||||
|
|
||||||
$k_ipad = substr($key, 0, 64) ^ str_repeat(chr(0x36), 64);
|
|
||||||
$k_opad = substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64);
|
|
||||||
|
|
||||||
$inner = pack('H32', md5($k_ipad . $data));
|
|
||||||
$digest = md5($k_opad . $inner, $raw_output);
|
|
||||||
|
|
||||||
return $digest;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Function which implements HMAC-SHA-1 digest
|
|
||||||
*
|
|
||||||
* @param string $key The secret key
|
|
||||||
* @param string $data The data to hash
|
|
||||||
* @param bool $raw_output Whether the digest is returned in binary or hexadecimal format.
|
|
||||||
* @return string The HMAC-SHA-1 digest
|
|
||||||
* @author Jehan <jehan.marmottard@gmail.com>
|
|
||||||
* @access protected
|
|
||||||
*/
|
|
||||||
protected function _HMAC_SHA1($key, $data, $raw_output = FALSE)
|
|
||||||
{
|
|
||||||
if (strlen($key) > 64) {
|
|
||||||
$key = sha1($key, TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strlen($key) < 64) {
|
|
||||||
$key = str_pad($key, 64, chr(0));
|
|
||||||
}
|
|
||||||
|
|
||||||
$k_ipad = substr($key, 0, 64) ^ str_repeat(chr(0x36), 64);
|
|
||||||
$k_opad = substr($key, 0, 64) ^ str_repeat(chr(0x5C), 64);
|
|
||||||
|
|
||||||
$inner = pack('H40', sha1($k_ipad . $data));
|
|
||||||
$digest = sha1($k_opad . $inner, $raw_output);
|
|
||||||
|
|
||||||
return $digest;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
@ -1,68 +0,0 @@
|
|||||||
<?php
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
// | Copyright (c) 2002-2003 Richard Heyes |
|
|
||||||
// | All rights reserved. |
|
|
||||||
// | |
|
|
||||||
// | Redistribution and use in source and binary forms, with or without |
|
|
||||||
// | modification, are permitted provided that the following conditions |
|
|
||||||
// | are met: |
|
|
||||||
// | |
|
|
||||||
// | o Redistributions of source code must retain the above copyright |
|
|
||||||
// | notice, this list of conditions and the following disclaimer. |
|
|
||||||
// | o Redistributions in binary form must reproduce the above copyright |
|
|
||||||
// | notice, this list of conditions and the following disclaimer in the |
|
|
||||||
// | documentation and/or other materials provided with the distribution.|
|
|
||||||
// | o The names of the authors may not be used to endorse or promote |
|
|
||||||
// | products derived from this software without specific prior written |
|
|
||||||
// | permission. |
|
|
||||||
// | |
|
|
||||||
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
|
||||||
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
|
||||||
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
|
||||||
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
|
||||||
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
|
||||||
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
|
||||||
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
|
||||||
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
|
||||||
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
|
||||||
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
|
||||||
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
|
||||||
// | |
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
// | Author: Richard Heyes <richard@php.net> |
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implmentation of CRAM-MD5 SASL mechanism
|
|
||||||
*
|
|
||||||
* @author Richard Heyes <richard@php.net>
|
|
||||||
* @access public
|
|
||||||
* @version 1.0
|
|
||||||
* @package Auth_SASL
|
|
||||||
*/
|
|
||||||
|
|
||||||
require_once('Auth/SASL/Common.php');
|
|
||||||
|
|
||||||
class Auth_SASL_CramMD5 extends Auth_SASL_Common
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Implements the CRAM-MD5 SASL mechanism
|
|
||||||
* This DOES NOT base64 encode the return value,
|
|
||||||
* you will need to do that yourself.
|
|
||||||
*
|
|
||||||
* @param string $user Username
|
|
||||||
* @param string $pass Password
|
|
||||||
* @param string $challenge The challenge supplied by the server.
|
|
||||||
* this should be already base64_decoded.
|
|
||||||
*
|
|
||||||
* @return string The string to pass back to the server, of the form
|
|
||||||
* "<user> <digest>". This is NOT base64_encoded.
|
|
||||||
*/
|
|
||||||
function getResponse($user, $pass, $challenge)
|
|
||||||
{
|
|
||||||
return $user . ' ' . $this->_HMAC_MD5($pass, $challenge);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
@ -1,197 +0,0 @@
|
|||||||
<?php
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
// | Copyright (c) 2002-2003 Richard Heyes |
|
|
||||||
// | All rights reserved. |
|
|
||||||
// | |
|
|
||||||
// | Redistribution and use in source and binary forms, with or without |
|
|
||||||
// | modification, are permitted provided that the following conditions |
|
|
||||||
// | are met: |
|
|
||||||
// | |
|
|
||||||
// | o Redistributions of source code must retain the above copyright |
|
|
||||||
// | notice, this list of conditions and the following disclaimer. |
|
|
||||||
// | o Redistributions in binary form must reproduce the above copyright |
|
|
||||||
// | notice, this list of conditions and the following disclaimer in the |
|
|
||||||
// | documentation and/or other materials provided with the distribution.|
|
|
||||||
// | o The names of the authors may not be used to endorse or promote |
|
|
||||||
// | products derived from this software without specific prior written |
|
|
||||||
// | permission. |
|
|
||||||
// | |
|
|
||||||
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
|
||||||
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
|
||||||
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
|
||||||
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
|
||||||
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
|
||||||
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
|
||||||
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
|
||||||
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
|
||||||
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
|
||||||
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
|
||||||
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
|
||||||
// | |
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
// | Author: Richard Heyes <richard@php.net> |
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implmentation of DIGEST-MD5 SASL mechanism
|
|
||||||
*
|
|
||||||
* @author Richard Heyes <richard@php.net>
|
|
||||||
* @access public
|
|
||||||
* @version 1.0
|
|
||||||
* @package Auth_SASL
|
|
||||||
*/
|
|
||||||
|
|
||||||
require_once('Auth/SASL/Common.php');
|
|
||||||
|
|
||||||
class Auth_SASL_DigestMD5 extends Auth_SASL_Common
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Provides the (main) client response for DIGEST-MD5
|
|
||||||
* requires a few extra parameters than the other
|
|
||||||
* mechanisms, which are unavoidable.
|
|
||||||
*
|
|
||||||
* @param string $authcid Authentication id (username)
|
|
||||||
* @param string $pass Password
|
|
||||||
* @param string $challenge The digest challenge sent by the server
|
|
||||||
* @param string $hostname The hostname of the machine you're connecting to
|
|
||||||
* @param string $service The servicename (eg. imap, pop, acap etc)
|
|
||||||
* @param string $authzid Authorization id (username to proxy as)
|
|
||||||
* @return string The digest response (NOT base64 encoded)
|
|
||||||
* @access public
|
|
||||||
*/
|
|
||||||
function getResponse($authcid, $pass, $challenge, $hostname, $service, $authzid = '')
|
|
||||||
{
|
|
||||||
$challenge = $this->_parseChallenge($challenge);
|
|
||||||
$authzid_string = '';
|
|
||||||
if ($authzid != '') {
|
|
||||||
$authzid_string = ',authzid="' . $authzid . '"';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($challenge)) {
|
|
||||||
$cnonce = $this->_getCnonce();
|
|
||||||
$digest_uri = sprintf('%s/%s', $service, $hostname);
|
|
||||||
$response_value = $this->_getResponseValue($authcid, $pass, $challenge['realm'], $challenge['nonce'], $cnonce, $digest_uri, $authzid);
|
|
||||||
|
|
||||||
if ($challenge['realm']) {
|
|
||||||
return sprintf('username="%s",realm="%s"' . $authzid_string .
|
|
||||||
',nonce="%s",cnonce="%s",nc=00000001,qop=auth,digest-uri="%s",response=%s,maxbuf=%d', $authcid, $challenge['realm'], $challenge['nonce'], $cnonce, $digest_uri, $response_value, $challenge['maxbuf']);
|
|
||||||
} else {
|
|
||||||
return sprintf('username="%s"' . $authzid_string . ',nonce="%s",cnonce="%s",nc=00000001,qop=auth,digest-uri="%s",response=%s,maxbuf=%d', $authcid, $challenge['nonce'], $cnonce, $digest_uri, $response_value, $challenge['maxbuf']);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return PEAR::raiseError('Invalid digest challenge');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parses and verifies the digest challenge*
|
|
||||||
*
|
|
||||||
* @param string $challenge The digest challenge
|
|
||||||
* @return array The parsed challenge as an assoc
|
|
||||||
* array in the form "directive => value".
|
|
||||||
* @access private
|
|
||||||
*/
|
|
||||||
function _parseChallenge($challenge)
|
|
||||||
{
|
|
||||||
$tokens = array();
|
|
||||||
while (preg_match('/^([a-z-]+)=("[^"]+(?<!\\\)"|[^,]+)/i', $challenge, $matches)) {
|
|
||||||
|
|
||||||
// Ignore these as per rfc2831
|
|
||||||
if ($matches[1] == 'opaque' OR $matches[1] == 'domain') {
|
|
||||||
$challenge = substr($challenge, strlen($matches[0]) + 1);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Allowed multiple "realm" and "auth-param"
|
|
||||||
if (!empty($tokens[$matches[1]]) AND ($matches[1] == 'realm' OR $matches[1] == 'auth-param')) {
|
|
||||||
if (is_array($tokens[$matches[1]])) {
|
|
||||||
$tokens[$matches[1]][] = preg_replace('/^"(.*)"$/', '\\1', $matches[2]);
|
|
||||||
} else {
|
|
||||||
$tokens[$matches[1]] = array($tokens[$matches[1]], preg_replace('/^"(.*)"$/', '\\1', $matches[2]));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Any other multiple instance = failure
|
|
||||||
} elseif (!empty($tokens[$matches[1]])) {
|
|
||||||
$tokens = array();
|
|
||||||
break;
|
|
||||||
|
|
||||||
} else {
|
|
||||||
$tokens[$matches[1]] = preg_replace('/^"(.*)"$/', '\\1', $matches[2]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove the just parsed directive from the challenge
|
|
||||||
$challenge = substr($challenge, strlen($matches[0]) + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Defaults and required directives
|
|
||||||
*/
|
|
||||||
// Realm
|
|
||||||
if (empty($tokens['realm'])) {
|
|
||||||
$tokens['realm'] = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Maxbuf
|
|
||||||
if (empty($tokens['maxbuf'])) {
|
|
||||||
$tokens['maxbuf'] = 65536;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Required: nonce, algorithm
|
|
||||||
if (empty($tokens['nonce']) OR empty($tokens['algorithm'])) {
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
|
|
||||||
return $tokens;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates the response= part of the digest response
|
|
||||||
*
|
|
||||||
* @param string $authcid Authentication id (username)
|
|
||||||
* @param string $pass Password
|
|
||||||
* @param string $realm Realm as provided by the server
|
|
||||||
* @param string $nonce Nonce as provided by the server
|
|
||||||
* @param string $cnonce Client nonce
|
|
||||||
* @param string $digest_uri The digest-uri= value part of the response
|
|
||||||
* @param string $authzid Authorization id
|
|
||||||
* @return string The response= part of the digest response
|
|
||||||
* @access private
|
|
||||||
*/
|
|
||||||
function _getResponseValue($authcid, $pass, $realm, $nonce, $cnonce, $digest_uri, $authzid = '')
|
|
||||||
{
|
|
||||||
if ($authzid == '') {
|
|
||||||
$A1 = sprintf('%s:%s:%s', pack('H32', md5(sprintf('%s:%s:%s', $authcid, $realm, $pass))), $nonce, $cnonce);
|
|
||||||
} else {
|
|
||||||
$A1 = sprintf('%s:%s:%s:%s', pack('H32', md5(sprintf('%s:%s:%s', $authcid, $realm, $pass))), $nonce, $cnonce, $authzid);
|
|
||||||
}
|
|
||||||
$A2 = 'AUTHENTICATE:' . $digest_uri;
|
|
||||||
return md5(sprintf('%s:%s:00000001:%s:auth:%s', md5($A1), $nonce, $cnonce, md5($A2)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates the client nonce for the response
|
|
||||||
*
|
|
||||||
* @return string The cnonce value
|
|
||||||
* @access private
|
|
||||||
*/
|
|
||||||
function _getCnonce()
|
|
||||||
{
|
|
||||||
if (@file_exists('/dev/urandom') && $fd = @fopen('/dev/urandom', 'r')) {
|
|
||||||
return base64_encode(fread($fd, 32));
|
|
||||||
|
|
||||||
} elseif (@file_exists('/dev/random') && $fd = @fopen('/dev/random', 'r')) {
|
|
||||||
return base64_encode(fread($fd, 32));
|
|
||||||
|
|
||||||
} else {
|
|
||||||
$str = '';
|
|
||||||
for ($i=0; $i<32; $i++) {
|
|
||||||
$str .= chr(mt_rand(0, 255));
|
|
||||||
}
|
|
||||||
|
|
||||||
return base64_encode($str);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
@ -1,63 +0,0 @@
|
|||||||
<?php
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
// | Copyright (c) 2008 Christoph Schulz |
|
|
||||||
// | All rights reserved. |
|
|
||||||
// | |
|
|
||||||
// | Redistribution and use in source and binary forms, with or without |
|
|
||||||
// | modification, are permitted provided that the following conditions |
|
|
||||||
// | are met: |
|
|
||||||
// | |
|
|
||||||
// | o Redistributions of source code must retain the above copyright |
|
|
||||||
// | notice, this list of conditions and the following disclaimer. |
|
|
||||||
// | o Redistributions in binary form must reproduce the above copyright |
|
|
||||||
// | notice, this list of conditions and the following disclaimer in the |
|
|
||||||
// | documentation and/or other materials provided with the distribution.|
|
|
||||||
// | o The names of the authors may not be used to endorse or promote |
|
|
||||||
// | products derived from this software without specific prior written |
|
|
||||||
// | permission. |
|
|
||||||
// | |
|
|
||||||
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
|
||||||
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
|
||||||
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
|
||||||
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
|
||||||
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
|
||||||
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
|
||||||
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
|
||||||
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
|
||||||
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
|
||||||
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
|
||||||
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
|
||||||
// | |
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
// | Author: Christoph Schulz <develop@kristov.de> |
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implmentation of EXTERNAL SASL mechanism
|
|
||||||
*
|
|
||||||
* @author Christoph Schulz <develop@kristov.de>
|
|
||||||
* @access public
|
|
||||||
* @version 1.0.3
|
|
||||||
* @package Auth_SASL
|
|
||||||
*/
|
|
||||||
|
|
||||||
require_once('Auth/SASL/Common.php');
|
|
||||||
|
|
||||||
class Auth_SASL_External extends Auth_SASL_Common
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Returns EXTERNAL response
|
|
||||||
*
|
|
||||||
* @param string $authcid Authentication id (username)
|
|
||||||
* @param string $pass Password
|
|
||||||
* @param string $authzid Autorization id
|
|
||||||
* @return string EXTERNAL Response
|
|
||||||
*/
|
|
||||||
function getResponse($authcid, $pass, $authzid = '')
|
|
||||||
{
|
|
||||||
return $authzid;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
@ -1,65 +0,0 @@
|
|||||||
<?php
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
// | Copyright (c) 2002-2003 Richard Heyes |
|
|
||||||
// | All rights reserved. |
|
|
||||||
// | |
|
|
||||||
// | Redistribution and use in source and binary forms, with or without |
|
|
||||||
// | modification, are permitted provided that the following conditions |
|
|
||||||
// | are met: |
|
|
||||||
// | |
|
|
||||||
// | o Redistributions of source code must retain the above copyright |
|
|
||||||
// | notice, this list of conditions and the following disclaimer. |
|
|
||||||
// | o Redistributions in binary form must reproduce the above copyright |
|
|
||||||
// | notice, this list of conditions and the following disclaimer in the |
|
|
||||||
// | documentation and/or other materials provided with the distribution.|
|
|
||||||
// | o The names of the authors may not be used to endorse or promote |
|
|
||||||
// | products derived from this software without specific prior written |
|
|
||||||
// | permission. |
|
|
||||||
// | |
|
|
||||||
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
|
||||||
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
|
||||||
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
|
||||||
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
|
||||||
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
|
||||||
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
|
||||||
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
|
||||||
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
|
||||||
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
|
||||||
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
|
||||||
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
|
||||||
// | |
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
// | Author: Richard Heyes <richard@php.net> |
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is technically not a SASL mechanism, however
|
|
||||||
* it's used by Net_Sieve, Net_Cyrus and potentially
|
|
||||||
* other protocols , so here is a good place to abstract
|
|
||||||
* it.
|
|
||||||
*
|
|
||||||
* @author Richard Heyes <richard@php.net>
|
|
||||||
* @access public
|
|
||||||
* @version 1.0
|
|
||||||
* @package Auth_SASL
|
|
||||||
*/
|
|
||||||
|
|
||||||
require_once('Auth/SASL/Common.php');
|
|
||||||
|
|
||||||
class Auth_SASL_Login extends Auth_SASL_Common
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Pseudo SASL LOGIN mechanism
|
|
||||||
*
|
|
||||||
* @param string $user Username
|
|
||||||
* @param string $pass Password
|
|
||||||
* @return string LOGIN string
|
|
||||||
*/
|
|
||||||
function getResponse($user, $pass)
|
|
||||||
{
|
|
||||||
return sprintf('LOGIN %s %s', $user, $pass);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
@ -1,63 +0,0 @@
|
|||||||
<?php
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
// | Copyright (c) 2002-2003 Richard Heyes |
|
|
||||||
// | All rights reserved. |
|
|
||||||
// | |
|
|
||||||
// | Redistribution and use in source and binary forms, with or without |
|
|
||||||
// | modification, are permitted provided that the following conditions |
|
|
||||||
// | are met: |
|
|
||||||
// | |
|
|
||||||
// | o Redistributions of source code must retain the above copyright |
|
|
||||||
// | notice, this list of conditions and the following disclaimer. |
|
|
||||||
// | o Redistributions in binary form must reproduce the above copyright |
|
|
||||||
// | notice, this list of conditions and the following disclaimer in the |
|
|
||||||
// | documentation and/or other materials provided with the distribution.|
|
|
||||||
// | o The names of the authors may not be used to endorse or promote |
|
|
||||||
// | products derived from this software without specific prior written |
|
|
||||||
// | permission. |
|
|
||||||
// | |
|
|
||||||
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
|
||||||
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
|
||||||
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
|
||||||
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
|
||||||
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
|
||||||
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
|
||||||
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
|
||||||
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
|
||||||
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
|
||||||
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
|
||||||
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
|
||||||
// | |
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
// | Author: Richard Heyes <richard@php.net> |
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implmentation of PLAIN SASL mechanism
|
|
||||||
*
|
|
||||||
* @author Richard Heyes <richard@php.net>
|
|
||||||
* @access public
|
|
||||||
* @version 1.0
|
|
||||||
* @package Auth_SASL
|
|
||||||
*/
|
|
||||||
|
|
||||||
require_once('Auth/SASL/Common.php');
|
|
||||||
|
|
||||||
class Auth_SASL_Plain extends Auth_SASL_Common
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Returns PLAIN response
|
|
||||||
*
|
|
||||||
* @param string $authcid Authentication id (username)
|
|
||||||
* @param string $pass Password
|
|
||||||
* @param string $authzid Autorization id
|
|
||||||
* @return string PLAIN Response
|
|
||||||
*/
|
|
||||||
function getResponse($authcid, $pass, $authzid = '')
|
|
||||||
{
|
|
||||||
return $authzid . chr(0) . $authcid . chr(0) . $pass;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
@ -1,306 +0,0 @@
|
|||||||
<?php
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
// | Copyright (c) 2011 Jehan |
|
|
||||||
// | All rights reserved. |
|
|
||||||
// | |
|
|
||||||
// | Redistribution and use in source and binary forms, with or without |
|
|
||||||
// | modification, are permitted provided that the following conditions |
|
|
||||||
// | are met: |
|
|
||||||
// | |
|
|
||||||
// | o Redistributions of source code must retain the above copyright |
|
|
||||||
// | notice, this list of conditions and the following disclaimer. |
|
|
||||||
// | o Redistributions in binary form must reproduce the above copyright |
|
|
||||||
// | notice, this list of conditions and the following disclaimer in the |
|
|
||||||
// | documentation and/or other materials provided with the distribution.|
|
|
||||||
// | o The names of the authors may not be used to endorse or promote |
|
|
||||||
// | products derived from this software without specific prior written |
|
|
||||||
// | permission. |
|
|
||||||
// | |
|
|
||||||
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
|
||||||
// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
|
||||||
// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
|
||||||
// | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
|
||||||
// | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
|
||||||
// | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
|
||||||
// | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
|
||||||
// | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
|
||||||
// | THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
|
||||||
// | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
|
||||||
// | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
|
||||||
// | |
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
// | Author: Jehan <jehan.marmottard@gmail.com |
|
|
||||||
// +-----------------------------------------------------------------------+
|
|
||||||
//
|
|
||||||
// $Id$
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implementation of SCRAM-* SASL mechanisms.
|
|
||||||
* SCRAM mechanisms have 3 main steps (initial response, response to the server challenge, then server signature
|
|
||||||
* verification) which keep state-awareness. Therefore a single class instanciation must be done and reused for the whole
|
|
||||||
* authentication process.
|
|
||||||
*
|
|
||||||
* @author Jehan <jehan.marmottard@gmail.com>
|
|
||||||
* @access public
|
|
||||||
* @version 1.0
|
|
||||||
* @package Auth_SASL
|
|
||||||
*/
|
|
||||||
|
|
||||||
require_once('Auth/SASL/Common.php');
|
|
||||||
|
|
||||||
class Auth_SASL_SCRAM extends Auth_SASL_Common
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Construct a SCRAM-H client where 'H' is a cryptographic hash function.
|
|
||||||
*
|
|
||||||
* @param string $hash The name cryptographic hash function 'H' as registered by IANA in the "Hash Function Textual
|
|
||||||
* Names" registry.
|
|
||||||
* @link http://www.iana.org/assignments/hash-function-text-names/hash-function-text-names.xml "Hash Function Textual
|
|
||||||
* Names"
|
|
||||||
* format of core PHP hash function.
|
|
||||||
* @access public
|
|
||||||
*/
|
|
||||||
function __construct($hash)
|
|
||||||
{
|
|
||||||
// Though I could be strict, I will actually also accept the naming used in the PHP core hash framework.
|
|
||||||
// For instance "sha1" is accepted, while the registered hash name should be "SHA-1".
|
|
||||||
$hash = strtolower($hash);
|
|
||||||
$hashes = array('md2' => 'md2',
|
|
||||||
'md5' => 'md5',
|
|
||||||
'sha-1' => 'sha1',
|
|
||||||
'sha1' => 'sha1',
|
|
||||||
'sha-224' > 'sha224',
|
|
||||||
'sha224' > 'sha224',
|
|
||||||
'sha-256' => 'sha256',
|
|
||||||
'sha256' => 'sha256',
|
|
||||||
'sha-384' => 'sha384',
|
|
||||||
'sha384' => 'sha384',
|
|
||||||
'sha-512' => 'sha512',
|
|
||||||
'sha512' => 'sha512');
|
|
||||||
if (function_exists('hash_hmac') && isset($hashes[$hash]))
|
|
||||||
{
|
|
||||||
$this->hash = create_function('$data', 'return hash("' . $hashes[$hash] . '", $data, TRUE);');
|
|
||||||
$this->hmac = create_function('$key,$str,$raw', 'return hash_hmac("' . $hashes[$hash] . '", $str, $key, $raw);');
|
|
||||||
}
|
|
||||||
elseif ($hash == 'md5')
|
|
||||||
{
|
|
||||||
$this->hash = create_function('$data', 'return md5($data, true);');
|
|
||||||
$this->hmac = array($this, '_HMAC_MD5');
|
|
||||||
}
|
|
||||||
elseif (in_array($hash, array('sha1', 'sha-1')))
|
|
||||||
{
|
|
||||||
$this->hash = create_function('$data', 'return sha1($data, true);');
|
|
||||||
$this->hmac = array($this, '_HMAC_SHA1');
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return PEAR::raiseError('Invalid SASL mechanism type');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Provides the (main) client response for SCRAM-H.
|
|
||||||
*
|
|
||||||
* @param string $authcid Authentication id (username)
|
|
||||||
* @param string $pass Password
|
|
||||||
* @param string $challenge The challenge sent by the server.
|
|
||||||
* If the challenge is NULL or an empty string, the result will be the "initial response".
|
|
||||||
* @param string $authzid Authorization id (username to proxy as)
|
|
||||||
* @return string|false The response (binary, NOT base64 encoded)
|
|
||||||
* @access public
|
|
||||||
*/
|
|
||||||
public function getResponse($authcid, $pass, $challenge = NULL, $authzid = NULL)
|
|
||||||
{
|
|
||||||
$authcid = $this->_formatName($authcid);
|
|
||||||
if (empty($authcid))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!empty($authzid))
|
|
||||||
{
|
|
||||||
$authzid = $this->_formatName($authzid);
|
|
||||||
if (empty($authzid))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (empty($challenge))
|
|
||||||
{
|
|
||||||
return $this->_generateInitialResponse($authcid, $authzid);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return $this->_generateResponse($challenge, $pass);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prepare a name for inclusion in a SCRAM response.
|
|
||||||
*
|
|
||||||
* @param string $username a name to be prepared.
|
|
||||||
* @return string the reformated name.
|
|
||||||
* @access private
|
|
||||||
*/
|
|
||||||
private function _formatName($username)
|
|
||||||
{
|
|
||||||
// TODO: prepare through the SASLprep profile of the stringprep algorithm.
|
|
||||||
// See RFC-4013.
|
|
||||||
|
|
||||||
$username = str_replace('=', '=3D', $username);
|
|
||||||
$username = str_replace(',', '=2C', $username);
|
|
||||||
return $username;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate the initial response which can be either sent directly in the first message or as a response to an empty
|
|
||||||
* server challenge.
|
|
||||||
*
|
|
||||||
* @param string $authcid Prepared authentication identity.
|
|
||||||
* @param string $authzid Prepared authorization identity.
|
|
||||||
* @return string The SCRAM response to send.
|
|
||||||
* @access private
|
|
||||||
*/
|
|
||||||
private function _generateInitialResponse($authcid, $authzid)
|
|
||||||
{
|
|
||||||
$init_rep = '';
|
|
||||||
$gs2_cbind_flag = 'n,'; // TODO: support channel binding.
|
|
||||||
$this->gs2_header = $gs2_cbind_flag . (!empty($authzid)? 'a=' . $authzid : '') . ',';
|
|
||||||
|
|
||||||
// I must generate a client nonce and "save" it for later comparison on second response.
|
|
||||||
$this->cnonce = $this->_getCnonce();
|
|
||||||
// XXX: in the future, when mandatory and/or optional extensions are defined in any updated RFC,
|
|
||||||
// this message can be updated.
|
|
||||||
$this->first_message_bare = 'n=' . $authcid . ',r=' . $this->cnonce;
|
|
||||||
return $this->gs2_header . $this->first_message_bare;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parses and verifies a non-empty SCRAM challenge.
|
|
||||||
*
|
|
||||||
* @param string $challenge The SCRAM challenge
|
|
||||||
* @return string|false The response to send; false in case of wrong challenge or if an initial response has not
|
|
||||||
* been generated first.
|
|
||||||
* @access private
|
|
||||||
*/
|
|
||||||
private function _generateResponse($challenge, $password)
|
|
||||||
{
|
|
||||||
// XXX: as I don't support mandatory extension, I would fail on them.
|
|
||||||
// And I simply ignore any optional extension.
|
|
||||||
$server_message_regexp = "#^r=([\x21-\x2B\x2D-\x7E]+),s=((?:[A-Za-z0-9/+]{4})*(?:[A-Za-z0-9]{3}=|[A-Xa-z0-9]{2}==)?),i=([0-9]*)(,[A-Za-z]=[^,])*$#";
|
|
||||||
if (!isset($this->cnonce, $this->gs2_header)
|
|
||||||
|| !preg_match($server_message_regexp, $challenge, $matches))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$nonce = $matches[1];
|
|
||||||
$salt = base64_decode($matches[2]);
|
|
||||||
if (!$salt)
|
|
||||||
{
|
|
||||||
// Invalid Base64.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$i = intval($matches[3]);
|
|
||||||
|
|
||||||
$cnonce = substr($nonce, 0, strlen($this->cnonce));
|
|
||||||
if ($cnonce <> $this->cnonce)
|
|
||||||
{
|
|
||||||
// Invalid challenge! Are we under attack?
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$channel_binding = 'c=' . base64_encode($this->gs2_header); // TODO: support channel binding.
|
|
||||||
$final_message = $channel_binding . ',r=' . $nonce; // XXX: no extension.
|
|
||||||
|
|
||||||
// TODO: $password = $this->normalize($password); // SASLprep profile of stringprep.
|
|
||||||
$saltedPassword = $this->hi($password, $salt, $i);
|
|
||||||
$this->saltedPassword = $saltedPassword;
|
|
||||||
$clientKey = call_user_func($this->hmac, $saltedPassword, "Client Key", TRUE);
|
|
||||||
$storedKey = call_user_func($this->hash, $clientKey, TRUE);
|
|
||||||
$authMessage = $this->first_message_bare . ',' . $challenge . ',' . $final_message;
|
|
||||||
$this->authMessage = $authMessage;
|
|
||||||
$clientSignature = call_user_func($this->hmac, $storedKey, $authMessage, TRUE);
|
|
||||||
$clientProof = $clientKey ^ $clientSignature;
|
|
||||||
$proof = ',p=' . base64_encode($clientProof);
|
|
||||||
|
|
||||||
return $final_message . $proof;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* SCRAM has also a server verification step. On a successful outcome, it will send additional data which must
|
|
||||||
* absolutely be checked against this function. If this fails, the entity which we are communicating with is probably
|
|
||||||
* not the server as it has not access to your ServerKey.
|
|
||||||
*
|
|
||||||
* @param string $data The additional data sent along a successful outcome.
|
|
||||||
* @return bool Whether the server has been authenticated.
|
|
||||||
* If false, the client must close the connection and consider to be under a MITM attack.
|
|
||||||
* @access public
|
|
||||||
*/
|
|
||||||
public function processOutcome($data)
|
|
||||||
{
|
|
||||||
$verifier_regexp = '#^v=((?:[A-Za-z0-9/+]{4})*(?:[A-Za-z0-9]{3}=|[A-Xa-z0-9]{2}==)?)$#';
|
|
||||||
if (!isset($this->saltedPassword, $this->authMessage)
|
|
||||||
|| !preg_match($verifier_regexp, $data, $matches))
|
|
||||||
{
|
|
||||||
// This cannot be an outcome, you never sent the challenge's response.
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$verifier = $matches[1];
|
|
||||||
$proposed_serverSignature = base64_decode($verifier);
|
|
||||||
$serverKey = call_user_func($this->hmac, $this->saltedPassword, "Server Key", true);
|
|
||||||
$serverSignature = call_user_func($this->hmac, $serverKey, $this->authMessage, TRUE);
|
|
||||||
return ($proposed_serverSignature === $serverSignature);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Hi() call, which is essentially PBKDF2 (RFC-2898) with HMAC-H() as the pseudorandom function.
|
|
||||||
*
|
|
||||||
* @param string $str The string to hash.
|
|
||||||
* @param string $hash The hash value.
|
|
||||||
* @param int $i The iteration count.
|
|
||||||
* @access private
|
|
||||||
*/
|
|
||||||
private function hi($str, $salt, $i)
|
|
||||||
{
|
|
||||||
$int1 = "\0\0\0\1";
|
|
||||||
$ui = call_user_func($this->hmac, $str, $salt . $int1, true);
|
|
||||||
$result = $ui;
|
|
||||||
for ($k = 1; $k < $i; $k++)
|
|
||||||
{
|
|
||||||
$ui = call_user_func($this->hmac, $str, $ui, true);
|
|
||||||
$result = $result ^ $ui;
|
|
||||||
}
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates the client nonce for the response
|
|
||||||
*
|
|
||||||
* @return string The cnonce value
|
|
||||||
* @access private
|
|
||||||
* @author Richard Heyes <richard@php.net>
|
|
||||||
*/
|
|
||||||
private function _getCnonce()
|
|
||||||
{
|
|
||||||
// TODO: I reused the nonce function from the DigestMD5 class.
|
|
||||||
// I should probably make this a protected function in Common.
|
|
||||||
if (@file_exists('/dev/urandom') && $fd = @fopen('/dev/urandom', 'r')) {
|
|
||||||
return base64_encode(fread($fd, 32));
|
|
||||||
|
|
||||||
} elseif (@file_exists('/dev/random') && $fd = @fopen('/dev/random', 'r')) {
|
|
||||||
return base64_encode(fread($fd, 32));
|
|
||||||
|
|
||||||
} else {
|
|
||||||
$str = '';
|
|
||||||
for ($i=0; $i<32; $i++) {
|
|
||||||
$str .= chr(mt_rand(0, 255));
|
|
||||||
}
|
|
||||||
|
|
||||||
return base64_encode($str);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
File diff suppressed because it is too large
Load Diff
@ -1,105 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A class for performing byte-wise string operations
|
|
||||||
*
|
|
||||||
* GPG I/O streams are managed using bytes rather than characters.
|
|
||||||
*
|
|
||||||
* PHP version 5
|
|
||||||
*
|
|
||||||
* LICENSE:
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2.1 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2013 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @version CVS: $Id$
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
*/
|
|
||||||
|
|
||||||
// {{{ class Crypt_GPG_ByteUtils
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A class for performing byte-wise string operations
|
|
||||||
*
|
|
||||||
* GPG I/O streams are managed using bytes rather than characters. This class
|
|
||||||
* requires the mbstring extension to be available.
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2013 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
* @link http://php.net/mbstring
|
|
||||||
*/
|
|
||||||
class Crypt_GPG_ByteUtils
|
|
||||||
{
|
|
||||||
// {{{ strlen()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the length of a string in bytes
|
|
||||||
*
|
|
||||||
* This is used for stream-based communication with the GPG subprocess.
|
|
||||||
*
|
|
||||||
* @param string $string the string for which to get the length.
|
|
||||||
*
|
|
||||||
* @return integer the length of the string in bytes.
|
|
||||||
*/
|
|
||||||
public static function strlen($string)
|
|
||||||
{
|
|
||||||
return mb_strlen($string, '8bit');
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ substr()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the substring of a string in bytes
|
|
||||||
*
|
|
||||||
* This is used for stream-based communication with the GPG subprocess.
|
|
||||||
*
|
|
||||||
* @param string $string the input string.
|
|
||||||
* @param integer $start the starting point at which to get the substring.
|
|
||||||
* @param integer $length optional. The length of the substring.
|
|
||||||
*
|
|
||||||
* @return string the extracted part of the string. Unlike the default PHP
|
|
||||||
* <kbd>substr()</kbd> function, the returned value is
|
|
||||||
* always a string and never false.
|
|
||||||
*/
|
|
||||||
public static function substr($string, $start, $length = null)
|
|
||||||
{
|
|
||||||
if ($length === null) {
|
|
||||||
return mb_substr(
|
|
||||||
$string,
|
|
||||||
$start,
|
|
||||||
self::strlen($string) - $start, '8bit'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return mb_substr($string, $start, $length, '8bit');
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
|
|
||||||
?>
|
|
@ -1,344 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Crypt_GPG is a package to use GnuPG from PHP
|
|
||||||
*
|
|
||||||
* This file contains an object that handles GnuPG's status output for the
|
|
||||||
* decrypt operation.
|
|
||||||
*
|
|
||||||
* PHP version 5
|
|
||||||
*
|
|
||||||
* LICENSE:
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2.1 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2008-2013 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @version CVS: $Id$
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
* @link http://www.gnupg.org/
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Crypt_GPG base class
|
|
||||||
*/
|
|
||||||
require_once 'Crypt/GPG.php';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Crypt_GPG exception classes
|
|
||||||
*/
|
|
||||||
require_once 'Crypt/GPG/Exceptions.php';
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Status line handler for the decrypt operation
|
|
||||||
*
|
|
||||||
* This class is used internally by Crypt_GPG and does not need be used
|
|
||||||
* directly. See the {@link Crypt_GPG} class for end-user API.
|
|
||||||
*
|
|
||||||
* This class is responsible for sending the passphrase commands when required
|
|
||||||
* by the {@link Crypt_GPG::decrypt()} method. See <b>doc/DETAILS</b> in the
|
|
||||||
* {@link http://www.gnupg.org/download/ GnuPG distribution} for detailed
|
|
||||||
* information on GnuPG's status output for the decrypt operation.
|
|
||||||
*
|
|
||||||
* This class is also responsible for parsing error status and throwing a
|
|
||||||
* meaningful exception in the event that decryption fails.
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2008-2013 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
* @link http://www.gnupg.org/
|
|
||||||
*/
|
|
||||||
class Crypt_GPG_DecryptStatusHandler
|
|
||||||
{
|
|
||||||
// {{{ protected properties
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Keys used to decrypt
|
|
||||||
*
|
|
||||||
* The array is of the form:
|
|
||||||
* <code>
|
|
||||||
* array(
|
|
||||||
* $key_id => array(
|
|
||||||
* 'fingerprint' => $fingerprint,
|
|
||||||
* 'passphrase' => $passphrase
|
|
||||||
* )
|
|
||||||
* );
|
|
||||||
* </code>
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $keys = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Engine used to which passphrases are passed
|
|
||||||
*
|
|
||||||
* @var Crypt_GPG_Engine
|
|
||||||
*/
|
|
||||||
protected $engine = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The id of the current sub-key used for decryption
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected $currentSubKey = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether or not decryption succeeded
|
|
||||||
*
|
|
||||||
* If the message is only signed (compressed) and not encrypted, this is
|
|
||||||
* always true. If the message is encrypted, this flag is set to false
|
|
||||||
* until we know the decryption succeeded.
|
|
||||||
*
|
|
||||||
* @var boolean
|
|
||||||
*/
|
|
||||||
protected $decryptionOkay = true;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether or not there was no data for decryption
|
|
||||||
*
|
|
||||||
* @var boolean
|
|
||||||
*/
|
|
||||||
protected $noData = false;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Keys for which the passhprase is missing
|
|
||||||
*
|
|
||||||
* This contains primary user ids indexed by sub-key id and is used to
|
|
||||||
* create helpful exception messages.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $missingPassphrases = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Keys for which the passhprase is incorrect
|
|
||||||
*
|
|
||||||
* This contains primary user ids indexed by sub-key id and is used to
|
|
||||||
* create helpful exception messages.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $badPassphrases = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Keys that can be used to decrypt the data but are missing from the
|
|
||||||
* keychain
|
|
||||||
*
|
|
||||||
* This is an array with both the key and value being the sub-key id of
|
|
||||||
* the missing keys.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $missingKeys = array();
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ __construct()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new decryption status handler
|
|
||||||
*
|
|
||||||
* @param Crypt_GPG_Engine $engine the GPG engine to which passphrases are
|
|
||||||
* passed.
|
|
||||||
* @param array $keys the decryption keys to use.
|
|
||||||
*/
|
|
||||||
public function __construct(Crypt_GPG_Engine $engine, array $keys)
|
|
||||||
{
|
|
||||||
$this->engine = $engine;
|
|
||||||
$this->keys = $keys;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ handle()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles a status line
|
|
||||||
*
|
|
||||||
* @param string $line the status line to handle.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function handle($line)
|
|
||||||
{
|
|
||||||
$tokens = explode(' ', $line);
|
|
||||||
switch ($tokens[0]) {
|
|
||||||
case 'ENC_TO':
|
|
||||||
// Now we know the message is encrypted. Set flag to check if
|
|
||||||
// decryption succeeded.
|
|
||||||
$this->decryptionOkay = false;
|
|
||||||
|
|
||||||
// this is the new key message
|
|
||||||
$this->currentSubKeyId = $tokens[1];
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'NEED_PASSPHRASE':
|
|
||||||
// send passphrase to the GPG engine
|
|
||||||
$subKeyId = $tokens[1];
|
|
||||||
if (array_key_exists($subKeyId, $this->keys)) {
|
|
||||||
$passphrase = $this->keys[$subKeyId]['passphrase'];
|
|
||||||
$this->engine->sendCommand($passphrase);
|
|
||||||
} else {
|
|
||||||
$this->engine->sendCommand('');
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'USERID_HINT':
|
|
||||||
// remember the user id for pretty exception messages
|
|
||||||
$this->badPassphrases[$tokens[1]]
|
|
||||||
= implode(' ', array_splice($tokens, 2));
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'GOOD_PASSPHRASE':
|
|
||||||
// if we got a good passphrase, remove the key from the list of
|
|
||||||
// bad passphrases.
|
|
||||||
unset($this->badPassphrases[$this->currentSubKeyId]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'MISSING_PASSPHRASE':
|
|
||||||
$this->missingPassphrases[$this->currentSubKeyId]
|
|
||||||
= $this->currentSubKeyId;
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'NO_SECKEY':
|
|
||||||
// note: this message is also received if there are multiple
|
|
||||||
// recipients and a previous key had a correct passphrase.
|
|
||||||
$this->missingKeys[$tokens[1]] = $tokens[1];
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'NODATA':
|
|
||||||
$this->noData = true;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'DECRYPTION_OKAY':
|
|
||||||
// If the message is encrypted, this is the all-clear signal.
|
|
||||||
$this->decryptionOkay = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ throwException()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Takes the final status of the decrypt operation and throws an
|
|
||||||
* appropriate exception
|
|
||||||
*
|
|
||||||
* If decryption was successful, no exception is thrown.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*
|
|
||||||
* @throws Crypt_GPG_KeyNotFoundException if the private key needed to
|
|
||||||
* decrypt the data is not in the user's keyring.
|
|
||||||
*
|
|
||||||
* @throws Crypt_GPG_NoDataException if specified data does not contain
|
|
||||||
* GPG encrypted data.
|
|
||||||
*
|
|
||||||
* @throws Crypt_GPG_BadPassphraseException if a required passphrase is
|
|
||||||
* incorrect or if a required passphrase is not specified. See
|
|
||||||
* {@link Crypt_GPG::addDecryptKey()}.
|
|
||||||
*
|
|
||||||
* @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
|
|
||||||
* Use the <i>debug</i> option and file a bug report if these
|
|
||||||
* exceptions occur.
|
|
||||||
*/
|
|
||||||
public function throwException()
|
|
||||||
{
|
|
||||||
$code = Crypt_GPG::ERROR_NONE;
|
|
||||||
|
|
||||||
if (!$this->decryptionOkay) {
|
|
||||||
if (count($this->badPassphrases) > 0) {
|
|
||||||
$code = Crypt_GPG::ERROR_BAD_PASSPHRASE;
|
|
||||||
} elseif (count($this->missingKeys) > 0) {
|
|
||||||
$code = Crypt_GPG::ERROR_KEY_NOT_FOUND;
|
|
||||||
} else {
|
|
||||||
$code = Crypt_GPG::ERROR_UNKNOWN;
|
|
||||||
}
|
|
||||||
} elseif ($this->noData) {
|
|
||||||
$code = Crypt_GPG::ERROR_NO_DATA;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch ($code) {
|
|
||||||
case Crypt_GPG::ERROR_NONE:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case Crypt_GPG::ERROR_KEY_NOT_FOUND:
|
|
||||||
if (count($this->missingKeys) > 0) {
|
|
||||||
$keyId = reset($this->missingKeys);
|
|
||||||
} else {
|
|
||||||
$keyId = '';
|
|
||||||
}
|
|
||||||
throw new Crypt_GPG_KeyNotFoundException(
|
|
||||||
'Cannot decrypt data. No suitable private key is in the ' .
|
|
||||||
'keyring. Import a suitable private key before trying to ' .
|
|
||||||
'decrypt this data.',
|
|
||||||
$code,
|
|
||||||
$keyId
|
|
||||||
);
|
|
||||||
case Crypt_GPG::ERROR_BAD_PASSPHRASE:
|
|
||||||
$badPassphrases = array_diff_key(
|
|
||||||
$this->badPassphrases,
|
|
||||||
$this->missingPassphrases
|
|
||||||
);
|
|
||||||
|
|
||||||
$missingPassphrases = array_intersect_key(
|
|
||||||
$this->badPassphrases,
|
|
||||||
$this->missingPassphrases
|
|
||||||
);
|
|
||||||
|
|
||||||
$message = 'Cannot decrypt data.';
|
|
||||||
if (count($badPassphrases) > 0) {
|
|
||||||
$message = ' Incorrect passphrase provided for keys: "' .
|
|
||||||
implode('", "', $badPassphrases) . '".';
|
|
||||||
}
|
|
||||||
if (count($missingPassphrases) > 0) {
|
|
||||||
$message = ' No passphrase provided for keys: "' .
|
|
||||||
implode('", "', $badPassphrases) . '".';
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new Crypt_GPG_BadPassphraseException(
|
|
||||||
$message,
|
|
||||||
$code,
|
|
||||||
$badPassphrases,
|
|
||||||
$missingPassphrases
|
|
||||||
);
|
|
||||||
case Crypt_GPG::ERROR_NO_DATA:
|
|
||||||
throw new Crypt_GPG_NoDataException(
|
|
||||||
'Cannot decrypt data. No PGP encrypted data was found in '.
|
|
||||||
'the provided data.',
|
|
||||||
$code
|
|
||||||
);
|
|
||||||
default:
|
|
||||||
throw new Crypt_GPG_Exception(
|
|
||||||
'Unknown error decrypting data.',
|
|
||||||
$code
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
File diff suppressed because it is too large
Load Diff
@ -1,598 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Various exception handling classes for Crypt_GPG
|
|
||||||
*
|
|
||||||
* Crypt_GPG provides an object oriented interface to GNU Privacy
|
|
||||||
* Guard (GPG). It requires the GPG executable to be on the system.
|
|
||||||
*
|
|
||||||
* This file contains various exception classes used by the Crypt_GPG package.
|
|
||||||
*
|
|
||||||
* PHP version 5
|
|
||||||
*
|
|
||||||
* LICENSE:
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2.1 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Nathan Fredrickson <nathan@silverorange.com>
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2005-2011 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @version CVS: $Id$
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PEAR Exception handler and base class
|
|
||||||
*/
|
|
||||||
require_once 'PEAR/Exception.php';
|
|
||||||
|
|
||||||
// {{{ class Crypt_GPG_Exception
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An exception thrown by the Crypt_GPG package
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2005 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
*/
|
|
||||||
class Crypt_GPG_Exception extends PEAR_Exception
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ class Crypt_GPG_FileException
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An exception thrown when a file is used in ways it cannot be used
|
|
||||||
*
|
|
||||||
* For example, if an output file is specified and the file is not writeable, or
|
|
||||||
* if an input file is specified and the file is not readable, this exception
|
|
||||||
* is thrown.
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2007-2008 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
*/
|
|
||||||
class Crypt_GPG_FileException extends Crypt_GPG_Exception
|
|
||||||
{
|
|
||||||
// {{{ private class properties
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The name of the file that caused this exception
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_filename = '';
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ __construct()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new Crypt_GPG_FileException
|
|
||||||
*
|
|
||||||
* @param string $message an error message.
|
|
||||||
* @param integer $code a user defined error code.
|
|
||||||
* @param string $filename the name of the file that caused this exception.
|
|
||||||
*/
|
|
||||||
public function __construct($message, $code = 0, $filename = '')
|
|
||||||
{
|
|
||||||
$this->_filename = $filename;
|
|
||||||
parent::__construct($message, $code);
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getFilename()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the filename of the file that caused this exception
|
|
||||||
*
|
|
||||||
* @return string the filename of the file that caused this exception.
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG_FileException::$_filename
|
|
||||||
*/
|
|
||||||
public function getFilename()
|
|
||||||
{
|
|
||||||
return $this->_filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ class Crypt_GPG_OpenSubprocessException
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An exception thrown when the GPG subprocess cannot be opened
|
|
||||||
*
|
|
||||||
* This exception is thrown when the {@link Crypt_GPG_Engine} tries to open a
|
|
||||||
* new subprocess and fails.
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2005 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
*/
|
|
||||||
class Crypt_GPG_OpenSubprocessException extends Crypt_GPG_Exception
|
|
||||||
{
|
|
||||||
// {{{ private class properties
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The command used to try to open the subprocess
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_command = '';
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ __construct()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new Crypt_GPG_OpenSubprocessException
|
|
||||||
*
|
|
||||||
* @param string $message an error message.
|
|
||||||
* @param integer $code a user defined error code.
|
|
||||||
* @param string $command the command that was called to open the
|
|
||||||
* new subprocess.
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG::_openSubprocess()
|
|
||||||
*/
|
|
||||||
public function __construct($message, $code = 0, $command = '')
|
|
||||||
{
|
|
||||||
$this->_command = $command;
|
|
||||||
parent::__construct($message, $code);
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getCommand()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the contents of the internal _command property
|
|
||||||
*
|
|
||||||
* @return string the command used to open the subprocess.
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG_OpenSubprocessException::$_command
|
|
||||||
*/
|
|
||||||
public function getCommand()
|
|
||||||
{
|
|
||||||
return $this->_command;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ class Crypt_GPG_InvalidOperationException
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An exception thrown when an invalid GPG operation is attempted
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2008 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
*/
|
|
||||||
class Crypt_GPG_InvalidOperationException extends Crypt_GPG_Exception
|
|
||||||
{
|
|
||||||
// {{{ private class properties
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The attempted operation
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_operation = '';
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ __construct()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new Crypt_GPG_OpenSubprocessException
|
|
||||||
*
|
|
||||||
* @param string $message an error message.
|
|
||||||
* @param integer $code a user defined error code.
|
|
||||||
* @param string $operation the operation.
|
|
||||||
*/
|
|
||||||
public function __construct($message, $code = 0, $operation = '')
|
|
||||||
{
|
|
||||||
$this->_operation = $operation;
|
|
||||||
parent::__construct($message, $code);
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getOperation()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the contents of the internal _operation property
|
|
||||||
*
|
|
||||||
* @return string the attempted operation.
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG_InvalidOperationException::$_operation
|
|
||||||
*/
|
|
||||||
public function getOperation()
|
|
||||||
{
|
|
||||||
return $this->_operation;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ class Crypt_GPG_KeyNotFoundException
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An exception thrown when Crypt_GPG fails to find the key for various
|
|
||||||
* operations
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2005 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
*/
|
|
||||||
class Crypt_GPG_KeyNotFoundException extends Crypt_GPG_Exception
|
|
||||||
{
|
|
||||||
// {{{ private class properties
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The key identifier that was searched for
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_keyId = '';
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ __construct()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new Crypt_GPG_KeyNotFoundException
|
|
||||||
*
|
|
||||||
* @param string $message an error message.
|
|
||||||
* @param integer $code a user defined error code.
|
|
||||||
* @param string $keyId the key identifier of the key.
|
|
||||||
*/
|
|
||||||
public function __construct($message, $code = 0, $keyId= '')
|
|
||||||
{
|
|
||||||
$this->_keyId = $keyId;
|
|
||||||
parent::__construct($message, $code);
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getKeyId()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the key identifier of the key that was not found
|
|
||||||
*
|
|
||||||
* @return string the key identifier of the key that was not found.
|
|
||||||
*/
|
|
||||||
public function getKeyId()
|
|
||||||
{
|
|
||||||
return $this->_keyId;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ class Crypt_GPG_NoDataException
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An exception thrown when Crypt_GPG cannot find valid data for various
|
|
||||||
* operations
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2006 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
*/
|
|
||||||
class Crypt_GPG_NoDataException extends Crypt_GPG_Exception
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ class Crypt_GPG_BadPassphraseException
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An exception thrown when a required passphrase is incorrect or missing
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2006-2008 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
*/
|
|
||||||
class Crypt_GPG_BadPassphraseException extends Crypt_GPG_Exception
|
|
||||||
{
|
|
||||||
// {{{ private class properties
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Keys for which the passhprase is missing
|
|
||||||
*
|
|
||||||
* This contains primary user ids indexed by sub-key id.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
private $_missingPassphrases = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Keys for which the passhprase is incorrect
|
|
||||||
*
|
|
||||||
* This contains primary user ids indexed by sub-key id.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
private $_badPassphrases = array();
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ __construct()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new Crypt_GPG_BadPassphraseException
|
|
||||||
*
|
|
||||||
* @param string $message an error message.
|
|
||||||
* @param integer $code a user defined error code.
|
|
||||||
* @param string $badPassphrases an array containing user ids of keys
|
|
||||||
* for which the passphrase is incorrect.
|
|
||||||
* @param string $missingPassphrases an array containing user ids of keys
|
|
||||||
* for which the passphrase is missing.
|
|
||||||
*/
|
|
||||||
public function __construct($message, $code = 0,
|
|
||||||
array $badPassphrases = array(), array $missingPassphrases = array()
|
|
||||||
) {
|
|
||||||
$this->_badPassphrases = $badPassphrases;
|
|
||||||
$this->_missingPassphrases = $missingPassphrases;
|
|
||||||
|
|
||||||
parent::__construct($message, $code);
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getBadPassphrases()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets keys for which the passhprase is incorrect
|
|
||||||
*
|
|
||||||
* @return array an array of keys for which the passphrase is incorrect.
|
|
||||||
* The array contains primary user ids indexed by the sub-key
|
|
||||||
* id.
|
|
||||||
*/
|
|
||||||
public function getBadPassphrases()
|
|
||||||
{
|
|
||||||
return $this->_badPassphrases;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getMissingPassphrases()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets keys for which the passhprase is missing
|
|
||||||
*
|
|
||||||
* @return array an array of keys for which the passphrase is missing.
|
|
||||||
* The array contains primary user ids indexed by the sub-key
|
|
||||||
* id.
|
|
||||||
*/
|
|
||||||
public function getMissingPassphrases()
|
|
||||||
{
|
|
||||||
return $this->_missingPassphrases;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ class Crypt_GPG_DeletePrivateKeyException
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An exception thrown when an attempt is made to delete public key that has an
|
|
||||||
* associated private key on the keyring
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2008 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
*/
|
|
||||||
class Crypt_GPG_DeletePrivateKeyException extends Crypt_GPG_Exception
|
|
||||||
{
|
|
||||||
// {{{ private class properties
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The key identifier the deletion attempt was made upon
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_keyId = '';
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ __construct()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new Crypt_GPG_DeletePrivateKeyException
|
|
||||||
*
|
|
||||||
* @param string $message an error message.
|
|
||||||
* @param integer $code a user defined error code.
|
|
||||||
* @param string $keyId the key identifier of the public key that was
|
|
||||||
* attempted to delete.
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG::deletePublicKey()
|
|
||||||
*/
|
|
||||||
public function __construct($message, $code = 0, $keyId = '')
|
|
||||||
{
|
|
||||||
$this->_keyId = $keyId;
|
|
||||||
parent::__construct($message, $code);
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getKeyId()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the key identifier of the key that was not found
|
|
||||||
*
|
|
||||||
* @return string the key identifier of the key that was not found.
|
|
||||||
*/
|
|
||||||
public function getKeyId()
|
|
||||||
{
|
|
||||||
return $this->_keyId;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ class Crypt_GPG_KeyNotCreatedException
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An exception thrown when an attempt is made to generate a key and the
|
|
||||||
* attempt fails
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2011 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
*/
|
|
||||||
class Crypt_GPG_KeyNotCreatedException extends Crypt_GPG_Exception
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ class Crypt_GPG_InvalidKeyParamsException
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An exception thrown when an attempt is made to generate a key and the
|
|
||||||
* key parameters set on the key generator are invalid
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2011 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
*/
|
|
||||||
class Crypt_GPG_InvalidKeyParamsException extends Crypt_GPG_Exception
|
|
||||||
{
|
|
||||||
// {{{ private class properties
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The key algorithm
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*/
|
|
||||||
private $_algorithm = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The key size
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*/
|
|
||||||
private $_size = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The key usage
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*/
|
|
||||||
private $_usage = 0;
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ __construct()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new Crypt_GPG_InvalidKeyParamsException
|
|
||||||
*
|
|
||||||
* @param string $message an error message.
|
|
||||||
* @param integer $code a user defined error code.
|
|
||||||
* @param string $algorithm the key algorithm.
|
|
||||||
* @param string $size the key size.
|
|
||||||
* @param string $usage the key usage.
|
|
||||||
*/
|
|
||||||
public function __construct(
|
|
||||||
$message,
|
|
||||||
$code = 0,
|
|
||||||
$algorithm = 0,
|
|
||||||
$size = 0,
|
|
||||||
$usage = 0
|
|
||||||
) {
|
|
||||||
parent::__construct($message, $code);
|
|
||||||
|
|
||||||
$this->_algorithm = $algorithm;
|
|
||||||
$this->_size = $size;
|
|
||||||
$this->_usage = $usage;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getAlgorithm()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the key algorithm
|
|
||||||
*
|
|
||||||
* @return integer the key algorithm.
|
|
||||||
*/
|
|
||||||
public function getAlgorithm()
|
|
||||||
{
|
|
||||||
return $this->_algorithm;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getSize()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the key size
|
|
||||||
*
|
|
||||||
* @return integer the key size.
|
|
||||||
*/
|
|
||||||
public function getSize()
|
|
||||||
{
|
|
||||||
return $this->_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getUsage()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the key usage
|
|
||||||
*
|
|
||||||
* @return integer the key usage.
|
|
||||||
*/
|
|
||||||
public function getUsage()
|
|
||||||
{
|
|
||||||
return $this->_usage;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
|
|
||||||
?>
|
|
@ -1,223 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Contains a class representing GPG keys
|
|
||||||
*
|
|
||||||
* PHP version 5
|
|
||||||
*
|
|
||||||
* LICENSE:
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2.1 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2008-2010 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @version CVS: $Id$
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sub-key class definition
|
|
||||||
*/
|
|
||||||
require_once 'Crypt/GPG/SubKey.php';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* User id class definition
|
|
||||||
*/
|
|
||||||
require_once 'Crypt/GPG/UserId.php';
|
|
||||||
|
|
||||||
// {{{ class Crypt_GPG_Key
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A data class for GPG key information
|
|
||||||
*
|
|
||||||
* This class is used to store the results of the {@link Crypt_GPG::getKeys()}
|
|
||||||
* method.
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2008-2010 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
* @see Crypt_GPG::getKeys()
|
|
||||||
*/
|
|
||||||
class Crypt_GPG_Key
|
|
||||||
{
|
|
||||||
// {{{ class properties
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The user ids associated with this key
|
|
||||||
*
|
|
||||||
* This is an array of {@link Crypt_GPG_UserId} objects.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG_Key::addUserId()
|
|
||||||
* @see Crypt_GPG_Key::getUserIds()
|
|
||||||
*/
|
|
||||||
private $_userIds = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The subkeys of this key
|
|
||||||
*
|
|
||||||
* This is an array of {@link Crypt_GPG_SubKey} objects.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG_Key::addSubKey()
|
|
||||||
* @see Crypt_GPG_Key::getSubKeys()
|
|
||||||
*/
|
|
||||||
private $_subKeys = array();
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getSubKeys()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the sub-keys of this key
|
|
||||||
*
|
|
||||||
* @return array the sub-keys of this key.
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG_Key::addSubKey()
|
|
||||||
*/
|
|
||||||
public function getSubKeys()
|
|
||||||
{
|
|
||||||
return $this->_subKeys;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getUserIds()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the user ids of this key
|
|
||||||
*
|
|
||||||
* @return array the user ids of this key.
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG_Key::addUserId()
|
|
||||||
*/
|
|
||||||
public function getUserIds()
|
|
||||||
{
|
|
||||||
return $this->_userIds;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getPrimaryKey()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the primary sub-key of this key
|
|
||||||
*
|
|
||||||
* The primary key is the first added sub-key.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_SubKey the primary sub-key of this key.
|
|
||||||
*/
|
|
||||||
public function getPrimaryKey()
|
|
||||||
{
|
|
||||||
$primary_key = null;
|
|
||||||
if (count($this->_subKeys) > 0) {
|
|
||||||
$primary_key = $this->_subKeys[0];
|
|
||||||
}
|
|
||||||
return $primary_key;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ canSign()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets whether or not this key can sign data
|
|
||||||
*
|
|
||||||
* This key can sign data if any sub-key of this key can sign data.
|
|
||||||
*
|
|
||||||
* @return boolean true if this key can sign data and false if this key
|
|
||||||
* cannot sign data.
|
|
||||||
*/
|
|
||||||
public function canSign()
|
|
||||||
{
|
|
||||||
$canSign = false;
|
|
||||||
foreach ($this->_subKeys as $subKey) {
|
|
||||||
if ($subKey->canSign()) {
|
|
||||||
$canSign = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $canSign;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ canEncrypt()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets whether or not this key can encrypt data
|
|
||||||
*
|
|
||||||
* This key can encrypt data if any sub-key of this key can encrypt data.
|
|
||||||
*
|
|
||||||
* @return boolean true if this key can encrypt data and false if this
|
|
||||||
* key cannot encrypt data.
|
|
||||||
*/
|
|
||||||
public function canEncrypt()
|
|
||||||
{
|
|
||||||
$canEncrypt = false;
|
|
||||||
foreach ($this->_subKeys as $subKey) {
|
|
||||||
if ($subKey->canEncrypt()) {
|
|
||||||
$canEncrypt = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $canEncrypt;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ addSubKey()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds a sub-key to this key
|
|
||||||
*
|
|
||||||
* The first added sub-key will be the primary key of this key.
|
|
||||||
*
|
|
||||||
* @param Crypt_GPG_SubKey $subKey the sub-key to add.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_Key the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function addSubKey(Crypt_GPG_SubKey $subKey)
|
|
||||||
{
|
|
||||||
$this->_subKeys[] = $subKey;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ addUserId()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds a user id to this key
|
|
||||||
*
|
|
||||||
* @param Crypt_GPG_UserId $userId the user id to add.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_Key the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function addUserId(Crypt_GPG_UserId $userId)
|
|
||||||
{
|
|
||||||
$this->_userIds[] = $userId;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
|
|
||||||
?>
|
|
@ -1,790 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Crypt_GPG is a package to use GPG from PHP
|
|
||||||
*
|
|
||||||
* This file contains an object that handles GnuPG key generation.
|
|
||||||
*
|
|
||||||
* PHP version 5
|
|
||||||
*
|
|
||||||
* LICENSE:
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2.1 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2011-2013 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @version CVS: $Id:$
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
* @link http://www.gnupg.org/
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Base class for GPG methods
|
|
||||||
*/
|
|
||||||
require_once 'Crypt/GPGAbstract.php';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Status output handler for key generation
|
|
||||||
*/
|
|
||||||
require_once 'Crypt/GPG/KeyGeneratorStatusHandler.php';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Error output handler for key generation
|
|
||||||
*/
|
|
||||||
require_once 'Crypt/GPG/KeyGeneratorErrorHandler.php';
|
|
||||||
|
|
||||||
// {{{ class Crypt_GPG_KeyGenerator
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GnuPG key generator
|
|
||||||
*
|
|
||||||
* This class provides an object oriented interface for generating keys with
|
|
||||||
* the GNU Privacy Guard (GPG).
|
|
||||||
*
|
|
||||||
* Secure key generation requires true random numbers, and as such can be slow.
|
|
||||||
* If the operating system runs out of entropy, key generation will block until
|
|
||||||
* more entropy is available.
|
|
||||||
*
|
|
||||||
* If quick key generation is important, a hardware entropy generator, or an
|
|
||||||
* entropy gathering daemon may be installed. For example, administrators of
|
|
||||||
* Debian systems may want to install the 'randomsound' package.
|
|
||||||
*
|
|
||||||
* This class uses the experimental automated key generation support available
|
|
||||||
* in GnuPG. See <b>doc/DETAILS</b> in the
|
|
||||||
* {@link http://www.gnupg.org/download/ GPG distribution} for detailed
|
|
||||||
* information on the key generation format.
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Nathan Fredrickson <nathan@silverorange.com>
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2005-2013 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
* @link http://www.gnupg.org/
|
|
||||||
*/
|
|
||||||
class Crypt_GPG_KeyGenerator extends Crypt_GPGAbstract
|
|
||||||
{
|
|
||||||
// {{{ protected properties
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The expiration date of generated keys
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG_KeyGenerator::setExpirationDate()
|
|
||||||
*/
|
|
||||||
protected $expirationDate = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The passphrase of generated keys
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG_KeyGenerator::setPassphrase()
|
|
||||||
*/
|
|
||||||
protected $passphrase = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The algorithm for generated primary keys
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG_KeyGenerator::setKeyParams()
|
|
||||||
*/
|
|
||||||
protected $keyAlgorithm = Crypt_GPG_SubKey::ALGORITHM_DSA;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The size of generated primary keys
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG_KeyGenerator::setKeyParams()
|
|
||||||
*/
|
|
||||||
protected $keySize = 1024;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The usages of generated primary keys
|
|
||||||
*
|
|
||||||
* This is a bitwise combination of the usage constants in
|
|
||||||
* {@link Crypt_GPG_SubKey}.
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG_KeyGenerator::setKeyParams()
|
|
||||||
*/
|
|
||||||
protected $keyUsage = 6; // USAGE_SIGN | USAGE_CERTIFY
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The algorithm for generated sub-keys
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG_KeyGenerator::setSubKeyParams()
|
|
||||||
*/
|
|
||||||
protected $subKeyAlgorithm = Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The size of generated sub-keys
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG_KeyGenerator::setSubKeyParams()
|
|
||||||
*/
|
|
||||||
protected $subKeySize = 2048;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The usages of generated sub-keys
|
|
||||||
*
|
|
||||||
* This is a bitwise combination of the usage constants in
|
|
||||||
* {@link Crypt_GPG_SubKey}.
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG_KeyGenerator::setSubKeyParams()
|
|
||||||
*/
|
|
||||||
protected $subKeyUsage = Crypt_GPG_SubKey::USAGE_ENCRYPT;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The GnuPG status handler to use for key generation
|
|
||||||
*
|
|
||||||
* @var Crypt_GPG_KeyGeneratorStatusHandler
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG_KeyGenerator::setStatusHandler()
|
|
||||||
*/
|
|
||||||
protected $statusHandler = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The GnuPG error handler to use for key generation
|
|
||||||
*
|
|
||||||
* @var Crypt_GPG_KeyGeneratorErrorHandler
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG_KeyGenerator::setErrorHandler()
|
|
||||||
*/
|
|
||||||
protected $errorHandler = null;
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ __construct()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new GnuPG key generator
|
|
||||||
*
|
|
||||||
* Available options are:
|
|
||||||
*
|
|
||||||
* - <kbd>string homedir</kbd> - the directory where the GPG
|
|
||||||
* keyring files are stored. If not
|
|
||||||
* specified, Crypt_GPG uses the
|
|
||||||
* default of <kbd>~/.gnupg</kbd>.
|
|
||||||
* - <kbd>string publicKeyring</kbd> - the file path of the public
|
|
||||||
* keyring. Use this if the public
|
|
||||||
* keyring is not in the homedir, or
|
|
||||||
* if the keyring is in a directory
|
|
||||||
* not writable by the process
|
|
||||||
* invoking GPG (like Apache). Then
|
|
||||||
* you can specify the path to the
|
|
||||||
* keyring with this option
|
|
||||||
* (/foo/bar/pubring.gpg), and specify
|
|
||||||
* a writable directory (like /tmp)
|
|
||||||
* using the <i>homedir</i> option.
|
|
||||||
* - <kbd>string privateKeyring</kbd> - the file path of the private
|
|
||||||
* keyring. Use this if the private
|
|
||||||
* keyring is not in the homedir, or
|
|
||||||
* if the keyring is in a directory
|
|
||||||
* not writable by the process
|
|
||||||
* invoking GPG (like Apache). Then
|
|
||||||
* you can specify the path to the
|
|
||||||
* keyring with this option
|
|
||||||
* (/foo/bar/secring.gpg), and specify
|
|
||||||
* a writable directory (like /tmp)
|
|
||||||
* using the <i>homedir</i> option.
|
|
||||||
* - <kbd>string trustDb</kbd> - the file path of the web-of-trust
|
|
||||||
* database. Use this if the trust
|
|
||||||
* database is not in the homedir, or
|
|
||||||
* if the database is in a directory
|
|
||||||
* not writable by the process
|
|
||||||
* invoking GPG (like Apache). Then
|
|
||||||
* you can specify the path to the
|
|
||||||
* trust database with this option
|
|
||||||
* (/foo/bar/trustdb.gpg), and specify
|
|
||||||
* a writable directory (like /tmp)
|
|
||||||
* using the <i>homedir</i> option.
|
|
||||||
* - <kbd>string binary</kbd> - the location of the GPG binary. If
|
|
||||||
* not specified, the driver attempts
|
|
||||||
* to auto-detect the GPG binary
|
|
||||||
* location using a list of known
|
|
||||||
* default locations for the current
|
|
||||||
* operating system. The option
|
|
||||||
* <kbd>gpgBinary</kbd> is a
|
|
||||||
* deprecated alias for this option.
|
|
||||||
* - <kbd>string agent</kbd> - the location of the GnuPG agent
|
|
||||||
* binary. The gpg-agent is only
|
|
||||||
* used for GnuPG 2.x. If not
|
|
||||||
* specified, the engine attempts
|
|
||||||
* to auto-detect the gpg-agent
|
|
||||||
* binary location using a list of
|
|
||||||
* know default locations for the
|
|
||||||
* current operating system.
|
|
||||||
* - <kbd>boolean debug</kbd> - whether or not to use debug mode.
|
|
||||||
* When debug mode is on, all
|
|
||||||
* communication to and from the GPG
|
|
||||||
* subprocess is logged. This can be
|
|
||||||
*
|
|
||||||
* @param array $options optional. An array of options used to create the
|
|
||||||
* GPG object. All options are optional and are
|
|
||||||
* represented as key-value pairs.
|
|
||||||
*
|
|
||||||
* @throws Crypt_GPG_FileException if the <kbd>homedir</kbd> does not exist
|
|
||||||
* and cannot be created. This can happen if <kbd>homedir</kbd> is
|
|
||||||
* not specified, Crypt_GPG is run as the web user, and the web
|
|
||||||
* user has no home directory. This exception is also thrown if any
|
|
||||||
* of the options <kbd>publicKeyring</kbd>,
|
|
||||||
* <kbd>privateKeyring</kbd> or <kbd>trustDb</kbd> options are
|
|
||||||
* specified but the files do not exist or are are not readable.
|
|
||||||
* This can happen if the user running the Crypt_GPG process (for
|
|
||||||
* example, the Apache user) does not have permission to read the
|
|
||||||
* files.
|
|
||||||
*
|
|
||||||
* @throws PEAR_Exception if the provided <kbd>binary</kbd> is invalid, or
|
|
||||||
* if no <kbd>binary</kbd> is provided and no suitable binary could
|
|
||||||
* be found.
|
|
||||||
*
|
|
||||||
* @throws PEAR_Exception if the provided <kbd>agent</kbd> is invalid, or
|
|
||||||
* if no <kbd>agent</kbd> is provided and no suitable gpg-agent
|
|
||||||
* cound be found.
|
|
||||||
*/
|
|
||||||
public function __construct(array $options = array())
|
|
||||||
{
|
|
||||||
parent::__construct($options);
|
|
||||||
|
|
||||||
$this->statusHandler = new Crypt_GPG_KeyGeneratorStatusHandler();
|
|
||||||
$this->errorHandler = new Crypt_GPG_KeyGeneratorErrorHandler();
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setExpirationDate()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the expiration date of generated keys
|
|
||||||
*
|
|
||||||
* @param string|integer $date either a string that may be parsed by
|
|
||||||
* PHP's strtotime() function, or an integer
|
|
||||||
* timestamp representing the number of seconds
|
|
||||||
* since the UNIX epoch. This date must be at
|
|
||||||
* least one date in the future. Keys that
|
|
||||||
* expire in the past may not be generated. Use
|
|
||||||
* an expiration date of 0 for keys that do not
|
|
||||||
* expire.
|
|
||||||
*
|
|
||||||
* @throws InvalidArgumentException if the date is not a valid format, or
|
|
||||||
* if the date is not at least one day in
|
|
||||||
* the future, or if the date is greater
|
|
||||||
* than 2038-01-19T03:14:07.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_KeyGenerator the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setExpirationDate($date)
|
|
||||||
{
|
|
||||||
if (is_int($date) || ctype_digit(strval($date))) {
|
|
||||||
$expirationDate = intval($date);
|
|
||||||
} else {
|
|
||||||
$expirationDate = strtotime($date);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($expirationDate === false) {
|
|
||||||
throw new InvalidArgumentException(
|
|
||||||
sprintf(
|
|
||||||
'Invalid expiration date format: "%s". Please use a ' .
|
|
||||||
'format compatible with PHP\'s strtotime().',
|
|
||||||
$date
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($expirationDate !== 0 && $expirationDate < time() + 86400) {
|
|
||||||
throw new InvalidArgumentException(
|
|
||||||
'Expiration date must be at least a day in the future.'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// GnuPG suffers from the 2038 bug
|
|
||||||
if ($expirationDate > 2147483647) {
|
|
||||||
throw new InvalidArgumentException(
|
|
||||||
'Expiration date must not be greater than 2038-01-19T03:14:07.'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->expirationDate = $expirationDate;
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setPassphrase()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the passphrase of generated keys
|
|
||||||
*
|
|
||||||
* @param string $passphrase the passphrase to use for generated keys. Use
|
|
||||||
* null or an empty string for no passphrase.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_KeyGenerator the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setPassphrase($passphrase)
|
|
||||||
{
|
|
||||||
$this->passphrase = strval($passphrase);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setKeyParams()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the parameters for the primary key of generated key-pairs
|
|
||||||
*
|
|
||||||
* @param integer $algorithm the algorithm used by the key. This should be
|
|
||||||
* one of the Crypt_GPG_SubKey::ALGORITHM_*
|
|
||||||
* constants.
|
|
||||||
* @param integer $size optional. The size of the key. Different
|
|
||||||
* algorithms have different size requirements.
|
|
||||||
* If not specified, the default size for the
|
|
||||||
* specified algorithm will be used. If an
|
|
||||||
* invalid key size is used, GnuPG will do its
|
|
||||||
* best to round it to a valid size.
|
|
||||||
* @param integer $usage optional. A bitwise combination of key usages.
|
|
||||||
* If not specified, the primary key will be used
|
|
||||||
* only to sign and certify. This is the default
|
|
||||||
* behavior of GnuPG in interactive mode. Use
|
|
||||||
* the Crypt_GPG_SubKey::USAGE_* constants here.
|
|
||||||
* The primary key may be used to certify even
|
|
||||||
* if the certify usage is not specified.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_KeyGenerator the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setKeyParams($algorithm, $size = 0, $usage = 0)
|
|
||||||
{
|
|
||||||
$apgorithm = intval($algorithm);
|
|
||||||
|
|
||||||
if ($algorithm === Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC) {
|
|
||||||
throw new Crypt_GPG_InvalidKeyParamsException(
|
|
||||||
'Primary key algorithm must be capable of signing. The ' .
|
|
||||||
'Elgamal algorithm can only encrypt.',
|
|
||||||
0,
|
|
||||||
$algorithm,
|
|
||||||
$size,
|
|
||||||
$usage
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($size != 0) {
|
|
||||||
$size = intval($size);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($usage != 0) {
|
|
||||||
$usage = intval($usage);
|
|
||||||
}
|
|
||||||
|
|
||||||
$usageEncrypt = Crypt_GPG_SubKey::USAGE_ENCRYPT;
|
|
||||||
|
|
||||||
if ( $algorithm === Crypt_GPG_SubKey::ALGORITHM_DSA
|
|
||||||
&& ($usage & $usageEncrypt) === $usageEncrypt
|
|
||||||
) {
|
|
||||||
throw new Crypt_GPG_InvalidKeyParamsException(
|
|
||||||
'The DSA algorithm is not capable of encrypting. Please ' .
|
|
||||||
'specify a different algorithm or do not include encryption ' .
|
|
||||||
'as a usage for the primary key.',
|
|
||||||
0,
|
|
||||||
$algorithm,
|
|
||||||
$size,
|
|
||||||
$usage
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->keyAlgorithm = $algorithm;
|
|
||||||
|
|
||||||
if ($size != 0) {
|
|
||||||
$this->keySize = $size;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($usage != 0) {
|
|
||||||
$this->keyUsage = $usage;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setSubKeyParams()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the parameters for the sub-key of generated key-pairs
|
|
||||||
*
|
|
||||||
* @param integer $algorithm the algorithm used by the key. This should be
|
|
||||||
* one of the Crypt_GPG_SubKey::ALGORITHM_*
|
|
||||||
* constants.
|
|
||||||
* @param integer $size optional. The size of the key. Different
|
|
||||||
* algorithms have different size requirements.
|
|
||||||
* If not specified, the default size for the
|
|
||||||
* specified algorithm will be used. If an
|
|
||||||
* invalid key size is used, GnuPG will do its
|
|
||||||
* best to round it to a valid size.
|
|
||||||
* @param integer $usage optional. A bitwise combination of key usages.
|
|
||||||
* If not specified, the sub-key will be used
|
|
||||||
* only to encrypt. This is the default behavior
|
|
||||||
* of GnuPG in interactive mode. Use the
|
|
||||||
* Crypt_GPG_SubKey::USAGE_* constants here.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_KeyGenerator the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setSubKeyParams($algorithm, $size = '', $usage = 0)
|
|
||||||
{
|
|
||||||
$apgorithm = intval($algorithm);
|
|
||||||
|
|
||||||
if ($size != 0) {
|
|
||||||
$size = intval($size);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($usage != 0) {
|
|
||||||
$usage = intval($usage);
|
|
||||||
}
|
|
||||||
|
|
||||||
$usageSign = Crypt_GPG_SubKey::USAGE_SIGN;
|
|
||||||
|
|
||||||
if ( $algorithm === Crypt_GPG_SubKey::ALGORITHM_ELGAMAL_ENC
|
|
||||||
&& ($usage & $usageSign) === $usageSign
|
|
||||||
) {
|
|
||||||
throw new Crypt_GPG_InvalidKeyParamsException(
|
|
||||||
'The Elgamal algorithm is not capable of signing. Please ' .
|
|
||||||
'specify a different algorithm or do not include signing ' .
|
|
||||||
'as a usage for the sub-key.',
|
|
||||||
0,
|
|
||||||
$algorithm,
|
|
||||||
$size,
|
|
||||||
$usage
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$usageEncrypt = Crypt_GPG_SubKey::USAGE_ENCRYPT;
|
|
||||||
|
|
||||||
if ( $algorithm === Crypt_GPG_SubKey::ALGORITHM_DSA
|
|
||||||
&& ($usage & $usageEncrypt) === $usageEncrypt
|
|
||||||
) {
|
|
||||||
throw new Crypt_GPG_InvalidKeyParamsException(
|
|
||||||
'The DSA algorithm is not capable of encrypting. Please ' .
|
|
||||||
'specify a different algorithm or do not include encryption ' .
|
|
||||||
'as a usage for the sub-key.',
|
|
||||||
0,
|
|
||||||
$algorithm,
|
|
||||||
$size,
|
|
||||||
$usage
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->subKeyAlgorithm = $algorithm;
|
|
||||||
|
|
||||||
if ($size != 0) {
|
|
||||||
$this->subKeySize = $size;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($usage != 0) {
|
|
||||||
$this->subKeyUsage = $usage;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setStatusHandler()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the status handler to use for key generation
|
|
||||||
*
|
|
||||||
* Normally this method does not need to be used. It provides a means for
|
|
||||||
* dependency injection.
|
|
||||||
*
|
|
||||||
* @param Crypt_GPG_KeyStatusHandler $handler the key status handler to
|
|
||||||
* use.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_KeyGenerator the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setStatusHandler(
|
|
||||||
Crypt_GPG_KeyGeneratorStatusHandler $handler
|
|
||||||
) {
|
|
||||||
$this->statusHandler = $handler;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setErrorHandler()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the error handler to use for key generation
|
|
||||||
*
|
|
||||||
* Normally this method does not need to be used. It provides a means for
|
|
||||||
* dependency injection.
|
|
||||||
*
|
|
||||||
* @param Crypt_GPG_KeyErrorHandler $handler the key error handler to
|
|
||||||
* use.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_KeyGenerator the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setErrorHandler(
|
|
||||||
Crypt_GPG_KeyGeneratorErrorHandler $handler
|
|
||||||
) {
|
|
||||||
$this->errorHandler = $handler;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ generateKey()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generates a new key-pair in the current keyring
|
|
||||||
*
|
|
||||||
* Secure key generation requires true random numbers, and as such can be
|
|
||||||
* solw. If the operating system runs out of entropy, key generation will
|
|
||||||
* block until more entropy is available.
|
|
||||||
*
|
|
||||||
* If quick key generation is important, a hardware entropy generator, or
|
|
||||||
* an entropy gathering daemon may be installed. For example,
|
|
||||||
* administrators of Debian systems may want to install the 'randomsound'
|
|
||||||
* package.
|
|
||||||
*
|
|
||||||
* @param string|Crypt_GPG_UserId $name either a {@link Crypt_GPG_UserId}
|
|
||||||
* object, or a string containing
|
|
||||||
* the name of the user id.
|
|
||||||
* @param string $email optional. If <i>$name</i> is
|
|
||||||
* specified as a string, this is
|
|
||||||
* the email address of the user id.
|
|
||||||
* @param string $comment optional. If <i>$name</i> is
|
|
||||||
* specified as a string, this is
|
|
||||||
* the comment of the user id.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_Key the newly generated key.
|
|
||||||
*
|
|
||||||
* @throws Crypt_GPG_KeyNotCreatedException if the key parameters are
|
|
||||||
* incorrect, if an unknown error occurs during key generation, or
|
|
||||||
* if the newly generated key is not found in the keyring.
|
|
||||||
*
|
|
||||||
* @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
|
|
||||||
* Use the <kbd>debug</kbd> option and file a bug report if these
|
|
||||||
* exceptions occur.
|
|
||||||
*/
|
|
||||||
public function generateKey($name, $email = '', $comment = '')
|
|
||||||
{
|
|
||||||
$handle = uniqid('key', true);
|
|
||||||
|
|
||||||
$userId = $this->getUserId($name, $email, $comment);
|
|
||||||
|
|
||||||
$keyParams = array(
|
|
||||||
'Key-Type' => $this->keyAlgorithm,
|
|
||||||
'Key-Length' => $this->keySize,
|
|
||||||
'Key-Usage' => $this->getUsage($this->keyUsage),
|
|
||||||
'Subkey-Type' => $this->subKeyAlgorithm,
|
|
||||||
'Subkey-Length' => $this->subKeySize,
|
|
||||||
'Subkey-Usage' => $this->getUsage($this->subKeyUsage),
|
|
||||||
'Name-Real' => $userId->getName(),
|
|
||||||
'Handle' => $handle,
|
|
||||||
);
|
|
||||||
|
|
||||||
if ($this->expirationDate != 0) {
|
|
||||||
// GnuPG only accepts granularity of days
|
|
||||||
$expirationDate = date('Y-m-d', $this->expirationDate);
|
|
||||||
$keyParams['Expire-Date'] = $expirationDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->passphrase != '') {
|
|
||||||
$keyParams['Passphrase'] = $this->passphrase;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($userId->getEmail() != '') {
|
|
||||||
$keyParams['Name-Email'] = $userId->getEmail();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($userId->getComment() != '') {
|
|
||||||
$keyParams['Name-Comment'] = $userId->getComment();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$keyParamsFormatted = array();
|
|
||||||
foreach ($keyParams as $name => $value) {
|
|
||||||
$keyParamsFormatted[] = $name . ': ' . $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
$input = implode("\n", $keyParamsFormatted) . "\n%commit\n";
|
|
||||||
|
|
||||||
$statusHandler = clone $this->statusHandler;
|
|
||||||
$statusHandler->setHandle($handle);
|
|
||||||
|
|
||||||
$errorHandler = clone $this->errorHandler;
|
|
||||||
|
|
||||||
$this->engine->reset();
|
|
||||||
$this->engine->addStatusHandler(array($statusHandler, 'handle'));
|
|
||||||
$this->engine->addErrorHandler(array($errorHandler, 'handle'));
|
|
||||||
$this->engine->setInput($input);
|
|
||||||
$this->engine->setOutput($output);
|
|
||||||
$this->engine->setOperation('--gen-key', array('--batch'));
|
|
||||||
$this->engine->run();
|
|
||||||
|
|
||||||
$code = $errorHandler->getErrorCode();
|
|
||||||
switch ($code) {
|
|
||||||
case self::ERROR_BAD_KEY_PARAMS:
|
|
||||||
switch ($errorHandler->getLineNumber()) {
|
|
||||||
case 1:
|
|
||||||
throw new Crypt_GPG_InvalidKeyParamsException(
|
|
||||||
'Invalid primary key algorithm specified.',
|
|
||||||
0,
|
|
||||||
$this->keyAlgorithm,
|
|
||||||
$this->keySize,
|
|
||||||
$this->keyUsage
|
|
||||||
);
|
|
||||||
case 4:
|
|
||||||
throw new Crypt_GPG_InvalidKeyParamsException(
|
|
||||||
'Invalid sub-key algorithm specified.',
|
|
||||||
0,
|
|
||||||
$this->subKeyAlgorithm,
|
|
||||||
$this->subKeySize,
|
|
||||||
$this->subKeyUsage
|
|
||||||
);
|
|
||||||
default:
|
|
||||||
throw new Crypt_GPG_InvalidKeyParamsException(
|
|
||||||
'Invalid key algorithm specified.'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$code = $this->engine->getErrorCode();
|
|
||||||
|
|
||||||
switch ($code) {
|
|
||||||
case self::ERROR_NONE:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new Crypt_GPG_Exception(
|
|
||||||
'Unknown error generating key-pair. Please use the \'debug\' ' .
|
|
||||||
'option when creating the Crypt_GPG object, and file a bug ' .
|
|
||||||
'report at ' . self::BUG_URI,
|
|
||||||
$code
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$code = $statusHandler->getErrorCode();
|
|
||||||
|
|
||||||
switch ($code) {
|
|
||||||
case self::ERROR_NONE:
|
|
||||||
break;
|
|
||||||
case self::ERROR_KEY_NOT_CREATED:
|
|
||||||
throw new Crypt_GPG_KeyNotCreatedException(
|
|
||||||
'Unable to create new key-pair. Invalid key parameters. ' .
|
|
||||||
'Make sure the specified key algorithms and sizes are ' .
|
|
||||||
'correct.',
|
|
||||||
$code
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$fingerprint = $statusHandler->getKeyFingerprint();
|
|
||||||
$keys = $this->_getKeys($fingerprint);
|
|
||||||
|
|
||||||
if (count($keys) === 0) {
|
|
||||||
throw new Crypt_GPG_KeyNotCreatedException(
|
|
||||||
sprintf(
|
|
||||||
'Newly created key "%s" not found in keyring.',
|
|
||||||
$fingerprint
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $keys[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getUsage()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Builds a GnuPG key usage string suitable for key generation
|
|
||||||
*
|
|
||||||
* See <b>doc/DETAILS</b> in the
|
|
||||||
* {@link http://www.gnupg.org/download/ GPG distribution} for detailed
|
|
||||||
* information on the key usage format.
|
|
||||||
*
|
|
||||||
* @param integer $usage a bitwise combination of the key usages. This is
|
|
||||||
* a combination of the Crypt_GPG_SubKey::USAGE_*
|
|
||||||
* constants.
|
|
||||||
*
|
|
||||||
* @return string the key usage string.
|
|
||||||
*/
|
|
||||||
protected function getUsage($usage)
|
|
||||||
{
|
|
||||||
$map = array(
|
|
||||||
Crypt_GPG_SubKey::USAGE_ENCRYPT => 'encrypt',
|
|
||||||
Crypt_GPG_SubKey::USAGE_SIGN => 'sign',
|
|
||||||
Crypt_GPG_SubKey::USAGE_CERTIFY => 'cert',
|
|
||||||
Crypt_GPG_SubKey::USAGE_AUTHENTICATION => 'auth',
|
|
||||||
);
|
|
||||||
|
|
||||||
// cert is always used for primary keys and does not need to be
|
|
||||||
// specified
|
|
||||||
$usage &= ~Crypt_GPG_SubKey::USAGE_CERTIFY;
|
|
||||||
|
|
||||||
$usageArray = array();
|
|
||||||
|
|
||||||
foreach ($map as $key => $value) {
|
|
||||||
if (($usage & $key) === $key) {
|
|
||||||
$usageArray[] = $value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return implode(',', $usageArray);
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getUserId()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets a user id object from parameters
|
|
||||||
*
|
|
||||||
* @param string|Crypt_GPG_UserId $name either a {@link Crypt_GPG_UserId}
|
|
||||||
* object, or a string containing
|
|
||||||
* the name of the user id.
|
|
||||||
* @param string $email optional. If <i>$name</i> is
|
|
||||||
* specified as a string, this is
|
|
||||||
* the email address of the user id.
|
|
||||||
* @param string $comment optional. If <i>$name</i> is
|
|
||||||
* specified as a string, this is
|
|
||||||
* the comment of the user id.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_UserId a user id object for the specified parameters.
|
|
||||||
*/
|
|
||||||
protected function getUserId($name, $email = '', $comment = '')
|
|
||||||
{
|
|
||||||
if ($name instanceof Crypt_GPG_UserId) {
|
|
||||||
$userId = $name;
|
|
||||||
} else {
|
|
||||||
$userId = new Crypt_GPG_UserId();
|
|
||||||
$userId->setName($name)->setEmail($email)->setComment($comment);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $userId;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
|
|
||||||
?>
|
|
@ -1,121 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Crypt_GPG is a package to use GPG from PHP
|
|
||||||
*
|
|
||||||
* This file contains an object that handles GPG's error output for the
|
|
||||||
* key generation operation.
|
|
||||||
*
|
|
||||||
* PHP version 5
|
|
||||||
*
|
|
||||||
* LICENSE:
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2.1 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2011-2013 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @version CVS: $Id:$
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
* @link http://www.gnupg.org/
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Error line handler for the key generation operation
|
|
||||||
*
|
|
||||||
* This class is used internally by Crypt_GPG and does not need be used
|
|
||||||
* directly. See the {@link Crypt_GPG} class for end-user API.
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2011-2013 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
* @link http://www.gnupg.org/
|
|
||||||
*/
|
|
||||||
class Crypt_GPG_KeyGeneratorErrorHandler
|
|
||||||
{
|
|
||||||
// {{{ protected properties
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Error code (if any) caused by key generation
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*/
|
|
||||||
protected $errorCode = Crypt_GPG::ERROR_NONE;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Line number at which the error occurred
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*/
|
|
||||||
protected $lineNumber = null;
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ handle()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles an error line
|
|
||||||
*
|
|
||||||
* @param string $line the error line to handle.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function handle($line)
|
|
||||||
{
|
|
||||||
$matches = array();
|
|
||||||
$pattern = '/:([0-9]+): invalid algorithm$/';
|
|
||||||
if (preg_match($pattern, $line, $matches) === 1) {
|
|
||||||
$this->errorCode = Crypt_GPG::ERROR_BAD_KEY_PARAMS;
|
|
||||||
$this->lineNumber = intval($matches[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getErrorCode()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the error code resulting from key gneration
|
|
||||||
*
|
|
||||||
* @return integer the error code resulting from key generation.
|
|
||||||
*/
|
|
||||||
public function getErrorCode()
|
|
||||||
{
|
|
||||||
return $this->errorCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getLineNumber()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the line number at which the error occurred
|
|
||||||
*
|
|
||||||
* @return integer the line number at which the error occurred. Null if
|
|
||||||
* no error occurred.
|
|
||||||
*/
|
|
||||||
public function getLineNumber()
|
|
||||||
{
|
|
||||||
return $this->lineNumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
@ -1,173 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Crypt_GPG is a package to use GPG from PHP
|
|
||||||
*
|
|
||||||
* This file contains an object that handles GPG's status output for the
|
|
||||||
* key generation operation.
|
|
||||||
*
|
|
||||||
* PHP version 5
|
|
||||||
*
|
|
||||||
* LICENSE:
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2.1 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2011-2013 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @version CVS: $Id:$
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
* @link http://www.gnupg.org/
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Status line handler for the key generation operation
|
|
||||||
*
|
|
||||||
* This class is used internally by Crypt_GPG and does not need be used
|
|
||||||
* directly. See the {@link Crypt_GPG} class for end-user API.
|
|
||||||
*
|
|
||||||
* This class is responsible for parsing the final key fingerprint from the
|
|
||||||
* status output and for updating the key generation progress file. See
|
|
||||||
* <b>doc/DETAILS</b> in the
|
|
||||||
* {@link http://www.gnupg.org/download/ GPG distribution} for detailed
|
|
||||||
* information on GPG's status output for the batch key generation operation.
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2011-2013 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
* @link http://www.gnupg.org/
|
|
||||||
*/
|
|
||||||
class Crypt_GPG_KeyGeneratorStatusHandler
|
|
||||||
{
|
|
||||||
// {{{ protected properties
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The key fingerprint
|
|
||||||
*
|
|
||||||
* Ths key fingerprint is emitted by GPG after the key generation is
|
|
||||||
* complete.
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected $keyFingerprint = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The unique key handle used by this handler
|
|
||||||
*
|
|
||||||
* The key handle is used to track GPG status output for a particular key
|
|
||||||
* before the key has its own identifier.
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG_KeyGeneratorStatusHandler::setHandle()
|
|
||||||
*/
|
|
||||||
protected $handle = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Error code (if any) caused by key generation
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*/
|
|
||||||
protected $errorCode = Crypt_GPG::ERROR_NONE;
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setHandle()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the unique key handle used by this handler
|
|
||||||
*
|
|
||||||
* The key handle is used to track GPG status output for a particular key
|
|
||||||
* before the key has its own identifier.
|
|
||||||
*
|
|
||||||
* @param string $handle the key handle this status handle will use.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_KeyGeneratorStatusHandler the current object, for
|
|
||||||
* fluent interface.
|
|
||||||
*/
|
|
||||||
public function setHandle($handle)
|
|
||||||
{
|
|
||||||
$this->handle = strval($handle);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ handle()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles a status line
|
|
||||||
*
|
|
||||||
* @param string $line the status line to handle.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function handle($line)
|
|
||||||
{
|
|
||||||
$tokens = explode(' ', $line);
|
|
||||||
switch ($tokens[0]) {
|
|
||||||
case 'KEY_CREATED':
|
|
||||||
if ($tokens[3] == $this->handle) {
|
|
||||||
$this->keyFingerprint = $tokens[2];
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'KEY_NOT_CREATED':
|
|
||||||
if ($tokens[1] == $this->handle) {
|
|
||||||
$this->errorCode = Crypt_GPG::ERROR_KEY_NOT_CREATED;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'PROGRESS':
|
|
||||||
// todo: at some point, support reporting status async
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getKeyFingerprint()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the key fingerprint parsed by this handler
|
|
||||||
*
|
|
||||||
* @return array the key fingerprint parsed by this handler.
|
|
||||||
*/
|
|
||||||
public function getKeyFingerprint()
|
|
||||||
{
|
|
||||||
return $this->keyFingerprint;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getErrorCode()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the error code resulting from key gneration
|
|
||||||
*
|
|
||||||
* @return integer the error code resulting from key generation.
|
|
||||||
*/
|
|
||||||
public function getErrorCode()
|
|
||||||
{
|
|
||||||
return $this->errorCode;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
@ -1,875 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Contains a class implementing automatic pinentry for gpg-agent
|
|
||||||
*
|
|
||||||
* PHP version 5
|
|
||||||
*
|
|
||||||
* LICENSE:
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2.1 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2013 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @version CVS: $Id$
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* CLI user-interface and parser.
|
|
||||||
*/
|
|
||||||
require_once 'Console/CommandLine.php';
|
|
||||||
|
|
||||||
// {{{ class Crypt_GPG_PinEntry
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A command-line dummy pinentry program for use with gpg-agent and Crypt_GPG
|
|
||||||
*
|
|
||||||
* This pinentry receives passphrases through en environment variable and
|
|
||||||
* automatically enters the PIN in response to gpg-agent requests. No user-
|
|
||||||
* interaction required.
|
|
||||||
*
|
|
||||||
* Thie pinentry can be run independently for testing and debugging with the
|
|
||||||
* following syntax:
|
|
||||||
*
|
|
||||||
* <pre>
|
|
||||||
* Usage:
|
|
||||||
* crypt-gpg-pinentry [options]
|
|
||||||
*
|
|
||||||
* Options:
|
|
||||||
* -l log, --log=log Optional location to log pinentry activity.
|
|
||||||
* -v, --verbose Sets verbosity level. Use multiples for more detail
|
|
||||||
* (e.g. "-vv").
|
|
||||||
* -h, --help show this help message and exit
|
|
||||||
* --version show the program version and exit
|
|
||||||
* </pre>
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2013 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
* @see Crypt_GPG::getKeys()
|
|
||||||
*/
|
|
||||||
class Crypt_GPG_PinEntry
|
|
||||||
{
|
|
||||||
// {{{ class constants
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Verbosity level for showing no output.
|
|
||||||
*/
|
|
||||||
const VERBOSITY_NONE = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Verbosity level for showing error output.
|
|
||||||
*/
|
|
||||||
const VERBOSITY_ERRORS = 1;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Verbosity level for showing all output, including Assuan protocol
|
|
||||||
* messages.
|
|
||||||
*/
|
|
||||||
const VERBOSITY_ALL = 2;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Length of buffer for reading lines from the Assuan server.
|
|
||||||
*
|
|
||||||
* PHP reads 8192 bytes. If this is set to less than 8192, PHP reads 8192
|
|
||||||
* and buffers the rest so we might as well just read 8192.
|
|
||||||
*
|
|
||||||
* Using values other than 8192 also triggers PHP bugs.
|
|
||||||
*
|
|
||||||
* @see http://bugs.php.net/bug.php?id=35224
|
|
||||||
*/
|
|
||||||
const CHUNK_SIZE = 8192;
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ protected properties
|
|
||||||
|
|
||||||
/**
|
|
||||||
* File handle for the input stream
|
|
||||||
*
|
|
||||||
* @var resource
|
|
||||||
*/
|
|
||||||
protected $stdin = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* File handle for the output stream
|
|
||||||
*
|
|
||||||
* @var resource
|
|
||||||
*/
|
|
||||||
protected $stdout = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* File handle for the log file if a log file is used
|
|
||||||
*
|
|
||||||
* @var resource
|
|
||||||
*/
|
|
||||||
protected $logFile = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether or not this pinentry is finished and is exiting
|
|
||||||
*
|
|
||||||
* @var boolean
|
|
||||||
*/
|
|
||||||
protected $moribund = false;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Verbosity level
|
|
||||||
*
|
|
||||||
* One of:
|
|
||||||
* - {@link Crypt_GPG_PinEntry::VERBOSITY_NONE},
|
|
||||||
* - {@link Crypt_GPG_PinEntry::VERBOSITY_ERRORS}, or
|
|
||||||
* - {@link Crypt_GPG_PinEntry::VERBOSITY_ALL}
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*/
|
|
||||||
protected $verbosity = self::VERBOSITY_NONE;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The command-line interface parser for this pinentry
|
|
||||||
*
|
|
||||||
* @var Console_CommandLine
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG_PinEntry::getParser()
|
|
||||||
*/
|
|
||||||
protected $parser = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PINs to be entered by this pinentry
|
|
||||||
*
|
|
||||||
* An indexed array of associative arrays in the form:
|
|
||||||
* <code>
|
|
||||||
* <?php
|
|
||||||
* array(
|
|
||||||
* array(
|
|
||||||
* 'keyId' => $keyId,
|
|
||||||
* 'passphrase' => $passphrase
|
|
||||||
* ),
|
|
||||||
* ...
|
|
||||||
* );
|
|
||||||
* ?>
|
|
||||||
* </code>
|
|
||||||
*
|
|
||||||
* This array is parsed from the environment variable
|
|
||||||
* <kbd>PINENTRY_USER_DATA</kbd>.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG_PinEntry::initPinsFromENV()
|
|
||||||
*/
|
|
||||||
protected $pins = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* PINs that have been tried for the current PIN
|
|
||||||
*
|
|
||||||
* This is an associative array indexed by the key identifier with
|
|
||||||
* values being the same as elements in the {@link Crypt_GPG_PinEntry::$pins}
|
|
||||||
* array.
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $triedPins = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The PIN currently being requested by the Assuan server
|
|
||||||
*
|
|
||||||
* If set, this is an associative array in the form:
|
|
||||||
* <code>
|
|
||||||
* <?php
|
|
||||||
* array(
|
|
||||||
* 'keyId' => $shortKeyId,
|
|
||||||
* 'userId' => $userIdString
|
|
||||||
* );
|
|
||||||
* ?>
|
|
||||||
* </code>
|
|
||||||
*
|
|
||||||
* @var array|null
|
|
||||||
*/
|
|
||||||
protected $currentPin = null;
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ __invoke()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Runs this pinentry
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function __invoke()
|
|
||||||
{
|
|
||||||
$this->parser = $this->getCommandLineParser();
|
|
||||||
|
|
||||||
try {
|
|
||||||
$result = $this->parser->parse();
|
|
||||||
|
|
||||||
$this->setVerbosity($result->options['verbose']);
|
|
||||||
$this->setLogFilename($result->options['log']);
|
|
||||||
|
|
||||||
$this->connect();
|
|
||||||
$this->initPinsFromENV();
|
|
||||||
|
|
||||||
while (($line = fgets($this->stdin, self::CHUNK_SIZE)) !== false) {
|
|
||||||
$this->parseCommand(mb_substr($line, 0, -1, '8bit'));
|
|
||||||
if ($this->moribund) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->disconnect();
|
|
||||||
|
|
||||||
} catch (Console_CommandLineException $e) {
|
|
||||||
$this->log($e->getMessage() . PHP_EOL, slf::VERBOSITY_ERRORS);
|
|
||||||
exit(1);
|
|
||||||
} catch (Exception $e) {
|
|
||||||
$this->log($e->getMessage() . PHP_EOL, self::VERBOSITY_ERRORS);
|
|
||||||
$this->log($e->getTraceAsString() . PHP_EOL, self::VERBOSITY_ERRORS);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setVerbosity()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the verbosity of logging for this pinentry
|
|
||||||
*
|
|
||||||
* Verbosity levels are:
|
|
||||||
*
|
|
||||||
* - {@link Crypt_GPG_PinEntry::VERBOSITY_NONE} - no logging.
|
|
||||||
* - {@link Crypt_GPG_PinEntry::VERBOSITY_ERRORS} - log errors only.
|
|
||||||
* - {@link Crypt_GPG_PinEntry::VERBOSITY_ALL} - log everything, including
|
|
||||||
* the assuan protocol.
|
|
||||||
*
|
|
||||||
* @param integer $verbosity the level of verbosity of this pinentry.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_PinEntry the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setVerbosity($verbosity)
|
|
||||||
{
|
|
||||||
$this->verbosity = (integer)$verbosity;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setLogFilename()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the log file location
|
|
||||||
*
|
|
||||||
* @param string $filename the new log filename to use. If an empty string
|
|
||||||
* is used, file-based logging is disabled.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_PinEntry the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setLogFilename($filename)
|
|
||||||
{
|
|
||||||
if (is_resource($this->logFile)) {
|
|
||||||
fflush($this->logFile);
|
|
||||||
fclose($this->logFile);
|
|
||||||
$this->logFile = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($filename != '') {
|
|
||||||
if (($this->logFile = fopen($filename, 'w')) === false) {
|
|
||||||
$this->log(
|
|
||||||
'Unable to open log file "' . $filename . '" '
|
|
||||||
. 'for writing.' . PHP_EOL,
|
|
||||||
self::VERBOSITY_ERRORS
|
|
||||||
);
|
|
||||||
exit(1);
|
|
||||||
} else {
|
|
||||||
stream_set_write_buffer($this->logFile, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getUIXML()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the CLI user-interface definition for this pinentry
|
|
||||||
*
|
|
||||||
* Detects whether or not this package is PEAR-installed and appropriately
|
|
||||||
* locates the XML UI definition.
|
|
||||||
*
|
|
||||||
* @return string the location of the CLI user-interface definition XML.
|
|
||||||
*/
|
|
||||||
protected function getUIXML()
|
|
||||||
{
|
|
||||||
$dir = '@data-dir@' . DIRECTORY_SEPARATOR
|
|
||||||
. '@package-name@' . DIRECTORY_SEPARATOR . 'data';
|
|
||||||
|
|
||||||
// Check if we're running directly from a git checkout or if we're
|
|
||||||
// running from a PEAR-packaged version.
|
|
||||||
if ($dir[0] == '@') {
|
|
||||||
$dir = dirname(__FILE__) . DIRECTORY_SEPARATOR . '..'
|
|
||||||
. DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'data';
|
|
||||||
}
|
|
||||||
|
|
||||||
return $dir . DIRECTORY_SEPARATOR . 'pinentry-cli.xml';
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getCommandLineParser()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the CLI parser for this pinentry
|
|
||||||
*
|
|
||||||
* @return Console_CommandLine the CLI parser for this pinentry.
|
|
||||||
*/
|
|
||||||
protected function getCommandLineParser()
|
|
||||||
{
|
|
||||||
return Console_CommandLine::fromXmlFile($this->getUIXML());
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ log()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Logs a message at the specified verbosity level
|
|
||||||
*
|
|
||||||
* If a log file is used, the message is written to the log. Otherwise,
|
|
||||||
* the message is sent to STDERR.
|
|
||||||
*
|
|
||||||
* @param string $data the message to log.
|
|
||||||
* @param integer $level the verbosity level above which the message should
|
|
||||||
* be logged.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_PinEntry the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
protected function log($data, $level)
|
|
||||||
{
|
|
||||||
if ($this->verbosity >= $level) {
|
|
||||||
if (is_resource($this->logFile)) {
|
|
||||||
fwrite($this->logFile, $data);
|
|
||||||
fflush($this->logFile);
|
|
||||||
} else {
|
|
||||||
$this->parser->outputter->stderr($data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ connect()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Connects this pinentry to the assuan server
|
|
||||||
*
|
|
||||||
* Opens I/O streams and sends initial handshake.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_PinEntry the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
protected function connect()
|
|
||||||
{
|
|
||||||
// Binary operations will not work on Windows with PHP < 5.2.6.
|
|
||||||
$rb = (version_compare(PHP_VERSION, '5.2.6') < 0) ? 'r' : 'rb';
|
|
||||||
$wb = (version_compare(PHP_VERSION, '5.2.6') < 0) ? 'w' : 'wb';
|
|
||||||
|
|
||||||
$this->stdin = fopen('php://stdin', $rb);
|
|
||||||
$this->stdout = fopen('php://stdout', $wb);
|
|
||||||
|
|
||||||
if (function_exists('stream_set_read_buffer')) {
|
|
||||||
stream_set_read_buffer($this->stdin, 0);
|
|
||||||
}
|
|
||||||
stream_set_write_buffer($this->stdout, 0);
|
|
||||||
|
|
||||||
// initial handshake
|
|
||||||
$this->send($this->getOK('Crypt_GPG pinentry ready and waiting'));
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ parseCommand()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parses an assuan command and performs the appropriate action
|
|
||||||
*
|
|
||||||
* Documentation of the assuan commands for pinentry is limited to
|
|
||||||
* non-existent. Most of these commands were taken from the C source code
|
|
||||||
* to gpg-agent and pinentry.
|
|
||||||
*
|
|
||||||
* Additional context was provided by using strace -f when calling the
|
|
||||||
* gpg-agent.
|
|
||||||
*
|
|
||||||
* @param string $line the assuan command line to parse
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_PinEntry the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
protected function parseCommand($line)
|
|
||||||
{
|
|
||||||
$this->log('<- ' . $line . PHP_EOL, self::VERBOSITY_ALL);
|
|
||||||
|
|
||||||
$parts = explode(' ', $line, 2);
|
|
||||||
|
|
||||||
$command = $parts[0];
|
|
||||||
|
|
||||||
if (count($parts) === 2) {
|
|
||||||
$data = $parts[1];
|
|
||||||
} else {
|
|
||||||
$data = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch ($command) {
|
|
||||||
case 'SETDESC':
|
|
||||||
return $this->sendSetDescription($data);
|
|
||||||
|
|
||||||
case 'SETPROMPT':
|
|
||||||
case 'SETERROR':
|
|
||||||
case 'SETOK':
|
|
||||||
case 'SETNOTOK':
|
|
||||||
case 'SETCANCEL':
|
|
||||||
case 'SETQUALITYBAR':
|
|
||||||
case 'SETQUALITYBAR_TT':
|
|
||||||
case 'OPTION':
|
|
||||||
return $this->sendNotImplementedOK();
|
|
||||||
|
|
||||||
case 'MESSAGE':
|
|
||||||
return $this->sendMessage();
|
|
||||||
|
|
||||||
case 'CONFIRM':
|
|
||||||
return $this->sendConfirm();
|
|
||||||
|
|
||||||
case 'GETINFO':
|
|
||||||
return $this->sendGetInfo($data);
|
|
||||||
|
|
||||||
case 'GETPIN':
|
|
||||||
return $this->sendGetPin($data);
|
|
||||||
|
|
||||||
case 'RESET':
|
|
||||||
return $this->sendReset();
|
|
||||||
|
|
||||||
case 'BYE':
|
|
||||||
return $this->sendBye();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ initPinsFromENV()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initializes the PINs to be entered by this pinentry from the environment
|
|
||||||
* variable PINENTRY_USER_DATA
|
|
||||||
*
|
|
||||||
* The PINs are parsed from a JSON-encoded string.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_PinEntry the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
protected function initPinsFromENV()
|
|
||||||
{
|
|
||||||
if (($userData = getenv('PINENTRY_USER_DATA')) !== false) {
|
|
||||||
$pins = json_decode($userData, true);
|
|
||||||
if ($pins === null) {
|
|
||||||
$this->log(
|
|
||||||
'-- failed to parse user data' . PHP_EOL,
|
|
||||||
self::VERBOSITY_ERRORS
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
$this->pins = $pins;
|
|
||||||
$this->log(
|
|
||||||
'-- got user data [not showing passphrases]' . PHP_EOL,
|
|
||||||
self::VERBOSITY_ALL
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ disconnect()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Disconnects this pinentry from the Assuan server
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_PinEntry the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
protected function disconnect()
|
|
||||||
{
|
|
||||||
$this->log('-- disconnecting' . PHP_EOL, self::VERBOSITY_ALL);
|
|
||||||
|
|
||||||
fflush($this->stdout);
|
|
||||||
fclose($this->stdout);
|
|
||||||
fclose($this->stdin);
|
|
||||||
|
|
||||||
$this->stdin = null;
|
|
||||||
$this->stdout = null;
|
|
||||||
|
|
||||||
$this->log('-- disconnected' . PHP_EOL, self::VERBOSITY_ALL);
|
|
||||||
|
|
||||||
if (is_resource($this->logFile)) {
|
|
||||||
fflush($this->logFile);
|
|
||||||
fclose($this->logFile);
|
|
||||||
$this->logFile = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ sendNotImplementedOK()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends an OK response for a not implemented feature
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_PinEntry the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
protected function sendNotImplementedOK()
|
|
||||||
{
|
|
||||||
return $this->send($this->getOK());
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ sendSetDescription()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parses the currently requested key identifier and user identifier from
|
|
||||||
* the description passed to this pinentry
|
|
||||||
*
|
|
||||||
* @param string $text the raw description sent from gpg-agent.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_PinEntry the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
protected function sendSetDescription($text)
|
|
||||||
{
|
|
||||||
$text = rawurldecode($text);
|
|
||||||
$matches = array();
|
|
||||||
// TODO: handle user id with quotation marks
|
|
||||||
$exp = '/\n"(.+)"\n.*\sID ([A-Z0-9]+),\n/mu';
|
|
||||||
if (preg_match($exp, $text, $matches) === 1) {
|
|
||||||
$userId = $matches[1];
|
|
||||||
$keyId = $matches[2];
|
|
||||||
|
|
||||||
// only reset tried pins for new requested pin
|
|
||||||
if ( $this->currentPin === null
|
|
||||||
|| $this->currentPin['keyId'] !== $keyId
|
|
||||||
) {
|
|
||||||
$this->currentPin = array(
|
|
||||||
'userId' => $userId,
|
|
||||||
'keyId' => $keyId
|
|
||||||
);
|
|
||||||
$this->triedPins = array();
|
|
||||||
$this->log(
|
|
||||||
'-- looking for PIN for ' . $keyId . PHP_EOL,
|
|
||||||
self::VERBOSITY_ALL
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->send($this->getOK());
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ sendConfirm()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tells the assuan server the PIN entry was confirmed (not cancelled)
|
|
||||||
* by pressing the fake 'close' button
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_PinEntry the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
protected function sendConfirm()
|
|
||||||
{
|
|
||||||
return $this->sendButtonInfo('close');
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ sendMessage()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tells the assuan server that any requested pop-up messages were confirmed
|
|
||||||
* by pressing the fake 'close' button
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_PinEntry the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
protected function sendMessage()
|
|
||||||
{
|
|
||||||
return $this->sendButtonInfo('close');
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ sendButtonInfo()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends information about pressed buttons to the assuan server
|
|
||||||
*
|
|
||||||
* This is used to fake a user-interface for this pinentry.
|
|
||||||
*
|
|
||||||
* @param string $text the button status to send.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_PinEntry the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
protected function sendButtonInfo($text)
|
|
||||||
{
|
|
||||||
return $this->send('BUTTON_INFO ' . $text . "\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ sendGetPin()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends the PIN value for the currently requested key
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_PinEntry the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
protected function sendGetPin()
|
|
||||||
{
|
|
||||||
$foundPin = '';
|
|
||||||
|
|
||||||
if (is_array($this->currentPin)) {
|
|
||||||
$keyIdLength = mb_strlen($this->currentPin['keyId'], '8bit');
|
|
||||||
|
|
||||||
// search for the pin
|
|
||||||
foreach ($this->pins as $pin) {
|
|
||||||
// only check pins we haven't tried
|
|
||||||
if (!isset($this->triedPins[$pin['keyId']])) {
|
|
||||||
|
|
||||||
// get last X characters of key identifier to compare
|
|
||||||
$keyId = mb_substr(
|
|
||||||
$pin['keyId'],
|
|
||||||
-$keyIdLength,
|
|
||||||
mb_strlen($pin['keyId'], '8bit'),
|
|
||||||
'8bit'
|
|
||||||
);
|
|
||||||
|
|
||||||
if ($keyId === $this->currentPin['keyId']) {
|
|
||||||
$foundPin = $pin['passphrase'];
|
|
||||||
$this->triedPins[$pin['keyId']] = $pin;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this
|
|
||||||
->send($this->getData($foundPin))
|
|
||||||
->send($this->getOK());
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ sendGetInfo()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends information about this pinentry
|
|
||||||
*
|
|
||||||
* @param string $data the information requested by the assuan server.
|
|
||||||
* Currently only 'pid' is supported. Other requests
|
|
||||||
* return no information.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_PinEntry the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
protected function sendGetInfo($data)
|
|
||||||
{
|
|
||||||
$parts = explode(' ', $data, 2);
|
|
||||||
$command = reset($parts);
|
|
||||||
|
|
||||||
switch ($command) {
|
|
||||||
case 'pid':
|
|
||||||
return $this->sendGetInfoPID();
|
|
||||||
default:
|
|
||||||
return $this->send($this->getOK());
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
// }}}
|
|
||||||
// {{{ sendGetInfoPID()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends the PID of this pinentry to the assuan server
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_PinEntry the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
protected function sendGetInfoPID()
|
|
||||||
{
|
|
||||||
return $this
|
|
||||||
->send($this->getData(getmypid()))
|
|
||||||
->send($this->getOK());
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ sendBye()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Flags this pinentry for disconnection and sends an OK response
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_PinEntry the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
protected function sendBye()
|
|
||||||
{
|
|
||||||
$return = $this->send($this->getOK('closing connection'));
|
|
||||||
$this->moribund = true;
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ sendReset()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Resets this pinentry and sends an OK response
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_PinEntry the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
protected function sendReset()
|
|
||||||
{
|
|
||||||
$this->currentPin = null;
|
|
||||||
$this->triedPins = array();
|
|
||||||
return $this->send($this->getOK());
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getOK()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets an OK response to send to the assuan server
|
|
||||||
*
|
|
||||||
* @param string $data an optional message to include with the OK response.
|
|
||||||
*
|
|
||||||
* @return string the OK response.
|
|
||||||
*/
|
|
||||||
protected function getOK($data = null)
|
|
||||||
{
|
|
||||||
$return = 'OK';
|
|
||||||
|
|
||||||
if ($data) {
|
|
||||||
$return .= ' ' . $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $return . "\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getData()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets data ready to send to the assuan server
|
|
||||||
*
|
|
||||||
* Data is appropriately escaped and long lines are wrapped.
|
|
||||||
*
|
|
||||||
* @param string $data the data to send to the assuan server.
|
|
||||||
*
|
|
||||||
* @return string the properly escaped, formatted data.
|
|
||||||
*
|
|
||||||
* @see http://www.gnupg.org/documentation/manuals/assuan/Server-responses.html
|
|
||||||
*/
|
|
||||||
protected function getData($data)
|
|
||||||
{
|
|
||||||
// Escape data. Only %, \n and \r need to be escaped but other
|
|
||||||
// values are allowed to be escaped. See
|
|
||||||
// http://www.gnupg.org/documentation/manuals/assuan/Server-responses.html
|
|
||||||
$data = rawurlencode($data);
|
|
||||||
$data = $this->getWordWrappedData($data, 'D');
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getComment()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets a comment ready to send to the assuan server
|
|
||||||
*
|
|
||||||
* @param string $data the comment to send to the assuan server.
|
|
||||||
*
|
|
||||||
* @return string the properly formatted comment.
|
|
||||||
*
|
|
||||||
* @see http://www.gnupg.org/documentation/manuals/assuan/Server-responses.html
|
|
||||||
*/
|
|
||||||
protected function getComment($data)
|
|
||||||
{
|
|
||||||
return $this->getWordWrappedData($data, '#');
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getWordWrappedData()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Wraps strings at 1,000 bytes without splitting UTF-8 multibyte
|
|
||||||
* characters
|
|
||||||
*
|
|
||||||
* Each line is prepended with the specified line prefix. Wrapped lines
|
|
||||||
* are automatically appended with \ characters.
|
|
||||||
*
|
|
||||||
* Protocol strings are UTF-8 but maximum line length is 1,000 bytes.
|
|
||||||
* <kbd>mb_strcut()</kbd> is used so we can limit line length by bytes
|
|
||||||
* and not split characters across multiple lines.
|
|
||||||
*
|
|
||||||
* @param string $data the data to wrap.
|
|
||||||
* @param string $prefix a single character to use as the line prefix. For
|
|
||||||
* example, 'D' or '#'.
|
|
||||||
*
|
|
||||||
* @return string the word-wrapped, prefixed string.
|
|
||||||
*
|
|
||||||
* @see http://www.gnupg.org/documentation/manuals/assuan/Server-responses.html
|
|
||||||
*/
|
|
||||||
protected function getWordWrappedData($data, $prefix)
|
|
||||||
{
|
|
||||||
$lines = array();
|
|
||||||
|
|
||||||
do {
|
|
||||||
if (mb_strlen($data, '8bit') > 997) {
|
|
||||||
$line = $prefix . ' ' . mb_strcut($data, 0, 996, 'utf-8') . "\\\n";
|
|
||||||
$lines[] = $line;
|
|
||||||
$lineLength = mb_strlen($line, '8bit') - 1;
|
|
||||||
$dataLength = mb_substr($data, '8bit');
|
|
||||||
$data = mb_substr(
|
|
||||||
$data,
|
|
||||||
$lineLength,
|
|
||||||
$dataLength - $lineLength,
|
|
||||||
'8bit'
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
$lines[] = $prefix . ' ' . $data . "\n";
|
|
||||||
$data = '';
|
|
||||||
}
|
|
||||||
} while ($data != '');
|
|
||||||
|
|
||||||
return implode('', $lines);
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ send()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sends raw data to the assuan server
|
|
||||||
*
|
|
||||||
* @param string $data the data to send.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_PinEntry the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
protected function send($data)
|
|
||||||
{
|
|
||||||
$this->log('-> ' . $data, self::VERBOSITY_ALL);
|
|
||||||
fwrite($this->stdout, $data);
|
|
||||||
fflush($this->stdout);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
|
|
||||||
?>
|
|
@ -1,150 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A class for monitoring and terminating processes
|
|
||||||
*
|
|
||||||
* PHP version 5
|
|
||||||
*
|
|
||||||
* LICENSE:
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2.1 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2013 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @version CVS: $Id$
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
*/
|
|
||||||
|
|
||||||
// {{{ class Crypt_GPG_ProcessControl
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A class for monitoring and terminating processes by PID
|
|
||||||
*
|
|
||||||
* This is used to safely terminate the gpg-agent for GnuPG 2.x. This class
|
|
||||||
* is limited in its abilities and can only check if a PID is running and
|
|
||||||
* send a PID SIGTERM.
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2013 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
*/
|
|
||||||
class Crypt_GPG_ProcessControl
|
|
||||||
{
|
|
||||||
// {{{ protected properties
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The PID (process identifier) being monitored
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*/
|
|
||||||
protected $pid;
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ __construct()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new process controller from the given PID (process identifier)
|
|
||||||
*
|
|
||||||
* @param integer $pid the PID (process identifier).
|
|
||||||
*/
|
|
||||||
public function __construct($pid)
|
|
||||||
{
|
|
||||||
$this->pid = $pid;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ public function getPid()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the PID (process identifier) being controlled
|
|
||||||
*
|
|
||||||
* @return integer the PID being controlled.
|
|
||||||
*/
|
|
||||||
public function getPid()
|
|
||||||
{
|
|
||||||
return $this->pid;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ isRunning()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the process is running
|
|
||||||
*
|
|
||||||
* Uses <kbd>ps</kbd> on UNIX-like systems and <kbd>tasklist</kbd> on
|
|
||||||
* Windows.
|
|
||||||
*
|
|
||||||
* @return boolean true if the process is running, false if not.
|
|
||||||
*/
|
|
||||||
public function isRunning()
|
|
||||||
{
|
|
||||||
$running = false;
|
|
||||||
|
|
||||||
if (PHP_OS === 'WINNT') {
|
|
||||||
$command = 'tasklist /fo csv /nh /fi '
|
|
||||||
. escapeshellarg('PID eq ' . $this->pid);
|
|
||||||
|
|
||||||
$result = exec($command);
|
|
||||||
$parts = explode(',', $result);
|
|
||||||
$running = (count($parts) > 1 && trim($parts[1], '"') == $this->pid);
|
|
||||||
} else {
|
|
||||||
$result = exec('ps -p ' . escapeshellarg($this->pid) . ' -o pid=');
|
|
||||||
$running = (trim($result) == $this->pid);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $running;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ terminate()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Ends the process gracefully
|
|
||||||
*
|
|
||||||
* The signal SIGTERM is sent to the process. The gpg-agent process will
|
|
||||||
* end gracefully upon receiving the SIGTERM signal. Upon 3 consecutive
|
|
||||||
* SIGTERM signals the gpg-agent will forcefully shut down.
|
|
||||||
*
|
|
||||||
* If the <kbd>posix</kbd> extension is available, <kbd>posix_kill()</kbd>
|
|
||||||
* is used. Otherwise <kbd>kill</kbd> is used on UNIX-like systems and
|
|
||||||
* <kbd>taskkill</kbd> is used in Windows.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function terminate()
|
|
||||||
{
|
|
||||||
if (function_exists('posix_kill')) {
|
|
||||||
posix_kill($this->pid, 15);
|
|
||||||
} elseif (PHP_OS === 'WINNT') {
|
|
||||||
exec('taskkill /PID ' . escapeshellarg($this->pid));
|
|
||||||
} else {
|
|
||||||
exec('kill -15 ' . escapeshellarg($this->pid));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
|
|
||||||
?>
|
|
@ -1,427 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A class representing GPG signatures
|
|
||||||
*
|
|
||||||
* This file contains a data class representing a GPG signature.
|
|
||||||
*
|
|
||||||
* PHP version 5
|
|
||||||
*
|
|
||||||
* LICENSE:
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2.1 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Nathan Fredrickson <nathan@silverorange.com>
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2005-2013 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @version CVS: $Id$
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* User id class definition
|
|
||||||
*/
|
|
||||||
require_once 'Crypt/GPG/UserId.php';
|
|
||||||
|
|
||||||
// {{{ class Crypt_GPG_Signature
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A class for GPG signature information
|
|
||||||
*
|
|
||||||
* This class is used to store the results of the Crypt_GPG::verify() method.
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Nathan Fredrickson <nathan@silverorange.com>
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2005-2013 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
* @see Crypt_GPG::verify()
|
|
||||||
*/
|
|
||||||
class Crypt_GPG_Signature
|
|
||||||
{
|
|
||||||
// {{{ class properties
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A base64-encoded string containing a unique id for this signature if
|
|
||||||
* this signature has been verified as ok
|
|
||||||
*
|
|
||||||
* This id is used to prevent replay attacks and is not present for all
|
|
||||||
* types of signatures.
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_id = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The fingerprint of the key used to create the signature
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_keyFingerprint = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The id of the key used to create the signature
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_keyId = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The creation date of this signature
|
|
||||||
*
|
|
||||||
* This is a Unix timestamp.
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*/
|
|
||||||
private $_creationDate = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The expiration date of the signature
|
|
||||||
*
|
|
||||||
* This is a Unix timestamp. If this signature does not expire, this will
|
|
||||||
* be zero.
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*/
|
|
||||||
private $_expirationDate = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The user id associated with this signature
|
|
||||||
*
|
|
||||||
* @var Crypt_GPG_UserId
|
|
||||||
*/
|
|
||||||
private $_userId = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether or not this signature is valid
|
|
||||||
*
|
|
||||||
* @var boolean
|
|
||||||
*/
|
|
||||||
private $_isValid = false;
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ __construct()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new signature
|
|
||||||
*
|
|
||||||
* Signatures can be initialized from an array of named values. Available
|
|
||||||
* names are:
|
|
||||||
*
|
|
||||||
* - <kbd>string id</kbd> - the unique id of this signature.
|
|
||||||
* - <kbd>string fingerprint</kbd> - the fingerprint of the key used to
|
|
||||||
* create the signature. The fingerprint
|
|
||||||
* should not contain formatting
|
|
||||||
* characters.
|
|
||||||
* - <kbd>string keyId</kbd> - the id of the key used to create the
|
|
||||||
* the signature.
|
|
||||||
* - <kbd>integer creation</kbd> - the date the signature was created.
|
|
||||||
* This is a UNIX timestamp.
|
|
||||||
* - <kbd>integer expiration</kbd> - the date the signature expired. This
|
|
||||||
* is a UNIX timestamp. If the signature
|
|
||||||
* does not expire, use 0.
|
|
||||||
* - <kbd>boolean valid</kbd> - whether or not the signature is valid.
|
|
||||||
* - <kbd>string userId</kbd> - the user id associated with the
|
|
||||||
* signature. This may also be a
|
|
||||||
* {@link Crypt_GPG_UserId} object.
|
|
||||||
*
|
|
||||||
* @param Crypt_GPG_Signature|array $signature optional. Either an existing
|
|
||||||
* signature object, which is copied; or an array of initial values.
|
|
||||||
*/
|
|
||||||
public function __construct($signature = null)
|
|
||||||
{
|
|
||||||
// copy from object
|
|
||||||
if ($signature instanceof Crypt_GPG_Signature) {
|
|
||||||
$this->_id = $signature->_id;
|
|
||||||
$this->_keyFingerprint = $signature->_keyFingerprint;
|
|
||||||
$this->_keyId = $signature->_keyId;
|
|
||||||
$this->_creationDate = $signature->_creationDate;
|
|
||||||
$this->_expirationDate = $signature->_expirationDate;
|
|
||||||
$this->_isValid = $signature->_isValid;
|
|
||||||
|
|
||||||
if ($signature->_userId instanceof Crypt_GPG_UserId) {
|
|
||||||
$this->_userId = clone $signature->_userId;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// initialize from array
|
|
||||||
if (is_array($signature)) {
|
|
||||||
if (array_key_exists('id', $signature)) {
|
|
||||||
$this->setId($signature['id']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_key_exists('fingerprint', $signature)) {
|
|
||||||
$this->setKeyFingerprint($signature['fingerprint']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_key_exists('keyId', $signature)) {
|
|
||||||
$this->setKeyId($signature['keyId']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_key_exists('creation', $signature)) {
|
|
||||||
$this->setCreationDate($signature['creation']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_key_exists('expiration', $signature)) {
|
|
||||||
$this->setExpirationDate($signature['expiration']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_key_exists('valid', $signature)) {
|
|
||||||
$this->setValid($signature['valid']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_key_exists('userId', $signature)) {
|
|
||||||
$userId = new Crypt_GPG_UserId($signature['userId']);
|
|
||||||
$this->setUserId($userId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getId()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the id of this signature
|
|
||||||
*
|
|
||||||
* @return string a base64-encoded string containing a unique id for this
|
|
||||||
* signature. This id is used to prevent replay attacks and
|
|
||||||
* is not present for all types of signatures.
|
|
||||||
*/
|
|
||||||
public function getId()
|
|
||||||
{
|
|
||||||
return $this->_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getKeyFingerprint()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the fingerprint of the key used to create this signature
|
|
||||||
*
|
|
||||||
* @return string the fingerprint of the key used to create this signature.
|
|
||||||
*/
|
|
||||||
public function getKeyFingerprint()
|
|
||||||
{
|
|
||||||
return $this->_keyFingerprint;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getKeyId()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the id of the key used to create this signature
|
|
||||||
*
|
|
||||||
* Whereas the fingerprint of the signing key may not always be available
|
|
||||||
* (for example if the signature is bad), the id should always be
|
|
||||||
* available.
|
|
||||||
*
|
|
||||||
* @return string the id of the key used to create this signature.
|
|
||||||
*/
|
|
||||||
public function getKeyId()
|
|
||||||
{
|
|
||||||
return $this->_keyId;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getCreationDate()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the creation date of this signature
|
|
||||||
*
|
|
||||||
* @return integer the creation date of this signature. This is a Unix
|
|
||||||
* timestamp.
|
|
||||||
*/
|
|
||||||
public function getCreationDate()
|
|
||||||
{
|
|
||||||
return $this->_creationDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getExpirationDate()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the expiration date of the signature
|
|
||||||
*
|
|
||||||
* @return integer the expiration date of this signature. This is a Unix
|
|
||||||
* timestamp. If this signature does not expire, this will
|
|
||||||
* be zero.
|
|
||||||
*/
|
|
||||||
public function getExpirationDate()
|
|
||||||
{
|
|
||||||
return $this->_expirationDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getUserId()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the user id associated with this signature
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_UserId the user id associated with this signature.
|
|
||||||
*/
|
|
||||||
public function getUserId()
|
|
||||||
{
|
|
||||||
return $this->_userId;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ isValid()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets whether or no this signature is valid
|
|
||||||
*
|
|
||||||
* @return boolean true if this signature is valid and false if it is not.
|
|
||||||
*/
|
|
||||||
public function isValid()
|
|
||||||
{
|
|
||||||
return $this->_isValid;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setId()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the id of this signature
|
|
||||||
*
|
|
||||||
* @param string $id a base64-encoded string containing a unique id for
|
|
||||||
* this signature.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_Signature the current object, for fluent interface.
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG_Signature::getId()
|
|
||||||
*/
|
|
||||||
public function setId($id)
|
|
||||||
{
|
|
||||||
$this->_id = strval($id);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setKeyFingerprint()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the key fingerprint of this signature
|
|
||||||
*
|
|
||||||
* @param string $fingerprint the key fingerprint of this signature. This
|
|
||||||
* is the fingerprint of the primary key used to
|
|
||||||
* create this signature.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_Signature the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setKeyFingerprint($fingerprint)
|
|
||||||
{
|
|
||||||
$this->_keyFingerprint = strval($fingerprint);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setKeyId()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the key id of this signature
|
|
||||||
*
|
|
||||||
* @param string $id the key id of this signature. This is the id of the
|
|
||||||
* primary key used to create this signature.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_Signature the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setKeyId($id)
|
|
||||||
{
|
|
||||||
$this->_keyId = strval($id);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setCreationDate()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the creation date of this signature
|
|
||||||
*
|
|
||||||
* @param integer $creationDate the creation date of this signature. This
|
|
||||||
* is a Unix timestamp.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_Signature the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setCreationDate($creationDate)
|
|
||||||
{
|
|
||||||
$this->_creationDate = intval($creationDate);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setExpirationDate()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the expiration date of this signature
|
|
||||||
*
|
|
||||||
* @param integer $expirationDate the expiration date of this signature.
|
|
||||||
* This is a Unix timestamp. Specify zero if
|
|
||||||
* this signature does not expire.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_Signature the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setExpirationDate($expirationDate)
|
|
||||||
{
|
|
||||||
$this->_expirationDate = intval($expirationDate);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setUserId()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the user id associated with this signature
|
|
||||||
*
|
|
||||||
* @param Crypt_GPG_UserId $userId the user id associated with this
|
|
||||||
* signature.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_Signature the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setUserId(Crypt_GPG_UserId $userId)
|
|
||||||
{
|
|
||||||
$this->_userId = $userId;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setValid()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets whether or not this signature is valid
|
|
||||||
*
|
|
||||||
* @param boolean $isValid true if this signature is valid and false if it
|
|
||||||
* is not.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_Signature the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setValid($isValid)
|
|
||||||
{
|
|
||||||
$this->_isValid = ($isValid) ? true : false;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
|
|
||||||
?>
|
|
@ -1,672 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Contains a class representing GPG sub-keys and constants for GPG algorithms
|
|
||||||
*
|
|
||||||
* PHP version 5
|
|
||||||
*
|
|
||||||
* LICENSE:
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2.1 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @author Nathan Fredrickson <nathan@silverorange.com>
|
|
||||||
* @copyright 2005-2010 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @version CVS: $Id$
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
*/
|
|
||||||
|
|
||||||
// {{{ class Crypt_GPG_SubKey
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A class for GPG sub-key information
|
|
||||||
*
|
|
||||||
* This class is used to store the results of the {@link Crypt_GPG::getKeys()}
|
|
||||||
* method. Sub-key objects are members of a {@link Crypt_GPG_Key} object.
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @author Nathan Fredrickson <nathan@silverorange.com>
|
|
||||||
* @copyright 2005-2010 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
* @see Crypt_GPG::getKeys()
|
|
||||||
* @see Crypt_GPG_Key::getSubKeys()
|
|
||||||
*/
|
|
||||||
class Crypt_GPG_SubKey
|
|
||||||
{
|
|
||||||
// {{{ algorithm class constants
|
|
||||||
|
|
||||||
/**
|
|
||||||
* RSA encryption algorithm.
|
|
||||||
*/
|
|
||||||
const ALGORITHM_RSA = 1;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Elgamal encryption algorithm (encryption only).
|
|
||||||
*/
|
|
||||||
const ALGORITHM_ELGAMAL_ENC = 16;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* DSA encryption algorithm (sometimes called DH, sign only).
|
|
||||||
*/
|
|
||||||
const ALGORITHM_DSA = 17;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Elgamal encryption algorithm (signage and encryption - should not be
|
|
||||||
* used).
|
|
||||||
*/
|
|
||||||
const ALGORITHM_ELGAMAL_ENC_SGN = 20;
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ usage class constants
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Key can be used to encrypt
|
|
||||||
*/
|
|
||||||
const USAGE_ENCRYPT = 1;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Key can be used to sign
|
|
||||||
*/
|
|
||||||
const USAGE_SIGN = 2;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Key can be used to certify other keys
|
|
||||||
*/
|
|
||||||
const USAGE_CERTIFY = 4;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Key can be used for authentication
|
|
||||||
*/
|
|
||||||
const USAGE_AUTHENTICATION = 8;
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ class properties
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The id of this sub-key
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_id = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The algorithm used to create this sub-key
|
|
||||||
*
|
|
||||||
* The value is one of the Crypt_GPG_SubKey::ALGORITHM_* constants.
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*/
|
|
||||||
private $_algorithm = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The fingerprint of this sub-key
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_fingerprint = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Length of this sub-key in bits
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*/
|
|
||||||
private $_length = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Date this sub-key was created
|
|
||||||
*
|
|
||||||
* This is a Unix timestamp.
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*/
|
|
||||||
private $_creationDate = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Date this sub-key expires
|
|
||||||
*
|
|
||||||
* This is a Unix timestamp. If this sub-key does not expire, this will be
|
|
||||||
* zero.
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*/
|
|
||||||
private $_expirationDate = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether or not this sub-key can sign data
|
|
||||||
*
|
|
||||||
* @var boolean
|
|
||||||
*/
|
|
||||||
private $_canSign = false;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether or not this sub-key can encrypt data
|
|
||||||
*
|
|
||||||
* @var boolean
|
|
||||||
*/
|
|
||||||
private $_canEncrypt = false;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether or not the private key for this sub-key exists in the keyring
|
|
||||||
*
|
|
||||||
* @var boolean
|
|
||||||
*/
|
|
||||||
private $_hasPrivate = false;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether or not this sub-key is revoked
|
|
||||||
*
|
|
||||||
* @var boolean
|
|
||||||
*/
|
|
||||||
private $_isRevoked = false;
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ __construct()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new sub-key object
|
|
||||||
*
|
|
||||||
* Sub-keys can be initialized from an array of named values. Available
|
|
||||||
* names are:
|
|
||||||
*
|
|
||||||
* - <kbd>string id</kbd> - the key id of the sub-key.
|
|
||||||
* - <kbd>integer algorithm</kbd> - the encryption algorithm of the
|
|
||||||
* sub-key.
|
|
||||||
* - <kbd>string fingerprint</kbd> - the fingerprint of the sub-key. The
|
|
||||||
* fingerprint should not contain
|
|
||||||
* formatting characters.
|
|
||||||
* - <kbd>integer length</kbd> - the length of the sub-key in bits.
|
|
||||||
* - <kbd>integer creation</kbd> - the date the sub-key was created.
|
|
||||||
* This is a UNIX timestamp.
|
|
||||||
* - <kbd>integer expiration</kbd> - the date the sub-key expires. This
|
|
||||||
* is a UNIX timestamp. If the sub-key
|
|
||||||
* does not expire, use 0.
|
|
||||||
* - <kbd>boolean canSign</kbd> - whether or not the sub-key can be
|
|
||||||
* used to sign data.
|
|
||||||
* - <kbd>boolean canEncrypt</kbd> - whether or not the sub-key can be
|
|
||||||
* used to encrypt data.
|
|
||||||
* - <kbd>boolean hasPrivate</kbd> - whether or not the private key for
|
|
||||||
* the sub-key exists in the keyring.
|
|
||||||
* - <kbd>boolean isRevoked</kbd> - whether or not this sub-key is
|
|
||||||
* revoked.
|
|
||||||
*
|
|
||||||
* @param Crypt_GPG_SubKey|string|array $key optional. Either an existing
|
|
||||||
* sub-key object, which is copied; a sub-key string, which is
|
|
||||||
* parsed; or an array of initial values.
|
|
||||||
*/
|
|
||||||
public function __construct($key = null)
|
|
||||||
{
|
|
||||||
// parse from string
|
|
||||||
if (is_string($key)) {
|
|
||||||
$key = self::parse($key);
|
|
||||||
}
|
|
||||||
|
|
||||||
// copy from object
|
|
||||||
if ($key instanceof Crypt_GPG_SubKey) {
|
|
||||||
$this->_id = $key->_id;
|
|
||||||
$this->_algorithm = $key->_algorithm;
|
|
||||||
$this->_fingerprint = $key->_fingerprint;
|
|
||||||
$this->_length = $key->_length;
|
|
||||||
$this->_creationDate = $key->_creationDate;
|
|
||||||
$this->_expirationDate = $key->_expirationDate;
|
|
||||||
$this->_canSign = $key->_canSign;
|
|
||||||
$this->_canEncrypt = $key->_canEncrypt;
|
|
||||||
$this->_hasPrivate = $key->_hasPrivate;
|
|
||||||
$this->_isRevoked = $key->_isRevoked;
|
|
||||||
}
|
|
||||||
|
|
||||||
// initialize from array
|
|
||||||
if (is_array($key)) {
|
|
||||||
if (array_key_exists('id', $key)) {
|
|
||||||
$this->setId($key['id']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_key_exists('algorithm', $key)) {
|
|
||||||
$this->setAlgorithm($key['algorithm']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_key_exists('fingerprint', $key)) {
|
|
||||||
$this->setFingerprint($key['fingerprint']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_key_exists('length', $key)) {
|
|
||||||
$this->setLength($key['length']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_key_exists('creation', $key)) {
|
|
||||||
$this->setCreationDate($key['creation']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_key_exists('expiration', $key)) {
|
|
||||||
$this->setExpirationDate($key['expiration']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_key_exists('canSign', $key)) {
|
|
||||||
$this->setCanSign($key['canSign']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_key_exists('canEncrypt', $key)) {
|
|
||||||
$this->setCanEncrypt($key['canEncrypt']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_key_exists('hasPrivate', $key)) {
|
|
||||||
$this->setHasPrivate($key['hasPrivate']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_key_exists('isRevoked', $key)) {
|
|
||||||
$this->setRevoked($key['isRevoked']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getId()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the id of this sub-key
|
|
||||||
*
|
|
||||||
* @return string the id of this sub-key.
|
|
||||||
*/
|
|
||||||
public function getId()
|
|
||||||
{
|
|
||||||
return $this->_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getAlgorithm()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the algorithm used by this sub-key
|
|
||||||
*
|
|
||||||
* The algorithm should be one of the Crypt_GPG_SubKey::ALGORITHM_*
|
|
||||||
* constants.
|
|
||||||
*
|
|
||||||
* @return integer the algorithm used by this sub-key.
|
|
||||||
*/
|
|
||||||
public function getAlgorithm()
|
|
||||||
{
|
|
||||||
return $this->_algorithm;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getCreationDate()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the creation date of this sub-key
|
|
||||||
*
|
|
||||||
* This is a Unix timestamp.
|
|
||||||
*
|
|
||||||
* @return integer the creation date of this sub-key.
|
|
||||||
*/
|
|
||||||
public function getCreationDate()
|
|
||||||
{
|
|
||||||
return $this->_creationDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getExpirationDate()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the date this sub-key expires
|
|
||||||
*
|
|
||||||
* This is a Unix timestamp. If this sub-key does not expire, this will be
|
|
||||||
* zero.
|
|
||||||
*
|
|
||||||
* @return integer the date this sub-key expires.
|
|
||||||
*/
|
|
||||||
public function getExpirationDate()
|
|
||||||
{
|
|
||||||
return $this->_expirationDate;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getFingerprint()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the fingerprint of this sub-key
|
|
||||||
*
|
|
||||||
* @return string the fingerprint of this sub-key.
|
|
||||||
*/
|
|
||||||
public function getFingerprint()
|
|
||||||
{
|
|
||||||
return $this->_fingerprint;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getLength()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the length of this sub-key in bits
|
|
||||||
*
|
|
||||||
* @return integer the length of this sub-key in bits.
|
|
||||||
*/
|
|
||||||
public function getLength()
|
|
||||||
{
|
|
||||||
return $this->_length;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ canSign()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets whether or not this sub-key can sign data
|
|
||||||
*
|
|
||||||
* @return boolean true if this sub-key can sign data and false if this
|
|
||||||
* sub-key can not sign data.
|
|
||||||
*/
|
|
||||||
public function canSign()
|
|
||||||
{
|
|
||||||
return $this->_canSign;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ canEncrypt()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets whether or not this sub-key can encrypt data
|
|
||||||
*
|
|
||||||
* @return boolean true if this sub-key can encrypt data and false if this
|
|
||||||
* sub-key can not encrypt data.
|
|
||||||
*/
|
|
||||||
public function canEncrypt()
|
|
||||||
{
|
|
||||||
return $this->_canEncrypt;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ hasPrivate()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets whether or not the private key for this sub-key exists in the
|
|
||||||
* keyring
|
|
||||||
*
|
|
||||||
* @return boolean true the private key for this sub-key exists in the
|
|
||||||
* keyring and false if it does not.
|
|
||||||
*/
|
|
||||||
public function hasPrivate()
|
|
||||||
{
|
|
||||||
return $this->_hasPrivate;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ isRevoked()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets whether or not this sub-key is revoked
|
|
||||||
*
|
|
||||||
* @return boolean true if this sub-key is revoked and false if it is not.
|
|
||||||
*/
|
|
||||||
public function isRevoked()
|
|
||||||
{
|
|
||||||
return $this->_isRevoked;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setCreationDate()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the creation date of this sub-key
|
|
||||||
*
|
|
||||||
* The creation date is a Unix timestamp.
|
|
||||||
*
|
|
||||||
* @param integer $creationDate the creation date of this sub-key.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_SubKey the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setCreationDate($creationDate)
|
|
||||||
{
|
|
||||||
$this->_creationDate = intval($creationDate);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setExpirationDate()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the expiration date of this sub-key
|
|
||||||
*
|
|
||||||
* The expiration date is a Unix timestamp. Specify zero if this sub-key
|
|
||||||
* does not expire.
|
|
||||||
*
|
|
||||||
* @param integer $expirationDate the expiration date of this sub-key.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_SubKey the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setExpirationDate($expirationDate)
|
|
||||||
{
|
|
||||||
$this->_expirationDate = intval($expirationDate);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setId()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the id of this sub-key
|
|
||||||
*
|
|
||||||
* @param string $id the id of this sub-key.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_SubKey the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setId($id)
|
|
||||||
{
|
|
||||||
$this->_id = strval($id);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setAlgorithm()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the algorithm used by this sub-key
|
|
||||||
*
|
|
||||||
* @param integer $algorithm the algorithm used by this sub-key.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_SubKey the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setAlgorithm($algorithm)
|
|
||||||
{
|
|
||||||
$this->_algorithm = intval($algorithm);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setFingerprint()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the fingerprint of this sub-key
|
|
||||||
*
|
|
||||||
* @param string $fingerprint the fingerprint of this sub-key.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_SubKey the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setFingerprint($fingerprint)
|
|
||||||
{
|
|
||||||
$this->_fingerprint = strval($fingerprint);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setLength()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the length of this sub-key in bits
|
|
||||||
*
|
|
||||||
* @param integer $length the length of this sub-key in bits.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_SubKey the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setLength($length)
|
|
||||||
{
|
|
||||||
$this->_length = intval($length);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setCanSign()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets whether of not this sub-key can sign data
|
|
||||||
*
|
|
||||||
* @param boolean $canSign true if this sub-key can sign data and false if
|
|
||||||
* it can not.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_SubKey the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setCanSign($canSign)
|
|
||||||
{
|
|
||||||
$this->_canSign = ($canSign) ? true : false;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setCanEncrypt()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets whether of not this sub-key can encrypt data
|
|
||||||
*
|
|
||||||
* @param boolean $canEncrypt true if this sub-key can encrypt data and
|
|
||||||
* false if it can not.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_SubKey the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setCanEncrypt($canEncrypt)
|
|
||||||
{
|
|
||||||
$this->_canEncrypt = ($canEncrypt) ? true : false;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setHasPrivate()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets whether of not the private key for this sub-key exists in the
|
|
||||||
* keyring
|
|
||||||
*
|
|
||||||
* @param boolean $hasPrivate true if the private key for this sub-key
|
|
||||||
* exists in the keyring and false if it does
|
|
||||||
* not.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_SubKey the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setHasPrivate($hasPrivate)
|
|
||||||
{
|
|
||||||
$this->_hasPrivate = ($hasPrivate) ? true : false;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setRevoked()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets whether or not this sub-key is revoked
|
|
||||||
*
|
|
||||||
* @param boolean $isRevoked whether or not this sub-key is revoked.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_SubKey the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setRevoked($isRevoked)
|
|
||||||
{
|
|
||||||
$this->_isRevoked = ($isRevoked) ? true : false;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ parse()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parses a sub-key object from a sub-key string
|
|
||||||
*
|
|
||||||
* See <b>doc/DETAILS</b> in the
|
|
||||||
* {@link http://www.gnupg.org/download/ GPG distribution} for information
|
|
||||||
* on how the sub-key string is parsed.
|
|
||||||
*
|
|
||||||
* @param string $string the string containing the sub-key.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_SubKey the sub-key object parsed from the string.
|
|
||||||
*/
|
|
||||||
public static function parse($string)
|
|
||||||
{
|
|
||||||
$tokens = explode(':', $string);
|
|
||||||
|
|
||||||
$subKey = new Crypt_GPG_SubKey();
|
|
||||||
|
|
||||||
$subKey->setId($tokens[4]);
|
|
||||||
$subKey->setLength($tokens[2]);
|
|
||||||
$subKey->setAlgorithm($tokens[3]);
|
|
||||||
$subKey->setCreationDate(self::_parseDate($tokens[5]));
|
|
||||||
$subKey->setExpirationDate(self::_parseDate($tokens[6]));
|
|
||||||
|
|
||||||
if ($tokens[1] == 'r') {
|
|
||||||
$subKey->setRevoked(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strpos($tokens[11], 's') !== false) {
|
|
||||||
$subKey->setCanSign(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strpos($tokens[11], 'e') !== false) {
|
|
||||||
$subKey->setCanEncrypt(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $subKey;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ _parseDate()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parses a date string as provided by GPG into a UNIX timestamp
|
|
||||||
*
|
|
||||||
* @param string $string the date string.
|
|
||||||
*
|
|
||||||
* @return integer the UNIX timestamp corresponding to the provided date
|
|
||||||
* string.
|
|
||||||
*/
|
|
||||||
private static function _parseDate($string)
|
|
||||||
{
|
|
||||||
if ($string == '') {
|
|
||||||
$timestamp = 0;
|
|
||||||
} else {
|
|
||||||
// all times are in UTC according to GPG documentation
|
|
||||||
$timeZone = new DateTimeZone('UTC');
|
|
||||||
|
|
||||||
if (strpos($string, 'T') === false) {
|
|
||||||
// interpret as UNIX timestamp
|
|
||||||
$string = '@' . $string;
|
|
||||||
}
|
|
||||||
|
|
||||||
$date = new DateTime($string, $timeZone);
|
|
||||||
|
|
||||||
// convert to UNIX timestamp
|
|
||||||
$timestamp = intval($date->format('U'));
|
|
||||||
}
|
|
||||||
|
|
||||||
return $timestamp;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
|
|
||||||
?>
|
|
@ -1,373 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Contains a data class representing a GPG user id
|
|
||||||
*
|
|
||||||
* PHP version 5
|
|
||||||
*
|
|
||||||
* LICENSE:
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2.1 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2008-2010 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @version CVS: $Id$
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
*/
|
|
||||||
|
|
||||||
// {{{ class Crypt_GPG_UserId
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A class for GPG user id information
|
|
||||||
*
|
|
||||||
* This class is used to store the results of the {@link Crypt_GPG::getKeys()}
|
|
||||||
* method. User id objects are members of a {@link Crypt_GPG_Key} object.
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2008-2010 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
* @see Crypt_GPG::getKeys()
|
|
||||||
* @see Crypt_GPG_Key::getUserIds()
|
|
||||||
*/
|
|
||||||
class Crypt_GPG_UserId
|
|
||||||
{
|
|
||||||
// {{{ class properties
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The name field of this user id
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_name = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The comment field of this user id
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_comment = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The email field of this user id
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $_email = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether or not this user id is revoked
|
|
||||||
*
|
|
||||||
* @var boolean
|
|
||||||
*/
|
|
||||||
private $_isRevoked = false;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether or not this user id is valid
|
|
||||||
*
|
|
||||||
* @var boolean
|
|
||||||
*/
|
|
||||||
private $_isValid = true;
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ __construct()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new user id
|
|
||||||
*
|
|
||||||
* User ids can be initialized from an array of named values. Available
|
|
||||||
* names are:
|
|
||||||
*
|
|
||||||
* - <kbd>string name</kbd> - the name field of the user id.
|
|
||||||
* - <kbd>string comment</kbd> - the comment field of the user id.
|
|
||||||
* - <kbd>string email</kbd> - the email field of the user id.
|
|
||||||
* - <kbd>boolean valid</kbd> - whether or not the user id is valid.
|
|
||||||
* - <kbd>boolean revoked</kbd> - whether or not the user id is revoked.
|
|
||||||
*
|
|
||||||
* @param Crypt_GPG_UserId|string|array $userId optional. Either an
|
|
||||||
* existing user id object, which is copied; a user id string, which
|
|
||||||
* is parsed; or an array of initial values.
|
|
||||||
*/
|
|
||||||
public function __construct($userId = null)
|
|
||||||
{
|
|
||||||
// parse from string
|
|
||||||
if (is_string($userId)) {
|
|
||||||
$userId = self::parse($userId);
|
|
||||||
}
|
|
||||||
|
|
||||||
// copy from object
|
|
||||||
if ($userId instanceof Crypt_GPG_UserId) {
|
|
||||||
$this->_name = $userId->_name;
|
|
||||||
$this->_comment = $userId->_comment;
|
|
||||||
$this->_email = $userId->_email;
|
|
||||||
$this->_isRevoked = $userId->_isRevoked;
|
|
||||||
$this->_isValid = $userId->_isValid;
|
|
||||||
}
|
|
||||||
|
|
||||||
// initialize from array
|
|
||||||
if (is_array($userId)) {
|
|
||||||
if (array_key_exists('name', $userId)) {
|
|
||||||
$this->setName($userId['name']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_key_exists('comment', $userId)) {
|
|
||||||
$this->setComment($userId['comment']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_key_exists('email', $userId)) {
|
|
||||||
$this->setEmail($userId['email']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_key_exists('revoked', $userId)) {
|
|
||||||
$this->setRevoked($userId['revoked']);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_key_exists('valid', $userId)) {
|
|
||||||
$this->setValid($userId['valid']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getName()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the name field of this user id
|
|
||||||
*
|
|
||||||
* @return string the name field of this user id.
|
|
||||||
*/
|
|
||||||
public function getName()
|
|
||||||
{
|
|
||||||
return $this->_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getComment()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the comments field of this user id
|
|
||||||
*
|
|
||||||
* @return string the comments field of this user id.
|
|
||||||
*/
|
|
||||||
public function getComment()
|
|
||||||
{
|
|
||||||
return $this->_comment;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getEmail()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the email field of this user id
|
|
||||||
*
|
|
||||||
* @return string the email field of this user id.
|
|
||||||
*/
|
|
||||||
public function getEmail()
|
|
||||||
{
|
|
||||||
return $this->_email;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ isRevoked()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets whether or not this user id is revoked
|
|
||||||
*
|
|
||||||
* @return boolean true if this user id is revoked and false if it is not.
|
|
||||||
*/
|
|
||||||
public function isRevoked()
|
|
||||||
{
|
|
||||||
return $this->_isRevoked;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ isValid()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets whether or not this user id is valid
|
|
||||||
*
|
|
||||||
* @return boolean true if this user id is valid and false if it is not.
|
|
||||||
*/
|
|
||||||
public function isValid()
|
|
||||||
{
|
|
||||||
return $this->_isValid;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ __toString()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets a string representation of this user id
|
|
||||||
*
|
|
||||||
* The string is formatted as:
|
|
||||||
* <b><kbd>name (comment) <email-address></kbd></b>.
|
|
||||||
*
|
|
||||||
* @return string a string representation of this user id.
|
|
||||||
*/
|
|
||||||
public function __toString()
|
|
||||||
{
|
|
||||||
$components = array();
|
|
||||||
|
|
||||||
if (strlen($this->_name) > 0) {
|
|
||||||
$components[] = $this->_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strlen($this->_comment) > 0) {
|
|
||||||
$components[] = '(' . $this->_comment . ')';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strlen($this->_email) > 0) {
|
|
||||||
$components[] = '<' . $this->_email. '>';
|
|
||||||
}
|
|
||||||
|
|
||||||
return implode(' ', $components);
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setName()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the name field of this user id
|
|
||||||
*
|
|
||||||
* @param string $name the name field of this user id.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_UserId the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setName($name)
|
|
||||||
{
|
|
||||||
$this->_name = strval($name);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setComment()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the comment field of this user id
|
|
||||||
*
|
|
||||||
* @param string $comment the comment field of this user id.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_UserId the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setComment($comment)
|
|
||||||
{
|
|
||||||
$this->_comment = strval($comment);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setEmail()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the email field of this user id
|
|
||||||
*
|
|
||||||
* @param string $email the email field of this user id.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_UserId the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setEmail($email)
|
|
||||||
{
|
|
||||||
$this->_email = strval($email);
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setRevoked()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets whether or not this user id is revoked
|
|
||||||
*
|
|
||||||
* @param boolean $isRevoked whether or not this user id is revoked.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_UserId the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setRevoked($isRevoked)
|
|
||||||
{
|
|
||||||
$this->_isRevoked = ($isRevoked) ? true : false;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setValid()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets whether or not this user id is valid
|
|
||||||
*
|
|
||||||
* @param boolean $isValid whether or not this user id is valid.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_UserId the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setValid($isValid)
|
|
||||||
{
|
|
||||||
$this->_isValid = ($isValid) ? true : false;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ parse()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parses a user id object from a user id string
|
|
||||||
*
|
|
||||||
* A user id string is of the form:
|
|
||||||
* <b><kbd>name (comment) <email-address></kbd></b> with the <i>comment</i>
|
|
||||||
* and <i>email-address</i> fields being optional.
|
|
||||||
*
|
|
||||||
* @param string $string the user id string to parse.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPG_UserId the user id object parsed from the string.
|
|
||||||
*/
|
|
||||||
public static function parse($string)
|
|
||||||
{
|
|
||||||
$userId = new Crypt_GPG_UserId();
|
|
||||||
$email = '';
|
|
||||||
$comment = '';
|
|
||||||
|
|
||||||
// get email address from end of string if it exists
|
|
||||||
$matches = array();
|
|
||||||
if (preg_match('/^(.+?) <([^>]+)>$/', $string, $matches) === 1) {
|
|
||||||
$string = $matches[1];
|
|
||||||
$email = $matches[2];
|
|
||||||
}
|
|
||||||
|
|
||||||
// get comment from end of string if it exists
|
|
||||||
$matches = array();
|
|
||||||
if (preg_match('/^(.+?) \(([^\)]+)\)$/', $string, $matches) === 1) {
|
|
||||||
$string = $matches[1];
|
|
||||||
$comment = $matches[2];
|
|
||||||
}
|
|
||||||
|
|
||||||
$name = $string;
|
|
||||||
|
|
||||||
$userId->setName($name);
|
|
||||||
$userId->setComment($comment);
|
|
||||||
$userId->setEmail($email);
|
|
||||||
|
|
||||||
return $userId;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
|
|
||||||
?>
|
|
@ -1,216 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Crypt_GPG is a package to use GPG from PHP
|
|
||||||
*
|
|
||||||
* This file contains an object that handles GPG's status output for the verify
|
|
||||||
* operation.
|
|
||||||
*
|
|
||||||
* PHP version 5
|
|
||||||
*
|
|
||||||
* LICENSE:
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2.1 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2008 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @version CVS: $Id$
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
* @link http://www.gnupg.org/
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Signature object class definition
|
|
||||||
*/
|
|
||||||
require_once 'Crypt/GPG/Signature.php';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Status line handler for the verify operation
|
|
||||||
*
|
|
||||||
* This class is used internally by Crypt_GPG and does not need be used
|
|
||||||
* directly. See the {@link Crypt_GPG} class for end-user API.
|
|
||||||
*
|
|
||||||
* This class is responsible for building signature objects that are returned
|
|
||||||
* by the {@link Crypt_GPG::verify()} method. See <b>doc/DETAILS</b> in the
|
|
||||||
* {@link http://www.gnupg.org/download/ GPG distribution} for detailed
|
|
||||||
* information on GPG's status output for the verify operation.
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2008 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
* @link http://www.gnupg.org/
|
|
||||||
*/
|
|
||||||
class Crypt_GPG_VerifyStatusHandler
|
|
||||||
{
|
|
||||||
// {{{ protected properties
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The current signature id
|
|
||||||
*
|
|
||||||
* Ths signature id is emitted by GPG before the new signature line so we
|
|
||||||
* must remember it temporarily.
|
|
||||||
*
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected $signatureId = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List of parsed {@link Crypt_GPG_Signature} objects
|
|
||||||
*
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
protected $signatures = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Array index of the current signature
|
|
||||||
*
|
|
||||||
* @var integer
|
|
||||||
*/
|
|
||||||
protected $index = -1;
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ handle()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles a status line
|
|
||||||
*
|
|
||||||
* @param string $line the status line to handle.
|
|
||||||
*
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function handle($line)
|
|
||||||
{
|
|
||||||
$tokens = explode(' ', $line);
|
|
||||||
switch ($tokens[0]) {
|
|
||||||
case 'GOODSIG':
|
|
||||||
case 'EXPSIG':
|
|
||||||
case 'EXPKEYSIG':
|
|
||||||
case 'REVKEYSIG':
|
|
||||||
case 'BADSIG':
|
|
||||||
$signature = new Crypt_GPG_Signature();
|
|
||||||
|
|
||||||
// if there was a signature id, set it on the new signature
|
|
||||||
if ($this->signatureId != '') {
|
|
||||||
$signature->setId($this->signatureId);
|
|
||||||
$this->signatureId = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Detect whether fingerprint or key id was returned and set
|
|
||||||
// signature values appropriately. Key ids are strings of either
|
|
||||||
// 16 or 8 hexadecimal characters. Fingerprints are strings of 40
|
|
||||||
// hexadecimal characters. The key id is the last 16 characters of
|
|
||||||
// the key fingerprint.
|
|
||||||
if (strlen($tokens[1]) > 16) {
|
|
||||||
$signature->setKeyFingerprint($tokens[1]);
|
|
||||||
$signature->setKeyId(substr($tokens[1], -16));
|
|
||||||
} else {
|
|
||||||
$signature->setKeyId($tokens[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// get user id string
|
|
||||||
$string = implode(' ', array_splice($tokens, 2));
|
|
||||||
$string = rawurldecode($string);
|
|
||||||
|
|
||||||
$signature->setUserId(Crypt_GPG_UserId::parse($string));
|
|
||||||
|
|
||||||
$this->index++;
|
|
||||||
$this->signatures[$this->index] = $signature;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'ERRSIG':
|
|
||||||
$signature = new Crypt_GPG_Signature();
|
|
||||||
|
|
||||||
// if there was a signature id, set it on the new signature
|
|
||||||
if ($this->signatureId != '') {
|
|
||||||
$signature->setId($this->signatureId);
|
|
||||||
$this->signatureId = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Detect whether fingerprint or key id was returned and set
|
|
||||||
// signature values appropriately. Key ids are strings of either
|
|
||||||
// 16 or 8 hexadecimal characters. Fingerprints are strings of 40
|
|
||||||
// hexadecimal characters. The key id is the last 16 characters of
|
|
||||||
// the key fingerprint.
|
|
||||||
if (strlen($tokens[1]) > 16) {
|
|
||||||
$signature->setKeyFingerprint($tokens[1]);
|
|
||||||
$signature->setKeyId(substr($tokens[1], -16));
|
|
||||||
} else {
|
|
||||||
$signature->setKeyId($tokens[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->index++;
|
|
||||||
$this->signatures[$this->index] = $signature;
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'VALIDSIG':
|
|
||||||
if (!array_key_exists($this->index, $this->signatures)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
$signature = $this->signatures[$this->index];
|
|
||||||
|
|
||||||
$signature->setValid(true);
|
|
||||||
$signature->setKeyFingerprint($tokens[1]);
|
|
||||||
|
|
||||||
if (strpos($tokens[3], 'T') === false) {
|
|
||||||
$signature->setCreationDate($tokens[3]);
|
|
||||||
} else {
|
|
||||||
$signature->setCreationDate(strtotime($tokens[3]));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (array_key_exists(4, $tokens)) {
|
|
||||||
if (strpos($tokens[4], 'T') === false) {
|
|
||||||
$signature->setExpirationDate($tokens[4]);
|
|
||||||
} else {
|
|
||||||
$signature->setExpirationDate(strtotime($tokens[4]));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'SIG_ID':
|
|
||||||
// note: signature id comes before new signature line and may not
|
|
||||||
// exist for some signature types
|
|
||||||
$this->signatureId = $tokens[1];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ getSignatures()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the {@link Crypt_GPG_Signature} objects parsed by this handler
|
|
||||||
*
|
|
||||||
* @return array the signature objects parsed by this handler.
|
|
||||||
*/
|
|
||||||
public function getSignatures()
|
|
||||||
{
|
|
||||||
return $this->signatures;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
@ -1,508 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Crypt_GPG is a package to use GPG from PHP
|
|
||||||
*
|
|
||||||
* This package provides an object oriented interface to GNU Privacy
|
|
||||||
* Guard (GPG). It requires the GPG executable to be on the system.
|
|
||||||
*
|
|
||||||
* Though GPG can support symmetric-key cryptography, this package is intended
|
|
||||||
* only to facilitate public-key cryptography.
|
|
||||||
*
|
|
||||||
* This file contains an abstract implementation of a user of the
|
|
||||||
* {@link Crypt_GPG_Engine} class.
|
|
||||||
*
|
|
||||||
* PHP version 5
|
|
||||||
*
|
|
||||||
* LICENSE:
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Lesser General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2.1 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Nathan Fredrickson <nathan@silverorange.com>
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2005-2013 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @version CVS: $Id: GPG.php 305428 2010-11-17 02:47:56Z gauthierm $
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
* @link http://pear.php.net/manual/en/package.encryption.crypt-gpg.php
|
|
||||||
* @link http://www.gnupg.org/
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GPG key class
|
|
||||||
*/
|
|
||||||
require_once 'Crypt/GPG/Key.php';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GPG sub-key class
|
|
||||||
*/
|
|
||||||
require_once 'Crypt/GPG/SubKey.php';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GPG user id class
|
|
||||||
*/
|
|
||||||
require_once 'Crypt/GPG/UserId.php';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GPG process and I/O engine class
|
|
||||||
*/
|
|
||||||
require_once 'Crypt/GPG/Engine.php';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* GPG exception classes
|
|
||||||
*/
|
|
||||||
require_once 'Crypt/GPG/Exceptions.php';
|
|
||||||
|
|
||||||
// {{{ class Crypt_GPGAbstract
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Base class for implementing a user of {@link Crypt_GPG_Engine}
|
|
||||||
*
|
|
||||||
* @category Encryption
|
|
||||||
* @package Crypt_GPG
|
|
||||||
* @author Nathan Fredrickson <nathan@silverorange.com>
|
|
||||||
* @author Michael Gauthier <mike@silverorange.com>
|
|
||||||
* @copyright 2005-2013 silverorange
|
|
||||||
* @license http://www.gnu.org/copyleft/lesser.html LGPL License 2.1
|
|
||||||
* @link http://pear.php.net/package/Crypt_GPG
|
|
||||||
* @link http://www.gnupg.org/
|
|
||||||
*/
|
|
||||||
abstract class Crypt_GPGAbstract
|
|
||||||
{
|
|
||||||
// {{{ class error constants
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Error code returned when there is no error.
|
|
||||||
*/
|
|
||||||
const ERROR_NONE = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Error code returned when an unknown or unhandled error occurs.
|
|
||||||
*/
|
|
||||||
const ERROR_UNKNOWN = 1;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Error code returned when a bad passphrase is used.
|
|
||||||
*/
|
|
||||||
const ERROR_BAD_PASSPHRASE = 2;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Error code returned when a required passphrase is missing.
|
|
||||||
*/
|
|
||||||
const ERROR_MISSING_PASSPHRASE = 3;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Error code returned when a key that is already in the keyring is
|
|
||||||
* imported.
|
|
||||||
*/
|
|
||||||
const ERROR_DUPLICATE_KEY = 4;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Error code returned the required data is missing for an operation.
|
|
||||||
*
|
|
||||||
* This could be missing key data, missing encrypted data or missing
|
|
||||||
* signature data.
|
|
||||||
*/
|
|
||||||
const ERROR_NO_DATA = 5;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Error code returned when an unsigned key is used.
|
|
||||||
*/
|
|
||||||
const ERROR_UNSIGNED_KEY = 6;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Error code returned when a key that is not self-signed is used.
|
|
||||||
*/
|
|
||||||
const ERROR_NOT_SELF_SIGNED = 7;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Error code returned when a public or private key that is not in the
|
|
||||||
* keyring is used.
|
|
||||||
*/
|
|
||||||
const ERROR_KEY_NOT_FOUND = 8;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Error code returned when an attempt to delete public key having a
|
|
||||||
* private key is made.
|
|
||||||
*/
|
|
||||||
const ERROR_DELETE_PRIVATE_KEY = 9;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Error code returned when one or more bad signatures are detected.
|
|
||||||
*/
|
|
||||||
const ERROR_BAD_SIGNATURE = 10;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Error code returned when there is a problem reading GnuPG data files.
|
|
||||||
*/
|
|
||||||
const ERROR_FILE_PERMISSIONS = 11;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Error code returned when a key could not be created.
|
|
||||||
*/
|
|
||||||
const ERROR_KEY_NOT_CREATED = 12;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Error code returned when bad key parameters are used during key
|
|
||||||
* generation.
|
|
||||||
*/
|
|
||||||
const ERROR_BAD_KEY_PARAMS = 13;
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ other class constants
|
|
||||||
|
|
||||||
/**
|
|
||||||
* URI at which package bugs may be reported.
|
|
||||||
*/
|
|
||||||
const BUG_URI = 'http://pear.php.net/bugs/report.php?package=Crypt_GPG';
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ protected class properties
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Engine used to control the GPG subprocess
|
|
||||||
*
|
|
||||||
* @var Crypt_GPG_Engine
|
|
||||||
*
|
|
||||||
* @see Crypt_GPGAbstract::setEngine()
|
|
||||||
*/
|
|
||||||
protected $engine = null;
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ __construct()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new GPG object
|
|
||||||
*
|
|
||||||
* Available options are:
|
|
||||||
*
|
|
||||||
* - <kbd>string homedir</kbd> - the directory where the GPG
|
|
||||||
* keyring files are stored. If not
|
|
||||||
* specified, Crypt_GPG uses the
|
|
||||||
* default of <kbd>~/.gnupg</kbd>.
|
|
||||||
* - <kbd>string publicKeyring</kbd> - the file path of the public
|
|
||||||
* keyring. Use this if the public
|
|
||||||
* keyring is not in the homedir, or
|
|
||||||
* if the keyring is in a directory
|
|
||||||
* not writable by the process
|
|
||||||
* invoking GPG (like Apache). Then
|
|
||||||
* you can specify the path to the
|
|
||||||
* keyring with this option
|
|
||||||
* (/foo/bar/pubring.gpg), and specify
|
|
||||||
* a writable directory (like /tmp)
|
|
||||||
* using the <i>homedir</i> option.
|
|
||||||
* - <kbd>string privateKeyring</kbd> - the file path of the private
|
|
||||||
* keyring. Use this if the private
|
|
||||||
* keyring is not in the homedir, or
|
|
||||||
* if the keyring is in a directory
|
|
||||||
* not writable by the process
|
|
||||||
* invoking GPG (like Apache). Then
|
|
||||||
* you can specify the path to the
|
|
||||||
* keyring with this option
|
|
||||||
* (/foo/bar/secring.gpg), and specify
|
|
||||||
* a writable directory (like /tmp)
|
|
||||||
* using the <i>homedir</i> option.
|
|
||||||
* - <kbd>string trustDb</kbd> - the file path of the web-of-trust
|
|
||||||
* database. Use this if the trust
|
|
||||||
* database is not in the homedir, or
|
|
||||||
* if the database is in a directory
|
|
||||||
* not writable by the process
|
|
||||||
* invoking GPG (like Apache). Then
|
|
||||||
* you can specify the path to the
|
|
||||||
* trust database with this option
|
|
||||||
* (/foo/bar/trustdb.gpg), and specify
|
|
||||||
* a writable directory (like /tmp)
|
|
||||||
* using the <i>homedir</i> option.
|
|
||||||
* - <kbd>string binary</kbd> - the location of the GPG binary. If
|
|
||||||
* not specified, the driver attempts
|
|
||||||
* to auto-detect the GPG binary
|
|
||||||
* location using a list of known
|
|
||||||
* default locations for the current
|
|
||||||
* operating system. The option
|
|
||||||
* <kbd>gpgBinary</kbd> is a
|
|
||||||
* deprecated alias for this option.
|
|
||||||
* - <kbd>string agent</kbd> - the location of the GnuPG agent
|
|
||||||
* binary. The gpg-agent is only
|
|
||||||
* used for GnuPG 2.x. If not
|
|
||||||
* specified, the engine attempts
|
|
||||||
* to auto-detect the gpg-agent
|
|
||||||
* binary location using a list of
|
|
||||||
* know default locations for the
|
|
||||||
* current operating system.
|
|
||||||
* - <kbd>boolean debug</kbd> - whether or not to use debug mode.
|
|
||||||
* When debug mode is on, all
|
|
||||||
* communication to and from the GPG
|
|
||||||
* subprocess is logged. This can be
|
|
||||||
*
|
|
||||||
* @param array $options optional. An array of options used to create the
|
|
||||||
* GPG object. All options are optional and are
|
|
||||||
* represented as key-value pairs.
|
|
||||||
*
|
|
||||||
* @throws Crypt_GPG_FileException if the <kbd>homedir</kbd> does not exist
|
|
||||||
* and cannot be created. This can happen if <kbd>homedir</kbd> is
|
|
||||||
* not specified, Crypt_GPG is run as the web user, and the web
|
|
||||||
* user has no home directory. This exception is also thrown if any
|
|
||||||
* of the options <kbd>publicKeyring</kbd>,
|
|
||||||
* <kbd>privateKeyring</kbd> or <kbd>trustDb</kbd> options are
|
|
||||||
* specified but the files do not exist or are are not readable.
|
|
||||||
* This can happen if the user running the Crypt_GPG process (for
|
|
||||||
* example, the Apache user) does not have permission to read the
|
|
||||||
* files.
|
|
||||||
*
|
|
||||||
* @throws PEAR_Exception if the provided <kbd>binary</kbd> is invalid, or
|
|
||||||
* if no <kbd>binary</kbd> is provided and no suitable binary could
|
|
||||||
* be found.
|
|
||||||
*
|
|
||||||
* @throws PEAR_Exception if the provided <kbd>agent</kbd> is invalid, or
|
|
||||||
* if no <kbd>agent</kbd> is provided and no suitable gpg-agent
|
|
||||||
* cound be found.
|
|
||||||
*/
|
|
||||||
public function __construct(array $options = array())
|
|
||||||
{
|
|
||||||
$this->setEngine(new Crypt_GPG_Engine($options));
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ setEngine()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the I/O engine to use for GnuPG operations
|
|
||||||
*
|
|
||||||
* Normally this method does not need to be used. It provides a means for
|
|
||||||
* dependency injection.
|
|
||||||
*
|
|
||||||
* @param Crypt_GPG_Engine $engine the engine to use.
|
|
||||||
*
|
|
||||||
* @return Crypt_GPGAbstract the current object, for fluent interface.
|
|
||||||
*/
|
|
||||||
public function setEngine(Crypt_GPG_Engine $engine)
|
|
||||||
{
|
|
||||||
$this->engine = $engine;
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
// {{{ _getKeys()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the available keys in the keyring
|
|
||||||
*
|
|
||||||
* Calls GPG with the <kbd>--list-keys</kbd> command and grabs keys. See
|
|
||||||
* the first section of <b>doc/DETAILS</b> in the
|
|
||||||
* {@link http://www.gnupg.org/download/ GPG package} for a detailed
|
|
||||||
* description of how the GPG command output is parsed.
|
|
||||||
*
|
|
||||||
* @param string $keyId optional. Only keys with that match the specified
|
|
||||||
* pattern are returned. The pattern may be part of
|
|
||||||
* a user id, a key id or a key fingerprint. If not
|
|
||||||
* specified, all keys are returned.
|
|
||||||
*
|
|
||||||
* @return array an array of {@link Crypt_GPG_Key} objects. If no keys
|
|
||||||
* match the specified <kbd>$keyId</kbd> an empty array is
|
|
||||||
* returned.
|
|
||||||
*
|
|
||||||
* @throws Crypt_GPG_Exception if an unknown or unexpected error occurs.
|
|
||||||
* Use the <kbd>debug</kbd> option and file a bug report if these
|
|
||||||
* exceptions occur.
|
|
||||||
*
|
|
||||||
* @see Crypt_GPG_Key
|
|
||||||
*/
|
|
||||||
protected function _getKeys($keyId = '')
|
|
||||||
{
|
|
||||||
// get private key fingerprints
|
|
||||||
if ($keyId == '') {
|
|
||||||
$operation = '--list-secret-keys';
|
|
||||||
} else {
|
|
||||||
$operation = '--list-secret-keys ' . escapeshellarg($keyId);
|
|
||||||
}
|
|
||||||
|
|
||||||
// According to The file 'doc/DETAILS' in the GnuPG distribution, using
|
|
||||||
// double '--with-fingerprint' also prints the fingerprint for subkeys.
|
|
||||||
$arguments = array(
|
|
||||||
'--with-colons',
|
|
||||||
'--with-fingerprint',
|
|
||||||
'--with-fingerprint',
|
|
||||||
'--fixed-list-mode'
|
|
||||||
);
|
|
||||||
|
|
||||||
$output = '';
|
|
||||||
|
|
||||||
$this->engine->reset();
|
|
||||||
$this->engine->setOutput($output);
|
|
||||||
$this->engine->setOperation($operation, $arguments);
|
|
||||||
$this->engine->run();
|
|
||||||
|
|
||||||
$code = $this->engine->getErrorCode();
|
|
||||||
|
|
||||||
switch ($code) {
|
|
||||||
case self::ERROR_NONE:
|
|
||||||
case self::ERROR_KEY_NOT_FOUND:
|
|
||||||
// ignore not found key errors
|
|
||||||
break;
|
|
||||||
case self::ERROR_FILE_PERMISSIONS:
|
|
||||||
$filename = $this->engine->getErrorFilename();
|
|
||||||
if ($filename) {
|
|
||||||
throw new Crypt_GPG_FileException(
|
|
||||||
sprintf(
|
|
||||||
'Error reading GnuPG data file \'%s\'. Check to make ' .
|
|
||||||
'sure it is readable by the current user.',
|
|
||||||
$filename
|
|
||||||
),
|
|
||||||
$code,
|
|
||||||
$filename
|
|
||||||
);
|
|
||||||
}
|
|
||||||
throw new Crypt_GPG_FileException(
|
|
||||||
'Error reading GnuPG data file. Check to make GnuPG data ' .
|
|
||||||
'files are readable by the current user.',
|
|
||||||
$code
|
|
||||||
);
|
|
||||||
default:
|
|
||||||
throw new Crypt_GPG_Exception(
|
|
||||||
'Unknown error getting keys. Please use the \'debug\' option ' .
|
|
||||||
'when creating the Crypt_GPG object, and file a bug report ' .
|
|
||||||
'at ' . self::BUG_URI,
|
|
||||||
$code
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$privateKeyFingerprints = array();
|
|
||||||
|
|
||||||
$lines = explode(PHP_EOL, $output);
|
|
||||||
foreach ($lines as $line) {
|
|
||||||
$lineExp = explode(':', $line);
|
|
||||||
if ($lineExp[0] == 'fpr') {
|
|
||||||
$privateKeyFingerprints[] = $lineExp[9];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// get public keys
|
|
||||||
if ($keyId == '') {
|
|
||||||
$operation = '--list-public-keys';
|
|
||||||
} else {
|
|
||||||
$operation = '--list-public-keys ' . escapeshellarg($keyId);
|
|
||||||
}
|
|
||||||
|
|
||||||
$output = '';
|
|
||||||
|
|
||||||
$this->engine->reset();
|
|
||||||
$this->engine->setOutput($output);
|
|
||||||
$this->engine->setOperation($operation, $arguments);
|
|
||||||
$this->engine->run();
|
|
||||||
|
|
||||||
$code = $this->engine->getErrorCode();
|
|
||||||
|
|
||||||
switch ($code) {
|
|
||||||
case self::ERROR_NONE:
|
|
||||||
case self::ERROR_KEY_NOT_FOUND:
|
|
||||||
// ignore not found key errors
|
|
||||||
break;
|
|
||||||
case self::ERROR_FILE_PERMISSIONS:
|
|
||||||
$filename = $this->engine->getErrorFilename();
|
|
||||||
if ($filename) {
|
|
||||||
throw new Crypt_GPG_FileException(
|
|
||||||
sprintf(
|
|
||||||
'Error reading GnuPG data file \'%s\'. Check to make ' .
|
|
||||||
'sure it is readable by the current user.',
|
|
||||||
$filename
|
|
||||||
),
|
|
||||||
$code,
|
|
||||||
$filename
|
|
||||||
);
|
|
||||||
}
|
|
||||||
throw new Crypt_GPG_FileException(
|
|
||||||
'Error reading GnuPG data file. Check to make GnuPG data ' .
|
|
||||||
'files are readable by the current user.',
|
|
||||||
$code
|
|
||||||
);
|
|
||||||
default:
|
|
||||||
throw new Crypt_GPG_Exception(
|
|
||||||
'Unknown error getting keys. Please use the \'debug\' option ' .
|
|
||||||
'when creating the Crypt_GPG object, and file a bug report ' .
|
|
||||||
'at ' . self::BUG_URI,
|
|
||||||
$code
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
$keys = array();
|
|
||||||
|
|
||||||
$key = null; // current key
|
|
||||||
$subKey = null; // current sub-key
|
|
||||||
|
|
||||||
$lines = explode(PHP_EOL, $output);
|
|
||||||
foreach ($lines as $line) {
|
|
||||||
$lineExp = explode(':', $line);
|
|
||||||
|
|
||||||
if ($lineExp[0] == 'pub') {
|
|
||||||
|
|
||||||
// new primary key means last key should be added to the array
|
|
||||||
if ($key !== null) {
|
|
||||||
$keys[] = $key;
|
|
||||||
}
|
|
||||||
|
|
||||||
$key = new Crypt_GPG_Key();
|
|
||||||
|
|
||||||
$subKey = Crypt_GPG_SubKey::parse($line);
|
|
||||||
$key->addSubKey($subKey);
|
|
||||||
|
|
||||||
} elseif ($lineExp[0] == 'sub') {
|
|
||||||
|
|
||||||
$subKey = Crypt_GPG_SubKey::parse($line);
|
|
||||||
$key->addSubKey($subKey);
|
|
||||||
|
|
||||||
} elseif ($lineExp[0] == 'fpr') {
|
|
||||||
|
|
||||||
$fingerprint = $lineExp[9];
|
|
||||||
|
|
||||||
// set current sub-key fingerprint
|
|
||||||
$subKey->setFingerprint($fingerprint);
|
|
||||||
|
|
||||||
// if private key exists, set has private to true
|
|
||||||
if (in_array($fingerprint, $privateKeyFingerprints)) {
|
|
||||||
$subKey->setHasPrivate(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
} elseif ($lineExp[0] == 'uid') {
|
|
||||||
|
|
||||||
$string = stripcslashes($lineExp[9]); // as per documentation
|
|
||||||
$userId = new Crypt_GPG_UserId($string);
|
|
||||||
|
|
||||||
if ($lineExp[1] == 'r') {
|
|
||||||
$userId->setRevoked(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
$key->addUserId($userId);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// add last key
|
|
||||||
if ($key !== null) {
|
|
||||||
$keys[] = $key;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $keys;
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
}
|
|
||||||
|
|
||||||
// }}}
|
|
||||||
|
|
||||||
?>
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,4 +0,0 @@
|
|||||||
<?php
|
|
||||||
class Net_IDNA2_Exception extends Exception
|
|
||||||
{
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
<?php
|
|
||||||
require_once 'Net/IDNA2/Exception.php';
|
|
||||||
|
|
||||||
class Net_IDNA2_Exception_Nameprep extends Net_IDNA2_Exception
|
|
||||||
{
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
@ -1,152 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
+-----------------------------------------------------------------------+
|
|
||||||
| Net/LDAP3/Result.php |
|
|
||||||
| |
|
|
||||||
| Based on code created by the Roundcube Webmail team. |
|
|
||||||
| |
|
|
||||||
| Copyright (C) 2006-2014, The Roundcube Dev Team |
|
|
||||||
| Copyright (C) 2012-2014, Kolab Systems AG |
|
|
||||||
| |
|
|
||||||
| Licensed under the GNU General Public License version 3 or |
|
|
||||||
| any later version with exceptions for plugins. |
|
|
||||||
| See the README file for a full license statement. |
|
|
||||||
| |
|
|
||||||
| PURPOSE: |
|
|
||||||
| Provide advanced functionality for accessing LDAP directories |
|
|
||||||
| |
|
|
||||||
+-----------------------------------------------------------------------+
|
|
||||||
| Authors: Thomas Bruederli <roundcube@gmail.com> |
|
|
||||||
| Jeroen van Meeuwen <vanmeeuwen@kolabsys.com> |
|
|
||||||
+-----------------------------------------------------------------------+
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Model class representing an LDAP search result
|
|
||||||
*
|
|
||||||
* @package LDAP
|
|
||||||
*/
|
|
||||||
class Net_LDAP3_Result implements Iterator
|
|
||||||
{
|
|
||||||
protected $conn;
|
|
||||||
protected $base_dn;
|
|
||||||
protected $filter;
|
|
||||||
protected $scope;
|
|
||||||
|
|
||||||
private $count;
|
|
||||||
private $current;
|
|
||||||
private $iteratorkey = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Default constructor
|
|
||||||
*
|
|
||||||
* @param resource $conn LDAP link identifier
|
|
||||||
* @param string $base_dn Base DN used to get this result
|
|
||||||
* @param string $filter Filter query used to get this result
|
|
||||||
* @param string $scope Scope of the result
|
|
||||||
* @param resource $result LDAP result entry identifier
|
|
||||||
*/
|
|
||||||
function __construct($conn, $base_dn, $filter, $scope, $result)
|
|
||||||
{
|
|
||||||
$this->conn = $conn;
|
|
||||||
$this->base_dn = $base_dn;
|
|
||||||
$this->filter = $filter;
|
|
||||||
$this->scope = $scope;
|
|
||||||
$this->result = $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function get($property, $default = null)
|
|
||||||
{
|
|
||||||
if (isset($this->$property)) {
|
|
||||||
return $this->$property;
|
|
||||||
} else {
|
|
||||||
return $default;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function set($property, $value)
|
|
||||||
{
|
|
||||||
$this->$property = $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Wrapper for ldap_sort()
|
|
||||||
*/
|
|
||||||
public function sort($attr)
|
|
||||||
{
|
|
||||||
return ldap_sort($this->conn, $this->result, $attr);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get entries count
|
|
||||||
*/
|
|
||||||
public function count()
|
|
||||||
{
|
|
||||||
if (!isset($this->count)) {
|
|
||||||
$this->count = ldap_count_entries($this->conn, $this->result);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->count;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Wrapper for ldap_get_entries()
|
|
||||||
*
|
|
||||||
* @param bool $normalize Optionally normalize the entries to a list of hash arrays
|
|
||||||
*
|
|
||||||
* @return array List of LDAP entries
|
|
||||||
*/
|
|
||||||
public function entries($normalize = false)
|
|
||||||
{
|
|
||||||
$entries = ldap_get_entries($this->conn, $this->result);
|
|
||||||
|
|
||||||
if ($normalize) {
|
|
||||||
return Net_LDAP3::normalize_result($entries);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $entries;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Wrapper for ldap_get_dn() using the current entry pointer
|
|
||||||
*/
|
|
||||||
public function get_dn()
|
|
||||||
{
|
|
||||||
return $this->current ? ldap_get_dn($this->conn, $this->current) : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*** Implement PHP 5 Iterator interface to make foreach work ***/
|
|
||||||
|
|
||||||
function current()
|
|
||||||
{
|
|
||||||
$attrib = ldap_get_attributes($this->conn, $this->current);
|
|
||||||
$attrib['dn'] = ldap_get_dn($this->conn, $this->current);
|
|
||||||
|
|
||||||
return $attrib;
|
|
||||||
}
|
|
||||||
|
|
||||||
function key()
|
|
||||||
{
|
|
||||||
return $this->iteratorkey;
|
|
||||||
}
|
|
||||||
|
|
||||||
function rewind()
|
|
||||||
{
|
|
||||||
$this->iteratorkey = 0;
|
|
||||||
$this->current = ldap_first_entry($this->conn, $this->result);
|
|
||||||
}
|
|
||||||
|
|
||||||
function next()
|
|
||||||
{
|
|
||||||
$this->iteratorkey++;
|
|
||||||
$this->current = ldap_next_entry($this->conn, $this->current);
|
|
||||||
}
|
|
||||||
|
|
||||||
function valid()
|
|
||||||
{
|
|
||||||
return (bool)$this->current;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,686 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* Net_Socket
|
|
||||||
*
|
|
||||||
* PHP Version 4
|
|
||||||
*
|
|
||||||
* Copyright (c) 1997-2013 The PHP Group
|
|
||||||
*
|
|
||||||
* This source file is subject to version 2.0 of the PHP license,
|
|
||||||
* that is bundled with this package in the file LICENSE, and is
|
|
||||||
* available at through the world-wide-web at
|
|
||||||
* http://www.php.net/license/2_02.txt.
|
|
||||||
* If you did not receive a copy of the PHP license and are unable to
|
|
||||||
* obtain it through the world-wide-web, please send a note to
|
|
||||||
* license@php.net so we can mail you a copy immediately.
|
|
||||||
*
|
|
||||||
* Authors: Stig Bakken <ssb@php.net>
|
|
||||||
* Chuck Hagenbuch <chuck@horde.org>
|
|
||||||
*
|
|
||||||
* @category Net
|
|
||||||
* @package Net_Socket
|
|
||||||
* @author Stig Bakken <ssb@php.net>
|
|
||||||
* @author Chuck Hagenbuch <chuck@horde.org>
|
|
||||||
* @copyright 1997-2003 The PHP Group
|
|
||||||
* @license http://www.php.net/license/2_02.txt PHP 2.02
|
|
||||||
* @link http://pear.php.net/packages/Net_Socket
|
|
||||||
*/
|
|
||||||
|
|
||||||
require_once 'PEAR.php';
|
|
||||||
|
|
||||||
define('NET_SOCKET_READ', 1);
|
|
||||||
define('NET_SOCKET_WRITE', 2);
|
|
||||||
define('NET_SOCKET_ERROR', 4);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generalized Socket class.
|
|
||||||
*
|
|
||||||
* @category Net
|
|
||||||
* @package Net_Socket
|
|
||||||
* @author Stig Bakken <ssb@php.net>
|
|
||||||
* @author Chuck Hagenbuch <chuck@horde.org>
|
|
||||||
* @copyright 1997-2003 The PHP Group
|
|
||||||
* @license http://www.php.net/license/2_02.txt PHP 2.02
|
|
||||||
* @link http://pear.php.net/packages/Net_Socket
|
|
||||||
*/
|
|
||||||
class Net_Socket extends PEAR
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Socket file pointer.
|
|
||||||
* @var resource $fp
|
|
||||||
*/
|
|
||||||
var $fp = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether the socket is blocking. Defaults to true.
|
|
||||||
* @var boolean $blocking
|
|
||||||
*/
|
|
||||||
var $blocking = true;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether the socket is persistent. Defaults to false.
|
|
||||||
* @var boolean $persistent
|
|
||||||
*/
|
|
||||||
var $persistent = false;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The IP address to connect to.
|
|
||||||
* @var string $addr
|
|
||||||
*/
|
|
||||||
var $addr = '';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The port number to connect to.
|
|
||||||
* @var integer $port
|
|
||||||
*/
|
|
||||||
var $port = 0;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Number of seconds to wait on socket operations before assuming
|
|
||||||
* there's no more data. Defaults to no timeout.
|
|
||||||
* @var integer|float $timeout
|
|
||||||
*/
|
|
||||||
var $timeout = null;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Number of bytes to read at a time in readLine() and
|
|
||||||
* readAll(). Defaults to 2048.
|
|
||||||
* @var integer $lineLength
|
|
||||||
*/
|
|
||||||
var $lineLength = 2048;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The string to use as a newline terminator. Usually "\r\n" or "\n".
|
|
||||||
* @var string $newline
|
|
||||||
*/
|
|
||||||
var $newline = "\r\n";
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Connect to the specified port. If called when the socket is
|
|
||||||
* already connected, it disconnects and connects again.
|
|
||||||
*
|
|
||||||
* @param string $addr IP address or host name (may be with protocol prefix).
|
|
||||||
* @param integer $port TCP port number.
|
|
||||||
* @param boolean $persistent (optional) Whether the connection is
|
|
||||||
* persistent (kept open between requests
|
|
||||||
* by the web server).
|
|
||||||
* @param integer $timeout (optional) Connection socket timeout.
|
|
||||||
* @param array $options See options for stream_context_create.
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*
|
|
||||||
* @return boolean|PEAR_Error True on success or a PEAR_Error on failure.
|
|
||||||
*/
|
|
||||||
function connect($addr, $port = 0, $persistent = null,
|
|
||||||
$timeout = null, $options = null)
|
|
||||||
{
|
|
||||||
if (is_resource($this->fp)) {
|
|
||||||
@fclose($this->fp);
|
|
||||||
$this->fp = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$addr) {
|
|
||||||
return $this->raiseError('$addr cannot be empty');
|
|
||||||
} else if (strspn($addr, ':.0123456789') == strlen($addr)) {
|
|
||||||
$this->addr = strpos($addr, ':') !== false ? '['.$addr.']' : $addr;
|
|
||||||
} else {
|
|
||||||
$this->addr = $addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->port = $port % 65536;
|
|
||||||
|
|
||||||
if ($persistent !== null) {
|
|
||||||
$this->persistent = $persistent;
|
|
||||||
}
|
|
||||||
|
|
||||||
$openfunc = $this->persistent ? 'pfsockopen' : 'fsockopen';
|
|
||||||
$errno = 0;
|
|
||||||
$errstr = '';
|
|
||||||
|
|
||||||
$old_track_errors = @ini_set('track_errors', 1);
|
|
||||||
|
|
||||||
if ($timeout <= 0) {
|
|
||||||
$timeout = @ini_get('default_socket_timeout');
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($options && function_exists('stream_context_create')) {
|
|
||||||
$context = stream_context_create($options);
|
|
||||||
|
|
||||||
// Since PHP 5 fsockopen doesn't allow context specification
|
|
||||||
if (function_exists('stream_socket_client')) {
|
|
||||||
$flags = STREAM_CLIENT_CONNECT;
|
|
||||||
|
|
||||||
if ($this->persistent) {
|
|
||||||
$flags = STREAM_CLIENT_PERSISTENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
$addr = $this->addr . ':' . $this->port;
|
|
||||||
$fp = stream_socket_client($addr, $errno, $errstr,
|
|
||||||
$timeout, $flags, $context);
|
|
||||||
} else {
|
|
||||||
$fp = @$openfunc($this->addr, $this->port, $errno,
|
|
||||||
$errstr, $timeout, $context);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $timeout);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$fp) {
|
|
||||||
if ($errno == 0 && !strlen($errstr) && isset($php_errormsg)) {
|
|
||||||
$errstr = $php_errormsg;
|
|
||||||
}
|
|
||||||
@ini_set('track_errors', $old_track_errors);
|
|
||||||
return $this->raiseError($errstr, $errno);
|
|
||||||
}
|
|
||||||
|
|
||||||
@ini_set('track_errors', $old_track_errors);
|
|
||||||
$this->fp = $fp;
|
|
||||||
$this->setTimeout();
|
|
||||||
return $this->setBlocking($this->blocking);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Disconnects from the peer, closes the socket.
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @return mixed true on success or a PEAR_Error instance otherwise
|
|
||||||
*/
|
|
||||||
function disconnect()
|
|
||||||
{
|
|
||||||
if (!is_resource($this->fp)) {
|
|
||||||
return $this->raiseError('not connected');
|
|
||||||
}
|
|
||||||
|
|
||||||
@fclose($this->fp);
|
|
||||||
$this->fp = null;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the newline character/sequence to use.
|
|
||||||
*
|
|
||||||
* @param string $newline Newline character(s)
|
|
||||||
* @return boolean True
|
|
||||||
*/
|
|
||||||
function setNewline($newline)
|
|
||||||
{
|
|
||||||
$this->newline = $newline;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Find out if the socket is in blocking mode.
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @return boolean The current blocking mode.
|
|
||||||
*/
|
|
||||||
function isBlocking()
|
|
||||||
{
|
|
||||||
return $this->blocking;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets whether the socket connection should be blocking or
|
|
||||||
* not. A read call to a non-blocking socket will return immediately
|
|
||||||
* if there is no data available, whereas it will block until there
|
|
||||||
* is data for blocking sockets.
|
|
||||||
*
|
|
||||||
* @param boolean $mode True for blocking sockets, false for nonblocking.
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @return mixed true on success or a PEAR_Error instance otherwise
|
|
||||||
*/
|
|
||||||
function setBlocking($mode)
|
|
||||||
{
|
|
||||||
if (!is_resource($this->fp)) {
|
|
||||||
return $this->raiseError('not connected');
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->blocking = $mode;
|
|
||||||
stream_set_blocking($this->fp, (int)$this->blocking);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the timeout value on socket descriptor,
|
|
||||||
* expressed in the sum of seconds and microseconds
|
|
||||||
*
|
|
||||||
* @param integer $seconds Seconds.
|
|
||||||
* @param integer $microseconds Microseconds, optional.
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @return mixed True on success or false on failure or
|
|
||||||
* a PEAR_Error instance when not connected
|
|
||||||
*/
|
|
||||||
function setTimeout($seconds = null, $microseconds = null)
|
|
||||||
{
|
|
||||||
if (!is_resource($this->fp)) {
|
|
||||||
return $this->raiseError('not connected');
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($seconds === null && $microseconds === null) {
|
|
||||||
$seconds = (int) $this->timeout;
|
|
||||||
$microseconds = (int) (($this->timeout - $seconds) * 1000000);
|
|
||||||
} else {
|
|
||||||
$this->timeout = $seconds + $microseconds/1000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->timeout > 0) {
|
|
||||||
return stream_set_timeout($this->fp, (int) $seconds, (int) $microseconds);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the file buffering size on the stream.
|
|
||||||
* See php's stream_set_write_buffer for more information.
|
|
||||||
*
|
|
||||||
* @param integer $size Write buffer size.
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @return mixed on success or an PEAR_Error object otherwise
|
|
||||||
*/
|
|
||||||
function setWriteBuffer($size)
|
|
||||||
{
|
|
||||||
if (!is_resource($this->fp)) {
|
|
||||||
return $this->raiseError('not connected');
|
|
||||||
}
|
|
||||||
|
|
||||||
$returned = stream_set_write_buffer($this->fp, $size);
|
|
||||||
if ($returned == 0) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return $this->raiseError('Cannot set write buffer.');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns information about an existing socket resource.
|
|
||||||
* Currently returns four entries in the result array:
|
|
||||||
*
|
|
||||||
* <p>
|
|
||||||
* timed_out (bool) - The socket timed out waiting for data<br>
|
|
||||||
* blocked (bool) - The socket was blocked<br>
|
|
||||||
* eof (bool) - Indicates EOF event<br>
|
|
||||||
* unread_bytes (int) - Number of bytes left in the socket buffer<br>
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @return mixed Array containing information about existing socket
|
|
||||||
* resource or a PEAR_Error instance otherwise
|
|
||||||
*/
|
|
||||||
function getStatus()
|
|
||||||
{
|
|
||||||
if (!is_resource($this->fp)) {
|
|
||||||
return $this->raiseError('not connected');
|
|
||||||
}
|
|
||||||
|
|
||||||
return stream_get_meta_data($this->fp);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a specified line of data
|
|
||||||
*
|
|
||||||
* @param int $size Reading ends when size - 1 bytes have been read,
|
|
||||||
* or a newline or an EOF (whichever comes first).
|
|
||||||
* If no size is specified, it will keep reading from
|
|
||||||
* the stream until it reaches the end of the line.
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @return mixed $size bytes of data from the socket, or a PEAR_Error if
|
|
||||||
* not connected. If an error occurs, FALSE is returned.
|
|
||||||
*/
|
|
||||||
function gets($size = null)
|
|
||||||
{
|
|
||||||
if (!is_resource($this->fp)) {
|
|
||||||
return $this->raiseError('not connected');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_null($size)) {
|
|
||||||
return @fgets($this->fp);
|
|
||||||
} else {
|
|
||||||
return @fgets($this->fp, $size);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read a specified amount of data. This is guaranteed to return,
|
|
||||||
* and has the added benefit of getting everything in one fread()
|
|
||||||
* chunk; if you know the size of the data you're getting
|
|
||||||
* beforehand, this is definitely the way to go.
|
|
||||||
*
|
|
||||||
* @param integer $size The number of bytes to read from the socket.
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @return $size bytes of data from the socket, or a PEAR_Error if
|
|
||||||
* not connected.
|
|
||||||
*/
|
|
||||||
function read($size)
|
|
||||||
{
|
|
||||||
if (!is_resource($this->fp)) {
|
|
||||||
return $this->raiseError('not connected');
|
|
||||||
}
|
|
||||||
|
|
||||||
return @fread($this->fp, $size);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Write a specified amount of data.
|
|
||||||
*
|
|
||||||
* @param string $data Data to write.
|
|
||||||
* @param integer $blocksize Amount of data to write at once.
|
|
||||||
* NULL means all at once.
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @return mixed If the socket is not connected, returns an instance of
|
|
||||||
* PEAR_Error.
|
|
||||||
* If the write succeeds, returns the number of bytes written.
|
|
||||||
* If the write fails, returns false.
|
|
||||||
* If the socket times out, returns an instance of PEAR_Error.
|
|
||||||
*/
|
|
||||||
function write($data, $blocksize = null)
|
|
||||||
{
|
|
||||||
if (!is_resource($this->fp)) {
|
|
||||||
return $this->raiseError('not connected');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_null($blocksize) && !OS_WINDOWS) {
|
|
||||||
$written = @fwrite($this->fp, $data);
|
|
||||||
|
|
||||||
// Check for timeout or lost connection
|
|
||||||
if (!$written) {
|
|
||||||
$meta_data = $this->getStatus();
|
|
||||||
|
|
||||||
if (!is_array($meta_data)) {
|
|
||||||
return $meta_data; // PEAR_Error
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($meta_data['timed_out'])) {
|
|
||||||
return $this->raiseError('timed out');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $written;
|
|
||||||
} else {
|
|
||||||
if (is_null($blocksize)) {
|
|
||||||
$blocksize = 1024;
|
|
||||||
}
|
|
||||||
|
|
||||||
$pos = 0;
|
|
||||||
$size = strlen($data);
|
|
||||||
while ($pos < $size) {
|
|
||||||
$written = @fwrite($this->fp, substr($data, $pos, $blocksize));
|
|
||||||
|
|
||||||
// Check for timeout or lost connection
|
|
||||||
if (!$written) {
|
|
||||||
$meta_data = $this->getStatus();
|
|
||||||
|
|
||||||
if (!is_array($meta_data)) {
|
|
||||||
return $meta_data; // PEAR_Error
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!empty($meta_data['timed_out'])) {
|
|
||||||
return $this->raiseError('timed out');
|
|
||||||
}
|
|
||||||
|
|
||||||
return $written;
|
|
||||||
}
|
|
||||||
|
|
||||||
$pos += $written;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $pos;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Write a line of data to the socket, followed by a trailing newline.
|
|
||||||
*
|
|
||||||
* @param string $data Data to write
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @return mixed fwrite() result, or PEAR_Error when not connected
|
|
||||||
*/
|
|
||||||
function writeLine($data)
|
|
||||||
{
|
|
||||||
if (!is_resource($this->fp)) {
|
|
||||||
return $this->raiseError('not connected');
|
|
||||||
}
|
|
||||||
|
|
||||||
return fwrite($this->fp, $data . $this->newline);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests for end-of-file on a socket descriptor.
|
|
||||||
*
|
|
||||||
* Also returns true if the socket is disconnected.
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
function eof()
|
|
||||||
{
|
|
||||||
return (!is_resource($this->fp) || feof($this->fp));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reads a byte of data
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @return 1 byte of data from the socket, or a PEAR_Error if
|
|
||||||
* not connected.
|
|
||||||
*/
|
|
||||||
function readByte()
|
|
||||||
{
|
|
||||||
if (!is_resource($this->fp)) {
|
|
||||||
return $this->raiseError('not connected');
|
|
||||||
}
|
|
||||||
|
|
||||||
return ord(@fread($this->fp, 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reads a word of data
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @return 1 word of data from the socket, or a PEAR_Error if
|
|
||||||
* not connected.
|
|
||||||
*/
|
|
||||||
function readWord()
|
|
||||||
{
|
|
||||||
if (!is_resource($this->fp)) {
|
|
||||||
return $this->raiseError('not connected');
|
|
||||||
}
|
|
||||||
|
|
||||||
$buf = @fread($this->fp, 2);
|
|
||||||
return (ord($buf[0]) + (ord($buf[1]) << 8));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reads an int of data
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @return integer 1 int of data from the socket, or a PEAR_Error if
|
|
||||||
* not connected.
|
|
||||||
*/
|
|
||||||
function readInt()
|
|
||||||
{
|
|
||||||
if (!is_resource($this->fp)) {
|
|
||||||
return $this->raiseError('not connected');
|
|
||||||
}
|
|
||||||
|
|
||||||
$buf = @fread($this->fp, 4);
|
|
||||||
return (ord($buf[0]) + (ord($buf[1]) << 8) +
|
|
||||||
(ord($buf[2]) << 16) + (ord($buf[3]) << 24));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reads a zero-terminated string of data
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @return string, or a PEAR_Error if
|
|
||||||
* not connected.
|
|
||||||
*/
|
|
||||||
function readString()
|
|
||||||
{
|
|
||||||
if (!is_resource($this->fp)) {
|
|
||||||
return $this->raiseError('not connected');
|
|
||||||
}
|
|
||||||
|
|
||||||
$string = '';
|
|
||||||
while (($char = @fread($this->fp, 1)) != "\x00") {
|
|
||||||
$string .= $char;
|
|
||||||
}
|
|
||||||
return $string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reads an IP Address and returns it in a dot formatted string
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @return Dot formatted string, or a PEAR_Error if
|
|
||||||
* not connected.
|
|
||||||
*/
|
|
||||||
function readIPAddress()
|
|
||||||
{
|
|
||||||
if (!is_resource($this->fp)) {
|
|
||||||
return $this->raiseError('not connected');
|
|
||||||
}
|
|
||||||
|
|
||||||
$buf = @fread($this->fp, 4);
|
|
||||||
return sprintf('%d.%d.%d.%d', ord($buf[0]), ord($buf[1]),
|
|
||||||
ord($buf[2]), ord($buf[3]));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read until either the end of the socket or a newline, whichever
|
|
||||||
* comes first. Strips the trailing newline from the returned data.
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @return All available data up to a newline, without that
|
|
||||||
* newline, or until the end of the socket, or a PEAR_Error if
|
|
||||||
* not connected.
|
|
||||||
*/
|
|
||||||
function readLine()
|
|
||||||
{
|
|
||||||
if (!is_resource($this->fp)) {
|
|
||||||
return $this->raiseError('not connected');
|
|
||||||
}
|
|
||||||
|
|
||||||
$line = '';
|
|
||||||
|
|
||||||
$timeout = time() + $this->timeout;
|
|
||||||
|
|
||||||
while (!feof($this->fp) && (!$this->timeout || time() < $timeout)) {
|
|
||||||
$line .= @fgets($this->fp, $this->lineLength);
|
|
||||||
if (substr($line, -1) == "\n") {
|
|
||||||
return rtrim($line, $this->newline);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $line;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Read until the socket closes, or until there is no more data in
|
|
||||||
* the inner PHP buffer. If the inner buffer is empty, in blocking
|
|
||||||
* mode we wait for at least 1 byte of data. Therefore, in
|
|
||||||
* blocking mode, if there is no data at all to be read, this
|
|
||||||
* function will never exit (unless the socket is closed on the
|
|
||||||
* remote end).
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*
|
|
||||||
* @return string All data until the socket closes, or a PEAR_Error if
|
|
||||||
* not connected.
|
|
||||||
*/
|
|
||||||
function readAll()
|
|
||||||
{
|
|
||||||
if (!is_resource($this->fp)) {
|
|
||||||
return $this->raiseError('not connected');
|
|
||||||
}
|
|
||||||
|
|
||||||
$data = '';
|
|
||||||
while (!feof($this->fp)) {
|
|
||||||
$data .= @fread($this->fp, $this->lineLength);
|
|
||||||
}
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Runs the equivalent of the select() system call on the socket
|
|
||||||
* with a timeout specified by tv_sec and tv_usec.
|
|
||||||
*
|
|
||||||
* @param integer $state Which of read/write/error to check for.
|
|
||||||
* @param integer $tv_sec Number of seconds for timeout.
|
|
||||||
* @param integer $tv_usec Number of microseconds for timeout.
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @return False if select fails, integer describing which of read/write/error
|
|
||||||
* are ready, or PEAR_Error if not connected.
|
|
||||||
*/
|
|
||||||
function select($state, $tv_sec, $tv_usec = 0)
|
|
||||||
{
|
|
||||||
if (!is_resource($this->fp)) {
|
|
||||||
return $this->raiseError('not connected');
|
|
||||||
}
|
|
||||||
|
|
||||||
$read = null;
|
|
||||||
$write = null;
|
|
||||||
$except = null;
|
|
||||||
if ($state & NET_SOCKET_READ) {
|
|
||||||
$read[] = $this->fp;
|
|
||||||
}
|
|
||||||
if ($state & NET_SOCKET_WRITE) {
|
|
||||||
$write[] = $this->fp;
|
|
||||||
}
|
|
||||||
if ($state & NET_SOCKET_ERROR) {
|
|
||||||
$except[] = $this->fp;
|
|
||||||
}
|
|
||||||
if (false === ($sr = stream_select($read, $write, $except,
|
|
||||||
$tv_sec, $tv_usec))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$result = 0;
|
|
||||||
if (count($read)) {
|
|
||||||
$result |= NET_SOCKET_READ;
|
|
||||||
}
|
|
||||||
if (count($write)) {
|
|
||||||
$result |= NET_SOCKET_WRITE;
|
|
||||||
}
|
|
||||||
if (count($except)) {
|
|
||||||
$result |= NET_SOCKET_ERROR;
|
|
||||||
}
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Turns encryption on/off on a connected socket.
|
|
||||||
*
|
|
||||||
* @param bool $enabled Set this parameter to true to enable encryption
|
|
||||||
* and false to disable encryption.
|
|
||||||
* @param integer $type Type of encryption. See stream_socket_enable_crypto()
|
|
||||||
* for values.
|
|
||||||
*
|
|
||||||
* @see http://se.php.net/manual/en/function.stream-socket-enable-crypto.php
|
|
||||||
* @access public
|
|
||||||
* @return false on error, true on success and 0 if there isn't enough data
|
|
||||||
* and the user should try again (non-blocking sockets only).
|
|
||||||
* A PEAR_Error object is returned if the socket is not
|
|
||||||
* connected
|
|
||||||
*/
|
|
||||||
function enableCrypto($enabled, $type)
|
|
||||||
{
|
|
||||||
if (version_compare(phpversion(), "5.1.0", ">=")) {
|
|
||||||
if (!is_resource($this->fp)) {
|
|
||||||
return $this->raiseError('not connected');
|
|
||||||
}
|
|
||||||
return @stream_socket_enable_crypto($this->fp, $enabled, $type);
|
|
||||||
} else {
|
|
||||||
$msg = 'Net_Socket::enableCrypto() requires php version >= 5.1.0';
|
|
||||||
return $this->raiseError($msg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
@ -1,33 +0,0 @@
|
|||||||
<?php
|
|
||||||
/**
|
|
||||||
* This is only meant for PHP 5 to get rid of certain strict warning
|
|
||||||
* that doesn't get hidden since it's in the shutdown function
|
|
||||||
*/
|
|
||||||
class PEAR5
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* If you have a class that's mostly/entirely static, and you need static
|
|
||||||
* properties, you can use this method to simulate them. Eg. in your method(s)
|
|
||||||
* do this: $myVar = &PEAR5::getStaticProperty('myclass', 'myVar');
|
|
||||||
* You MUST use a reference, or they will not persist!
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @param string $class The calling classname, to prevent clashes
|
|
||||||
* @param string $var The variable to retrieve.
|
|
||||||
* @return mixed A reference to the variable. If not set it will be
|
|
||||||
* auto initialised to NULL.
|
|
||||||
*/
|
|
||||||
static function &getStaticProperty($class, $var)
|
|
||||||
{
|
|
||||||
static $properties;
|
|
||||||
if (!isset($properties[$class])) {
|
|
||||||
$properties[$class] = array();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!array_key_exists($var, $properties[$class])) {
|
|
||||||
$properties[$class][$var] = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $properties[$class][$var];
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,274 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: cp1250 to Unicode table
|
|
||||||
# Unicode version: 2.0
|
|
||||||
# Table version: 2.01
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 04/15/98
|
|
||||||
#
|
|
||||||
# Contact: cpxlate@microsoft.com
|
|
||||||
#
|
|
||||||
# General notes: none
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the cp1250 code (in hex)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 is the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in cp1250 order
|
|
||||||
#
|
|
||||||
0x00 0x0000 #NULL
|
|
||||||
0x01 0x0001 #START OF HEADING
|
|
||||||
0x02 0x0002 #START OF TEXT
|
|
||||||
0x03 0x0003 #END OF TEXT
|
|
||||||
0x04 0x0004 #END OF TRANSMISSION
|
|
||||||
0x05 0x0005 #ENQUIRY
|
|
||||||
0x06 0x0006 #ACKNOWLEDGE
|
|
||||||
0x07 0x0007 #BELL
|
|
||||||
0x08 0x0008 #BACKSPACE
|
|
||||||
0x09 0x0009 #HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A #LINE FEED
|
|
||||||
0x0B 0x000B #VERTICAL TABULATION
|
|
||||||
0x0C 0x000C #FORM FEED
|
|
||||||
0x0D 0x000D #CARRIAGE RETURN
|
|
||||||
0x0E 0x000E #SHIFT OUT
|
|
||||||
0x0F 0x000F #SHIFT IN
|
|
||||||
0x10 0x0010 #DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 #DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 #DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 #DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 #DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 #NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 #SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 #END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 #CANCEL
|
|
||||||
0x19 0x0019 #END OF MEDIUM
|
|
||||||
0x1A 0x001A #SUBSTITUTE
|
|
||||||
0x1B 0x001B #ESCAPE
|
|
||||||
0x1C 0x001C #FILE SEPARATOR
|
|
||||||
0x1D 0x001D #GROUP SEPARATOR
|
|
||||||
0x1E 0x001E #RECORD SEPARATOR
|
|
||||||
0x1F 0x001F #UNIT SEPARATOR
|
|
||||||
0x20 0x0020 #SPACE
|
|
||||||
0x21 0x0021 #EXCLAMATION MARK
|
|
||||||
0x22 0x0022 #QUOTATION MARK
|
|
||||||
0x23 0x0023 #NUMBER SIGN
|
|
||||||
0x24 0x0024 #DOLLAR SIGN
|
|
||||||
0x25 0x0025 #PERCENT SIGN
|
|
||||||
0x26 0x0026 #AMPERSAND
|
|
||||||
0x27 0x0027 #APOSTROPHE
|
|
||||||
0x28 0x0028 #LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 #RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A #ASTERISK
|
|
||||||
0x2B 0x002B #PLUS SIGN
|
|
||||||
0x2C 0x002C #COMMA
|
|
||||||
0x2D 0x002D #HYPHEN-MINUS
|
|
||||||
0x2E 0x002E #FULL STOP
|
|
||||||
0x2F 0x002F #SOLIDUS
|
|
||||||
0x30 0x0030 #DIGIT ZERO
|
|
||||||
0x31 0x0031 #DIGIT ONE
|
|
||||||
0x32 0x0032 #DIGIT TWO
|
|
||||||
0x33 0x0033 #DIGIT THREE
|
|
||||||
0x34 0x0034 #DIGIT FOUR
|
|
||||||
0x35 0x0035 #DIGIT FIVE
|
|
||||||
0x36 0x0036 #DIGIT SIX
|
|
||||||
0x37 0x0037 #DIGIT SEVEN
|
|
||||||
0x38 0x0038 #DIGIT EIGHT
|
|
||||||
0x39 0x0039 #DIGIT NINE
|
|
||||||
0x3A 0x003A #COLON
|
|
||||||
0x3B 0x003B #SEMICOLON
|
|
||||||
0x3C 0x003C #LESS-THAN SIGN
|
|
||||||
0x3D 0x003D #EQUALS SIGN
|
|
||||||
0x3E 0x003E #GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F #QUESTION MARK
|
|
||||||
0x40 0x0040 #COMMERCIAL AT
|
|
||||||
0x41 0x0041 #LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 #LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 #LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 #LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 #LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 #LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 #LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 #LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 #LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A #LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B #LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C #LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D #LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E #LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F #LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 #LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 #LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 #LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 #LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 #LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 #LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 #LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 #LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 #LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 #LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A #LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B #LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C #REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D #RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E #CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F #LOW LINE
|
|
||||||
0x60 0x0060 #GRAVE ACCENT
|
|
||||||
0x61 0x0061 #LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 #LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 #LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 #LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 #LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 #LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 #LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 #LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 #LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A #LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B #LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C #LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D #LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E #LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F #LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 #LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 #LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 #LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 #LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 #LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 #LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 #LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 #LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 #LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 #LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A #LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B #LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C #VERTICAL LINE
|
|
||||||
0x7D 0x007D #RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E #TILDE
|
|
||||||
0x7F 0x007F #DELETE
|
|
||||||
0x80 0x20AC #EURO SIGN
|
|
||||||
0x81 #UNDEFINED
|
|
||||||
0x82 0x201A #SINGLE LOW-9 QUOTATION MARK
|
|
||||||
0x83 #UNDEFINED
|
|
||||||
0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
|
|
||||||
0x85 0x2026 #HORIZONTAL ELLIPSIS
|
|
||||||
0x86 0x2020 #DAGGER
|
|
||||||
0x87 0x2021 #DOUBLE DAGGER
|
|
||||||
0x88 #UNDEFINED
|
|
||||||
0x89 0x2030 #PER MILLE SIGN
|
|
||||||
0x8A 0x0160 #LATIN CAPITAL LETTER S WITH CARON
|
|
||||||
0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
|
|
||||||
0x8C 0x015A #LATIN CAPITAL LETTER S WITH ACUTE
|
|
||||||
0x8D 0x0164 #LATIN CAPITAL LETTER T WITH CARON
|
|
||||||
0x8E 0x017D #LATIN CAPITAL LETTER Z WITH CARON
|
|
||||||
0x8F 0x0179 #LATIN CAPITAL LETTER Z WITH ACUTE
|
|
||||||
0x90 #UNDEFINED
|
|
||||||
0x91 0x2018 #LEFT SINGLE QUOTATION MARK
|
|
||||||
0x92 0x2019 #RIGHT SINGLE QUOTATION MARK
|
|
||||||
0x93 0x201C #LEFT DOUBLE QUOTATION MARK
|
|
||||||
0x94 0x201D #RIGHT DOUBLE QUOTATION MARK
|
|
||||||
0x95 0x2022 #BULLET
|
|
||||||
0x96 0x2013 #EN DASH
|
|
||||||
0x97 0x2014 #EM DASH
|
|
||||||
0x98 #UNDEFINED
|
|
||||||
0x99 0x2122 #TRADE MARK SIGN
|
|
||||||
0x9A 0x0161 #LATIN SMALL LETTER S WITH CARON
|
|
||||||
0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
|
|
||||||
0x9C 0x015B #LATIN SMALL LETTER S WITH ACUTE
|
|
||||||
0x9D 0x0165 #LATIN SMALL LETTER T WITH CARON
|
|
||||||
0x9E 0x017E #LATIN SMALL LETTER Z WITH CARON
|
|
||||||
0x9F 0x017A #LATIN SMALL LETTER Z WITH ACUTE
|
|
||||||
0xA0 0x00A0 #NO-BREAK SPACE
|
|
||||||
0xA1 0x02C7 #CARON
|
|
||||||
0xA2 0x02D8 #BREVE
|
|
||||||
0xA3 0x0141 #LATIN CAPITAL LETTER L WITH STROKE
|
|
||||||
0xA4 0x00A4 #CURRENCY SIGN
|
|
||||||
0xA5 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK
|
|
||||||
0xA6 0x00A6 #BROKEN BAR
|
|
||||||
0xA7 0x00A7 #SECTION SIGN
|
|
||||||
0xA8 0x00A8 #DIAERESIS
|
|
||||||
0xA9 0x00A9 #COPYRIGHT SIGN
|
|
||||||
0xAA 0x015E #LATIN CAPITAL LETTER S WITH CEDILLA
|
|
||||||
0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xAC 0x00AC #NOT SIGN
|
|
||||||
0xAD 0x00AD #SOFT HYPHEN
|
|
||||||
0xAE 0x00AE #REGISTERED SIGN
|
|
||||||
0xAF 0x017B #LATIN CAPITAL LETTER Z WITH DOT ABOVE
|
|
||||||
0xB0 0x00B0 #DEGREE SIGN
|
|
||||||
0xB1 0x00B1 #PLUS-MINUS SIGN
|
|
||||||
0xB2 0x02DB #OGONEK
|
|
||||||
0xB3 0x0142 #LATIN SMALL LETTER L WITH STROKE
|
|
||||||
0xB4 0x00B4 #ACUTE ACCENT
|
|
||||||
0xB5 0x00B5 #MICRO SIGN
|
|
||||||
0xB6 0x00B6 #PILCROW SIGN
|
|
||||||
0xB7 0x00B7 #MIDDLE DOT
|
|
||||||
0xB8 0x00B8 #CEDILLA
|
|
||||||
0xB9 0x0105 #LATIN SMALL LETTER A WITH OGONEK
|
|
||||||
0xBA 0x015F #LATIN SMALL LETTER S WITH CEDILLA
|
|
||||||
0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xBC 0x013D #LATIN CAPITAL LETTER L WITH CARON
|
|
||||||
0xBD 0x02DD #DOUBLE ACUTE ACCENT
|
|
||||||
0xBE 0x013E #LATIN SMALL LETTER L WITH CARON
|
|
||||||
0xBF 0x017C #LATIN SMALL LETTER Z WITH DOT ABOVE
|
|
||||||
0xC0 0x0154 #LATIN CAPITAL LETTER R WITH ACUTE
|
|
||||||
0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE
|
|
||||||
0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xC3 0x0102 #LATIN CAPITAL LETTER A WITH BREVE
|
|
||||||
0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS
|
|
||||||
0xC5 0x0139 #LATIN CAPITAL LETTER L WITH ACUTE
|
|
||||||
0xC6 0x0106 #LATIN CAPITAL LETTER C WITH ACUTE
|
|
||||||
0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA
|
|
||||||
0xC8 0x010C #LATIN CAPITAL LETTER C WITH CARON
|
|
||||||
0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE
|
|
||||||
0xCA 0x0118 #LATIN CAPITAL LETTER E WITH OGONEK
|
|
||||||
0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS
|
|
||||||
0xCC 0x011A #LATIN CAPITAL LETTER E WITH CARON
|
|
||||||
0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE
|
|
||||||
0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xCF 0x010E #LATIN CAPITAL LETTER D WITH CARON
|
|
||||||
0xD0 0x0110 #LATIN CAPITAL LETTER D WITH STROKE
|
|
||||||
0xD1 0x0143 #LATIN CAPITAL LETTER N WITH ACUTE
|
|
||||||
0xD2 0x0147 #LATIN CAPITAL LETTER N WITH CARON
|
|
||||||
0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE
|
|
||||||
0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xD5 0x0150 #LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
|
|
||||||
0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS
|
|
||||||
0xD7 0x00D7 #MULTIPLICATION SIGN
|
|
||||||
0xD8 0x0158 #LATIN CAPITAL LETTER R WITH CARON
|
|
||||||
0xD9 0x016E #LATIN CAPITAL LETTER U WITH RING ABOVE
|
|
||||||
0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE
|
|
||||||
0xDB 0x0170 #LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
|
|
||||||
0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS
|
|
||||||
0xDD 0x00DD #LATIN CAPITAL LETTER Y WITH ACUTE
|
|
||||||
0xDE 0x0162 #LATIN CAPITAL LETTER T WITH CEDILLA
|
|
||||||
0xDF 0x00DF #LATIN SMALL LETTER SHARP S
|
|
||||||
0xE0 0x0155 #LATIN SMALL LETTER R WITH ACUTE
|
|
||||||
0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE
|
|
||||||
0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xE3 0x0103 #LATIN SMALL LETTER A WITH BREVE
|
|
||||||
0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS
|
|
||||||
0xE5 0x013A #LATIN SMALL LETTER L WITH ACUTE
|
|
||||||
0xE6 0x0107 #LATIN SMALL LETTER C WITH ACUTE
|
|
||||||
0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA
|
|
||||||
0xE8 0x010D #LATIN SMALL LETTER C WITH CARON
|
|
||||||
0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
|
|
||||||
0xEA 0x0119 #LATIN SMALL LETTER E WITH OGONEK
|
|
||||||
0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS
|
|
||||||
0xEC 0x011B #LATIN SMALL LETTER E WITH CARON
|
|
||||||
0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE
|
|
||||||
0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xEF 0x010F #LATIN SMALL LETTER D WITH CARON
|
|
||||||
0xF0 0x0111 #LATIN SMALL LETTER D WITH STROKE
|
|
||||||
0xF1 0x0144 #LATIN SMALL LETTER N WITH ACUTE
|
|
||||||
0xF2 0x0148 #LATIN SMALL LETTER N WITH CARON
|
|
||||||
0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE
|
|
||||||
0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xF5 0x0151 #LATIN SMALL LETTER O WITH DOUBLE ACUTE
|
|
||||||
0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS
|
|
||||||
0xF7 0x00F7 #DIVISION SIGN
|
|
||||||
0xF8 0x0159 #LATIN SMALL LETTER R WITH CARON
|
|
||||||
0xF9 0x016F #LATIN SMALL LETTER U WITH RING ABOVE
|
|
||||||
0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE
|
|
||||||
0xFB 0x0171 #LATIN SMALL LETTER U WITH DOUBLE ACUTE
|
|
||||||
0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
|
|
||||||
0xFD 0x00FD #LATIN SMALL LETTER Y WITH ACUTE
|
|
||||||
0xFE 0x0163 #LATIN SMALL LETTER T WITH CEDILLA
|
|
||||||
0xFF 0x02D9 #DOT ABOVE
|
|
@ -1,274 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: cp1251 to Unicode table
|
|
||||||
# Unicode version: 2.0
|
|
||||||
# Table version: 2.01
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 04/15/98
|
|
||||||
#
|
|
||||||
# Contact: cpxlate@microsoft.com
|
|
||||||
#
|
|
||||||
# General notes: none
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the cp1251 code (in hex)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 is the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in cp1251 order
|
|
||||||
#
|
|
||||||
0x00 0x0000 #NULL
|
|
||||||
0x01 0x0001 #START OF HEADING
|
|
||||||
0x02 0x0002 #START OF TEXT
|
|
||||||
0x03 0x0003 #END OF TEXT
|
|
||||||
0x04 0x0004 #END OF TRANSMISSION
|
|
||||||
0x05 0x0005 #ENQUIRY
|
|
||||||
0x06 0x0006 #ACKNOWLEDGE
|
|
||||||
0x07 0x0007 #BELL
|
|
||||||
0x08 0x0008 #BACKSPACE
|
|
||||||
0x09 0x0009 #HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A #LINE FEED
|
|
||||||
0x0B 0x000B #VERTICAL TABULATION
|
|
||||||
0x0C 0x000C #FORM FEED
|
|
||||||
0x0D 0x000D #CARRIAGE RETURN
|
|
||||||
0x0E 0x000E #SHIFT OUT
|
|
||||||
0x0F 0x000F #SHIFT IN
|
|
||||||
0x10 0x0010 #DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 #DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 #DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 #DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 #DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 #NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 #SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 #END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 #CANCEL
|
|
||||||
0x19 0x0019 #END OF MEDIUM
|
|
||||||
0x1A 0x001A #SUBSTITUTE
|
|
||||||
0x1B 0x001B #ESCAPE
|
|
||||||
0x1C 0x001C #FILE SEPARATOR
|
|
||||||
0x1D 0x001D #GROUP SEPARATOR
|
|
||||||
0x1E 0x001E #RECORD SEPARATOR
|
|
||||||
0x1F 0x001F #UNIT SEPARATOR
|
|
||||||
0x20 0x0020 #SPACE
|
|
||||||
0x21 0x0021 #EXCLAMATION MARK
|
|
||||||
0x22 0x0022 #QUOTATION MARK
|
|
||||||
0x23 0x0023 #NUMBER SIGN
|
|
||||||
0x24 0x0024 #DOLLAR SIGN
|
|
||||||
0x25 0x0025 #PERCENT SIGN
|
|
||||||
0x26 0x0026 #AMPERSAND
|
|
||||||
0x27 0x0027 #APOSTROPHE
|
|
||||||
0x28 0x0028 #LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 #RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A #ASTERISK
|
|
||||||
0x2B 0x002B #PLUS SIGN
|
|
||||||
0x2C 0x002C #COMMA
|
|
||||||
0x2D 0x002D #HYPHEN-MINUS
|
|
||||||
0x2E 0x002E #FULL STOP
|
|
||||||
0x2F 0x002F #SOLIDUS
|
|
||||||
0x30 0x0030 #DIGIT ZERO
|
|
||||||
0x31 0x0031 #DIGIT ONE
|
|
||||||
0x32 0x0032 #DIGIT TWO
|
|
||||||
0x33 0x0033 #DIGIT THREE
|
|
||||||
0x34 0x0034 #DIGIT FOUR
|
|
||||||
0x35 0x0035 #DIGIT FIVE
|
|
||||||
0x36 0x0036 #DIGIT SIX
|
|
||||||
0x37 0x0037 #DIGIT SEVEN
|
|
||||||
0x38 0x0038 #DIGIT EIGHT
|
|
||||||
0x39 0x0039 #DIGIT NINE
|
|
||||||
0x3A 0x003A #COLON
|
|
||||||
0x3B 0x003B #SEMICOLON
|
|
||||||
0x3C 0x003C #LESS-THAN SIGN
|
|
||||||
0x3D 0x003D #EQUALS SIGN
|
|
||||||
0x3E 0x003E #GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F #QUESTION MARK
|
|
||||||
0x40 0x0040 #COMMERCIAL AT
|
|
||||||
0x41 0x0041 #LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 #LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 #LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 #LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 #LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 #LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 #LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 #LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 #LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A #LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B #LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C #LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D #LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E #LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F #LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 #LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 #LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 #LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 #LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 #LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 #LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 #LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 #LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 #LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 #LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A #LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B #LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C #REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D #RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E #CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F #LOW LINE
|
|
||||||
0x60 0x0060 #GRAVE ACCENT
|
|
||||||
0x61 0x0061 #LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 #LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 #LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 #LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 #LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 #LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 #LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 #LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 #LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A #LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B #LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C #LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D #LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E #LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F #LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 #LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 #LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 #LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 #LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 #LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 #LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 #LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 #LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 #LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 #LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A #LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B #LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C #VERTICAL LINE
|
|
||||||
0x7D 0x007D #RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E #TILDE
|
|
||||||
0x7F 0x007F #DELETE
|
|
||||||
0x80 0x0402 #CYRILLIC CAPITAL LETTER DJE
|
|
||||||
0x81 0x0403 #CYRILLIC CAPITAL LETTER GJE
|
|
||||||
0x82 0x201A #SINGLE LOW-9 QUOTATION MARK
|
|
||||||
0x83 0x0453 #CYRILLIC SMALL LETTER GJE
|
|
||||||
0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
|
|
||||||
0x85 0x2026 #HORIZONTAL ELLIPSIS
|
|
||||||
0x86 0x2020 #DAGGER
|
|
||||||
0x87 0x2021 #DOUBLE DAGGER
|
|
||||||
0x88 0x20AC #EURO SIGN
|
|
||||||
0x89 0x2030 #PER MILLE SIGN
|
|
||||||
0x8A 0x0409 #CYRILLIC CAPITAL LETTER LJE
|
|
||||||
0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
|
|
||||||
0x8C 0x040A #CYRILLIC CAPITAL LETTER NJE
|
|
||||||
0x8D 0x040C #CYRILLIC CAPITAL LETTER KJE
|
|
||||||
0x8E 0x040B #CYRILLIC CAPITAL LETTER TSHE
|
|
||||||
0x8F 0x040F #CYRILLIC CAPITAL LETTER DZHE
|
|
||||||
0x90 0x0452 #CYRILLIC SMALL LETTER DJE
|
|
||||||
0x91 0x2018 #LEFT SINGLE QUOTATION MARK
|
|
||||||
0x92 0x2019 #RIGHT SINGLE QUOTATION MARK
|
|
||||||
0x93 0x201C #LEFT DOUBLE QUOTATION MARK
|
|
||||||
0x94 0x201D #RIGHT DOUBLE QUOTATION MARK
|
|
||||||
0x95 0x2022 #BULLET
|
|
||||||
0x96 0x2013 #EN DASH
|
|
||||||
0x97 0x2014 #EM DASH
|
|
||||||
0x98 #UNDEFINED
|
|
||||||
0x99 0x2122 #TRADE MARK SIGN
|
|
||||||
0x9A 0x0459 #CYRILLIC SMALL LETTER LJE
|
|
||||||
0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
|
|
||||||
0x9C 0x045A #CYRILLIC SMALL LETTER NJE
|
|
||||||
0x9D 0x045C #CYRILLIC SMALL LETTER KJE
|
|
||||||
0x9E 0x045B #CYRILLIC SMALL LETTER TSHE
|
|
||||||
0x9F 0x045F #CYRILLIC SMALL LETTER DZHE
|
|
||||||
0xA0 0x00A0 #NO-BREAK SPACE
|
|
||||||
0xA1 0x040E #CYRILLIC CAPITAL LETTER SHORT U
|
|
||||||
0xA2 0x045E #CYRILLIC SMALL LETTER SHORT U
|
|
||||||
0xA3 0x0408 #CYRILLIC CAPITAL LETTER JE
|
|
||||||
0xA4 0x00A4 #CURRENCY SIGN
|
|
||||||
0xA5 0x0490 #CYRILLIC CAPITAL LETTER GHE WITH UPTURN
|
|
||||||
0xA6 0x00A6 #BROKEN BAR
|
|
||||||
0xA7 0x00A7 #SECTION SIGN
|
|
||||||
0xA8 0x0401 #CYRILLIC CAPITAL LETTER IO
|
|
||||||
0xA9 0x00A9 #COPYRIGHT SIGN
|
|
||||||
0xAA 0x0404 #CYRILLIC CAPITAL LETTER UKRAINIAN IE
|
|
||||||
0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xAC 0x00AC #NOT SIGN
|
|
||||||
0xAD 0x00AD #SOFT HYPHEN
|
|
||||||
0xAE 0x00AE #REGISTERED SIGN
|
|
||||||
0xAF 0x0407 #CYRILLIC CAPITAL LETTER YI
|
|
||||||
0xB0 0x00B0 #DEGREE SIGN
|
|
||||||
0xB1 0x00B1 #PLUS-MINUS SIGN
|
|
||||||
0xB2 0x0406 #CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
|
|
||||||
0xB3 0x0456 #CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
|
|
||||||
0xB4 0x0491 #CYRILLIC SMALL LETTER GHE WITH UPTURN
|
|
||||||
0xB5 0x00B5 #MICRO SIGN
|
|
||||||
0xB6 0x00B6 #PILCROW SIGN
|
|
||||||
0xB7 0x00B7 #MIDDLE DOT
|
|
||||||
0xB8 0x0451 #CYRILLIC SMALL LETTER IO
|
|
||||||
0xB9 0x2116 #NUMERO SIGN
|
|
||||||
0xBA 0x0454 #CYRILLIC SMALL LETTER UKRAINIAN IE
|
|
||||||
0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xBC 0x0458 #CYRILLIC SMALL LETTER JE
|
|
||||||
0xBD 0x0405 #CYRILLIC CAPITAL LETTER DZE
|
|
||||||
0xBE 0x0455 #CYRILLIC SMALL LETTER DZE
|
|
||||||
0xBF 0x0457 #CYRILLIC SMALL LETTER YI
|
|
||||||
0xC0 0x0410 #CYRILLIC CAPITAL LETTER A
|
|
||||||
0xC1 0x0411 #CYRILLIC CAPITAL LETTER BE
|
|
||||||
0xC2 0x0412 #CYRILLIC CAPITAL LETTER VE
|
|
||||||
0xC3 0x0413 #CYRILLIC CAPITAL LETTER GHE
|
|
||||||
0xC4 0x0414 #CYRILLIC CAPITAL LETTER DE
|
|
||||||
0xC5 0x0415 #CYRILLIC CAPITAL LETTER IE
|
|
||||||
0xC6 0x0416 #CYRILLIC CAPITAL LETTER ZHE
|
|
||||||
0xC7 0x0417 #CYRILLIC CAPITAL LETTER ZE
|
|
||||||
0xC8 0x0418 #CYRILLIC CAPITAL LETTER I
|
|
||||||
0xC9 0x0419 #CYRILLIC CAPITAL LETTER SHORT I
|
|
||||||
0xCA 0x041A #CYRILLIC CAPITAL LETTER KA
|
|
||||||
0xCB 0x041B #CYRILLIC CAPITAL LETTER EL
|
|
||||||
0xCC 0x041C #CYRILLIC CAPITAL LETTER EM
|
|
||||||
0xCD 0x041D #CYRILLIC CAPITAL LETTER EN
|
|
||||||
0xCE 0x041E #CYRILLIC CAPITAL LETTER O
|
|
||||||
0xCF 0x041F #CYRILLIC CAPITAL LETTER PE
|
|
||||||
0xD0 0x0420 #CYRILLIC CAPITAL LETTER ER
|
|
||||||
0xD1 0x0421 #CYRILLIC CAPITAL LETTER ES
|
|
||||||
0xD2 0x0422 #CYRILLIC CAPITAL LETTER TE
|
|
||||||
0xD3 0x0423 #CYRILLIC CAPITAL LETTER U
|
|
||||||
0xD4 0x0424 #CYRILLIC CAPITAL LETTER EF
|
|
||||||
0xD5 0x0425 #CYRILLIC CAPITAL LETTER HA
|
|
||||||
0xD6 0x0426 #CYRILLIC CAPITAL LETTER TSE
|
|
||||||
0xD7 0x0427 #CYRILLIC CAPITAL LETTER CHE
|
|
||||||
0xD8 0x0428 #CYRILLIC CAPITAL LETTER SHA
|
|
||||||
0xD9 0x0429 #CYRILLIC CAPITAL LETTER SHCHA
|
|
||||||
0xDA 0x042A #CYRILLIC CAPITAL LETTER HARD SIGN
|
|
||||||
0xDB 0x042B #CYRILLIC CAPITAL LETTER YERU
|
|
||||||
0xDC 0x042C #CYRILLIC CAPITAL LETTER SOFT SIGN
|
|
||||||
0xDD 0x042D #CYRILLIC CAPITAL LETTER E
|
|
||||||
0xDE 0x042E #CYRILLIC CAPITAL LETTER YU
|
|
||||||
0xDF 0x042F #CYRILLIC CAPITAL LETTER YA
|
|
||||||
0xE0 0x0430 #CYRILLIC SMALL LETTER A
|
|
||||||
0xE1 0x0431 #CYRILLIC SMALL LETTER BE
|
|
||||||
0xE2 0x0432 #CYRILLIC SMALL LETTER VE
|
|
||||||
0xE3 0x0433 #CYRILLIC SMALL LETTER GHE
|
|
||||||
0xE4 0x0434 #CYRILLIC SMALL LETTER DE
|
|
||||||
0xE5 0x0435 #CYRILLIC SMALL LETTER IE
|
|
||||||
0xE6 0x0436 #CYRILLIC SMALL LETTER ZHE
|
|
||||||
0xE7 0x0437 #CYRILLIC SMALL LETTER ZE
|
|
||||||
0xE8 0x0438 #CYRILLIC SMALL LETTER I
|
|
||||||
0xE9 0x0439 #CYRILLIC SMALL LETTER SHORT I
|
|
||||||
0xEA 0x043A #CYRILLIC SMALL LETTER KA
|
|
||||||
0xEB 0x043B #CYRILLIC SMALL LETTER EL
|
|
||||||
0xEC 0x043C #CYRILLIC SMALL LETTER EM
|
|
||||||
0xED 0x043D #CYRILLIC SMALL LETTER EN
|
|
||||||
0xEE 0x043E #CYRILLIC SMALL LETTER O
|
|
||||||
0xEF 0x043F #CYRILLIC SMALL LETTER PE
|
|
||||||
0xF0 0x0440 #CYRILLIC SMALL LETTER ER
|
|
||||||
0xF1 0x0441 #CYRILLIC SMALL LETTER ES
|
|
||||||
0xF2 0x0442 #CYRILLIC SMALL LETTER TE
|
|
||||||
0xF3 0x0443 #CYRILLIC SMALL LETTER U
|
|
||||||
0xF4 0x0444 #CYRILLIC SMALL LETTER EF
|
|
||||||
0xF5 0x0445 #CYRILLIC SMALL LETTER HA
|
|
||||||
0xF6 0x0446 #CYRILLIC SMALL LETTER TSE
|
|
||||||
0xF7 0x0447 #CYRILLIC SMALL LETTER CHE
|
|
||||||
0xF8 0x0448 #CYRILLIC SMALL LETTER SHA
|
|
||||||
0xF9 0x0449 #CYRILLIC SMALL LETTER SHCHA
|
|
||||||
0xFA 0x044A #CYRILLIC SMALL LETTER HARD SIGN
|
|
||||||
0xFB 0x044B #CYRILLIC SMALL LETTER YERU
|
|
||||||
0xFC 0x044C #CYRILLIC SMALL LETTER SOFT SIGN
|
|
||||||
0xFD 0x044D #CYRILLIC SMALL LETTER E
|
|
||||||
0xFE 0x044E #CYRILLIC SMALL LETTER YU
|
|
||||||
0xFF 0x044F #CYRILLIC SMALL LETTER YA
|
|
@ -1,274 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: cp1252 to Unicode table
|
|
||||||
# Unicode version: 2.0
|
|
||||||
# Table version: 2.01
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 04/15/98
|
|
||||||
#
|
|
||||||
# Contact: cpxlate@microsoft.com
|
|
||||||
#
|
|
||||||
# General notes: none
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the cp1252 code (in hex)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 is the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in cp1252 order
|
|
||||||
#
|
|
||||||
0x00 0x0000 #NULL
|
|
||||||
0x01 0x0001 #START OF HEADING
|
|
||||||
0x02 0x0002 #START OF TEXT
|
|
||||||
0x03 0x0003 #END OF TEXT
|
|
||||||
0x04 0x0004 #END OF TRANSMISSION
|
|
||||||
0x05 0x0005 #ENQUIRY
|
|
||||||
0x06 0x0006 #ACKNOWLEDGE
|
|
||||||
0x07 0x0007 #BELL
|
|
||||||
0x08 0x0008 #BACKSPACE
|
|
||||||
0x09 0x0009 #HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A #LINE FEED
|
|
||||||
0x0B 0x000B #VERTICAL TABULATION
|
|
||||||
0x0C 0x000C #FORM FEED
|
|
||||||
0x0D 0x000D #CARRIAGE RETURN
|
|
||||||
0x0E 0x000E #SHIFT OUT
|
|
||||||
0x0F 0x000F #SHIFT IN
|
|
||||||
0x10 0x0010 #DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 #DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 #DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 #DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 #DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 #NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 #SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 #END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 #CANCEL
|
|
||||||
0x19 0x0019 #END OF MEDIUM
|
|
||||||
0x1A 0x001A #SUBSTITUTE
|
|
||||||
0x1B 0x001B #ESCAPE
|
|
||||||
0x1C 0x001C #FILE SEPARATOR
|
|
||||||
0x1D 0x001D #GROUP SEPARATOR
|
|
||||||
0x1E 0x001E #RECORD SEPARATOR
|
|
||||||
0x1F 0x001F #UNIT SEPARATOR
|
|
||||||
0x20 0x0020 #SPACE
|
|
||||||
0x21 0x0021 #EXCLAMATION MARK
|
|
||||||
0x22 0x0022 #QUOTATION MARK
|
|
||||||
0x23 0x0023 #NUMBER SIGN
|
|
||||||
0x24 0x0024 #DOLLAR SIGN
|
|
||||||
0x25 0x0025 #PERCENT SIGN
|
|
||||||
0x26 0x0026 #AMPERSAND
|
|
||||||
0x27 0x0027 #APOSTROPHE
|
|
||||||
0x28 0x0028 #LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 #RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A #ASTERISK
|
|
||||||
0x2B 0x002B #PLUS SIGN
|
|
||||||
0x2C 0x002C #COMMA
|
|
||||||
0x2D 0x002D #HYPHEN-MINUS
|
|
||||||
0x2E 0x002E #FULL STOP
|
|
||||||
0x2F 0x002F #SOLIDUS
|
|
||||||
0x30 0x0030 #DIGIT ZERO
|
|
||||||
0x31 0x0031 #DIGIT ONE
|
|
||||||
0x32 0x0032 #DIGIT TWO
|
|
||||||
0x33 0x0033 #DIGIT THREE
|
|
||||||
0x34 0x0034 #DIGIT FOUR
|
|
||||||
0x35 0x0035 #DIGIT FIVE
|
|
||||||
0x36 0x0036 #DIGIT SIX
|
|
||||||
0x37 0x0037 #DIGIT SEVEN
|
|
||||||
0x38 0x0038 #DIGIT EIGHT
|
|
||||||
0x39 0x0039 #DIGIT NINE
|
|
||||||
0x3A 0x003A #COLON
|
|
||||||
0x3B 0x003B #SEMICOLON
|
|
||||||
0x3C 0x003C #LESS-THAN SIGN
|
|
||||||
0x3D 0x003D #EQUALS SIGN
|
|
||||||
0x3E 0x003E #GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F #QUESTION MARK
|
|
||||||
0x40 0x0040 #COMMERCIAL AT
|
|
||||||
0x41 0x0041 #LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 #LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 #LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 #LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 #LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 #LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 #LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 #LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 #LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A #LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B #LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C #LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D #LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E #LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F #LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 #LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 #LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 #LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 #LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 #LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 #LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 #LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 #LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 #LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 #LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A #LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B #LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C #REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D #RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E #CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F #LOW LINE
|
|
||||||
0x60 0x0060 #GRAVE ACCENT
|
|
||||||
0x61 0x0061 #LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 #LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 #LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 #LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 #LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 #LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 #LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 #LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 #LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A #LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B #LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C #LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D #LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E #LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F #LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 #LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 #LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 #LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 #LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 #LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 #LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 #LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 #LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 #LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 #LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A #LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B #LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C #VERTICAL LINE
|
|
||||||
0x7D 0x007D #RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E #TILDE
|
|
||||||
0x7F 0x007F #DELETE
|
|
||||||
0x80 0x20AC #EURO SIGN
|
|
||||||
0x81 #UNDEFINED
|
|
||||||
0x82 0x201A #SINGLE LOW-9 QUOTATION MARK
|
|
||||||
0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK
|
|
||||||
0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
|
|
||||||
0x85 0x2026 #HORIZONTAL ELLIPSIS
|
|
||||||
0x86 0x2020 #DAGGER
|
|
||||||
0x87 0x2021 #DOUBLE DAGGER
|
|
||||||
0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT
|
|
||||||
0x89 0x2030 #PER MILLE SIGN
|
|
||||||
0x8A 0x0160 #LATIN CAPITAL LETTER S WITH CARON
|
|
||||||
0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
|
|
||||||
0x8C 0x0152 #LATIN CAPITAL LIGATURE OE
|
|
||||||
0x8D #UNDEFINED
|
|
||||||
0x8E 0x017D #LATIN CAPITAL LETTER Z WITH CARON
|
|
||||||
0x8F #UNDEFINED
|
|
||||||
0x90 #UNDEFINED
|
|
||||||
0x91 0x2018 #LEFT SINGLE QUOTATION MARK
|
|
||||||
0x92 0x2019 #RIGHT SINGLE QUOTATION MARK
|
|
||||||
0x93 0x201C #LEFT DOUBLE QUOTATION MARK
|
|
||||||
0x94 0x201D #RIGHT DOUBLE QUOTATION MARK
|
|
||||||
0x95 0x2022 #BULLET
|
|
||||||
0x96 0x2013 #EN DASH
|
|
||||||
0x97 0x2014 #EM DASH
|
|
||||||
0x98 0x02DC #SMALL TILDE
|
|
||||||
0x99 0x2122 #TRADE MARK SIGN
|
|
||||||
0x9A 0x0161 #LATIN SMALL LETTER S WITH CARON
|
|
||||||
0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
|
|
||||||
0x9C 0x0153 #LATIN SMALL LIGATURE OE
|
|
||||||
0x9D #UNDEFINED
|
|
||||||
0x9E 0x017E #LATIN SMALL LETTER Z WITH CARON
|
|
||||||
0x9F 0x0178 #LATIN CAPITAL LETTER Y WITH DIAERESIS
|
|
||||||
0xA0 0x00A0 #NO-BREAK SPACE
|
|
||||||
0xA1 0x00A1 #INVERTED EXCLAMATION MARK
|
|
||||||
0xA2 0x00A2 #CENT SIGN
|
|
||||||
0xA3 0x00A3 #POUND SIGN
|
|
||||||
0xA4 0x00A4 #CURRENCY SIGN
|
|
||||||
0xA5 0x00A5 #YEN SIGN
|
|
||||||
0xA6 0x00A6 #BROKEN BAR
|
|
||||||
0xA7 0x00A7 #SECTION SIGN
|
|
||||||
0xA8 0x00A8 #DIAERESIS
|
|
||||||
0xA9 0x00A9 #COPYRIGHT SIGN
|
|
||||||
0xAA 0x00AA #FEMININE ORDINAL INDICATOR
|
|
||||||
0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xAC 0x00AC #NOT SIGN
|
|
||||||
0xAD 0x00AD #SOFT HYPHEN
|
|
||||||
0xAE 0x00AE #REGISTERED SIGN
|
|
||||||
0xAF 0x00AF #MACRON
|
|
||||||
0xB0 0x00B0 #DEGREE SIGN
|
|
||||||
0xB1 0x00B1 #PLUS-MINUS SIGN
|
|
||||||
0xB2 0x00B2 #SUPERSCRIPT TWO
|
|
||||||
0xB3 0x00B3 #SUPERSCRIPT THREE
|
|
||||||
0xB4 0x00B4 #ACUTE ACCENT
|
|
||||||
0xB5 0x00B5 #MICRO SIGN
|
|
||||||
0xB6 0x00B6 #PILCROW SIGN
|
|
||||||
0xB7 0x00B7 #MIDDLE DOT
|
|
||||||
0xB8 0x00B8 #CEDILLA
|
|
||||||
0xB9 0x00B9 #SUPERSCRIPT ONE
|
|
||||||
0xBA 0x00BA #MASCULINE ORDINAL INDICATOR
|
|
||||||
0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xBC 0x00BC #VULGAR FRACTION ONE QUARTER
|
|
||||||
0xBD 0x00BD #VULGAR FRACTION ONE HALF
|
|
||||||
0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS
|
|
||||||
0xBF 0x00BF #INVERTED QUESTION MARK
|
|
||||||
0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE
|
|
||||||
0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE
|
|
||||||
0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xC3 0x00C3 #LATIN CAPITAL LETTER A WITH TILDE
|
|
||||||
0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS
|
|
||||||
0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE
|
|
||||||
0xC6 0x00C6 #LATIN CAPITAL LETTER AE
|
|
||||||
0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA
|
|
||||||
0xC8 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE
|
|
||||||
0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE
|
|
||||||
0xCA 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX
|
|
||||||
0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS
|
|
||||||
0xCC 0x00CC #LATIN CAPITAL LETTER I WITH GRAVE
|
|
||||||
0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE
|
|
||||||
0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xCF 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS
|
|
||||||
0xD0 0x00D0 #LATIN CAPITAL LETTER ETH
|
|
||||||
0xD1 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE
|
|
||||||
0xD2 0x00D2 #LATIN CAPITAL LETTER O WITH GRAVE
|
|
||||||
0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE
|
|
||||||
0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xD5 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE
|
|
||||||
0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS
|
|
||||||
0xD7 0x00D7 #MULTIPLICATION SIGN
|
|
||||||
0xD8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE
|
|
||||||
0xD9 0x00D9 #LATIN CAPITAL LETTER U WITH GRAVE
|
|
||||||
0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE
|
|
||||||
0xDB 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS
|
|
||||||
0xDD 0x00DD #LATIN CAPITAL LETTER Y WITH ACUTE
|
|
||||||
0xDE 0x00DE #LATIN CAPITAL LETTER THORN
|
|
||||||
0xDF 0x00DF #LATIN SMALL LETTER SHARP S
|
|
||||||
0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE
|
|
||||||
0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE
|
|
||||||
0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xE3 0x00E3 #LATIN SMALL LETTER A WITH TILDE
|
|
||||||
0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS
|
|
||||||
0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE
|
|
||||||
0xE6 0x00E6 #LATIN SMALL LETTER AE
|
|
||||||
0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA
|
|
||||||
0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE
|
|
||||||
0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
|
|
||||||
0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX
|
|
||||||
0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS
|
|
||||||
0xEC 0x00EC #LATIN SMALL LETTER I WITH GRAVE
|
|
||||||
0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE
|
|
||||||
0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS
|
|
||||||
0xF0 0x00F0 #LATIN SMALL LETTER ETH
|
|
||||||
0xF1 0x00F1 #LATIN SMALL LETTER N WITH TILDE
|
|
||||||
0xF2 0x00F2 #LATIN SMALL LETTER O WITH GRAVE
|
|
||||||
0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE
|
|
||||||
0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xF5 0x00F5 #LATIN SMALL LETTER O WITH TILDE
|
|
||||||
0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS
|
|
||||||
0xF7 0x00F7 #DIVISION SIGN
|
|
||||||
0xF8 0x00F8 #LATIN SMALL LETTER O WITH STROKE
|
|
||||||
0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE
|
|
||||||
0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE
|
|
||||||
0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
|
|
||||||
0xFD 0x00FD #LATIN SMALL LETTER Y WITH ACUTE
|
|
||||||
0xFE 0x00FE #LATIN SMALL LETTER THORN
|
|
||||||
0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS
|
|
@ -1,274 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: cp1253 to Unicode table
|
|
||||||
# Unicode version: 2.0
|
|
||||||
# Table version: 2.01
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 04/15/98
|
|
||||||
#
|
|
||||||
# Contact: cpxlate@microsoft.com
|
|
||||||
#
|
|
||||||
# General notes: none
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the cp1253 code (in hex)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 is the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in cp1253 order
|
|
||||||
#
|
|
||||||
0x00 0x0000 #NULL
|
|
||||||
0x01 0x0001 #START OF HEADING
|
|
||||||
0x02 0x0002 #START OF TEXT
|
|
||||||
0x03 0x0003 #END OF TEXT
|
|
||||||
0x04 0x0004 #END OF TRANSMISSION
|
|
||||||
0x05 0x0005 #ENQUIRY
|
|
||||||
0x06 0x0006 #ACKNOWLEDGE
|
|
||||||
0x07 0x0007 #BELL
|
|
||||||
0x08 0x0008 #BACKSPACE
|
|
||||||
0x09 0x0009 #HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A #LINE FEED
|
|
||||||
0x0B 0x000B #VERTICAL TABULATION
|
|
||||||
0x0C 0x000C #FORM FEED
|
|
||||||
0x0D 0x000D #CARRIAGE RETURN
|
|
||||||
0x0E 0x000E #SHIFT OUT
|
|
||||||
0x0F 0x000F #SHIFT IN
|
|
||||||
0x10 0x0010 #DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 #DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 #DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 #DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 #DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 #NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 #SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 #END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 #CANCEL
|
|
||||||
0x19 0x0019 #END OF MEDIUM
|
|
||||||
0x1A 0x001A #SUBSTITUTE
|
|
||||||
0x1B 0x001B #ESCAPE
|
|
||||||
0x1C 0x001C #FILE SEPARATOR
|
|
||||||
0x1D 0x001D #GROUP SEPARATOR
|
|
||||||
0x1E 0x001E #RECORD SEPARATOR
|
|
||||||
0x1F 0x001F #UNIT SEPARATOR
|
|
||||||
0x20 0x0020 #SPACE
|
|
||||||
0x21 0x0021 #EXCLAMATION MARK
|
|
||||||
0x22 0x0022 #QUOTATION MARK
|
|
||||||
0x23 0x0023 #NUMBER SIGN
|
|
||||||
0x24 0x0024 #DOLLAR SIGN
|
|
||||||
0x25 0x0025 #PERCENT SIGN
|
|
||||||
0x26 0x0026 #AMPERSAND
|
|
||||||
0x27 0x0027 #APOSTROPHE
|
|
||||||
0x28 0x0028 #LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 #RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A #ASTERISK
|
|
||||||
0x2B 0x002B #PLUS SIGN
|
|
||||||
0x2C 0x002C #COMMA
|
|
||||||
0x2D 0x002D #HYPHEN-MINUS
|
|
||||||
0x2E 0x002E #FULL STOP
|
|
||||||
0x2F 0x002F #SOLIDUS
|
|
||||||
0x30 0x0030 #DIGIT ZERO
|
|
||||||
0x31 0x0031 #DIGIT ONE
|
|
||||||
0x32 0x0032 #DIGIT TWO
|
|
||||||
0x33 0x0033 #DIGIT THREE
|
|
||||||
0x34 0x0034 #DIGIT FOUR
|
|
||||||
0x35 0x0035 #DIGIT FIVE
|
|
||||||
0x36 0x0036 #DIGIT SIX
|
|
||||||
0x37 0x0037 #DIGIT SEVEN
|
|
||||||
0x38 0x0038 #DIGIT EIGHT
|
|
||||||
0x39 0x0039 #DIGIT NINE
|
|
||||||
0x3A 0x003A #COLON
|
|
||||||
0x3B 0x003B #SEMICOLON
|
|
||||||
0x3C 0x003C #LESS-THAN SIGN
|
|
||||||
0x3D 0x003D #EQUALS SIGN
|
|
||||||
0x3E 0x003E #GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F #QUESTION MARK
|
|
||||||
0x40 0x0040 #COMMERCIAL AT
|
|
||||||
0x41 0x0041 #LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 #LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 #LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 #LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 #LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 #LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 #LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 #LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 #LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A #LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B #LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C #LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D #LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E #LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F #LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 #LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 #LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 #LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 #LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 #LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 #LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 #LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 #LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 #LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 #LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A #LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B #LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C #REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D #RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E #CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F #LOW LINE
|
|
||||||
0x60 0x0060 #GRAVE ACCENT
|
|
||||||
0x61 0x0061 #LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 #LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 #LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 #LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 #LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 #LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 #LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 #LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 #LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A #LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B #LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C #LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D #LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E #LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F #LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 #LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 #LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 #LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 #LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 #LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 #LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 #LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 #LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 #LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 #LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A #LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B #LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C #VERTICAL LINE
|
|
||||||
0x7D 0x007D #RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E #TILDE
|
|
||||||
0x7F 0x007F #DELETE
|
|
||||||
0x80 0x20AC #EURO SIGN
|
|
||||||
0x81 #UNDEFINED
|
|
||||||
0x82 0x201A #SINGLE LOW-9 QUOTATION MARK
|
|
||||||
0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK
|
|
||||||
0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
|
|
||||||
0x85 0x2026 #HORIZONTAL ELLIPSIS
|
|
||||||
0x86 0x2020 #DAGGER
|
|
||||||
0x87 0x2021 #DOUBLE DAGGER
|
|
||||||
0x88 #UNDEFINED
|
|
||||||
0x89 0x2030 #PER MILLE SIGN
|
|
||||||
0x8A #UNDEFINED
|
|
||||||
0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
|
|
||||||
0x8C #UNDEFINED
|
|
||||||
0x8D #UNDEFINED
|
|
||||||
0x8E #UNDEFINED
|
|
||||||
0x8F #UNDEFINED
|
|
||||||
0x90 #UNDEFINED
|
|
||||||
0x91 0x2018 #LEFT SINGLE QUOTATION MARK
|
|
||||||
0x92 0x2019 #RIGHT SINGLE QUOTATION MARK
|
|
||||||
0x93 0x201C #LEFT DOUBLE QUOTATION MARK
|
|
||||||
0x94 0x201D #RIGHT DOUBLE QUOTATION MARK
|
|
||||||
0x95 0x2022 #BULLET
|
|
||||||
0x96 0x2013 #EN DASH
|
|
||||||
0x97 0x2014 #EM DASH
|
|
||||||
0x98 #UNDEFINED
|
|
||||||
0x99 0x2122 #TRADE MARK SIGN
|
|
||||||
0x9A #UNDEFINED
|
|
||||||
0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
|
|
||||||
0x9C #UNDEFINED
|
|
||||||
0x9D #UNDEFINED
|
|
||||||
0x9E #UNDEFINED
|
|
||||||
0x9F #UNDEFINED
|
|
||||||
0xA0 0x00A0 #NO-BREAK SPACE
|
|
||||||
0xA1 0x0385 #GREEK DIALYTIKA TONOS
|
|
||||||
0xA2 0x0386 #GREEK CAPITAL LETTER ALPHA WITH TONOS
|
|
||||||
0xA3 0x00A3 #POUND SIGN
|
|
||||||
0xA4 0x00A4 #CURRENCY SIGN
|
|
||||||
0xA5 0x00A5 #YEN SIGN
|
|
||||||
0xA6 0x00A6 #BROKEN BAR
|
|
||||||
0xA7 0x00A7 #SECTION SIGN
|
|
||||||
0xA8 0x00A8 #DIAERESIS
|
|
||||||
0xA9 0x00A9 #COPYRIGHT SIGN
|
|
||||||
0xAA #UNDEFINED
|
|
||||||
0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xAC 0x00AC #NOT SIGN
|
|
||||||
0xAD 0x00AD #SOFT HYPHEN
|
|
||||||
0xAE 0x00AE #REGISTERED SIGN
|
|
||||||
0xAF 0x2015 #HORIZONTAL BAR
|
|
||||||
0xB0 0x00B0 #DEGREE SIGN
|
|
||||||
0xB1 0x00B1 #PLUS-MINUS SIGN
|
|
||||||
0xB2 0x00B2 #SUPERSCRIPT TWO
|
|
||||||
0xB3 0x00B3 #SUPERSCRIPT THREE
|
|
||||||
0xB4 0x0384 #GREEK TONOS
|
|
||||||
0xB5 0x00B5 #MICRO SIGN
|
|
||||||
0xB6 0x00B6 #PILCROW SIGN
|
|
||||||
0xB7 0x00B7 #MIDDLE DOT
|
|
||||||
0xB8 0x0388 #GREEK CAPITAL LETTER EPSILON WITH TONOS
|
|
||||||
0xB9 0x0389 #GREEK CAPITAL LETTER ETA WITH TONOS
|
|
||||||
0xBA 0x038A #GREEK CAPITAL LETTER IOTA WITH TONOS
|
|
||||||
0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xBC 0x038C #GREEK CAPITAL LETTER OMICRON WITH TONOS
|
|
||||||
0xBD 0x00BD #VULGAR FRACTION ONE HALF
|
|
||||||
0xBE 0x038E #GREEK CAPITAL LETTER UPSILON WITH TONOS
|
|
||||||
0xBF 0x038F #GREEK CAPITAL LETTER OMEGA WITH TONOS
|
|
||||||
0xC0 0x0390 #GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
|
|
||||||
0xC1 0x0391 #GREEK CAPITAL LETTER ALPHA
|
|
||||||
0xC2 0x0392 #GREEK CAPITAL LETTER BETA
|
|
||||||
0xC3 0x0393 #GREEK CAPITAL LETTER GAMMA
|
|
||||||
0xC4 0x0394 #GREEK CAPITAL LETTER DELTA
|
|
||||||
0xC5 0x0395 #GREEK CAPITAL LETTER EPSILON
|
|
||||||
0xC6 0x0396 #GREEK CAPITAL LETTER ZETA
|
|
||||||
0xC7 0x0397 #GREEK CAPITAL LETTER ETA
|
|
||||||
0xC8 0x0398 #GREEK CAPITAL LETTER THETA
|
|
||||||
0xC9 0x0399 #GREEK CAPITAL LETTER IOTA
|
|
||||||
0xCA 0x039A #GREEK CAPITAL LETTER KAPPA
|
|
||||||
0xCB 0x039B #GREEK CAPITAL LETTER LAMDA
|
|
||||||
0xCC 0x039C #GREEK CAPITAL LETTER MU
|
|
||||||
0xCD 0x039D #GREEK CAPITAL LETTER NU
|
|
||||||
0xCE 0x039E #GREEK CAPITAL LETTER XI
|
|
||||||
0xCF 0x039F #GREEK CAPITAL LETTER OMICRON
|
|
||||||
0xD0 0x03A0 #GREEK CAPITAL LETTER PI
|
|
||||||
0xD1 0x03A1 #GREEK CAPITAL LETTER RHO
|
|
||||||
0xD2 #UNDEFINED
|
|
||||||
0xD3 0x03A3 #GREEK CAPITAL LETTER SIGMA
|
|
||||||
0xD4 0x03A4 #GREEK CAPITAL LETTER TAU
|
|
||||||
0xD5 0x03A5 #GREEK CAPITAL LETTER UPSILON
|
|
||||||
0xD6 0x03A6 #GREEK CAPITAL LETTER PHI
|
|
||||||
0xD7 0x03A7 #GREEK CAPITAL LETTER CHI
|
|
||||||
0xD8 0x03A8 #GREEK CAPITAL LETTER PSI
|
|
||||||
0xD9 0x03A9 #GREEK CAPITAL LETTER OMEGA
|
|
||||||
0xDA 0x03AA #GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
|
|
||||||
0xDB 0x03AB #GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
|
|
||||||
0xDC 0x03AC #GREEK SMALL LETTER ALPHA WITH TONOS
|
|
||||||
0xDD 0x03AD #GREEK SMALL LETTER EPSILON WITH TONOS
|
|
||||||
0xDE 0x03AE #GREEK SMALL LETTER ETA WITH TONOS
|
|
||||||
0xDF 0x03AF #GREEK SMALL LETTER IOTA WITH TONOS
|
|
||||||
0xE0 0x03B0 #GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
|
|
||||||
0xE1 0x03B1 #GREEK SMALL LETTER ALPHA
|
|
||||||
0xE2 0x03B2 #GREEK SMALL LETTER BETA
|
|
||||||
0xE3 0x03B3 #GREEK SMALL LETTER GAMMA
|
|
||||||
0xE4 0x03B4 #GREEK SMALL LETTER DELTA
|
|
||||||
0xE5 0x03B5 #GREEK SMALL LETTER EPSILON
|
|
||||||
0xE6 0x03B6 #GREEK SMALL LETTER ZETA
|
|
||||||
0xE7 0x03B7 #GREEK SMALL LETTER ETA
|
|
||||||
0xE8 0x03B8 #GREEK SMALL LETTER THETA
|
|
||||||
0xE9 0x03B9 #GREEK SMALL LETTER IOTA
|
|
||||||
0xEA 0x03BA #GREEK SMALL LETTER KAPPA
|
|
||||||
0xEB 0x03BB #GREEK SMALL LETTER LAMDA
|
|
||||||
0xEC 0x03BC #GREEK SMALL LETTER MU
|
|
||||||
0xED 0x03BD #GREEK SMALL LETTER NU
|
|
||||||
0xEE 0x03BE #GREEK SMALL LETTER XI
|
|
||||||
0xEF 0x03BF #GREEK SMALL LETTER OMICRON
|
|
||||||
0xF0 0x03C0 #GREEK SMALL LETTER PI
|
|
||||||
0xF1 0x03C1 #GREEK SMALL LETTER RHO
|
|
||||||
0xF2 0x03C2 #GREEK SMALL LETTER FINAL SIGMA
|
|
||||||
0xF3 0x03C3 #GREEK SMALL LETTER SIGMA
|
|
||||||
0xF4 0x03C4 #GREEK SMALL LETTER TAU
|
|
||||||
0xF5 0x03C5 #GREEK SMALL LETTER UPSILON
|
|
||||||
0xF6 0x03C6 #GREEK SMALL LETTER PHI
|
|
||||||
0xF7 0x03C7 #GREEK SMALL LETTER CHI
|
|
||||||
0xF8 0x03C8 #GREEK SMALL LETTER PSI
|
|
||||||
0xF9 0x03C9 #GREEK SMALL LETTER OMEGA
|
|
||||||
0xFA 0x03CA #GREEK SMALL LETTER IOTA WITH DIALYTIKA
|
|
||||||
0xFB 0x03CB #GREEK SMALL LETTER UPSILON WITH DIALYTIKA
|
|
||||||
0xFC 0x03CC #GREEK SMALL LETTER OMICRON WITH TONOS
|
|
||||||
0xFD 0x03CD #GREEK SMALL LETTER UPSILON WITH TONOS
|
|
||||||
0xFE 0x03CE #GREEK SMALL LETTER OMEGA WITH TONOS
|
|
||||||
0xFF #UNDEFINED
|
|
@ -1,274 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: cp1254 to Unicode table
|
|
||||||
# Unicode version: 2.0
|
|
||||||
# Table version: 2.01
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 04/15/98
|
|
||||||
#
|
|
||||||
# Contact: cpxlate@microsoft.com
|
|
||||||
#
|
|
||||||
# General notes: none
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the cp1254 code (in hex)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 is the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in cp1254 order
|
|
||||||
#
|
|
||||||
0x00 0x0000 #NULL
|
|
||||||
0x01 0x0001 #START OF HEADING
|
|
||||||
0x02 0x0002 #START OF TEXT
|
|
||||||
0x03 0x0003 #END OF TEXT
|
|
||||||
0x04 0x0004 #END OF TRANSMISSION
|
|
||||||
0x05 0x0005 #ENQUIRY
|
|
||||||
0x06 0x0006 #ACKNOWLEDGE
|
|
||||||
0x07 0x0007 #BELL
|
|
||||||
0x08 0x0008 #BACKSPACE
|
|
||||||
0x09 0x0009 #HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A #LINE FEED
|
|
||||||
0x0B 0x000B #VERTICAL TABULATION
|
|
||||||
0x0C 0x000C #FORM FEED
|
|
||||||
0x0D 0x000D #CARRIAGE RETURN
|
|
||||||
0x0E 0x000E #SHIFT OUT
|
|
||||||
0x0F 0x000F #SHIFT IN
|
|
||||||
0x10 0x0010 #DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 #DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 #DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 #DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 #DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 #NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 #SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 #END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 #CANCEL
|
|
||||||
0x19 0x0019 #END OF MEDIUM
|
|
||||||
0x1A 0x001A #SUBSTITUTE
|
|
||||||
0x1B 0x001B #ESCAPE
|
|
||||||
0x1C 0x001C #FILE SEPARATOR
|
|
||||||
0x1D 0x001D #GROUP SEPARATOR
|
|
||||||
0x1E 0x001E #RECORD SEPARATOR
|
|
||||||
0x1F 0x001F #UNIT SEPARATOR
|
|
||||||
0x20 0x0020 #SPACE
|
|
||||||
0x21 0x0021 #EXCLAMATION MARK
|
|
||||||
0x22 0x0022 #QUOTATION MARK
|
|
||||||
0x23 0x0023 #NUMBER SIGN
|
|
||||||
0x24 0x0024 #DOLLAR SIGN
|
|
||||||
0x25 0x0025 #PERCENT SIGN
|
|
||||||
0x26 0x0026 #AMPERSAND
|
|
||||||
0x27 0x0027 #APOSTROPHE
|
|
||||||
0x28 0x0028 #LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 #RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A #ASTERISK
|
|
||||||
0x2B 0x002B #PLUS SIGN
|
|
||||||
0x2C 0x002C #COMMA
|
|
||||||
0x2D 0x002D #HYPHEN-MINUS
|
|
||||||
0x2E 0x002E #FULL STOP
|
|
||||||
0x2F 0x002F #SOLIDUS
|
|
||||||
0x30 0x0030 #DIGIT ZERO
|
|
||||||
0x31 0x0031 #DIGIT ONE
|
|
||||||
0x32 0x0032 #DIGIT TWO
|
|
||||||
0x33 0x0033 #DIGIT THREE
|
|
||||||
0x34 0x0034 #DIGIT FOUR
|
|
||||||
0x35 0x0035 #DIGIT FIVE
|
|
||||||
0x36 0x0036 #DIGIT SIX
|
|
||||||
0x37 0x0037 #DIGIT SEVEN
|
|
||||||
0x38 0x0038 #DIGIT EIGHT
|
|
||||||
0x39 0x0039 #DIGIT NINE
|
|
||||||
0x3A 0x003A #COLON
|
|
||||||
0x3B 0x003B #SEMICOLON
|
|
||||||
0x3C 0x003C #LESS-THAN SIGN
|
|
||||||
0x3D 0x003D #EQUALS SIGN
|
|
||||||
0x3E 0x003E #GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F #QUESTION MARK
|
|
||||||
0x40 0x0040 #COMMERCIAL AT
|
|
||||||
0x41 0x0041 #LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 #LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 #LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 #LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 #LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 #LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 #LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 #LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 #LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A #LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B #LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C #LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D #LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E #LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F #LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 #LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 #LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 #LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 #LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 #LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 #LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 #LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 #LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 #LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 #LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A #LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B #LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C #REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D #RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E #CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F #LOW LINE
|
|
||||||
0x60 0x0060 #GRAVE ACCENT
|
|
||||||
0x61 0x0061 #LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 #LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 #LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 #LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 #LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 #LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 #LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 #LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 #LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A #LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B #LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C #LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D #LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E #LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F #LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 #LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 #LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 #LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 #LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 #LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 #LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 #LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 #LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 #LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 #LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A #LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B #LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C #VERTICAL LINE
|
|
||||||
0x7D 0x007D #RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E #TILDE
|
|
||||||
0x7F 0x007F #DELETE
|
|
||||||
0x80 0x20AC #EURO SIGN
|
|
||||||
0x81 #UNDEFINED
|
|
||||||
0x82 0x201A #SINGLE LOW-9 QUOTATION MARK
|
|
||||||
0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK
|
|
||||||
0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
|
|
||||||
0x85 0x2026 #HORIZONTAL ELLIPSIS
|
|
||||||
0x86 0x2020 #DAGGER
|
|
||||||
0x87 0x2021 #DOUBLE DAGGER
|
|
||||||
0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT
|
|
||||||
0x89 0x2030 #PER MILLE SIGN
|
|
||||||
0x8A 0x0160 #LATIN CAPITAL LETTER S WITH CARON
|
|
||||||
0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
|
|
||||||
0x8C 0x0152 #LATIN CAPITAL LIGATURE OE
|
|
||||||
0x8D #UNDEFINED
|
|
||||||
0x8E #UNDEFINED
|
|
||||||
0x8F #UNDEFINED
|
|
||||||
0x90 #UNDEFINED
|
|
||||||
0x91 0x2018 #LEFT SINGLE QUOTATION MARK
|
|
||||||
0x92 0x2019 #RIGHT SINGLE QUOTATION MARK
|
|
||||||
0x93 0x201C #LEFT DOUBLE QUOTATION MARK
|
|
||||||
0x94 0x201D #RIGHT DOUBLE QUOTATION MARK
|
|
||||||
0x95 0x2022 #BULLET
|
|
||||||
0x96 0x2013 #EN DASH
|
|
||||||
0x97 0x2014 #EM DASH
|
|
||||||
0x98 0x02DC #SMALL TILDE
|
|
||||||
0x99 0x2122 #TRADE MARK SIGN
|
|
||||||
0x9A 0x0161 #LATIN SMALL LETTER S WITH CARON
|
|
||||||
0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
|
|
||||||
0x9C 0x0153 #LATIN SMALL LIGATURE OE
|
|
||||||
0x9D #UNDEFINED
|
|
||||||
0x9E #UNDEFINED
|
|
||||||
0x9F 0x0178 #LATIN CAPITAL LETTER Y WITH DIAERESIS
|
|
||||||
0xA0 0x00A0 #NO-BREAK SPACE
|
|
||||||
0xA1 0x00A1 #INVERTED EXCLAMATION MARK
|
|
||||||
0xA2 0x00A2 #CENT SIGN
|
|
||||||
0xA3 0x00A3 #POUND SIGN
|
|
||||||
0xA4 0x00A4 #CURRENCY SIGN
|
|
||||||
0xA5 0x00A5 #YEN SIGN
|
|
||||||
0xA6 0x00A6 #BROKEN BAR
|
|
||||||
0xA7 0x00A7 #SECTION SIGN
|
|
||||||
0xA8 0x00A8 #DIAERESIS
|
|
||||||
0xA9 0x00A9 #COPYRIGHT SIGN
|
|
||||||
0xAA 0x00AA #FEMININE ORDINAL INDICATOR
|
|
||||||
0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xAC 0x00AC #NOT SIGN
|
|
||||||
0xAD 0x00AD #SOFT HYPHEN
|
|
||||||
0xAE 0x00AE #REGISTERED SIGN
|
|
||||||
0xAF 0x00AF #MACRON
|
|
||||||
0xB0 0x00B0 #DEGREE SIGN
|
|
||||||
0xB1 0x00B1 #PLUS-MINUS SIGN
|
|
||||||
0xB2 0x00B2 #SUPERSCRIPT TWO
|
|
||||||
0xB3 0x00B3 #SUPERSCRIPT THREE
|
|
||||||
0xB4 0x00B4 #ACUTE ACCENT
|
|
||||||
0xB5 0x00B5 #MICRO SIGN
|
|
||||||
0xB6 0x00B6 #PILCROW SIGN
|
|
||||||
0xB7 0x00B7 #MIDDLE DOT
|
|
||||||
0xB8 0x00B8 #CEDILLA
|
|
||||||
0xB9 0x00B9 #SUPERSCRIPT ONE
|
|
||||||
0xBA 0x00BA #MASCULINE ORDINAL INDICATOR
|
|
||||||
0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xBC 0x00BC #VULGAR FRACTION ONE QUARTER
|
|
||||||
0xBD 0x00BD #VULGAR FRACTION ONE HALF
|
|
||||||
0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS
|
|
||||||
0xBF 0x00BF #INVERTED QUESTION MARK
|
|
||||||
0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE
|
|
||||||
0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE
|
|
||||||
0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xC3 0x00C3 #LATIN CAPITAL LETTER A WITH TILDE
|
|
||||||
0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS
|
|
||||||
0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE
|
|
||||||
0xC6 0x00C6 #LATIN CAPITAL LETTER AE
|
|
||||||
0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA
|
|
||||||
0xC8 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE
|
|
||||||
0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE
|
|
||||||
0xCA 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX
|
|
||||||
0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS
|
|
||||||
0xCC 0x00CC #LATIN CAPITAL LETTER I WITH GRAVE
|
|
||||||
0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE
|
|
||||||
0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xCF 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS
|
|
||||||
0xD0 0x011E #LATIN CAPITAL LETTER G WITH BREVE
|
|
||||||
0xD1 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE
|
|
||||||
0xD2 0x00D2 #LATIN CAPITAL LETTER O WITH GRAVE
|
|
||||||
0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE
|
|
||||||
0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xD5 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE
|
|
||||||
0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS
|
|
||||||
0xD7 0x00D7 #MULTIPLICATION SIGN
|
|
||||||
0xD8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE
|
|
||||||
0xD9 0x00D9 #LATIN CAPITAL LETTER U WITH GRAVE
|
|
||||||
0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE
|
|
||||||
0xDB 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS
|
|
||||||
0xDD 0x0130 #LATIN CAPITAL LETTER I WITH DOT ABOVE
|
|
||||||
0xDE 0x015E #LATIN CAPITAL LETTER S WITH CEDILLA
|
|
||||||
0xDF 0x00DF #LATIN SMALL LETTER SHARP S
|
|
||||||
0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE
|
|
||||||
0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE
|
|
||||||
0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xE3 0x00E3 #LATIN SMALL LETTER A WITH TILDE
|
|
||||||
0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS
|
|
||||||
0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE
|
|
||||||
0xE6 0x00E6 #LATIN SMALL LETTER AE
|
|
||||||
0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA
|
|
||||||
0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE
|
|
||||||
0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
|
|
||||||
0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX
|
|
||||||
0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS
|
|
||||||
0xEC 0x00EC #LATIN SMALL LETTER I WITH GRAVE
|
|
||||||
0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE
|
|
||||||
0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS
|
|
||||||
0xF0 0x011F #LATIN SMALL LETTER G WITH BREVE
|
|
||||||
0xF1 0x00F1 #LATIN SMALL LETTER N WITH TILDE
|
|
||||||
0xF2 0x00F2 #LATIN SMALL LETTER O WITH GRAVE
|
|
||||||
0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE
|
|
||||||
0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xF5 0x00F5 #LATIN SMALL LETTER O WITH TILDE
|
|
||||||
0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS
|
|
||||||
0xF7 0x00F7 #DIVISION SIGN
|
|
||||||
0xF8 0x00F8 #LATIN SMALL LETTER O WITH STROKE
|
|
||||||
0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE
|
|
||||||
0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE
|
|
||||||
0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
|
|
||||||
0xFD 0x0131 #LATIN SMALL LETTER DOTLESS I
|
|
||||||
0xFE 0x015F #LATIN SMALL LETTER S WITH CEDILLA
|
|
||||||
0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS
|
|
@ -1,274 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: cp1255 to Unicode table
|
|
||||||
# Unicode version: 2.0
|
|
||||||
# Table version: 2.01
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 1/7/2000
|
|
||||||
#
|
|
||||||
# Contact: cpxlate@microsoft.com
|
|
||||||
#
|
|
||||||
# General notes: none
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the cp1255 code (in hex)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 is the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in cp1255 order
|
|
||||||
#
|
|
||||||
0x00 0x0000 #NULL
|
|
||||||
0x01 0x0001 #START OF HEADING
|
|
||||||
0x02 0x0002 #START OF TEXT
|
|
||||||
0x03 0x0003 #END OF TEXT
|
|
||||||
0x04 0x0004 #END OF TRANSMISSION
|
|
||||||
0x05 0x0005 #ENQUIRY
|
|
||||||
0x06 0x0006 #ACKNOWLEDGE
|
|
||||||
0x07 0x0007 #BELL
|
|
||||||
0x08 0x0008 #BACKSPACE
|
|
||||||
0x09 0x0009 #HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A #LINE FEED
|
|
||||||
0x0B 0x000B #VERTICAL TABULATION
|
|
||||||
0x0C 0x000C #FORM FEED
|
|
||||||
0x0D 0x000D #CARRIAGE RETURN
|
|
||||||
0x0E 0x000E #SHIFT OUT
|
|
||||||
0x0F 0x000F #SHIFT IN
|
|
||||||
0x10 0x0010 #DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 #DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 #DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 #DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 #DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 #NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 #SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 #END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 #CANCEL
|
|
||||||
0x19 0x0019 #END OF MEDIUM
|
|
||||||
0x1A 0x001A #SUBSTITUTE
|
|
||||||
0x1B 0x001B #ESCAPE
|
|
||||||
0x1C 0x001C #FILE SEPARATOR
|
|
||||||
0x1D 0x001D #GROUP SEPARATOR
|
|
||||||
0x1E 0x001E #RECORD SEPARATOR
|
|
||||||
0x1F 0x001F #UNIT SEPARATOR
|
|
||||||
0x20 0x0020 #SPACE
|
|
||||||
0x21 0x0021 #EXCLAMATION MARK
|
|
||||||
0x22 0x0022 #QUOTATION MARK
|
|
||||||
0x23 0x0023 #NUMBER SIGN
|
|
||||||
0x24 0x0024 #DOLLAR SIGN
|
|
||||||
0x25 0x0025 #PERCENT SIGN
|
|
||||||
0x26 0x0026 #AMPERSAND
|
|
||||||
0x27 0x0027 #APOSTROPHE
|
|
||||||
0x28 0x0028 #LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 #RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A #ASTERISK
|
|
||||||
0x2B 0x002B #PLUS SIGN
|
|
||||||
0x2C 0x002C #COMMA
|
|
||||||
0x2D 0x002D #HYPHEN-MINUS
|
|
||||||
0x2E 0x002E #FULL STOP
|
|
||||||
0x2F 0x002F #SOLIDUS
|
|
||||||
0x30 0x0030 #DIGIT ZERO
|
|
||||||
0x31 0x0031 #DIGIT ONE
|
|
||||||
0x32 0x0032 #DIGIT TWO
|
|
||||||
0x33 0x0033 #DIGIT THREE
|
|
||||||
0x34 0x0034 #DIGIT FOUR
|
|
||||||
0x35 0x0035 #DIGIT FIVE
|
|
||||||
0x36 0x0036 #DIGIT SIX
|
|
||||||
0x37 0x0037 #DIGIT SEVEN
|
|
||||||
0x38 0x0038 #DIGIT EIGHT
|
|
||||||
0x39 0x0039 #DIGIT NINE
|
|
||||||
0x3A 0x003A #COLON
|
|
||||||
0x3B 0x003B #SEMICOLON
|
|
||||||
0x3C 0x003C #LESS-THAN SIGN
|
|
||||||
0x3D 0x003D #EQUALS SIGN
|
|
||||||
0x3E 0x003E #GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F #QUESTION MARK
|
|
||||||
0x40 0x0040 #COMMERCIAL AT
|
|
||||||
0x41 0x0041 #LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 #LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 #LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 #LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 #LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 #LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 #LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 #LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 #LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A #LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B #LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C #LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D #LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E #LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F #LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 #LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 #LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 #LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 #LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 #LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 #LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 #LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 #LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 #LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 #LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A #LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B #LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C #REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D #RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E #CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F #LOW LINE
|
|
||||||
0x60 0x0060 #GRAVE ACCENT
|
|
||||||
0x61 0x0061 #LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 #LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 #LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 #LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 #LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 #LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 #LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 #LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 #LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A #LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B #LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C #LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D #LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E #LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F #LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 #LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 #LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 #LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 #LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 #LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 #LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 #LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 #LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 #LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 #LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A #LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B #LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C #VERTICAL LINE
|
|
||||||
0x7D 0x007D #RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E #TILDE
|
|
||||||
0x7F 0x007F #DELETE
|
|
||||||
0x80 0x20AC #EURO SIGN
|
|
||||||
0x81 #UNDEFINED
|
|
||||||
0x82 0x201A #SINGLE LOW-9 QUOTATION MARK
|
|
||||||
0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK
|
|
||||||
0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
|
|
||||||
0x85 0x2026 #HORIZONTAL ELLIPSIS
|
|
||||||
0x86 0x2020 #DAGGER
|
|
||||||
0x87 0x2021 #DOUBLE DAGGER
|
|
||||||
0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT
|
|
||||||
0x89 0x2030 #PER MILLE SIGN
|
|
||||||
0x8A #UNDEFINED
|
|
||||||
0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
|
|
||||||
0x8C #UNDEFINED
|
|
||||||
0x8D #UNDEFINED
|
|
||||||
0x8E #UNDEFINED
|
|
||||||
0x8F #UNDEFINED
|
|
||||||
0x90 #UNDEFINED
|
|
||||||
0x91 0x2018 #LEFT SINGLE QUOTATION MARK
|
|
||||||
0x92 0x2019 #RIGHT SINGLE QUOTATION MARK
|
|
||||||
0x93 0x201C #LEFT DOUBLE QUOTATION MARK
|
|
||||||
0x94 0x201D #RIGHT DOUBLE QUOTATION MARK
|
|
||||||
0x95 0x2022 #BULLET
|
|
||||||
0x96 0x2013 #EN DASH
|
|
||||||
0x97 0x2014 #EM DASH
|
|
||||||
0x98 0x02DC #SMALL TILDE
|
|
||||||
0x99 0x2122 #TRADE MARK SIGN
|
|
||||||
0x9A #UNDEFINED
|
|
||||||
0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
|
|
||||||
0x9C #UNDEFINED
|
|
||||||
0x9D #UNDEFINED
|
|
||||||
0x9E #UNDEFINED
|
|
||||||
0x9F #UNDEFINED
|
|
||||||
0xA0 0x00A0 #NO-BREAK SPACE
|
|
||||||
0xA1 0x00A1 #INVERTED EXCLAMATION MARK
|
|
||||||
0xA2 0x00A2 #CENT SIGN
|
|
||||||
0xA3 0x00A3 #POUND SIGN
|
|
||||||
0xA4 0x20AA #NEW SHEQEL SIGN
|
|
||||||
0xA5 0x00A5 #YEN SIGN
|
|
||||||
0xA6 0x00A6 #BROKEN BAR
|
|
||||||
0xA7 0x00A7 #SECTION SIGN
|
|
||||||
0xA8 0x00A8 #DIAERESIS
|
|
||||||
0xA9 0x00A9 #COPYRIGHT SIGN
|
|
||||||
0xAA 0x00D7 #MULTIPLICATION SIGN
|
|
||||||
0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xAC 0x00AC #NOT SIGN
|
|
||||||
0xAD 0x00AD #SOFT HYPHEN
|
|
||||||
0xAE 0x00AE #REGISTERED SIGN
|
|
||||||
0xAF 0x00AF #MACRON
|
|
||||||
0xB0 0x00B0 #DEGREE SIGN
|
|
||||||
0xB1 0x00B1 #PLUS-MINUS SIGN
|
|
||||||
0xB2 0x00B2 #SUPERSCRIPT TWO
|
|
||||||
0xB3 0x00B3 #SUPERSCRIPT THREE
|
|
||||||
0xB4 0x00B4 #ACUTE ACCENT
|
|
||||||
0xB5 0x00B5 #MICRO SIGN
|
|
||||||
0xB6 0x00B6 #PILCROW SIGN
|
|
||||||
0xB7 0x00B7 #MIDDLE DOT
|
|
||||||
0xB8 0x00B8 #CEDILLA
|
|
||||||
0xB9 0x00B9 #SUPERSCRIPT ONE
|
|
||||||
0xBA 0x00F7 #DIVISION SIGN
|
|
||||||
0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xBC 0x00BC #VULGAR FRACTION ONE QUARTER
|
|
||||||
0xBD 0x00BD #VULGAR FRACTION ONE HALF
|
|
||||||
0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS
|
|
||||||
0xBF 0x00BF #INVERTED QUESTION MARK
|
|
||||||
0xC0 0x05B0 #HEBREW POINT SHEVA
|
|
||||||
0xC1 0x05B1 #HEBREW POINT HATAF SEGOL
|
|
||||||
0xC2 0x05B2 #HEBREW POINT HATAF PATAH
|
|
||||||
0xC3 0x05B3 #HEBREW POINT HATAF QAMATS
|
|
||||||
0xC4 0x05B4 #HEBREW POINT HIRIQ
|
|
||||||
0xC5 0x05B5 #HEBREW POINT TSERE
|
|
||||||
0xC6 0x05B6 #HEBREW POINT SEGOL
|
|
||||||
0xC7 0x05B7 #HEBREW POINT PATAH
|
|
||||||
0xC8 0x05B8 #HEBREW POINT QAMATS
|
|
||||||
0xC9 0x05B9 #HEBREW POINT HOLAM
|
|
||||||
0xCA #UNDEFINED
|
|
||||||
0xCB 0x05BB #HEBREW POINT QUBUTS
|
|
||||||
0xCC 0x05BC #HEBREW POINT DAGESH OR MAPIQ
|
|
||||||
0xCD 0x05BD #HEBREW POINT METEG
|
|
||||||
0xCE 0x05BE #HEBREW PUNCTUATION MAQAF
|
|
||||||
0xCF 0x05BF #HEBREW POINT RAFE
|
|
||||||
0xD0 0x05C0 #HEBREW PUNCTUATION PASEQ
|
|
||||||
0xD1 0x05C1 #HEBREW POINT SHIN DOT
|
|
||||||
0xD2 0x05C2 #HEBREW POINT SIN DOT
|
|
||||||
0xD3 0x05C3 #HEBREW PUNCTUATION SOF PASUQ
|
|
||||||
0xD4 0x05F0 #HEBREW LIGATURE YIDDISH DOUBLE VAV
|
|
||||||
0xD5 0x05F1 #HEBREW LIGATURE YIDDISH VAV YOD
|
|
||||||
0xD6 0x05F2 #HEBREW LIGATURE YIDDISH DOUBLE YOD
|
|
||||||
0xD7 0x05F3 #HEBREW PUNCTUATION GERESH
|
|
||||||
0xD8 0x05F4 #HEBREW PUNCTUATION GERSHAYIM
|
|
||||||
0xD9 #UNDEFINED
|
|
||||||
0xDA #UNDEFINED
|
|
||||||
0xDB #UNDEFINED
|
|
||||||
0xDC #UNDEFINED
|
|
||||||
0xDD #UNDEFINED
|
|
||||||
0xDE #UNDEFINED
|
|
||||||
0xDF #UNDEFINED
|
|
||||||
0xE0 0x05D0 #HEBREW LETTER ALEF
|
|
||||||
0xE1 0x05D1 #HEBREW LETTER BET
|
|
||||||
0xE2 0x05D2 #HEBREW LETTER GIMEL
|
|
||||||
0xE3 0x05D3 #HEBREW LETTER DALET
|
|
||||||
0xE4 0x05D4 #HEBREW LETTER HE
|
|
||||||
0xE5 0x05D5 #HEBREW LETTER VAV
|
|
||||||
0xE6 0x05D6 #HEBREW LETTER ZAYIN
|
|
||||||
0xE7 0x05D7 #HEBREW LETTER HET
|
|
||||||
0xE8 0x05D8 #HEBREW LETTER TET
|
|
||||||
0xE9 0x05D9 #HEBREW LETTER YOD
|
|
||||||
0xEA 0x05DA #HEBREW LETTER FINAL KAF
|
|
||||||
0xEB 0x05DB #HEBREW LETTER KAF
|
|
||||||
0xEC 0x05DC #HEBREW LETTER LAMED
|
|
||||||
0xED 0x05DD #HEBREW LETTER FINAL MEM
|
|
||||||
0xEE 0x05DE #HEBREW LETTER MEM
|
|
||||||
0xEF 0x05DF #HEBREW LETTER FINAL NUN
|
|
||||||
0xF0 0x05E0 #HEBREW LETTER NUN
|
|
||||||
0xF1 0x05E1 #HEBREW LETTER SAMEKH
|
|
||||||
0xF2 0x05E2 #HEBREW LETTER AYIN
|
|
||||||
0xF3 0x05E3 #HEBREW LETTER FINAL PE
|
|
||||||
0xF4 0x05E4 #HEBREW LETTER PE
|
|
||||||
0xF5 0x05E5 #HEBREW LETTER FINAL TSADI
|
|
||||||
0xF6 0x05E6 #HEBREW LETTER TSADI
|
|
||||||
0xF7 0x05E7 #HEBREW LETTER QOF
|
|
||||||
0xF8 0x05E8 #HEBREW LETTER RESH
|
|
||||||
0xF9 0x05E9 #HEBREW LETTER SHIN
|
|
||||||
0xFA 0x05EA #HEBREW LETTER TAV
|
|
||||||
0xFB #UNDEFINED
|
|
||||||
0xFC #UNDEFINED
|
|
||||||
0xFD 0x200E #LEFT-TO-RIGHT MARK
|
|
||||||
0xFE 0x200F #RIGHT-TO-LEFT MARK
|
|
||||||
0xFF #UNDEFINED
|
|
@ -1,274 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: cp1256 to Unicode table
|
|
||||||
# Unicode version: 2.1
|
|
||||||
# Table version: 2.01
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 01/5/99
|
|
||||||
#
|
|
||||||
# Contact: cpxlate@microsoft.com
|
|
||||||
#
|
|
||||||
# General notes: none
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the cp1256 code (in hex)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 is the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in cp1256 order
|
|
||||||
#
|
|
||||||
0x00 0x0000 #NULL
|
|
||||||
0x01 0x0001 #START OF HEADING
|
|
||||||
0x02 0x0002 #START OF TEXT
|
|
||||||
0x03 0x0003 #END OF TEXT
|
|
||||||
0x04 0x0004 #END OF TRANSMISSION
|
|
||||||
0x05 0x0005 #ENQUIRY
|
|
||||||
0x06 0x0006 #ACKNOWLEDGE
|
|
||||||
0x07 0x0007 #BELL
|
|
||||||
0x08 0x0008 #BACKSPACE
|
|
||||||
0x09 0x0009 #HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A #LINE FEED
|
|
||||||
0x0B 0x000B #VERTICAL TABULATION
|
|
||||||
0x0C 0x000C #FORM FEED
|
|
||||||
0x0D 0x000D #CARRIAGE RETURN
|
|
||||||
0x0E 0x000E #SHIFT OUT
|
|
||||||
0x0F 0x000F #SHIFT IN
|
|
||||||
0x10 0x0010 #DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 #DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 #DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 #DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 #DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 #NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 #SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 #END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 #CANCEL
|
|
||||||
0x19 0x0019 #END OF MEDIUM
|
|
||||||
0x1A 0x001A #SUBSTITUTE
|
|
||||||
0x1B 0x001B #ESCAPE
|
|
||||||
0x1C 0x001C #FILE SEPARATOR
|
|
||||||
0x1D 0x001D #GROUP SEPARATOR
|
|
||||||
0x1E 0x001E #RECORD SEPARATOR
|
|
||||||
0x1F 0x001F #UNIT SEPARATOR
|
|
||||||
0x20 0x0020 #SPACE
|
|
||||||
0x21 0x0021 #EXCLAMATION MARK
|
|
||||||
0x22 0x0022 #QUOTATION MARK
|
|
||||||
0x23 0x0023 #NUMBER SIGN
|
|
||||||
0x24 0x0024 #DOLLAR SIGN
|
|
||||||
0x25 0x0025 #PERCENT SIGN
|
|
||||||
0x26 0x0026 #AMPERSAND
|
|
||||||
0x27 0x0027 #APOSTROPHE
|
|
||||||
0x28 0x0028 #LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 #RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A #ASTERISK
|
|
||||||
0x2B 0x002B #PLUS SIGN
|
|
||||||
0x2C 0x002C #COMMA
|
|
||||||
0x2D 0x002D #HYPHEN-MINUS
|
|
||||||
0x2E 0x002E #FULL STOP
|
|
||||||
0x2F 0x002F #SOLIDUS
|
|
||||||
0x30 0x0030 #DIGIT ZERO
|
|
||||||
0x31 0x0031 #DIGIT ONE
|
|
||||||
0x32 0x0032 #DIGIT TWO
|
|
||||||
0x33 0x0033 #DIGIT THREE
|
|
||||||
0x34 0x0034 #DIGIT FOUR
|
|
||||||
0x35 0x0035 #DIGIT FIVE
|
|
||||||
0x36 0x0036 #DIGIT SIX
|
|
||||||
0x37 0x0037 #DIGIT SEVEN
|
|
||||||
0x38 0x0038 #DIGIT EIGHT
|
|
||||||
0x39 0x0039 #DIGIT NINE
|
|
||||||
0x3A 0x003A #COLON
|
|
||||||
0x3B 0x003B #SEMICOLON
|
|
||||||
0x3C 0x003C #LESS-THAN SIGN
|
|
||||||
0x3D 0x003D #EQUALS SIGN
|
|
||||||
0x3E 0x003E #GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F #QUESTION MARK
|
|
||||||
0x40 0x0040 #COMMERCIAL AT
|
|
||||||
0x41 0x0041 #LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 #LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 #LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 #LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 #LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 #LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 #LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 #LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 #LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A #LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B #LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C #LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D #LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E #LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F #LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 #LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 #LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 #LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 #LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 #LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 #LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 #LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 #LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 #LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 #LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A #LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B #LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C #REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D #RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E #CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F #LOW LINE
|
|
||||||
0x60 0x0060 #GRAVE ACCENT
|
|
||||||
0x61 0x0061 #LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 #LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 #LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 #LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 #LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 #LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 #LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 #LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 #LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A #LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B #LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C #LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D #LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E #LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F #LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 #LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 #LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 #LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 #LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 #LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 #LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 #LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 #LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 #LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 #LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A #LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B #LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C #VERTICAL LINE
|
|
||||||
0x7D 0x007D #RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E #TILDE
|
|
||||||
0x7F 0x007F #DELETE
|
|
||||||
0x80 0x20AC #EURO SIGN
|
|
||||||
0x81 0x067E #ARABIC LETTER PEH
|
|
||||||
0x82 0x201A #SINGLE LOW-9 QUOTATION MARK
|
|
||||||
0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK
|
|
||||||
0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
|
|
||||||
0x85 0x2026 #HORIZONTAL ELLIPSIS
|
|
||||||
0x86 0x2020 #DAGGER
|
|
||||||
0x87 0x2021 #DOUBLE DAGGER
|
|
||||||
0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT
|
|
||||||
0x89 0x2030 #PER MILLE SIGN
|
|
||||||
0x8A 0x0679 #ARABIC LETTER TTEH
|
|
||||||
0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
|
|
||||||
0x8C 0x0152 #LATIN CAPITAL LIGATURE OE
|
|
||||||
0x8D 0x0686 #ARABIC LETTER TCHEH
|
|
||||||
0x8E 0x0698 #ARABIC LETTER JEH
|
|
||||||
0x8F 0x0688 #ARABIC LETTER DDAL
|
|
||||||
0x90 0x06AF #ARABIC LETTER GAF
|
|
||||||
0x91 0x2018 #LEFT SINGLE QUOTATION MARK
|
|
||||||
0x92 0x2019 #RIGHT SINGLE QUOTATION MARK
|
|
||||||
0x93 0x201C #LEFT DOUBLE QUOTATION MARK
|
|
||||||
0x94 0x201D #RIGHT DOUBLE QUOTATION MARK
|
|
||||||
0x95 0x2022 #BULLET
|
|
||||||
0x96 0x2013 #EN DASH
|
|
||||||
0x97 0x2014 #EM DASH
|
|
||||||
0x98 0x06A9 #ARABIC LETTER KEHEH
|
|
||||||
0x99 0x2122 #TRADE MARK SIGN
|
|
||||||
0x9A 0x0691 #ARABIC LETTER RREH
|
|
||||||
0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
|
|
||||||
0x9C 0x0153 #LATIN SMALL LIGATURE OE
|
|
||||||
0x9D 0x200C #ZERO WIDTH NON-JOINER
|
|
||||||
0x9E 0x200D #ZERO WIDTH JOINER
|
|
||||||
0x9F 0x06BA #ARABIC LETTER NOON GHUNNA
|
|
||||||
0xA0 0x00A0 #NO-BREAK SPACE
|
|
||||||
0xA1 0x060C #ARABIC COMMA
|
|
||||||
0xA2 0x00A2 #CENT SIGN
|
|
||||||
0xA3 0x00A3 #POUND SIGN
|
|
||||||
0xA4 0x00A4 #CURRENCY SIGN
|
|
||||||
0xA5 0x00A5 #YEN SIGN
|
|
||||||
0xA6 0x00A6 #BROKEN BAR
|
|
||||||
0xA7 0x00A7 #SECTION SIGN
|
|
||||||
0xA8 0x00A8 #DIAERESIS
|
|
||||||
0xA9 0x00A9 #COPYRIGHT SIGN
|
|
||||||
0xAA 0x06BE #ARABIC LETTER HEH DOACHASHMEE
|
|
||||||
0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xAC 0x00AC #NOT SIGN
|
|
||||||
0xAD 0x00AD #SOFT HYPHEN
|
|
||||||
0xAE 0x00AE #REGISTERED SIGN
|
|
||||||
0xAF 0x00AF #MACRON
|
|
||||||
0xB0 0x00B0 #DEGREE SIGN
|
|
||||||
0xB1 0x00B1 #PLUS-MINUS SIGN
|
|
||||||
0xB2 0x00B2 #SUPERSCRIPT TWO
|
|
||||||
0xB3 0x00B3 #SUPERSCRIPT THREE
|
|
||||||
0xB4 0x00B4 #ACUTE ACCENT
|
|
||||||
0xB5 0x00B5 #MICRO SIGN
|
|
||||||
0xB6 0x00B6 #PILCROW SIGN
|
|
||||||
0xB7 0x00B7 #MIDDLE DOT
|
|
||||||
0xB8 0x00B8 #CEDILLA
|
|
||||||
0xB9 0x00B9 #SUPERSCRIPT ONE
|
|
||||||
0xBA 0x061B #ARABIC SEMICOLON
|
|
||||||
0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xBC 0x00BC #VULGAR FRACTION ONE QUARTER
|
|
||||||
0xBD 0x00BD #VULGAR FRACTION ONE HALF
|
|
||||||
0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS
|
|
||||||
0xBF 0x061F #ARABIC QUESTION MARK
|
|
||||||
0xC0 0x06C1 #ARABIC LETTER HEH GOAL
|
|
||||||
0xC1 0x0621 #ARABIC LETTER HAMZA
|
|
||||||
0xC2 0x0622 #ARABIC LETTER ALEF WITH MADDA ABOVE
|
|
||||||
0xC3 0x0623 #ARABIC LETTER ALEF WITH HAMZA ABOVE
|
|
||||||
0xC4 0x0624 #ARABIC LETTER WAW WITH HAMZA ABOVE
|
|
||||||
0xC5 0x0625 #ARABIC LETTER ALEF WITH HAMZA BELOW
|
|
||||||
0xC6 0x0626 #ARABIC LETTER YEH WITH HAMZA ABOVE
|
|
||||||
0xC7 0x0627 #ARABIC LETTER ALEF
|
|
||||||
0xC8 0x0628 #ARABIC LETTER BEH
|
|
||||||
0xC9 0x0629 #ARABIC LETTER TEH MARBUTA
|
|
||||||
0xCA 0x062A #ARABIC LETTER TEH
|
|
||||||
0xCB 0x062B #ARABIC LETTER THEH
|
|
||||||
0xCC 0x062C #ARABIC LETTER JEEM
|
|
||||||
0xCD 0x062D #ARABIC LETTER HAH
|
|
||||||
0xCE 0x062E #ARABIC LETTER KHAH
|
|
||||||
0xCF 0x062F #ARABIC LETTER DAL
|
|
||||||
0xD0 0x0630 #ARABIC LETTER THAL
|
|
||||||
0xD1 0x0631 #ARABIC LETTER REH
|
|
||||||
0xD2 0x0632 #ARABIC LETTER ZAIN
|
|
||||||
0xD3 0x0633 #ARABIC LETTER SEEN
|
|
||||||
0xD4 0x0634 #ARABIC LETTER SHEEN
|
|
||||||
0xD5 0x0635 #ARABIC LETTER SAD
|
|
||||||
0xD6 0x0636 #ARABIC LETTER DAD
|
|
||||||
0xD7 0x00D7 #MULTIPLICATION SIGN
|
|
||||||
0xD8 0x0637 #ARABIC LETTER TAH
|
|
||||||
0xD9 0x0638 #ARABIC LETTER ZAH
|
|
||||||
0xDA 0x0639 #ARABIC LETTER AIN
|
|
||||||
0xDB 0x063A #ARABIC LETTER GHAIN
|
|
||||||
0xDC 0x0640 #ARABIC TATWEEL
|
|
||||||
0xDD 0x0641 #ARABIC LETTER FEH
|
|
||||||
0xDE 0x0642 #ARABIC LETTER QAF
|
|
||||||
0xDF 0x0643 #ARABIC LETTER KAF
|
|
||||||
0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE
|
|
||||||
0xE1 0x0644 #ARABIC LETTER LAM
|
|
||||||
0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xE3 0x0645 #ARABIC LETTER MEEM
|
|
||||||
0xE4 0x0646 #ARABIC LETTER NOON
|
|
||||||
0xE5 0x0647 #ARABIC LETTER HEH
|
|
||||||
0xE6 0x0648 #ARABIC LETTER WAW
|
|
||||||
0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA
|
|
||||||
0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE
|
|
||||||
0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
|
|
||||||
0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX
|
|
||||||
0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS
|
|
||||||
0xEC 0x0649 #ARABIC LETTER ALEF MAKSURA
|
|
||||||
0xED 0x064A #ARABIC LETTER YEH
|
|
||||||
0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS
|
|
||||||
0xF0 0x064B #ARABIC FATHATAN
|
|
||||||
0xF1 0x064C #ARABIC DAMMATAN
|
|
||||||
0xF2 0x064D #ARABIC KASRATAN
|
|
||||||
0xF3 0x064E #ARABIC FATHA
|
|
||||||
0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xF5 0x064F #ARABIC DAMMA
|
|
||||||
0xF6 0x0650 #ARABIC KASRA
|
|
||||||
0xF7 0x00F7 #DIVISION SIGN
|
|
||||||
0xF8 0x0651 #ARABIC SHADDA
|
|
||||||
0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE
|
|
||||||
0xFA 0x0652 #ARABIC SUKUN
|
|
||||||
0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
|
|
||||||
0xFD 0x200E #LEFT-TO-RIGHT MARK
|
|
||||||
0xFE 0x200F #RIGHT-TO-LEFT MARK
|
|
||||||
0xFF 0x06D2 #ARABIC LETTER YEH BARREE
|
|
@ -1,274 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: cp1257 to Unicode table
|
|
||||||
# Unicode version: 2.0
|
|
||||||
# Table version: 2.01
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 04/15/98
|
|
||||||
#
|
|
||||||
# Contact: cpxlate@microsoft.com
|
|
||||||
#
|
|
||||||
# General notes: none
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the cp1257 code (in hex)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 is the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in cp1257 order
|
|
||||||
#
|
|
||||||
0x00 0x0000 #NULL
|
|
||||||
0x01 0x0001 #START OF HEADING
|
|
||||||
0x02 0x0002 #START OF TEXT
|
|
||||||
0x03 0x0003 #END OF TEXT
|
|
||||||
0x04 0x0004 #END OF TRANSMISSION
|
|
||||||
0x05 0x0005 #ENQUIRY
|
|
||||||
0x06 0x0006 #ACKNOWLEDGE
|
|
||||||
0x07 0x0007 #BELL
|
|
||||||
0x08 0x0008 #BACKSPACE
|
|
||||||
0x09 0x0009 #HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A #LINE FEED
|
|
||||||
0x0B 0x000B #VERTICAL TABULATION
|
|
||||||
0x0C 0x000C #FORM FEED
|
|
||||||
0x0D 0x000D #CARRIAGE RETURN
|
|
||||||
0x0E 0x000E #SHIFT OUT
|
|
||||||
0x0F 0x000F #SHIFT IN
|
|
||||||
0x10 0x0010 #DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 #DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 #DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 #DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 #DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 #NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 #SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 #END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 #CANCEL
|
|
||||||
0x19 0x0019 #END OF MEDIUM
|
|
||||||
0x1A 0x001A #SUBSTITUTE
|
|
||||||
0x1B 0x001B #ESCAPE
|
|
||||||
0x1C 0x001C #FILE SEPARATOR
|
|
||||||
0x1D 0x001D #GROUP SEPARATOR
|
|
||||||
0x1E 0x001E #RECORD SEPARATOR
|
|
||||||
0x1F 0x001F #UNIT SEPARATOR
|
|
||||||
0x20 0x0020 #SPACE
|
|
||||||
0x21 0x0021 #EXCLAMATION MARK
|
|
||||||
0x22 0x0022 #QUOTATION MARK
|
|
||||||
0x23 0x0023 #NUMBER SIGN
|
|
||||||
0x24 0x0024 #DOLLAR SIGN
|
|
||||||
0x25 0x0025 #PERCENT SIGN
|
|
||||||
0x26 0x0026 #AMPERSAND
|
|
||||||
0x27 0x0027 #APOSTROPHE
|
|
||||||
0x28 0x0028 #LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 #RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A #ASTERISK
|
|
||||||
0x2B 0x002B #PLUS SIGN
|
|
||||||
0x2C 0x002C #COMMA
|
|
||||||
0x2D 0x002D #HYPHEN-MINUS
|
|
||||||
0x2E 0x002E #FULL STOP
|
|
||||||
0x2F 0x002F #SOLIDUS
|
|
||||||
0x30 0x0030 #DIGIT ZERO
|
|
||||||
0x31 0x0031 #DIGIT ONE
|
|
||||||
0x32 0x0032 #DIGIT TWO
|
|
||||||
0x33 0x0033 #DIGIT THREE
|
|
||||||
0x34 0x0034 #DIGIT FOUR
|
|
||||||
0x35 0x0035 #DIGIT FIVE
|
|
||||||
0x36 0x0036 #DIGIT SIX
|
|
||||||
0x37 0x0037 #DIGIT SEVEN
|
|
||||||
0x38 0x0038 #DIGIT EIGHT
|
|
||||||
0x39 0x0039 #DIGIT NINE
|
|
||||||
0x3A 0x003A #COLON
|
|
||||||
0x3B 0x003B #SEMICOLON
|
|
||||||
0x3C 0x003C #LESS-THAN SIGN
|
|
||||||
0x3D 0x003D #EQUALS SIGN
|
|
||||||
0x3E 0x003E #GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F #QUESTION MARK
|
|
||||||
0x40 0x0040 #COMMERCIAL AT
|
|
||||||
0x41 0x0041 #LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 #LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 #LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 #LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 #LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 #LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 #LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 #LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 #LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A #LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B #LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C #LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D #LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E #LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F #LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 #LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 #LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 #LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 #LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 #LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 #LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 #LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 #LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 #LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 #LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A #LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B #LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C #REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D #RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E #CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F #LOW LINE
|
|
||||||
0x60 0x0060 #GRAVE ACCENT
|
|
||||||
0x61 0x0061 #LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 #LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 #LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 #LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 #LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 #LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 #LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 #LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 #LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A #LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B #LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C #LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D #LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E #LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F #LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 #LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 #LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 #LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 #LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 #LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 #LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 #LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 #LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 #LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 #LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A #LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B #LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C #VERTICAL LINE
|
|
||||||
0x7D 0x007D #RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E #TILDE
|
|
||||||
0x7F 0x007F #DELETE
|
|
||||||
0x80 0x20AC #EURO SIGN
|
|
||||||
0x81 #UNDEFINED
|
|
||||||
0x82 0x201A #SINGLE LOW-9 QUOTATION MARK
|
|
||||||
0x83 #UNDEFINED
|
|
||||||
0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
|
|
||||||
0x85 0x2026 #HORIZONTAL ELLIPSIS
|
|
||||||
0x86 0x2020 #DAGGER
|
|
||||||
0x87 0x2021 #DOUBLE DAGGER
|
|
||||||
0x88 #UNDEFINED
|
|
||||||
0x89 0x2030 #PER MILLE SIGN
|
|
||||||
0x8A #UNDEFINED
|
|
||||||
0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
|
|
||||||
0x8C #UNDEFINED
|
|
||||||
0x8D 0x00A8 #DIAERESIS
|
|
||||||
0x8E 0x02C7 #CARON
|
|
||||||
0x8F 0x00B8 #CEDILLA
|
|
||||||
0x90 #UNDEFINED
|
|
||||||
0x91 0x2018 #LEFT SINGLE QUOTATION MARK
|
|
||||||
0x92 0x2019 #RIGHT SINGLE QUOTATION MARK
|
|
||||||
0x93 0x201C #LEFT DOUBLE QUOTATION MARK
|
|
||||||
0x94 0x201D #RIGHT DOUBLE QUOTATION MARK
|
|
||||||
0x95 0x2022 #BULLET
|
|
||||||
0x96 0x2013 #EN DASH
|
|
||||||
0x97 0x2014 #EM DASH
|
|
||||||
0x98 #UNDEFINED
|
|
||||||
0x99 0x2122 #TRADE MARK SIGN
|
|
||||||
0x9A #UNDEFINED
|
|
||||||
0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
|
|
||||||
0x9C #UNDEFINED
|
|
||||||
0x9D 0x00AF #MACRON
|
|
||||||
0x9E 0x02DB #OGONEK
|
|
||||||
0x9F #UNDEFINED
|
|
||||||
0xA0 0x00A0 #NO-BREAK SPACE
|
|
||||||
0xA1 #UNDEFINED
|
|
||||||
0xA2 0x00A2 #CENT SIGN
|
|
||||||
0xA3 0x00A3 #POUND SIGN
|
|
||||||
0xA4 0x00A4 #CURRENCY SIGN
|
|
||||||
0xA5 #UNDEFINED
|
|
||||||
0xA6 0x00A6 #BROKEN BAR
|
|
||||||
0xA7 0x00A7 #SECTION SIGN
|
|
||||||
0xA8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE
|
|
||||||
0xA9 0x00A9 #COPYRIGHT SIGN
|
|
||||||
0xAA 0x0156 #LATIN CAPITAL LETTER R WITH CEDILLA
|
|
||||||
0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xAC 0x00AC #NOT SIGN
|
|
||||||
0xAD 0x00AD #SOFT HYPHEN
|
|
||||||
0xAE 0x00AE #REGISTERED SIGN
|
|
||||||
0xAF 0x00C6 #LATIN CAPITAL LETTER AE
|
|
||||||
0xB0 0x00B0 #DEGREE SIGN
|
|
||||||
0xB1 0x00B1 #PLUS-MINUS SIGN
|
|
||||||
0xB2 0x00B2 #SUPERSCRIPT TWO
|
|
||||||
0xB3 0x00B3 #SUPERSCRIPT THREE
|
|
||||||
0xB4 0x00B4 #ACUTE ACCENT
|
|
||||||
0xB5 0x00B5 #MICRO SIGN
|
|
||||||
0xB6 0x00B6 #PILCROW SIGN
|
|
||||||
0xB7 0x00B7 #MIDDLE DOT
|
|
||||||
0xB8 0x00F8 #LATIN SMALL LETTER O WITH STROKE
|
|
||||||
0xB9 0x00B9 #SUPERSCRIPT ONE
|
|
||||||
0xBA 0x0157 #LATIN SMALL LETTER R WITH CEDILLA
|
|
||||||
0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xBC 0x00BC #VULGAR FRACTION ONE QUARTER
|
|
||||||
0xBD 0x00BD #VULGAR FRACTION ONE HALF
|
|
||||||
0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS
|
|
||||||
0xBF 0x00E6 #LATIN SMALL LETTER AE
|
|
||||||
0xC0 0x0104 #LATIN CAPITAL LETTER A WITH OGONEK
|
|
||||||
0xC1 0x012E #LATIN CAPITAL LETTER I WITH OGONEK
|
|
||||||
0xC2 0x0100 #LATIN CAPITAL LETTER A WITH MACRON
|
|
||||||
0xC3 0x0106 #LATIN CAPITAL LETTER C WITH ACUTE
|
|
||||||
0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS
|
|
||||||
0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE
|
|
||||||
0xC6 0x0118 #LATIN CAPITAL LETTER E WITH OGONEK
|
|
||||||
0xC7 0x0112 #LATIN CAPITAL LETTER E WITH MACRON
|
|
||||||
0xC8 0x010C #LATIN CAPITAL LETTER C WITH CARON
|
|
||||||
0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE
|
|
||||||
0xCA 0x0179 #LATIN CAPITAL LETTER Z WITH ACUTE
|
|
||||||
0xCB 0x0116 #LATIN CAPITAL LETTER E WITH DOT ABOVE
|
|
||||||
0xCC 0x0122 #LATIN CAPITAL LETTER G WITH CEDILLA
|
|
||||||
0xCD 0x0136 #LATIN CAPITAL LETTER K WITH CEDILLA
|
|
||||||
0xCE 0x012A #LATIN CAPITAL LETTER I WITH MACRON
|
|
||||||
0xCF 0x013B #LATIN CAPITAL LETTER L WITH CEDILLA
|
|
||||||
0xD0 0x0160 #LATIN CAPITAL LETTER S WITH CARON
|
|
||||||
0xD1 0x0143 #LATIN CAPITAL LETTER N WITH ACUTE
|
|
||||||
0xD2 0x0145 #LATIN CAPITAL LETTER N WITH CEDILLA
|
|
||||||
0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE
|
|
||||||
0xD4 0x014C #LATIN CAPITAL LETTER O WITH MACRON
|
|
||||||
0xD5 0x00D5 #LATIN CAPITAL LETTER O WITH TILDE
|
|
||||||
0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS
|
|
||||||
0xD7 0x00D7 #MULTIPLICATION SIGN
|
|
||||||
0xD8 0x0172 #LATIN CAPITAL LETTER U WITH OGONEK
|
|
||||||
0xD9 0x0141 #LATIN CAPITAL LETTER L WITH STROKE
|
|
||||||
0xDA 0x015A #LATIN CAPITAL LETTER S WITH ACUTE
|
|
||||||
0xDB 0x016A #LATIN CAPITAL LETTER U WITH MACRON
|
|
||||||
0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS
|
|
||||||
0xDD 0x017B #LATIN CAPITAL LETTER Z WITH DOT ABOVE
|
|
||||||
0xDE 0x017D #LATIN CAPITAL LETTER Z WITH CARON
|
|
||||||
0xDF 0x00DF #LATIN SMALL LETTER SHARP S
|
|
||||||
0xE0 0x0105 #LATIN SMALL LETTER A WITH OGONEK
|
|
||||||
0xE1 0x012F #LATIN SMALL LETTER I WITH OGONEK
|
|
||||||
0xE2 0x0101 #LATIN SMALL LETTER A WITH MACRON
|
|
||||||
0xE3 0x0107 #LATIN SMALL LETTER C WITH ACUTE
|
|
||||||
0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS
|
|
||||||
0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE
|
|
||||||
0xE6 0x0119 #LATIN SMALL LETTER E WITH OGONEK
|
|
||||||
0xE7 0x0113 #LATIN SMALL LETTER E WITH MACRON
|
|
||||||
0xE8 0x010D #LATIN SMALL LETTER C WITH CARON
|
|
||||||
0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
|
|
||||||
0xEA 0x017A #LATIN SMALL LETTER Z WITH ACUTE
|
|
||||||
0xEB 0x0117 #LATIN SMALL LETTER E WITH DOT ABOVE
|
|
||||||
0xEC 0x0123 #LATIN SMALL LETTER G WITH CEDILLA
|
|
||||||
0xED 0x0137 #LATIN SMALL LETTER K WITH CEDILLA
|
|
||||||
0xEE 0x012B #LATIN SMALL LETTER I WITH MACRON
|
|
||||||
0xEF 0x013C #LATIN SMALL LETTER L WITH CEDILLA
|
|
||||||
0xF0 0x0161 #LATIN SMALL LETTER S WITH CARON
|
|
||||||
0xF1 0x0144 #LATIN SMALL LETTER N WITH ACUTE
|
|
||||||
0xF2 0x0146 #LATIN SMALL LETTER N WITH CEDILLA
|
|
||||||
0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE
|
|
||||||
0xF4 0x014D #LATIN SMALL LETTER O WITH MACRON
|
|
||||||
0xF5 0x00F5 #LATIN SMALL LETTER O WITH TILDE
|
|
||||||
0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS
|
|
||||||
0xF7 0x00F7 #DIVISION SIGN
|
|
||||||
0xF8 0x0173 #LATIN SMALL LETTER U WITH OGONEK
|
|
||||||
0xF9 0x0142 #LATIN SMALL LETTER L WITH STROKE
|
|
||||||
0xFA 0x015B #LATIN SMALL LETTER S WITH ACUTE
|
|
||||||
0xFB 0x016B #LATIN SMALL LETTER U WITH MACRON
|
|
||||||
0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
|
|
||||||
0xFD 0x017C #LATIN SMALL LETTER Z WITH DOT ABOVE
|
|
||||||
0xFE 0x017E #LATIN SMALL LETTER Z WITH CARON
|
|
||||||
0xFF 0x02D9 #DOT ABOVE
|
|
@ -1,274 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: cp1258 to Unicode table
|
|
||||||
# Unicode version: 2.0
|
|
||||||
# Table version: 2.01
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 04/15/98
|
|
||||||
#
|
|
||||||
# Contact: cpxlate@microsoft.com
|
|
||||||
#
|
|
||||||
# General notes: none
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the cp1258 code (in hex)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 is the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in cp1258 order
|
|
||||||
#
|
|
||||||
0x00 0x0000 #NULL
|
|
||||||
0x01 0x0001 #START OF HEADING
|
|
||||||
0x02 0x0002 #START OF TEXT
|
|
||||||
0x03 0x0003 #END OF TEXT
|
|
||||||
0x04 0x0004 #END OF TRANSMISSION
|
|
||||||
0x05 0x0005 #ENQUIRY
|
|
||||||
0x06 0x0006 #ACKNOWLEDGE
|
|
||||||
0x07 0x0007 #BELL
|
|
||||||
0x08 0x0008 #BACKSPACE
|
|
||||||
0x09 0x0009 #HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A #LINE FEED
|
|
||||||
0x0B 0x000B #VERTICAL TABULATION
|
|
||||||
0x0C 0x000C #FORM FEED
|
|
||||||
0x0D 0x000D #CARRIAGE RETURN
|
|
||||||
0x0E 0x000E #SHIFT OUT
|
|
||||||
0x0F 0x000F #SHIFT IN
|
|
||||||
0x10 0x0010 #DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 #DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 #DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 #DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 #DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 #NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 #SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 #END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 #CANCEL
|
|
||||||
0x19 0x0019 #END OF MEDIUM
|
|
||||||
0x1A 0x001A #SUBSTITUTE
|
|
||||||
0x1B 0x001B #ESCAPE
|
|
||||||
0x1C 0x001C #FILE SEPARATOR
|
|
||||||
0x1D 0x001D #GROUP SEPARATOR
|
|
||||||
0x1E 0x001E #RECORD SEPARATOR
|
|
||||||
0x1F 0x001F #UNIT SEPARATOR
|
|
||||||
0x20 0x0020 #SPACE
|
|
||||||
0x21 0x0021 #EXCLAMATION MARK
|
|
||||||
0x22 0x0022 #QUOTATION MARK
|
|
||||||
0x23 0x0023 #NUMBER SIGN
|
|
||||||
0x24 0x0024 #DOLLAR SIGN
|
|
||||||
0x25 0x0025 #PERCENT SIGN
|
|
||||||
0x26 0x0026 #AMPERSAND
|
|
||||||
0x27 0x0027 #APOSTROPHE
|
|
||||||
0x28 0x0028 #LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 #RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A #ASTERISK
|
|
||||||
0x2B 0x002B #PLUS SIGN
|
|
||||||
0x2C 0x002C #COMMA
|
|
||||||
0x2D 0x002D #HYPHEN-MINUS
|
|
||||||
0x2E 0x002E #FULL STOP
|
|
||||||
0x2F 0x002F #SOLIDUS
|
|
||||||
0x30 0x0030 #DIGIT ZERO
|
|
||||||
0x31 0x0031 #DIGIT ONE
|
|
||||||
0x32 0x0032 #DIGIT TWO
|
|
||||||
0x33 0x0033 #DIGIT THREE
|
|
||||||
0x34 0x0034 #DIGIT FOUR
|
|
||||||
0x35 0x0035 #DIGIT FIVE
|
|
||||||
0x36 0x0036 #DIGIT SIX
|
|
||||||
0x37 0x0037 #DIGIT SEVEN
|
|
||||||
0x38 0x0038 #DIGIT EIGHT
|
|
||||||
0x39 0x0039 #DIGIT NINE
|
|
||||||
0x3A 0x003A #COLON
|
|
||||||
0x3B 0x003B #SEMICOLON
|
|
||||||
0x3C 0x003C #LESS-THAN SIGN
|
|
||||||
0x3D 0x003D #EQUALS SIGN
|
|
||||||
0x3E 0x003E #GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F #QUESTION MARK
|
|
||||||
0x40 0x0040 #COMMERCIAL AT
|
|
||||||
0x41 0x0041 #LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 #LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 #LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 #LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 #LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 #LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 #LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 #LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 #LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A #LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B #LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C #LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D #LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E #LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F #LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 #LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 #LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 #LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 #LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 #LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 #LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 #LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 #LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 #LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 #LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A #LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B #LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C #REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D #RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E #CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F #LOW LINE
|
|
||||||
0x60 0x0060 #GRAVE ACCENT
|
|
||||||
0x61 0x0061 #LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 #LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 #LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 #LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 #LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 #LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 #LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 #LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 #LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A #LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B #LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C #LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D #LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E #LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F #LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 #LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 #LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 #LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 #LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 #LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 #LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 #LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 #LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 #LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 #LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A #LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B #LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C #VERTICAL LINE
|
|
||||||
0x7D 0x007D #RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E #TILDE
|
|
||||||
0x7F 0x007F #DELETE
|
|
||||||
0x80 0x20AC #EURO SIGN
|
|
||||||
0x81 #UNDEFINED
|
|
||||||
0x82 0x201A #SINGLE LOW-9 QUOTATION MARK
|
|
||||||
0x83 0x0192 #LATIN SMALL LETTER F WITH HOOK
|
|
||||||
0x84 0x201E #DOUBLE LOW-9 QUOTATION MARK
|
|
||||||
0x85 0x2026 #HORIZONTAL ELLIPSIS
|
|
||||||
0x86 0x2020 #DAGGER
|
|
||||||
0x87 0x2021 #DOUBLE DAGGER
|
|
||||||
0x88 0x02C6 #MODIFIER LETTER CIRCUMFLEX ACCENT
|
|
||||||
0x89 0x2030 #PER MILLE SIGN
|
|
||||||
0x8A #UNDEFINED
|
|
||||||
0x8B 0x2039 #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
|
|
||||||
0x8C 0x0152 #LATIN CAPITAL LIGATURE OE
|
|
||||||
0x8D #UNDEFINED
|
|
||||||
0x8E #UNDEFINED
|
|
||||||
0x8F #UNDEFINED
|
|
||||||
0x90 #UNDEFINED
|
|
||||||
0x91 0x2018 #LEFT SINGLE QUOTATION MARK
|
|
||||||
0x92 0x2019 #RIGHT SINGLE QUOTATION MARK
|
|
||||||
0x93 0x201C #LEFT DOUBLE QUOTATION MARK
|
|
||||||
0x94 0x201D #RIGHT DOUBLE QUOTATION MARK
|
|
||||||
0x95 0x2022 #BULLET
|
|
||||||
0x96 0x2013 #EN DASH
|
|
||||||
0x97 0x2014 #EM DASH
|
|
||||||
0x98 0x02DC #SMALL TILDE
|
|
||||||
0x99 0x2122 #TRADE MARK SIGN
|
|
||||||
0x9A #UNDEFINED
|
|
||||||
0x9B 0x203A #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
|
|
||||||
0x9C 0x0153 #LATIN SMALL LIGATURE OE
|
|
||||||
0x9D #UNDEFINED
|
|
||||||
0x9E #UNDEFINED
|
|
||||||
0x9F 0x0178 #LATIN CAPITAL LETTER Y WITH DIAERESIS
|
|
||||||
0xA0 0x00A0 #NO-BREAK SPACE
|
|
||||||
0xA1 0x00A1 #INVERTED EXCLAMATION MARK
|
|
||||||
0xA2 0x00A2 #CENT SIGN
|
|
||||||
0xA3 0x00A3 #POUND SIGN
|
|
||||||
0xA4 0x00A4 #CURRENCY SIGN
|
|
||||||
0xA5 0x00A5 #YEN SIGN
|
|
||||||
0xA6 0x00A6 #BROKEN BAR
|
|
||||||
0xA7 0x00A7 #SECTION SIGN
|
|
||||||
0xA8 0x00A8 #DIAERESIS
|
|
||||||
0xA9 0x00A9 #COPYRIGHT SIGN
|
|
||||||
0xAA 0x00AA #FEMININE ORDINAL INDICATOR
|
|
||||||
0xAB 0x00AB #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xAC 0x00AC #NOT SIGN
|
|
||||||
0xAD 0x00AD #SOFT HYPHEN
|
|
||||||
0xAE 0x00AE #REGISTERED SIGN
|
|
||||||
0xAF 0x00AF #MACRON
|
|
||||||
0xB0 0x00B0 #DEGREE SIGN
|
|
||||||
0xB1 0x00B1 #PLUS-MINUS SIGN
|
|
||||||
0xB2 0x00B2 #SUPERSCRIPT TWO
|
|
||||||
0xB3 0x00B3 #SUPERSCRIPT THREE
|
|
||||||
0xB4 0x00B4 #ACUTE ACCENT
|
|
||||||
0xB5 0x00B5 #MICRO SIGN
|
|
||||||
0xB6 0x00B6 #PILCROW SIGN
|
|
||||||
0xB7 0x00B7 #MIDDLE DOT
|
|
||||||
0xB8 0x00B8 #CEDILLA
|
|
||||||
0xB9 0x00B9 #SUPERSCRIPT ONE
|
|
||||||
0xBA 0x00BA #MASCULINE ORDINAL INDICATOR
|
|
||||||
0xBB 0x00BB #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xBC 0x00BC #VULGAR FRACTION ONE QUARTER
|
|
||||||
0xBD 0x00BD #VULGAR FRACTION ONE HALF
|
|
||||||
0xBE 0x00BE #VULGAR FRACTION THREE QUARTERS
|
|
||||||
0xBF 0x00BF #INVERTED QUESTION MARK
|
|
||||||
0xC0 0x00C0 #LATIN CAPITAL LETTER A WITH GRAVE
|
|
||||||
0xC1 0x00C1 #LATIN CAPITAL LETTER A WITH ACUTE
|
|
||||||
0xC2 0x00C2 #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xC3 0x0102 #LATIN CAPITAL LETTER A WITH BREVE
|
|
||||||
0xC4 0x00C4 #LATIN CAPITAL LETTER A WITH DIAERESIS
|
|
||||||
0xC5 0x00C5 #LATIN CAPITAL LETTER A WITH RING ABOVE
|
|
||||||
0xC6 0x00C6 #LATIN CAPITAL LETTER AE
|
|
||||||
0xC7 0x00C7 #LATIN CAPITAL LETTER C WITH CEDILLA
|
|
||||||
0xC8 0x00C8 #LATIN CAPITAL LETTER E WITH GRAVE
|
|
||||||
0xC9 0x00C9 #LATIN CAPITAL LETTER E WITH ACUTE
|
|
||||||
0xCA 0x00CA #LATIN CAPITAL LETTER E WITH CIRCUMFLEX
|
|
||||||
0xCB 0x00CB #LATIN CAPITAL LETTER E WITH DIAERESIS
|
|
||||||
0xCC 0x0300 #COMBINING GRAVE ACCENT
|
|
||||||
0xCD 0x00CD #LATIN CAPITAL LETTER I WITH ACUTE
|
|
||||||
0xCE 0x00CE #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xCF 0x00CF #LATIN CAPITAL LETTER I WITH DIAERESIS
|
|
||||||
0xD0 0x0110 #LATIN CAPITAL LETTER D WITH STROKE
|
|
||||||
0xD1 0x00D1 #LATIN CAPITAL LETTER N WITH TILDE
|
|
||||||
0xD2 0x0309 #COMBINING HOOK ABOVE
|
|
||||||
0xD3 0x00D3 #LATIN CAPITAL LETTER O WITH ACUTE
|
|
||||||
0xD4 0x00D4 #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xD5 0x01A0 #LATIN CAPITAL LETTER O WITH HORN
|
|
||||||
0xD6 0x00D6 #LATIN CAPITAL LETTER O WITH DIAERESIS
|
|
||||||
0xD7 0x00D7 #MULTIPLICATION SIGN
|
|
||||||
0xD8 0x00D8 #LATIN CAPITAL LETTER O WITH STROKE
|
|
||||||
0xD9 0x00D9 #LATIN CAPITAL LETTER U WITH GRAVE
|
|
||||||
0xDA 0x00DA #LATIN CAPITAL LETTER U WITH ACUTE
|
|
||||||
0xDB 0x00DB #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xDC 0x00DC #LATIN CAPITAL LETTER U WITH DIAERESIS
|
|
||||||
0xDD 0x01AF #LATIN CAPITAL LETTER U WITH HORN
|
|
||||||
0xDE 0x0303 #COMBINING TILDE
|
|
||||||
0xDF 0x00DF #LATIN SMALL LETTER SHARP S
|
|
||||||
0xE0 0x00E0 #LATIN SMALL LETTER A WITH GRAVE
|
|
||||||
0xE1 0x00E1 #LATIN SMALL LETTER A WITH ACUTE
|
|
||||||
0xE2 0x00E2 #LATIN SMALL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xE3 0x0103 #LATIN SMALL LETTER A WITH BREVE
|
|
||||||
0xE4 0x00E4 #LATIN SMALL LETTER A WITH DIAERESIS
|
|
||||||
0xE5 0x00E5 #LATIN SMALL LETTER A WITH RING ABOVE
|
|
||||||
0xE6 0x00E6 #LATIN SMALL LETTER AE
|
|
||||||
0xE7 0x00E7 #LATIN SMALL LETTER C WITH CEDILLA
|
|
||||||
0xE8 0x00E8 #LATIN SMALL LETTER E WITH GRAVE
|
|
||||||
0xE9 0x00E9 #LATIN SMALL LETTER E WITH ACUTE
|
|
||||||
0xEA 0x00EA #LATIN SMALL LETTER E WITH CIRCUMFLEX
|
|
||||||
0xEB 0x00EB #LATIN SMALL LETTER E WITH DIAERESIS
|
|
||||||
0xEC 0x0301 #COMBINING ACUTE ACCENT
|
|
||||||
0xED 0x00ED #LATIN SMALL LETTER I WITH ACUTE
|
|
||||||
0xEE 0x00EE #LATIN SMALL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xEF 0x00EF #LATIN SMALL LETTER I WITH DIAERESIS
|
|
||||||
0xF0 0x0111 #LATIN SMALL LETTER D WITH STROKE
|
|
||||||
0xF1 0x00F1 #LATIN SMALL LETTER N WITH TILDE
|
|
||||||
0xF2 0x0323 #COMBINING DOT BELOW
|
|
||||||
0xF3 0x00F3 #LATIN SMALL LETTER O WITH ACUTE
|
|
||||||
0xF4 0x00F4 #LATIN SMALL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xF5 0x01A1 #LATIN SMALL LETTER O WITH HORN
|
|
||||||
0xF6 0x00F6 #LATIN SMALL LETTER O WITH DIAERESIS
|
|
||||||
0xF7 0x00F7 #DIVISION SIGN
|
|
||||||
0xF8 0x00F8 #LATIN SMALL LETTER O WITH STROKE
|
|
||||||
0xF9 0x00F9 #LATIN SMALL LETTER U WITH GRAVE
|
|
||||||
0xFA 0x00FA #LATIN SMALL LETTER U WITH ACUTE
|
|
||||||
0xFB 0x00FB #LATIN SMALL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xFC 0x00FC #LATIN SMALL LETTER U WITH DIAERESIS
|
|
||||||
0xFD 0x01B0 #LATIN SMALL LETTER U WITH HORN
|
|
||||||
0xFE 0x20AB #DONG SIGN
|
|
||||||
0xFF 0x00FF #LATIN SMALL LETTER Y WITH DIAERESIS
|
|
@ -1,303 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: ISO/IEC 8859-1:1998 to Unicode
|
|
||||||
# Unicode version: 3.0
|
|
||||||
# Table version: 1.0
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 1999 July 27
|
|
||||||
# Authors: Ken Whistler <kenw@sybase.com>
|
|
||||||
#
|
|
||||||
# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
|
|
||||||
#
|
|
||||||
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
|
|
||||||
# No claims are made as to fitness for any particular purpose. No
|
|
||||||
# warranties of any kind are expressed or implied. The recipient
|
|
||||||
# agrees to determine applicability of information provided. If this
|
|
||||||
# file has been provided on optical media by Unicode, Inc., the sole
|
|
||||||
# remedy for any claim will be exchange of defective media within 90
|
|
||||||
# days of receipt.
|
|
||||||
#
|
|
||||||
# Unicode, Inc. hereby grants the right to freely use the information
|
|
||||||
# supplied in this file in the creation of products supporting the
|
|
||||||
# Unicode Standard, and to make copies of this file in any form for
|
|
||||||
# internal or external distribution as long as this notice remains
|
|
||||||
# attached.
|
|
||||||
#
|
|
||||||
# General notes:
|
|
||||||
#
|
|
||||||
# This table contains the data the Unicode Consortium has on how
|
|
||||||
# ISO/IEC 8859-1:1998 characters map into Unicode.
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the ISO/IEC 8859-1 code (in hex as 0xXX)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in ISO/IEC 8859-1 order.
|
|
||||||
#
|
|
||||||
# Version history
|
|
||||||
# 1.0 version updates 0.1 version by adding mappings for all
|
|
||||||
# control characters.
|
|
||||||
#
|
|
||||||
# Updated versions of this file may be found in:
|
|
||||||
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
|
|
||||||
#
|
|
||||||
# Any comments or problems, contact <errata@unicode.org>
|
|
||||||
# Please note that <errata@unicode.org> is an archival address;
|
|
||||||
# notices will be checked, but do not expect an immediate response.
|
|
||||||
#
|
|
||||||
0x00 0x0000 # NULL
|
|
||||||
0x01 0x0001 # START OF HEADING
|
|
||||||
0x02 0x0002 # START OF TEXT
|
|
||||||
0x03 0x0003 # END OF TEXT
|
|
||||||
0x04 0x0004 # END OF TRANSMISSION
|
|
||||||
0x05 0x0005 # ENQUIRY
|
|
||||||
0x06 0x0006 # ACKNOWLEDGE
|
|
||||||
0x07 0x0007 # BELL
|
|
||||||
0x08 0x0008 # BACKSPACE
|
|
||||||
0x09 0x0009 # HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A # LINE FEED
|
|
||||||
0x0B 0x000B # VERTICAL TABULATION
|
|
||||||
0x0C 0x000C # FORM FEED
|
|
||||||
0x0D 0x000D # CARRIAGE RETURN
|
|
||||||
0x0E 0x000E # SHIFT OUT
|
|
||||||
0x0F 0x000F # SHIFT IN
|
|
||||||
0x10 0x0010 # DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 # DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 # DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 # DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 # DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 # SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 # END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 # CANCEL
|
|
||||||
0x19 0x0019 # END OF MEDIUM
|
|
||||||
0x1A 0x001A # SUBSTITUTE
|
|
||||||
0x1B 0x001B # ESCAPE
|
|
||||||
0x1C 0x001C # FILE SEPARATOR
|
|
||||||
0x1D 0x001D # GROUP SEPARATOR
|
|
||||||
0x1E 0x001E # RECORD SEPARATOR
|
|
||||||
0x1F 0x001F # UNIT SEPARATOR
|
|
||||||
0x20 0x0020 # SPACE
|
|
||||||
0x21 0x0021 # EXCLAMATION MARK
|
|
||||||
0x22 0x0022 # QUOTATION MARK
|
|
||||||
0x23 0x0023 # NUMBER SIGN
|
|
||||||
0x24 0x0024 # DOLLAR SIGN
|
|
||||||
0x25 0x0025 # PERCENT SIGN
|
|
||||||
0x26 0x0026 # AMPERSAND
|
|
||||||
0x27 0x0027 # APOSTROPHE
|
|
||||||
0x28 0x0028 # LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 # RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A # ASTERISK
|
|
||||||
0x2B 0x002B # PLUS SIGN
|
|
||||||
0x2C 0x002C # COMMA
|
|
||||||
0x2D 0x002D # HYPHEN-MINUS
|
|
||||||
0x2E 0x002E # FULL STOP
|
|
||||||
0x2F 0x002F # SOLIDUS
|
|
||||||
0x30 0x0030 # DIGIT ZERO
|
|
||||||
0x31 0x0031 # DIGIT ONE
|
|
||||||
0x32 0x0032 # DIGIT TWO
|
|
||||||
0x33 0x0033 # DIGIT THREE
|
|
||||||
0x34 0x0034 # DIGIT FOUR
|
|
||||||
0x35 0x0035 # DIGIT FIVE
|
|
||||||
0x36 0x0036 # DIGIT SIX
|
|
||||||
0x37 0x0037 # DIGIT SEVEN
|
|
||||||
0x38 0x0038 # DIGIT EIGHT
|
|
||||||
0x39 0x0039 # DIGIT NINE
|
|
||||||
0x3A 0x003A # COLON
|
|
||||||
0x3B 0x003B # SEMICOLON
|
|
||||||
0x3C 0x003C # LESS-THAN SIGN
|
|
||||||
0x3D 0x003D # EQUALS SIGN
|
|
||||||
0x3E 0x003E # GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F # QUESTION MARK
|
|
||||||
0x40 0x0040 # COMMERCIAL AT
|
|
||||||
0x41 0x0041 # LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 # LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 # LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 # LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 # LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 # LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 # LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 # LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 # LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A # LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B # LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C # LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D # LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E # LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F # LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 # LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 # LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 # LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 # LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 # LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 # LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 # LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 # LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 # LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 # LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A # LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B # LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C # REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D # RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E # CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F # LOW LINE
|
|
||||||
0x60 0x0060 # GRAVE ACCENT
|
|
||||||
0x61 0x0061 # LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 # LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 # LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 # LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 # LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 # LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 # LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 # LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 # LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A # LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B # LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C # LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D # LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E # LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F # LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 # LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 # LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 # LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 # LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 # LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 # LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 # LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 # LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 # LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 # LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A # LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B # LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C # VERTICAL LINE
|
|
||||||
0x7D 0x007D # RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E # TILDE
|
|
||||||
0x7F 0x007F # DELETE
|
|
||||||
0x80 0x0080 # <control>
|
|
||||||
0x81 0x0081 # <control>
|
|
||||||
0x82 0x0082 # <control>
|
|
||||||
0x83 0x0083 # <control>
|
|
||||||
0x84 0x0084 # <control>
|
|
||||||
0x85 0x0085 # <control>
|
|
||||||
0x86 0x0086 # <control>
|
|
||||||
0x87 0x0087 # <control>
|
|
||||||
0x88 0x0088 # <control>
|
|
||||||
0x89 0x0089 # <control>
|
|
||||||
0x8A 0x008A # <control>
|
|
||||||
0x8B 0x008B # <control>
|
|
||||||
0x8C 0x008C # <control>
|
|
||||||
0x8D 0x008D # <control>
|
|
||||||
0x8E 0x008E # <control>
|
|
||||||
0x8F 0x008F # <control>
|
|
||||||
0x90 0x0090 # <control>
|
|
||||||
0x91 0x0091 # <control>
|
|
||||||
0x92 0x0092 # <control>
|
|
||||||
0x93 0x0093 # <control>
|
|
||||||
0x94 0x0094 # <control>
|
|
||||||
0x95 0x0095 # <control>
|
|
||||||
0x96 0x0096 # <control>
|
|
||||||
0x97 0x0097 # <control>
|
|
||||||
0x98 0x0098 # <control>
|
|
||||||
0x99 0x0099 # <control>
|
|
||||||
0x9A 0x009A # <control>
|
|
||||||
0x9B 0x009B # <control>
|
|
||||||
0x9C 0x009C # <control>
|
|
||||||
0x9D 0x009D # <control>
|
|
||||||
0x9E 0x009E # <control>
|
|
||||||
0x9F 0x009F # <control>
|
|
||||||
0xA0 0x00A0 # NO-BREAK SPACE
|
|
||||||
0xA1 0x00A1 # INVERTED EXCLAMATION MARK
|
|
||||||
0xA2 0x00A2 # CENT SIGN
|
|
||||||
0xA3 0x00A3 # POUND SIGN
|
|
||||||
0xA4 0x00A4 # CURRENCY SIGN
|
|
||||||
0xA5 0x00A5 # YEN SIGN
|
|
||||||
0xA6 0x00A6 # BROKEN BAR
|
|
||||||
0xA7 0x00A7 # SECTION SIGN
|
|
||||||
0xA8 0x00A8 # DIAERESIS
|
|
||||||
0xA9 0x00A9 # COPYRIGHT SIGN
|
|
||||||
0xAA 0x00AA # FEMININE ORDINAL INDICATOR
|
|
||||||
0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xAC 0x00AC # NOT SIGN
|
|
||||||
0xAD 0x00AD # SOFT HYPHEN
|
|
||||||
0xAE 0x00AE # REGISTERED SIGN
|
|
||||||
0xAF 0x00AF # MACRON
|
|
||||||
0xB0 0x00B0 # DEGREE SIGN
|
|
||||||
0xB1 0x00B1 # PLUS-MINUS SIGN
|
|
||||||
0xB2 0x00B2 # SUPERSCRIPT TWO
|
|
||||||
0xB3 0x00B3 # SUPERSCRIPT THREE
|
|
||||||
0xB4 0x00B4 # ACUTE ACCENT
|
|
||||||
0xB5 0x00B5 # MICRO SIGN
|
|
||||||
0xB6 0x00B6 # PILCROW SIGN
|
|
||||||
0xB7 0x00B7 # MIDDLE DOT
|
|
||||||
0xB8 0x00B8 # CEDILLA
|
|
||||||
0xB9 0x00B9 # SUPERSCRIPT ONE
|
|
||||||
0xBA 0x00BA # MASCULINE ORDINAL INDICATOR
|
|
||||||
0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xBC 0x00BC # VULGAR FRACTION ONE QUARTER
|
|
||||||
0xBD 0x00BD # VULGAR FRACTION ONE HALF
|
|
||||||
0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS
|
|
||||||
0xBF 0x00BF # INVERTED QUESTION MARK
|
|
||||||
0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
|
|
||||||
0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
|
|
||||||
0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
|
|
||||||
0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
|
|
||||||
0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
|
|
||||||
0xC6 0x00C6 # LATIN CAPITAL LETTER AE
|
|
||||||
0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
|
|
||||||
0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
|
|
||||||
0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
|
|
||||||
0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
|
|
||||||
0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
|
|
||||||
0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
|
|
||||||
0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
|
|
||||||
0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
|
|
||||||
0xD0 0x00D0 # LATIN CAPITAL LETTER ETH (Icelandic)
|
|
||||||
0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
|
|
||||||
0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
|
|
||||||
0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
|
|
||||||
0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
|
|
||||||
0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
|
|
||||||
0xD7 0x00D7 # MULTIPLICATION SIGN
|
|
||||||
0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
|
|
||||||
0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
|
|
||||||
0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
|
|
||||||
0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
|
|
||||||
0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE
|
|
||||||
0xDE 0x00DE # LATIN CAPITAL LETTER THORN (Icelandic)
|
|
||||||
0xDF 0x00DF # LATIN SMALL LETTER SHARP S (German)
|
|
||||||
0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
|
|
||||||
0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
|
|
||||||
0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
|
|
||||||
0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
|
|
||||||
0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
|
|
||||||
0xE6 0x00E6 # LATIN SMALL LETTER AE
|
|
||||||
0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
|
|
||||||
0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
|
|
||||||
0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
|
|
||||||
0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
|
|
||||||
0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
|
|
||||||
0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
|
|
||||||
0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
|
|
||||||
0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
|
|
||||||
0xF0 0x00F0 # LATIN SMALL LETTER ETH (Icelandic)
|
|
||||||
0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE
|
|
||||||
0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
|
|
||||||
0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
|
|
||||||
0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
|
|
||||||
0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
|
|
||||||
0xF7 0x00F7 # DIVISION SIGN
|
|
||||||
0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
|
|
||||||
0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
|
|
||||||
0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
|
|
||||||
0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
|
|
||||||
0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE
|
|
||||||
0xFE 0x00FE # LATIN SMALL LETTER THORN (Icelandic)
|
|
||||||
0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS
|
|
@ -1,303 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: ISO/IEC 8859-10:1998 to Unicode
|
|
||||||
# Unicode version: 3.0
|
|
||||||
# Table version: 1.1
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 1999 October 11
|
|
||||||
# Authors: Ken Whistler <kenw@sybase.com>
|
|
||||||
#
|
|
||||||
# Copyright (c) 1999 Unicode, Inc. All Rights reserved.
|
|
||||||
#
|
|
||||||
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
|
|
||||||
# No claims are made as to fitness for any particular purpose. No
|
|
||||||
# warranties of any kind are expressed or implied. The recipient
|
|
||||||
# agrees to determine applicability of information provided. If this
|
|
||||||
# file has been provided on optical media by Unicode, Inc., the sole
|
|
||||||
# remedy for any claim will be exchange of defective media within 90
|
|
||||||
# days of receipt.
|
|
||||||
#
|
|
||||||
# Unicode, Inc. hereby grants the right to freely use the information
|
|
||||||
# supplied in this file in the creation of products supporting the
|
|
||||||
# Unicode Standard, and to make copies of this file in any form for
|
|
||||||
# internal or external distribution as long as this notice remains
|
|
||||||
# attached.
|
|
||||||
#
|
|
||||||
# General notes:
|
|
||||||
#
|
|
||||||
# This table contains the data the Unicode Consortium has on how
|
|
||||||
# ISO/IEC 8859-10:1998 characters map into Unicode.
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the ISO/IEC 8859-10 code (in hex as 0xXX)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in ISO/IEC 8859-10 order.
|
|
||||||
#
|
|
||||||
# Version history
|
|
||||||
# 1.0 version new.
|
|
||||||
# 1.1 corrected mistake in mapping of 0xA4
|
|
||||||
#
|
|
||||||
# Updated versions of this file may be found in:
|
|
||||||
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
|
|
||||||
#
|
|
||||||
# Any comments or problems, contact <errata@unicode.org>
|
|
||||||
# Please note that <errata@unicode.org> is an archival address;
|
|
||||||
# notices will be checked, but do not expect an immediate response.
|
|
||||||
#
|
|
||||||
0x00 0x0000 # NULL
|
|
||||||
0x01 0x0001 # START OF HEADING
|
|
||||||
0x02 0x0002 # START OF TEXT
|
|
||||||
0x03 0x0003 # END OF TEXT
|
|
||||||
0x04 0x0004 # END OF TRANSMISSION
|
|
||||||
0x05 0x0005 # ENQUIRY
|
|
||||||
0x06 0x0006 # ACKNOWLEDGE
|
|
||||||
0x07 0x0007 # BELL
|
|
||||||
0x08 0x0008 # BACKSPACE
|
|
||||||
0x09 0x0009 # HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A # LINE FEED
|
|
||||||
0x0B 0x000B # VERTICAL TABULATION
|
|
||||||
0x0C 0x000C # FORM FEED
|
|
||||||
0x0D 0x000D # CARRIAGE RETURN
|
|
||||||
0x0E 0x000E # SHIFT OUT
|
|
||||||
0x0F 0x000F # SHIFT IN
|
|
||||||
0x10 0x0010 # DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 # DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 # DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 # DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 # DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 # SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 # END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 # CANCEL
|
|
||||||
0x19 0x0019 # END OF MEDIUM
|
|
||||||
0x1A 0x001A # SUBSTITUTE
|
|
||||||
0x1B 0x001B # ESCAPE
|
|
||||||
0x1C 0x001C # FILE SEPARATOR
|
|
||||||
0x1D 0x001D # GROUP SEPARATOR
|
|
||||||
0x1E 0x001E # RECORD SEPARATOR
|
|
||||||
0x1F 0x001F # UNIT SEPARATOR
|
|
||||||
0x20 0x0020 # SPACE
|
|
||||||
0x21 0x0021 # EXCLAMATION MARK
|
|
||||||
0x22 0x0022 # QUOTATION MARK
|
|
||||||
0x23 0x0023 # NUMBER SIGN
|
|
||||||
0x24 0x0024 # DOLLAR SIGN
|
|
||||||
0x25 0x0025 # PERCENT SIGN
|
|
||||||
0x26 0x0026 # AMPERSAND
|
|
||||||
0x27 0x0027 # APOSTROPHE
|
|
||||||
0x28 0x0028 # LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 # RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A # ASTERISK
|
|
||||||
0x2B 0x002B # PLUS SIGN
|
|
||||||
0x2C 0x002C # COMMA
|
|
||||||
0x2D 0x002D # HYPHEN-MINUS
|
|
||||||
0x2E 0x002E # FULL STOP
|
|
||||||
0x2F 0x002F # SOLIDUS
|
|
||||||
0x30 0x0030 # DIGIT ZERO
|
|
||||||
0x31 0x0031 # DIGIT ONE
|
|
||||||
0x32 0x0032 # DIGIT TWO
|
|
||||||
0x33 0x0033 # DIGIT THREE
|
|
||||||
0x34 0x0034 # DIGIT FOUR
|
|
||||||
0x35 0x0035 # DIGIT FIVE
|
|
||||||
0x36 0x0036 # DIGIT SIX
|
|
||||||
0x37 0x0037 # DIGIT SEVEN
|
|
||||||
0x38 0x0038 # DIGIT EIGHT
|
|
||||||
0x39 0x0039 # DIGIT NINE
|
|
||||||
0x3A 0x003A # COLON
|
|
||||||
0x3B 0x003B # SEMICOLON
|
|
||||||
0x3C 0x003C # LESS-THAN SIGN
|
|
||||||
0x3D 0x003D # EQUALS SIGN
|
|
||||||
0x3E 0x003E # GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F # QUESTION MARK
|
|
||||||
0x40 0x0040 # COMMERCIAL AT
|
|
||||||
0x41 0x0041 # LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 # LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 # LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 # LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 # LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 # LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 # LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 # LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 # LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A # LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B # LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C # LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D # LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E # LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F # LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 # LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 # LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 # LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 # LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 # LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 # LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 # LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 # LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 # LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 # LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A # LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B # LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C # REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D # RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E # CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F # LOW LINE
|
|
||||||
0x60 0x0060 # GRAVE ACCENT
|
|
||||||
0x61 0x0061 # LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 # LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 # LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 # LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 # LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 # LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 # LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 # LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 # LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A # LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B # LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C # LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D # LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E # LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F # LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 # LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 # LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 # LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 # LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 # LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 # LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 # LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 # LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 # LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 # LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A # LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B # LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C # VERTICAL LINE
|
|
||||||
0x7D 0x007D # RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E # TILDE
|
|
||||||
0x7F 0x007F # DELETE
|
|
||||||
0x80 0x0080 # <control>
|
|
||||||
0x81 0x0081 # <control>
|
|
||||||
0x82 0x0082 # <control>
|
|
||||||
0x83 0x0083 # <control>
|
|
||||||
0x84 0x0084 # <control>
|
|
||||||
0x85 0x0085 # <control>
|
|
||||||
0x86 0x0086 # <control>
|
|
||||||
0x87 0x0087 # <control>
|
|
||||||
0x88 0x0088 # <control>
|
|
||||||
0x89 0x0089 # <control>
|
|
||||||
0x8A 0x008A # <control>
|
|
||||||
0x8B 0x008B # <control>
|
|
||||||
0x8C 0x008C # <control>
|
|
||||||
0x8D 0x008D # <control>
|
|
||||||
0x8E 0x008E # <control>
|
|
||||||
0x8F 0x008F # <control>
|
|
||||||
0x90 0x0090 # <control>
|
|
||||||
0x91 0x0091 # <control>
|
|
||||||
0x92 0x0092 # <control>
|
|
||||||
0x93 0x0093 # <control>
|
|
||||||
0x94 0x0094 # <control>
|
|
||||||
0x95 0x0095 # <control>
|
|
||||||
0x96 0x0096 # <control>
|
|
||||||
0x97 0x0097 # <control>
|
|
||||||
0x98 0x0098 # <control>
|
|
||||||
0x99 0x0099 # <control>
|
|
||||||
0x9A 0x009A # <control>
|
|
||||||
0x9B 0x009B # <control>
|
|
||||||
0x9C 0x009C # <control>
|
|
||||||
0x9D 0x009D # <control>
|
|
||||||
0x9E 0x009E # <control>
|
|
||||||
0x9F 0x009F # <control>
|
|
||||||
0xA0 0x00A0 # NO-BREAK SPACE
|
|
||||||
0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK
|
|
||||||
0xA2 0x0112 # LATIN CAPITAL LETTER E WITH MACRON
|
|
||||||
0xA3 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA
|
|
||||||
0xA4 0x012A # LATIN CAPITAL LETTER I WITH MACRON
|
|
||||||
0xA5 0x0128 # LATIN CAPITAL LETTER I WITH TILDE
|
|
||||||
0xA6 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA
|
|
||||||
0xA7 0x00A7 # SECTION SIGN
|
|
||||||
0xA8 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA
|
|
||||||
0xA9 0x0110 # LATIN CAPITAL LETTER D WITH STROKE
|
|
||||||
0xAA 0x0160 # LATIN CAPITAL LETTER S WITH CARON
|
|
||||||
0xAB 0x0166 # LATIN CAPITAL LETTER T WITH STROKE
|
|
||||||
0xAC 0x017D # LATIN CAPITAL LETTER Z WITH CARON
|
|
||||||
0xAD 0x00AD # SOFT HYPHEN
|
|
||||||
0xAE 0x016A # LATIN CAPITAL LETTER U WITH MACRON
|
|
||||||
0xAF 0x014A # LATIN CAPITAL LETTER ENG
|
|
||||||
0xB0 0x00B0 # DEGREE SIGN
|
|
||||||
0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK
|
|
||||||
0xB2 0x0113 # LATIN SMALL LETTER E WITH MACRON
|
|
||||||
0xB3 0x0123 # LATIN SMALL LETTER G WITH CEDILLA
|
|
||||||
0xB4 0x012B # LATIN SMALL LETTER I WITH MACRON
|
|
||||||
0xB5 0x0129 # LATIN SMALL LETTER I WITH TILDE
|
|
||||||
0xB6 0x0137 # LATIN SMALL LETTER K WITH CEDILLA
|
|
||||||
0xB7 0x00B7 # MIDDLE DOT
|
|
||||||
0xB8 0x013C # LATIN SMALL LETTER L WITH CEDILLA
|
|
||||||
0xB9 0x0111 # LATIN SMALL LETTER D WITH STROKE
|
|
||||||
0xBA 0x0161 # LATIN SMALL LETTER S WITH CARON
|
|
||||||
0xBB 0x0167 # LATIN SMALL LETTER T WITH STROKE
|
|
||||||
0xBC 0x017E # LATIN SMALL LETTER Z WITH CARON
|
|
||||||
0xBD 0x2015 # HORIZONTAL BAR
|
|
||||||
0xBE 0x016B # LATIN SMALL LETTER U WITH MACRON
|
|
||||||
0xBF 0x014B # LATIN SMALL LETTER ENG
|
|
||||||
0xC0 0x0100 # LATIN CAPITAL LETTER A WITH MACRON
|
|
||||||
0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
|
|
||||||
0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
|
|
||||||
0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
|
|
||||||
0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
|
|
||||||
0xC6 0x00C6 # LATIN CAPITAL LETTER AE
|
|
||||||
0xC7 0x012E # LATIN CAPITAL LETTER I WITH OGONEK
|
|
||||||
0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON
|
|
||||||
0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
|
|
||||||
0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK
|
|
||||||
0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
|
|
||||||
0xCC 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE
|
|
||||||
0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
|
|
||||||
0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
|
|
||||||
0xD0 0x00D0 # LATIN CAPITAL LETTER ETH (Icelandic)
|
|
||||||
0xD1 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA
|
|
||||||
0xD2 0x014C # LATIN CAPITAL LETTER O WITH MACRON
|
|
||||||
0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
|
|
||||||
0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
|
|
||||||
0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
|
|
||||||
0xD7 0x0168 # LATIN CAPITAL LETTER U WITH TILDE
|
|
||||||
0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
|
|
||||||
0xD9 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK
|
|
||||||
0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
|
|
||||||
0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
|
|
||||||
0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE
|
|
||||||
0xDE 0x00DE # LATIN CAPITAL LETTER THORN (Icelandic)
|
|
||||||
0xDF 0x00DF # LATIN SMALL LETTER SHARP S (German)
|
|
||||||
0xE0 0x0101 # LATIN SMALL LETTER A WITH MACRON
|
|
||||||
0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
|
|
||||||
0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
|
|
||||||
0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
|
|
||||||
0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
|
|
||||||
0xE6 0x00E6 # LATIN SMALL LETTER AE
|
|
||||||
0xE7 0x012F # LATIN SMALL LETTER I WITH OGONEK
|
|
||||||
0xE8 0x010D # LATIN SMALL LETTER C WITH CARON
|
|
||||||
0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
|
|
||||||
0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK
|
|
||||||
0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
|
|
||||||
0xEC 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE
|
|
||||||
0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
|
|
||||||
0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
|
|
||||||
0xF0 0x00F0 # LATIN SMALL LETTER ETH (Icelandic)
|
|
||||||
0xF1 0x0146 # LATIN SMALL LETTER N WITH CEDILLA
|
|
||||||
0xF2 0x014D # LATIN SMALL LETTER O WITH MACRON
|
|
||||||
0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
|
|
||||||
0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
|
|
||||||
0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
|
|
||||||
0xF7 0x0169 # LATIN SMALL LETTER U WITH TILDE
|
|
||||||
0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
|
|
||||||
0xF9 0x0173 # LATIN SMALL LETTER U WITH OGONEK
|
|
||||||
0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
|
|
||||||
0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
|
|
||||||
0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE
|
|
||||||
0xFE 0x00FE # LATIN SMALL LETTER THORN (Icelandic)
|
|
||||||
0xFF 0x0138 # LATIN SMALL LETTER KRA
|
|
@ -1,297 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: ISO/IEC 8859-11:2001 to Unicode
|
|
||||||
# Unicode version: 3.2
|
|
||||||
# Table version: 1.0
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 2002 October 7
|
|
||||||
# Authors: Ken Whistler <kenw@sybase.com>
|
|
||||||
#
|
|
||||||
# Copyright (c) 2002 Unicode, Inc. All Rights reserved.
|
|
||||||
#
|
|
||||||
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
|
|
||||||
# No claims are made as to fitness for any particular purpose. No
|
|
||||||
# warranties of any kind are expressed or implied. The recipient
|
|
||||||
# agrees to determine applicability of information provided. If this
|
|
||||||
# file has been provided on optical media by Unicode, Inc., the sole
|
|
||||||
# remedy for any claim will be exchange of defective media within 90
|
|
||||||
# days of receipt.
|
|
||||||
#
|
|
||||||
# Unicode, Inc. hereby grants the right to freely use the information
|
|
||||||
# supplied in this file in the creation of products supporting the
|
|
||||||
# Unicode Standard, and to make copies of this file in any form for
|
|
||||||
# internal or external distribution as long as this notice remains
|
|
||||||
# attached.
|
|
||||||
#
|
|
||||||
# General notes:
|
|
||||||
#
|
|
||||||
# This table contains the data the Unicode Consortium has on how
|
|
||||||
# ISO/IEC 8859-11:2001 characters map into Unicode.
|
|
||||||
#
|
|
||||||
# ISO/IEC 8859-11:2001 is equivalent to TIS 620-2533 (1990) with
|
|
||||||
# the addition of 0xA0 NO-BREAK SPACE.
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the ISO/IEC 8859-11 code (in hex as 0xXX)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in ISO/IEC 8859-11 order.
|
|
||||||
#
|
|
||||||
# Version history:
|
|
||||||
# 2002 October 7 Created
|
|
||||||
#
|
|
||||||
# Updated versions of this file may be found in:
|
|
||||||
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
|
|
||||||
#
|
|
||||||
# For any comments or problems, please use the Unicode
|
|
||||||
# web contact form at:
|
|
||||||
# http://www.unicode.org/unicode/reporting.html
|
|
||||||
#
|
|
||||||
0x00 0x0000 # NULL
|
|
||||||
0x01 0x0001 # START OF HEADING
|
|
||||||
0x02 0x0002 # START OF TEXT
|
|
||||||
0x03 0x0003 # END OF TEXT
|
|
||||||
0x04 0x0004 # END OF TRANSMISSION
|
|
||||||
0x05 0x0005 # ENQUIRY
|
|
||||||
0x06 0x0006 # ACKNOWLEDGE
|
|
||||||
0x07 0x0007 # BELL
|
|
||||||
0x08 0x0008 # BACKSPACE
|
|
||||||
0x09 0x0009 # HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A # LINE FEED
|
|
||||||
0x0B 0x000B # VERTICAL TABULATION
|
|
||||||
0x0C 0x000C # FORM FEED
|
|
||||||
0x0D 0x000D # CARRIAGE RETURN
|
|
||||||
0x0E 0x000E # SHIFT OUT
|
|
||||||
0x0F 0x000F # SHIFT IN
|
|
||||||
0x10 0x0010 # DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 # DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 # DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 # DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 # DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 # SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 # END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 # CANCEL
|
|
||||||
0x19 0x0019 # END OF MEDIUM
|
|
||||||
0x1A 0x001A # SUBSTITUTE
|
|
||||||
0x1B 0x001B # ESCAPE
|
|
||||||
0x1C 0x001C # FILE SEPARATOR
|
|
||||||
0x1D 0x001D # GROUP SEPARATOR
|
|
||||||
0x1E 0x001E # RECORD SEPARATOR
|
|
||||||
0x1F 0x001F # UNIT SEPARATOR
|
|
||||||
0x20 0x0020 # SPACE
|
|
||||||
0x21 0x0021 # EXCLAMATION MARK
|
|
||||||
0x22 0x0022 # QUOTATION MARK
|
|
||||||
0x23 0x0023 # NUMBER SIGN
|
|
||||||
0x24 0x0024 # DOLLAR SIGN
|
|
||||||
0x25 0x0025 # PERCENT SIGN
|
|
||||||
0x26 0x0026 # AMPERSAND
|
|
||||||
0x27 0x0027 # APOSTROPHE
|
|
||||||
0x28 0x0028 # LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 # RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A # ASTERISK
|
|
||||||
0x2B 0x002B # PLUS SIGN
|
|
||||||
0x2C 0x002C # COMMA
|
|
||||||
0x2D 0x002D # HYPHEN-MINUS
|
|
||||||
0x2E 0x002E # FULL STOP
|
|
||||||
0x2F 0x002F # SOLIDUS
|
|
||||||
0x30 0x0030 # DIGIT ZERO
|
|
||||||
0x31 0x0031 # DIGIT ONE
|
|
||||||
0x32 0x0032 # DIGIT TWO
|
|
||||||
0x33 0x0033 # DIGIT THREE
|
|
||||||
0x34 0x0034 # DIGIT FOUR
|
|
||||||
0x35 0x0035 # DIGIT FIVE
|
|
||||||
0x36 0x0036 # DIGIT SIX
|
|
||||||
0x37 0x0037 # DIGIT SEVEN
|
|
||||||
0x38 0x0038 # DIGIT EIGHT
|
|
||||||
0x39 0x0039 # DIGIT NINE
|
|
||||||
0x3A 0x003A # COLON
|
|
||||||
0x3B 0x003B # SEMICOLON
|
|
||||||
0x3C 0x003C # LESS-THAN SIGN
|
|
||||||
0x3D 0x003D # EQUALS SIGN
|
|
||||||
0x3E 0x003E # GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F # QUESTION MARK
|
|
||||||
0x40 0x0040 # COMMERCIAL AT
|
|
||||||
0x41 0x0041 # LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 # LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 # LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 # LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 # LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 # LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 # LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 # LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 # LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A # LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B # LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C # LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D # LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E # LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F # LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 # LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 # LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 # LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 # LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 # LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 # LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 # LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 # LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 # LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 # LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A # LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B # LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C # REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D # RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E # CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F # LOW LINE
|
|
||||||
0x60 0x0060 # GRAVE ACCENT
|
|
||||||
0x61 0x0061 # LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 # LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 # LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 # LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 # LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 # LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 # LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 # LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 # LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A # LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B # LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C # LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D # LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E # LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F # LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 # LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 # LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 # LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 # LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 # LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 # LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 # LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 # LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 # LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 # LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A # LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B # LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C # VERTICAL LINE
|
|
||||||
0x7D 0x007D # RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E # TILDE
|
|
||||||
0x7F 0x007F # DELETE
|
|
||||||
0x80 0x0080 # <control>
|
|
||||||
0x81 0x0081 # <control>
|
|
||||||
0x82 0x0082 # <control>
|
|
||||||
0x83 0x0083 # <control>
|
|
||||||
0x84 0x0084 # <control>
|
|
||||||
0x85 0x0085 # <control>
|
|
||||||
0x86 0x0086 # <control>
|
|
||||||
0x87 0x0087 # <control>
|
|
||||||
0x88 0x0088 # <control>
|
|
||||||
0x89 0x0089 # <control>
|
|
||||||
0x8A 0x008A # <control>
|
|
||||||
0x8B 0x008B # <control>
|
|
||||||
0x8C 0x008C # <control>
|
|
||||||
0x8D 0x008D # <control>
|
|
||||||
0x8E 0x008E # <control>
|
|
||||||
0x8F 0x008F # <control>
|
|
||||||
0x90 0x0090 # <control>
|
|
||||||
0x91 0x0091 # <control>
|
|
||||||
0x92 0x0092 # <control>
|
|
||||||
0x93 0x0093 # <control>
|
|
||||||
0x94 0x0094 # <control>
|
|
||||||
0x95 0x0095 # <control>
|
|
||||||
0x96 0x0096 # <control>
|
|
||||||
0x97 0x0097 # <control>
|
|
||||||
0x98 0x0098 # <control>
|
|
||||||
0x99 0x0099 # <control>
|
|
||||||
0x9A 0x009A # <control>
|
|
||||||
0x9B 0x009B # <control>
|
|
||||||
0x9C 0x009C # <control>
|
|
||||||
0x9D 0x009D # <control>
|
|
||||||
0x9E 0x009E # <control>
|
|
||||||
0x9F 0x009F # <control>
|
|
||||||
0xA0 0x00A0 # NO-BREAK SPACE
|
|
||||||
0xA1 0x0E01 # THAI CHARACTER KO KAI
|
|
||||||
0xA2 0x0E02 # THAI CHARACTER KHO KHAI
|
|
||||||
0xA3 0x0E03 # THAI CHARACTER KHO KHUAT
|
|
||||||
0xA4 0x0E04 # THAI CHARACTER KHO KHWAI
|
|
||||||
0xA5 0x0E05 # THAI CHARACTER KHO KHON
|
|
||||||
0xA6 0x0E06 # THAI CHARACTER KHO RAKHANG
|
|
||||||
0xA7 0x0E07 # THAI CHARACTER NGO NGU
|
|
||||||
0xA8 0x0E08 # THAI CHARACTER CHO CHAN
|
|
||||||
0xA9 0x0E09 # THAI CHARACTER CHO CHING
|
|
||||||
0xAA 0x0E0A # THAI CHARACTER CHO CHANG
|
|
||||||
0xAB 0x0E0B # THAI CHARACTER SO SO
|
|
||||||
0xAC 0x0E0C # THAI CHARACTER CHO CHOE
|
|
||||||
0xAD 0x0E0D # THAI CHARACTER YO YING
|
|
||||||
0xAE 0x0E0E # THAI CHARACTER DO CHADA
|
|
||||||
0xAF 0x0E0F # THAI CHARACTER TO PATAK
|
|
||||||
0xB0 0x0E10 # THAI CHARACTER THO THAN
|
|
||||||
0xB1 0x0E11 # THAI CHARACTER THO NANGMONTHO
|
|
||||||
0xB2 0x0E12 # THAI CHARACTER THO PHUTHAO
|
|
||||||
0xB3 0x0E13 # THAI CHARACTER NO NEN
|
|
||||||
0xB4 0x0E14 # THAI CHARACTER DO DEK
|
|
||||||
0xB5 0x0E15 # THAI CHARACTER TO TAO
|
|
||||||
0xB6 0x0E16 # THAI CHARACTER THO THUNG
|
|
||||||
0xB7 0x0E17 # THAI CHARACTER THO THAHAN
|
|
||||||
0xB8 0x0E18 # THAI CHARACTER THO THONG
|
|
||||||
0xB9 0x0E19 # THAI CHARACTER NO NU
|
|
||||||
0xBA 0x0E1A # THAI CHARACTER BO BAIMAI
|
|
||||||
0xBB 0x0E1B # THAI CHARACTER PO PLA
|
|
||||||
0xBC 0x0E1C # THAI CHARACTER PHO PHUNG
|
|
||||||
0xBD 0x0E1D # THAI CHARACTER FO FA
|
|
||||||
0xBE 0x0E1E # THAI CHARACTER PHO PHAN
|
|
||||||
0xBF 0x0E1F # THAI CHARACTER FO FAN
|
|
||||||
0xC0 0x0E20 # THAI CHARACTER PHO SAMPHAO
|
|
||||||
0xC1 0x0E21 # THAI CHARACTER MO MA
|
|
||||||
0xC2 0x0E22 # THAI CHARACTER YO YAK
|
|
||||||
0xC3 0x0E23 # THAI CHARACTER RO RUA
|
|
||||||
0xC4 0x0E24 # THAI CHARACTER RU
|
|
||||||
0xC5 0x0E25 # THAI CHARACTER LO LING
|
|
||||||
0xC6 0x0E26 # THAI CHARACTER LU
|
|
||||||
0xC7 0x0E27 # THAI CHARACTER WO WAEN
|
|
||||||
0xC8 0x0E28 # THAI CHARACTER SO SALA
|
|
||||||
0xC9 0x0E29 # THAI CHARACTER SO RUSI
|
|
||||||
0xCA 0x0E2A # THAI CHARACTER SO SUA
|
|
||||||
0xCB 0x0E2B # THAI CHARACTER HO HIP
|
|
||||||
0xCC 0x0E2C # THAI CHARACTER LO CHULA
|
|
||||||
0xCD 0x0E2D # THAI CHARACTER O ANG
|
|
||||||
0xCE 0x0E2E # THAI CHARACTER HO NOKHUK
|
|
||||||
0xCF 0x0E2F # THAI CHARACTER PAIYANNOI
|
|
||||||
0xD0 0x0E30 # THAI CHARACTER SARA A
|
|
||||||
0xD1 0x0E31 # THAI CHARACTER MAI HAN-AKAT
|
|
||||||
0xD2 0x0E32 # THAI CHARACTER SARA AA
|
|
||||||
0xD3 0x0E33 # THAI CHARACTER SARA AM
|
|
||||||
0xD4 0x0E34 # THAI CHARACTER SARA I
|
|
||||||
0xD5 0x0E35 # THAI CHARACTER SARA II
|
|
||||||
0xD6 0x0E36 # THAI CHARACTER SARA UE
|
|
||||||
0xD7 0x0E37 # THAI CHARACTER SARA UEE
|
|
||||||
0xD8 0x0E38 # THAI CHARACTER SARA U
|
|
||||||
0xD9 0x0E39 # THAI CHARACTER SARA UU
|
|
||||||
0xDA 0x0E3A # THAI CHARACTER PHINTHU
|
|
||||||
0xDF 0x0E3F # THAI CURRENCY SYMBOL BAHT
|
|
||||||
0xE0 0x0E40 # THAI CHARACTER SARA E
|
|
||||||
0xE1 0x0E41 # THAI CHARACTER SARA AE
|
|
||||||
0xE2 0x0E42 # THAI CHARACTER SARA O
|
|
||||||
0xE3 0x0E43 # THAI CHARACTER SARA AI MAIMUAN
|
|
||||||
0xE4 0x0E44 # THAI CHARACTER SARA AI MAIMALAI
|
|
||||||
0xE5 0x0E45 # THAI CHARACTER LAKKHANGYAO
|
|
||||||
0xE6 0x0E46 # THAI CHARACTER MAIYAMOK
|
|
||||||
0xE7 0x0E47 # THAI CHARACTER MAITAIKHU
|
|
||||||
0xE8 0x0E48 # THAI CHARACTER MAI EK
|
|
||||||
0xE9 0x0E49 # THAI CHARACTER MAI THO
|
|
||||||
0xEA 0x0E4A # THAI CHARACTER MAI TRI
|
|
||||||
0xEB 0x0E4B # THAI CHARACTER MAI CHATTAWA
|
|
||||||
0xEC 0x0E4C # THAI CHARACTER THANTHAKHAT
|
|
||||||
0xED 0x0E4D # THAI CHARACTER NIKHAHIT
|
|
||||||
0xEE 0x0E4E # THAI CHARACTER YAMAKKAN
|
|
||||||
0xEF 0x0E4F # THAI CHARACTER FONGMAN
|
|
||||||
0xF0 0x0E50 # THAI DIGIT ZERO
|
|
||||||
0xF1 0x0E51 # THAI DIGIT ONE
|
|
||||||
0xF2 0x0E52 # THAI DIGIT TWO
|
|
||||||
0xF3 0x0E53 # THAI DIGIT THREE
|
|
||||||
0xF4 0x0E54 # THAI DIGIT FOUR
|
|
||||||
0xF5 0x0E55 # THAI DIGIT FIVE
|
|
||||||
0xF6 0x0E56 # THAI DIGIT SIX
|
|
||||||
0xF7 0x0E57 # THAI DIGIT SEVEN
|
|
||||||
0xF8 0x0E58 # THAI DIGIT EIGHT
|
|
||||||
0xF9 0x0E59 # THAI DIGIT NINE
|
|
||||||
0xFA 0x0E5A # THAI CHARACTER ANGKHANKHU
|
|
||||||
0xFB 0x0E5B # THAI CHARACTER KHOMUT
|
|
@ -1,299 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: ISO/IEC 8859-13:1998 to Unicode
|
|
||||||
# Unicode version: 3.0
|
|
||||||
# Table version: 1.0
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 1999 July 27
|
|
||||||
# Authors: Ken Whistler <kenw@sybase.com>
|
|
||||||
#
|
|
||||||
# Copyright (c) 1998 - 1999 Unicode, Inc. All Rights reserved.
|
|
||||||
#
|
|
||||||
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
|
|
||||||
# No claims are made as to fitness for any particular purpose. No
|
|
||||||
# warranties of any kind are expressed or implied. The recipient
|
|
||||||
# agrees to determine applicability of information provided. If this
|
|
||||||
# file has been provided on optical media by Unicode, Inc., the sole
|
|
||||||
# remedy for any claim will be exchange of defective media within 90
|
|
||||||
# days of receipt.
|
|
||||||
#
|
|
||||||
# Unicode, Inc. hereby grants the right to freely use the information
|
|
||||||
# supplied in this file in the creation of products supporting the
|
|
||||||
# Unicode Standard, and to make copies of this file in any form for
|
|
||||||
# internal or external distribution as long as this notice remains
|
|
||||||
# attached.
|
|
||||||
#
|
|
||||||
# General notes:
|
|
||||||
#
|
|
||||||
# This table contains the data the Unicode Consortium has on how
|
|
||||||
# ISO/IEC 8859-13:1998 characters map into Unicode.
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the ISO/IEC 8859-13 code (in hex as 0xXX)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in ISO/IEC 8859-13 order.
|
|
||||||
#
|
|
||||||
# Updated versions of this file may be found in:
|
|
||||||
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
|
|
||||||
#
|
|
||||||
# Any comments or problems, contact <errata@unicode.org>
|
|
||||||
# Please note that <errata@unicode.org> is an archival address;
|
|
||||||
# notices will be checked, but do not expect an immediate response.
|
|
||||||
#
|
|
||||||
0x00 0x0000 # NULL
|
|
||||||
0x01 0x0001 # START OF HEADING
|
|
||||||
0x02 0x0002 # START OF TEXT
|
|
||||||
0x03 0x0003 # END OF TEXT
|
|
||||||
0x04 0x0004 # END OF TRANSMISSION
|
|
||||||
0x05 0x0005 # ENQUIRY
|
|
||||||
0x06 0x0006 # ACKNOWLEDGE
|
|
||||||
0x07 0x0007 # BELL
|
|
||||||
0x08 0x0008 # BACKSPACE
|
|
||||||
0x09 0x0009 # HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A # LINE FEED
|
|
||||||
0x0B 0x000B # VERTICAL TABULATION
|
|
||||||
0x0C 0x000C # FORM FEED
|
|
||||||
0x0D 0x000D # CARRIAGE RETURN
|
|
||||||
0x0E 0x000E # SHIFT OUT
|
|
||||||
0x0F 0x000F # SHIFT IN
|
|
||||||
0x10 0x0010 # DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 # DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 # DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 # DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 # DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 # SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 # END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 # CANCEL
|
|
||||||
0x19 0x0019 # END OF MEDIUM
|
|
||||||
0x1A 0x001A # SUBSTITUTE
|
|
||||||
0x1B 0x001B # ESCAPE
|
|
||||||
0x1C 0x001C # FILE SEPARATOR
|
|
||||||
0x1D 0x001D # GROUP SEPARATOR
|
|
||||||
0x1E 0x001E # RECORD SEPARATOR
|
|
||||||
0x1F 0x001F # UNIT SEPARATOR
|
|
||||||
0x20 0x0020 # SPACE
|
|
||||||
0x21 0x0021 # EXCLAMATION MARK
|
|
||||||
0x22 0x0022 # QUOTATION MARK
|
|
||||||
0x23 0x0023 # NUMBER SIGN
|
|
||||||
0x24 0x0024 # DOLLAR SIGN
|
|
||||||
0x25 0x0025 # PERCENT SIGN
|
|
||||||
0x26 0x0026 # AMPERSAND
|
|
||||||
0x27 0x0027 # APOSTROPHE
|
|
||||||
0x28 0x0028 # LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 # RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A # ASTERISK
|
|
||||||
0x2B 0x002B # PLUS SIGN
|
|
||||||
0x2C 0x002C # COMMA
|
|
||||||
0x2D 0x002D # HYPHEN-MINUS
|
|
||||||
0x2E 0x002E # FULL STOP
|
|
||||||
0x2F 0x002F # SOLIDUS
|
|
||||||
0x30 0x0030 # DIGIT ZERO
|
|
||||||
0x31 0x0031 # DIGIT ONE
|
|
||||||
0x32 0x0032 # DIGIT TWO
|
|
||||||
0x33 0x0033 # DIGIT THREE
|
|
||||||
0x34 0x0034 # DIGIT FOUR
|
|
||||||
0x35 0x0035 # DIGIT FIVE
|
|
||||||
0x36 0x0036 # DIGIT SIX
|
|
||||||
0x37 0x0037 # DIGIT SEVEN
|
|
||||||
0x38 0x0038 # DIGIT EIGHT
|
|
||||||
0x39 0x0039 # DIGIT NINE
|
|
||||||
0x3A 0x003A # COLON
|
|
||||||
0x3B 0x003B # SEMICOLON
|
|
||||||
0x3C 0x003C # LESS-THAN SIGN
|
|
||||||
0x3D 0x003D # EQUALS SIGN
|
|
||||||
0x3E 0x003E # GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F # QUESTION MARK
|
|
||||||
0x40 0x0040 # COMMERCIAL AT
|
|
||||||
0x41 0x0041 # LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 # LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 # LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 # LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 # LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 # LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 # LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 # LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 # LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A # LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B # LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C # LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D # LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E # LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F # LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 # LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 # LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 # LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 # LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 # LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 # LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 # LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 # LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 # LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 # LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A # LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B # LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C # REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D # RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E # CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F # LOW LINE
|
|
||||||
0x60 0x0060 # GRAVE ACCENT
|
|
||||||
0x61 0x0061 # LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 # LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 # LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 # LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 # LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 # LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 # LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 # LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 # LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A # LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B # LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C # LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D # LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E # LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F # LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 # LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 # LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 # LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 # LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 # LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 # LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 # LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 # LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 # LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 # LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A # LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B # LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C # VERTICAL LINE
|
|
||||||
0x7D 0x007D # RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E # TILDE
|
|
||||||
0x7F 0x007F # DELETE
|
|
||||||
0x80 0x0080 # <control>
|
|
||||||
0x81 0x0081 # <control>
|
|
||||||
0x82 0x0082 # <control>
|
|
||||||
0x83 0x0083 # <control>
|
|
||||||
0x84 0x0084 # <control>
|
|
||||||
0x85 0x0085 # <control>
|
|
||||||
0x86 0x0086 # <control>
|
|
||||||
0x87 0x0087 # <control>
|
|
||||||
0x88 0x0088 # <control>
|
|
||||||
0x89 0x0089 # <control>
|
|
||||||
0x8A 0x008A # <control>
|
|
||||||
0x8B 0x008B # <control>
|
|
||||||
0x8C 0x008C # <control>
|
|
||||||
0x8D 0x008D # <control>
|
|
||||||
0x8E 0x008E # <control>
|
|
||||||
0x8F 0x008F # <control>
|
|
||||||
0x90 0x0090 # <control>
|
|
||||||
0x91 0x0091 # <control>
|
|
||||||
0x92 0x0092 # <control>
|
|
||||||
0x93 0x0093 # <control>
|
|
||||||
0x94 0x0094 # <control>
|
|
||||||
0x95 0x0095 # <control>
|
|
||||||
0x96 0x0096 # <control>
|
|
||||||
0x97 0x0097 # <control>
|
|
||||||
0x98 0x0098 # <control>
|
|
||||||
0x99 0x0099 # <control>
|
|
||||||
0x9A 0x009A # <control>
|
|
||||||
0x9B 0x009B # <control>
|
|
||||||
0x9C 0x009C # <control>
|
|
||||||
0x9D 0x009D # <control>
|
|
||||||
0x9E 0x009E # <control>
|
|
||||||
0x9F 0x009F # <control>
|
|
||||||
0xA0 0x00A0 # NO-BREAK SPACE
|
|
||||||
0xA1 0x201D # RIGHT DOUBLE QUOTATION MARK
|
|
||||||
0xA2 0x00A2 # CENT SIGN
|
|
||||||
0xA3 0x00A3 # POUND SIGN
|
|
||||||
0xA4 0x00A4 # CURRENCY SIGN
|
|
||||||
0xA5 0x201E # DOUBLE LOW-9 QUOTATION MARK
|
|
||||||
0xA6 0x00A6 # BROKEN BAR
|
|
||||||
0xA7 0x00A7 # SECTION SIGN
|
|
||||||
0xA8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
|
|
||||||
0xA9 0x00A9 # COPYRIGHT SIGN
|
|
||||||
0xAA 0x0156 # LATIN CAPITAL LETTER R WITH CEDILLA
|
|
||||||
0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xAC 0x00AC # NOT SIGN
|
|
||||||
0xAD 0x00AD # SOFT HYPHEN
|
|
||||||
0xAE 0x00AE # REGISTERED SIGN
|
|
||||||
0xAF 0x00C6 # LATIN CAPITAL LETTER AE
|
|
||||||
0xB0 0x00B0 # DEGREE SIGN
|
|
||||||
0xB1 0x00B1 # PLUS-MINUS SIGN
|
|
||||||
0xB2 0x00B2 # SUPERSCRIPT TWO
|
|
||||||
0xB3 0x00B3 # SUPERSCRIPT THREE
|
|
||||||
0xB4 0x201C # LEFT DOUBLE QUOTATION MARK
|
|
||||||
0xB5 0x00B5 # MICRO SIGN
|
|
||||||
0xB6 0x00B6 # PILCROW SIGN
|
|
||||||
0xB7 0x00B7 # MIDDLE DOT
|
|
||||||
0xB8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
|
|
||||||
0xB9 0x00B9 # SUPERSCRIPT ONE
|
|
||||||
0xBA 0x0157 # LATIN SMALL LETTER R WITH CEDILLA
|
|
||||||
0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xBC 0x00BC # VULGAR FRACTION ONE QUARTER
|
|
||||||
0xBD 0x00BD # VULGAR FRACTION ONE HALF
|
|
||||||
0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS
|
|
||||||
0xBF 0x00E6 # LATIN SMALL LETTER AE
|
|
||||||
0xC0 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK
|
|
||||||
0xC1 0x012E # LATIN CAPITAL LETTER I WITH OGONEK
|
|
||||||
0xC2 0x0100 # LATIN CAPITAL LETTER A WITH MACRON
|
|
||||||
0xC3 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE
|
|
||||||
0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
|
|
||||||
0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
|
|
||||||
0xC6 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK
|
|
||||||
0xC7 0x0112 # LATIN CAPITAL LETTER E WITH MACRON
|
|
||||||
0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON
|
|
||||||
0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
|
|
||||||
0xCA 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE
|
|
||||||
0xCB 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE
|
|
||||||
0xCC 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA
|
|
||||||
0xCD 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA
|
|
||||||
0xCE 0x012A # LATIN CAPITAL LETTER I WITH MACRON
|
|
||||||
0xCF 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA
|
|
||||||
0xD0 0x0160 # LATIN CAPITAL LETTER S WITH CARON
|
|
||||||
0xD1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE
|
|
||||||
0xD2 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA
|
|
||||||
0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
|
|
||||||
0xD4 0x014C # LATIN CAPITAL LETTER O WITH MACRON
|
|
||||||
0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
|
|
||||||
0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
|
|
||||||
0xD7 0x00D7 # MULTIPLICATION SIGN
|
|
||||||
0xD8 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK
|
|
||||||
0xD9 0x0141 # LATIN CAPITAL LETTER L WITH STROKE
|
|
||||||
0xDA 0x015A # LATIN CAPITAL LETTER S WITH ACUTE
|
|
||||||
0xDB 0x016A # LATIN CAPITAL LETTER U WITH MACRON
|
|
||||||
0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
|
|
||||||
0xDD 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
|
|
||||||
0xDE 0x017D # LATIN CAPITAL LETTER Z WITH CARON
|
|
||||||
0xDF 0x00DF # LATIN SMALL LETTER SHARP S (German)
|
|
||||||
0xE0 0x0105 # LATIN SMALL LETTER A WITH OGONEK
|
|
||||||
0xE1 0x012F # LATIN SMALL LETTER I WITH OGONEK
|
|
||||||
0xE2 0x0101 # LATIN SMALL LETTER A WITH MACRON
|
|
||||||
0xE3 0x0107 # LATIN SMALL LETTER C WITH ACUTE
|
|
||||||
0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
|
|
||||||
0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
|
|
||||||
0xE6 0x0119 # LATIN SMALL LETTER E WITH OGONEK
|
|
||||||
0xE7 0x0113 # LATIN SMALL LETTER E WITH MACRON
|
|
||||||
0xE8 0x010D # LATIN SMALL LETTER C WITH CARON
|
|
||||||
0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
|
|
||||||
0xEA 0x017A # LATIN SMALL LETTER Z WITH ACUTE
|
|
||||||
0xEB 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE
|
|
||||||
0xEC 0x0123 # LATIN SMALL LETTER G WITH CEDILLA
|
|
||||||
0xED 0x0137 # LATIN SMALL LETTER K WITH CEDILLA
|
|
||||||
0xEE 0x012B # LATIN SMALL LETTER I WITH MACRON
|
|
||||||
0xEF 0x013C # LATIN SMALL LETTER L WITH CEDILLA
|
|
||||||
0xF0 0x0161 # LATIN SMALL LETTER S WITH CARON
|
|
||||||
0xF1 0x0144 # LATIN SMALL LETTER N WITH ACUTE
|
|
||||||
0xF2 0x0146 # LATIN SMALL LETTER N WITH CEDILLA
|
|
||||||
0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
|
|
||||||
0xF4 0x014D # LATIN SMALL LETTER O WITH MACRON
|
|
||||||
0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
|
|
||||||
0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
|
|
||||||
0xF7 0x00F7 # DIVISION SIGN
|
|
||||||
0xF8 0x0173 # LATIN SMALL LETTER U WITH OGONEK
|
|
||||||
0xF9 0x0142 # LATIN SMALL LETTER L WITH STROKE
|
|
||||||
0xFA 0x015B # LATIN SMALL LETTER S WITH ACUTE
|
|
||||||
0xFB 0x016B # LATIN SMALL LETTER U WITH MACRON
|
|
||||||
0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
|
|
||||||
0xFD 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE
|
|
||||||
0xFE 0x017E # LATIN SMALL LETTER Z WITH CARON
|
|
||||||
0xFF 0x2019 # RIGHT SINGLE QUOTATION MARK
|
|
@ -1,301 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: ISO/IEC 8859-14:1998 to Unicode
|
|
||||||
# Unicode version: 3.0
|
|
||||||
# Table version: 1.0
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 1999 July 27
|
|
||||||
# Authors: Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/>
|
|
||||||
# Ken Whistler <kenw@sybase.com>
|
|
||||||
#
|
|
||||||
# Copyright (c) 1998 - 1999 Unicode, Inc. All Rights reserved.
|
|
||||||
#
|
|
||||||
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
|
|
||||||
# No claims are made as to fitness for any particular purpose. No
|
|
||||||
# warranties of any kind are expressed or implied. The recipient
|
|
||||||
# agrees to determine applicability of information provided. If this
|
|
||||||
# file has been provided on optical media by Unicode, Inc., the sole
|
|
||||||
# remedy for any claim will be exchange of defective media within 90
|
|
||||||
# days of receipt.
|
|
||||||
#
|
|
||||||
# Unicode, Inc. hereby grants the right to freely use the information
|
|
||||||
# supplied in this file in the creation of products supporting the
|
|
||||||
# Unicode Standard, and to make copies of this file in any form for
|
|
||||||
# internal or external distribution as long as this notice remains
|
|
||||||
# attached.
|
|
||||||
#
|
|
||||||
# General notes:
|
|
||||||
#
|
|
||||||
# This table contains the data the Unicode Consortium has on how
|
|
||||||
# ISO/IEC 8859-14:1998 characters map into Unicode.
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the ISO/IEC 8859-14 code (in hex as 0xXX)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in ISO/IEC 8859-14 order.
|
|
||||||
#
|
|
||||||
# Updated versions of this file may be found in:
|
|
||||||
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
|
|
||||||
#
|
|
||||||
# Any comments or problems, contact <errata@unicode.org>
|
|
||||||
# Please note that <errata@unicode.org> is an archival address;
|
|
||||||
# notices will be checked, but do not expect an immediate response.
|
|
||||||
#
|
|
||||||
0x00 0x0000 # NULL
|
|
||||||
0x01 0x0001 # START OF HEADING
|
|
||||||
0x02 0x0002 # START OF TEXT
|
|
||||||
0x03 0x0003 # END OF TEXT
|
|
||||||
0x04 0x0004 # END OF TRANSMISSION
|
|
||||||
0x05 0x0005 # ENQUIRY
|
|
||||||
0x06 0x0006 # ACKNOWLEDGE
|
|
||||||
0x07 0x0007 # BELL
|
|
||||||
0x08 0x0008 # BACKSPACE
|
|
||||||
0x09 0x0009 # HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A # LINE FEED
|
|
||||||
0x0B 0x000B # VERTICAL TABULATION
|
|
||||||
0x0C 0x000C # FORM FEED
|
|
||||||
0x0D 0x000D # CARRIAGE RETURN
|
|
||||||
0x0E 0x000E # SHIFT OUT
|
|
||||||
0x0F 0x000F # SHIFT IN
|
|
||||||
0x10 0x0010 # DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 # DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 # DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 # DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 # DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 # SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 # END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 # CANCEL
|
|
||||||
0x19 0x0019 # END OF MEDIUM
|
|
||||||
0x1A 0x001A # SUBSTITUTE
|
|
||||||
0x1B 0x001B # ESCAPE
|
|
||||||
0x1C 0x001C # FILE SEPARATOR
|
|
||||||
0x1D 0x001D # GROUP SEPARATOR
|
|
||||||
0x1E 0x001E # RECORD SEPARATOR
|
|
||||||
0x1F 0x001F # UNIT SEPARATOR
|
|
||||||
0x20 0x0020 # SPACE
|
|
||||||
0x21 0x0021 # EXCLAMATION MARK
|
|
||||||
0x22 0x0022 # QUOTATION MARK
|
|
||||||
0x23 0x0023 # NUMBER SIGN
|
|
||||||
0x24 0x0024 # DOLLAR SIGN
|
|
||||||
0x25 0x0025 # PERCENT SIGN
|
|
||||||
0x26 0x0026 # AMPERSAND
|
|
||||||
0x27 0x0027 # APOSTROPHE
|
|
||||||
0x28 0x0028 # LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 # RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A # ASTERISK
|
|
||||||
0x2B 0x002B # PLUS SIGN
|
|
||||||
0x2C 0x002C # COMMA
|
|
||||||
0x2D 0x002D # HYPHEN-MINUS
|
|
||||||
0x2E 0x002E # FULL STOP
|
|
||||||
0x2F 0x002F # SOLIDUS
|
|
||||||
0x30 0x0030 # DIGIT ZERO
|
|
||||||
0x31 0x0031 # DIGIT ONE
|
|
||||||
0x32 0x0032 # DIGIT TWO
|
|
||||||
0x33 0x0033 # DIGIT THREE
|
|
||||||
0x34 0x0034 # DIGIT FOUR
|
|
||||||
0x35 0x0035 # DIGIT FIVE
|
|
||||||
0x36 0x0036 # DIGIT SIX
|
|
||||||
0x37 0x0037 # DIGIT SEVEN
|
|
||||||
0x38 0x0038 # DIGIT EIGHT
|
|
||||||
0x39 0x0039 # DIGIT NINE
|
|
||||||
0x3A 0x003A # COLON
|
|
||||||
0x3B 0x003B # SEMICOLON
|
|
||||||
0x3C 0x003C # LESS-THAN SIGN
|
|
||||||
0x3D 0x003D # EQUALS SIGN
|
|
||||||
0x3E 0x003E # GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F # QUESTION MARK
|
|
||||||
0x40 0x0040 # COMMERCIAL AT
|
|
||||||
0x41 0x0041 # LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 # LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 # LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 # LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 # LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 # LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 # LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 # LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 # LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A # LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B # LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C # LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D # LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E # LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F # LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 # LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 # LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 # LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 # LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 # LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 # LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 # LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 # LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 # LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 # LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A # LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B # LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C # REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D # RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E # CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F # LOW LINE
|
|
||||||
0x60 0x0060 # GRAVE ACCENT
|
|
||||||
0x61 0x0061 # LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 # LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 # LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 # LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 # LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 # LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 # LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 # LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 # LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A # LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B # LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C # LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D # LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E # LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F # LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 # LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 # LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 # LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 # LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 # LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 # LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 # LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 # LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 # LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 # LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A # LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B # LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C # VERTICAL LINE
|
|
||||||
0x7D 0x007D # RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E # TILDE
|
|
||||||
0x7F 0x007F # DELETE
|
|
||||||
0x80 0x0080 # <control>
|
|
||||||
0x81 0x0081 # <control>
|
|
||||||
0x82 0x0082 # <control>
|
|
||||||
0x83 0x0083 # <control>
|
|
||||||
0x84 0x0084 # <control>
|
|
||||||
0x85 0x0085 # <control>
|
|
||||||
0x86 0x0086 # <control>
|
|
||||||
0x87 0x0087 # <control>
|
|
||||||
0x88 0x0088 # <control>
|
|
||||||
0x89 0x0089 # <control>
|
|
||||||
0x8A 0x008A # <control>
|
|
||||||
0x8B 0x008B # <control>
|
|
||||||
0x8C 0x008C # <control>
|
|
||||||
0x8D 0x008D # <control>
|
|
||||||
0x8E 0x008E # <control>
|
|
||||||
0x8F 0x008F # <control>
|
|
||||||
0x90 0x0090 # <control>
|
|
||||||
0x91 0x0091 # <control>
|
|
||||||
0x92 0x0092 # <control>
|
|
||||||
0x93 0x0093 # <control>
|
|
||||||
0x94 0x0094 # <control>
|
|
||||||
0x95 0x0095 # <control>
|
|
||||||
0x96 0x0096 # <control>
|
|
||||||
0x97 0x0097 # <control>
|
|
||||||
0x98 0x0098 # <control>
|
|
||||||
0x99 0x0099 # <control>
|
|
||||||
0x9A 0x009A # <control>
|
|
||||||
0x9B 0x009B # <control>
|
|
||||||
0x9C 0x009C # <control>
|
|
||||||
0x9D 0x009D # <control>
|
|
||||||
0x9E 0x009E # <control>
|
|
||||||
0x9F 0x009F # <control>
|
|
||||||
0xA0 0x00A0 # NO-BREAK SPACE
|
|
||||||
0xA1 0x1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE
|
|
||||||
0xA2 0x1E03 # LATIN SMALL LETTER B WITH DOT ABOVE
|
|
||||||
0xA3 0x00A3 # POUND SIGN
|
|
||||||
0xA4 0x010A # LATIN CAPITAL LETTER C WITH DOT ABOVE
|
|
||||||
0xA5 0x010B # LATIN SMALL LETTER C WITH DOT ABOVE
|
|
||||||
0xA6 0x1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE
|
|
||||||
0xA7 0x00A7 # SECTION SIGN
|
|
||||||
0xA8 0x1E80 # LATIN CAPITAL LETTER W WITH GRAVE
|
|
||||||
0xA9 0x00A9 # COPYRIGHT SIGN
|
|
||||||
0xAA 0x1E82 # LATIN CAPITAL LETTER W WITH ACUTE
|
|
||||||
0xAB 0x1E0B # LATIN SMALL LETTER D WITH DOT ABOVE
|
|
||||||
0xAC 0x1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE
|
|
||||||
0xAD 0x00AD # SOFT HYPHEN
|
|
||||||
0xAE 0x00AE # REGISTERED SIGN
|
|
||||||
0xAF 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
|
|
||||||
0xB0 0x1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE
|
|
||||||
0xB1 0x1E1F # LATIN SMALL LETTER F WITH DOT ABOVE
|
|
||||||
0xB2 0x0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE
|
|
||||||
0xB3 0x0121 # LATIN SMALL LETTER G WITH DOT ABOVE
|
|
||||||
0xB4 0x1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE
|
|
||||||
0xB5 0x1E41 # LATIN SMALL LETTER M WITH DOT ABOVE
|
|
||||||
0xB6 0x00B6 # PILCROW SIGN
|
|
||||||
0xB7 0x1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE
|
|
||||||
0xB8 0x1E81 # LATIN SMALL LETTER W WITH GRAVE
|
|
||||||
0xB9 0x1E57 # LATIN SMALL LETTER P WITH DOT ABOVE
|
|
||||||
0xBA 0x1E83 # LATIN SMALL LETTER W WITH ACUTE
|
|
||||||
0xBB 0x1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE
|
|
||||||
0xBC 0x1EF3 # LATIN SMALL LETTER Y WITH GRAVE
|
|
||||||
0xBD 0x1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS
|
|
||||||
0xBE 0x1E85 # LATIN SMALL LETTER W WITH DIAERESIS
|
|
||||||
0xBF 0x1E61 # LATIN SMALL LETTER S WITH DOT ABOVE
|
|
||||||
0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
|
|
||||||
0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
|
|
||||||
0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
|
|
||||||
0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
|
|
||||||
0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
|
|
||||||
0xC6 0x00C6 # LATIN CAPITAL LETTER AE
|
|
||||||
0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
|
|
||||||
0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
|
|
||||||
0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
|
|
||||||
0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
|
|
||||||
0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
|
|
||||||
0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
|
|
||||||
0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
|
|
||||||
0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
|
|
||||||
0xD0 0x0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
|
|
||||||
0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
|
|
||||||
0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
|
|
||||||
0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
|
|
||||||
0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
|
|
||||||
0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
|
|
||||||
0xD7 0x1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE
|
|
||||||
0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
|
|
||||||
0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
|
|
||||||
0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
|
|
||||||
0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
|
|
||||||
0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE
|
|
||||||
0xDE 0x0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
|
|
||||||
0xDF 0x00DF # LATIN SMALL LETTER SHARP S
|
|
||||||
0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
|
|
||||||
0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
|
|
||||||
0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
|
|
||||||
0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
|
|
||||||
0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
|
|
||||||
0xE6 0x00E6 # LATIN SMALL LETTER AE
|
|
||||||
0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
|
|
||||||
0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
|
|
||||||
0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
|
|
||||||
0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
|
|
||||||
0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
|
|
||||||
0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
|
|
||||||
0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
|
|
||||||
0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
|
|
||||||
0xF0 0x0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX
|
|
||||||
0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE
|
|
||||||
0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
|
|
||||||
0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
|
|
||||||
0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
|
|
||||||
0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
|
|
||||||
0xF7 0x1E6B # LATIN SMALL LETTER T WITH DOT ABOVE
|
|
||||||
0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
|
|
||||||
0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
|
|
||||||
0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
|
|
||||||
0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
|
|
||||||
0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE
|
|
||||||
0xFE 0x0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX
|
|
||||||
0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS
|
|
||||||
|
|
@ -1,303 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: ISO/IEC 8859-15:1999 to Unicode
|
|
||||||
# Unicode version: 3.0
|
|
||||||
# Table version: 1.0
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 1999 July 27
|
|
||||||
# Authors: Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/>
|
|
||||||
# Ken Whistler <kenw@sybase.com>
|
|
||||||
#
|
|
||||||
# Copyright (c) 1998 - 1999 Unicode, Inc. All Rights reserved.
|
|
||||||
#
|
|
||||||
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
|
|
||||||
# No claims are made as to fitness for any particular purpose. No
|
|
||||||
# warranties of any kind are expressed or implied. The recipient
|
|
||||||
# agrees to determine applicability of information provided. If this
|
|
||||||
# file has been provided on optical media by Unicode, Inc., the sole
|
|
||||||
# remedy for any claim will be exchange of defective media within 90
|
|
||||||
# days of receipt.
|
|
||||||
#
|
|
||||||
# Unicode, Inc. hereby grants the right to freely use the information
|
|
||||||
# supplied in this file in the creation of products supporting the
|
|
||||||
# Unicode Standard, and to make copies of this file in any form for
|
|
||||||
# internal or external distribution as long as this notice remains
|
|
||||||
# attached.
|
|
||||||
#
|
|
||||||
# General notes:
|
|
||||||
#
|
|
||||||
# This table contains the data the Unicode Consortium has on how
|
|
||||||
# ISO/IEC 8859-15:1999 characters map into Unicode.
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the ISO/IEC 8859-15 code (in hex as 0xXX)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in ISO/IEC 8859-15 order.
|
|
||||||
#
|
|
||||||
# Version history
|
|
||||||
#
|
|
||||||
# Updated versions of this file may be found in:
|
|
||||||
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
|
|
||||||
#
|
|
||||||
# Any comments or problems, contact <errata@unicode.org>
|
|
||||||
# Please note that <errata@unicode.org> is an archival address;
|
|
||||||
# notices will be checked, but do not expect an immediate response.
|
|
||||||
#
|
|
||||||
0x00 0x0000 # NULL
|
|
||||||
0x01 0x0001 # START OF HEADING
|
|
||||||
0x02 0x0002 # START OF TEXT
|
|
||||||
0x03 0x0003 # END OF TEXT
|
|
||||||
0x04 0x0004 # END OF TRANSMISSION
|
|
||||||
0x05 0x0005 # ENQUIRY
|
|
||||||
0x06 0x0006 # ACKNOWLEDGE
|
|
||||||
0x07 0x0007 # BELL
|
|
||||||
0x08 0x0008 # BACKSPACE
|
|
||||||
0x09 0x0009 # HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A # LINE FEED
|
|
||||||
0x0B 0x000B # VERTICAL TABULATION
|
|
||||||
0x0C 0x000C # FORM FEED
|
|
||||||
0x0D 0x000D # CARRIAGE RETURN
|
|
||||||
0x0E 0x000E # SHIFT OUT
|
|
||||||
0x0F 0x000F # SHIFT IN
|
|
||||||
0x10 0x0010 # DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 # DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 # DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 # DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 # DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 # SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 # END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 # CANCEL
|
|
||||||
0x19 0x0019 # END OF MEDIUM
|
|
||||||
0x1A 0x001A # SUBSTITUTE
|
|
||||||
0x1B 0x001B # ESCAPE
|
|
||||||
0x1C 0x001C # FILE SEPARATOR
|
|
||||||
0x1D 0x001D # GROUP SEPARATOR
|
|
||||||
0x1E 0x001E # RECORD SEPARATOR
|
|
||||||
0x1F 0x001F # UNIT SEPARATOR
|
|
||||||
0x20 0x0020 # SPACE
|
|
||||||
0x21 0x0021 # EXCLAMATION MARK
|
|
||||||
0x22 0x0022 # QUOTATION MARK
|
|
||||||
0x23 0x0023 # NUMBER SIGN
|
|
||||||
0x24 0x0024 # DOLLAR SIGN
|
|
||||||
0x25 0x0025 # PERCENT SIGN
|
|
||||||
0x26 0x0026 # AMPERSAND
|
|
||||||
0x27 0x0027 # APOSTROPHE
|
|
||||||
0x28 0x0028 # LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 # RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A # ASTERISK
|
|
||||||
0x2B 0x002B # PLUS SIGN
|
|
||||||
0x2C 0x002C # COMMA
|
|
||||||
0x2D 0x002D # HYPHEN-MINUS
|
|
||||||
0x2E 0x002E # FULL STOP
|
|
||||||
0x2F 0x002F # SOLIDUS
|
|
||||||
0x30 0x0030 # DIGIT ZERO
|
|
||||||
0x31 0x0031 # DIGIT ONE
|
|
||||||
0x32 0x0032 # DIGIT TWO
|
|
||||||
0x33 0x0033 # DIGIT THREE
|
|
||||||
0x34 0x0034 # DIGIT FOUR
|
|
||||||
0x35 0x0035 # DIGIT FIVE
|
|
||||||
0x36 0x0036 # DIGIT SIX
|
|
||||||
0x37 0x0037 # DIGIT SEVEN
|
|
||||||
0x38 0x0038 # DIGIT EIGHT
|
|
||||||
0x39 0x0039 # DIGIT NINE
|
|
||||||
0x3A 0x003A # COLON
|
|
||||||
0x3B 0x003B # SEMICOLON
|
|
||||||
0x3C 0x003C # LESS-THAN SIGN
|
|
||||||
0x3D 0x003D # EQUALS SIGN
|
|
||||||
0x3E 0x003E # GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F # QUESTION MARK
|
|
||||||
0x40 0x0040 # COMMERCIAL AT
|
|
||||||
0x41 0x0041 # LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 # LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 # LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 # LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 # LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 # LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 # LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 # LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 # LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A # LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B # LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C # LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D # LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E # LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F # LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 # LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 # LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 # LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 # LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 # LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 # LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 # LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 # LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 # LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 # LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A # LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B # LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C # REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D # RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E # CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F # LOW LINE
|
|
||||||
0x60 0x0060 # GRAVE ACCENT
|
|
||||||
0x61 0x0061 # LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 # LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 # LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 # LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 # LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 # LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 # LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 # LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 # LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A # LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B # LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C # LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D # LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E # LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F # LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 # LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 # LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 # LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 # LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 # LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 # LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 # LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 # LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 # LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 # LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A # LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B # LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C # VERTICAL LINE
|
|
||||||
0x7D 0x007D # RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E # TILDE
|
|
||||||
0x7F 0x007F # DELETE
|
|
||||||
0x80 0x0080 # <control>
|
|
||||||
0x81 0x0081 # <control>
|
|
||||||
0x82 0x0082 # <control>
|
|
||||||
0x83 0x0083 # <control>
|
|
||||||
0x84 0x0084 # <control>
|
|
||||||
0x85 0x0085 # <control>
|
|
||||||
0x86 0x0086 # <control>
|
|
||||||
0x87 0x0087 # <control>
|
|
||||||
0x88 0x0088 # <control>
|
|
||||||
0x89 0x0089 # <control>
|
|
||||||
0x8A 0x008A # <control>
|
|
||||||
0x8B 0x008B # <control>
|
|
||||||
0x8C 0x008C # <control>
|
|
||||||
0x8D 0x008D # <control>
|
|
||||||
0x8E 0x008E # <control>
|
|
||||||
0x8F 0x008F # <control>
|
|
||||||
0x90 0x0090 # <control>
|
|
||||||
0x91 0x0091 # <control>
|
|
||||||
0x92 0x0092 # <control>
|
|
||||||
0x93 0x0093 # <control>
|
|
||||||
0x94 0x0094 # <control>
|
|
||||||
0x95 0x0095 # <control>
|
|
||||||
0x96 0x0096 # <control>
|
|
||||||
0x97 0x0097 # <control>
|
|
||||||
0x98 0x0098 # <control>
|
|
||||||
0x99 0x0099 # <control>
|
|
||||||
0x9A 0x009A # <control>
|
|
||||||
0x9B 0x009B # <control>
|
|
||||||
0x9C 0x009C # <control>
|
|
||||||
0x9D 0x009D # <control>
|
|
||||||
0x9E 0x009E # <control>
|
|
||||||
0x9F 0x009F # <control>
|
|
||||||
0xA0 0x00A0 # NO-BREAK SPACE
|
|
||||||
0xA1 0x00A1 # INVERTED EXCLAMATION MARK
|
|
||||||
0xA2 0x00A2 # CENT SIGN
|
|
||||||
0xA3 0x00A3 # POUND SIGN
|
|
||||||
0xA4 0x20AC # EURO SIGN
|
|
||||||
0xA5 0x00A5 # YEN SIGN
|
|
||||||
0xA6 0x0160 # LATIN CAPITAL LETTER S WITH CARON
|
|
||||||
0xA7 0x00A7 # SECTION SIGN
|
|
||||||
0xA8 0x0161 # LATIN SMALL LETTER S WITH CARON
|
|
||||||
0xA9 0x00A9 # COPYRIGHT SIGN
|
|
||||||
0xAA 0x00AA # FEMININE ORDINAL INDICATOR
|
|
||||||
0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xAC 0x00AC # NOT SIGN
|
|
||||||
0xAD 0x00AD # SOFT HYPHEN
|
|
||||||
0xAE 0x00AE # REGISTERED SIGN
|
|
||||||
0xAF 0x00AF # MACRON
|
|
||||||
0xB0 0x00B0 # DEGREE SIGN
|
|
||||||
0xB1 0x00B1 # PLUS-MINUS SIGN
|
|
||||||
0xB2 0x00B2 # SUPERSCRIPT TWO
|
|
||||||
0xB3 0x00B3 # SUPERSCRIPT THREE
|
|
||||||
0xB4 0x017D # LATIN CAPITAL LETTER Z WITH CARON
|
|
||||||
0xB5 0x00B5 # MICRO SIGN
|
|
||||||
0xB6 0x00B6 # PILCROW SIGN
|
|
||||||
0xB7 0x00B7 # MIDDLE DOT
|
|
||||||
0xB8 0x017E # LATIN SMALL LETTER Z WITH CARON
|
|
||||||
0xB9 0x00B9 # SUPERSCRIPT ONE
|
|
||||||
0xBA 0x00BA # MASCULINE ORDINAL INDICATOR
|
|
||||||
0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xBC 0x0152 # LATIN CAPITAL LIGATURE OE
|
|
||||||
0xBD 0x0153 # LATIN SMALL LIGATURE OE
|
|
||||||
0xBE 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
|
|
||||||
0xBF 0x00BF # INVERTED QUESTION MARK
|
|
||||||
0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
|
|
||||||
0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
|
|
||||||
0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
|
|
||||||
0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
|
|
||||||
0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
|
|
||||||
0xC6 0x00C6 # LATIN CAPITAL LETTER AE
|
|
||||||
0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
|
|
||||||
0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
|
|
||||||
0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
|
|
||||||
0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
|
|
||||||
0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
|
|
||||||
0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
|
|
||||||
0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
|
|
||||||
0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
|
|
||||||
0xD0 0x00D0 # LATIN CAPITAL LETTER ETH
|
|
||||||
0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
|
|
||||||
0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
|
|
||||||
0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
|
|
||||||
0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
|
|
||||||
0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
|
|
||||||
0xD7 0x00D7 # MULTIPLICATION SIGN
|
|
||||||
0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
|
|
||||||
0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
|
|
||||||
0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
|
|
||||||
0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
|
|
||||||
0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE
|
|
||||||
0xDE 0x00DE # LATIN CAPITAL LETTER THORN
|
|
||||||
0xDF 0x00DF # LATIN SMALL LETTER SHARP S
|
|
||||||
0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
|
|
||||||
0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
|
|
||||||
0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
|
|
||||||
0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
|
|
||||||
0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
|
|
||||||
0xE6 0x00E6 # LATIN SMALL LETTER AE
|
|
||||||
0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
|
|
||||||
0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
|
|
||||||
0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
|
|
||||||
0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
|
|
||||||
0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
|
|
||||||
0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
|
|
||||||
0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
|
|
||||||
0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
|
|
||||||
0xF0 0x00F0 # LATIN SMALL LETTER ETH
|
|
||||||
0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE
|
|
||||||
0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
|
|
||||||
0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
|
|
||||||
0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
|
|
||||||
0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
|
|
||||||
0xF7 0x00F7 # DIVISION SIGN
|
|
||||||
0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
|
|
||||||
0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
|
|
||||||
0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
|
|
||||||
0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
|
|
||||||
0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE
|
|
||||||
0xFE 0x00FE # LATIN SMALL LETTER THORN
|
|
||||||
0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS
|
|
||||||
|
|
@ -1,299 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: ISO/IEC 8859-16:2001 to Unicode
|
|
||||||
# Unicode version: 3.0
|
|
||||||
# Table version: 1.0
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 2001 July 26
|
|
||||||
# Authors: Markus Kuhn <http://www.cl.cam.ac.uk/~mgk25/>
|
|
||||||
#
|
|
||||||
# Copyright (c) 1999-2001 Unicode, Inc. All Rights reserved.
|
|
||||||
#
|
|
||||||
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
|
|
||||||
# No claims are made as to fitness for any particular purpose. No
|
|
||||||
# warranties of any kind are expressed or implied. The recipient
|
|
||||||
# agrees to determine applicability of information provided. If this
|
|
||||||
# file has been provided on optical media by Unicode, Inc., the sole
|
|
||||||
# remedy for any claim will be exchange of defective media within 90
|
|
||||||
# days of receipt.
|
|
||||||
#
|
|
||||||
# Unicode, Inc. hereby grants the right to freely use the information
|
|
||||||
# supplied in this file in the creation of products supporting the
|
|
||||||
# Unicode Standard, and to make copies of this file in any form for
|
|
||||||
# internal or external distribution as long as this notice remains
|
|
||||||
# attached.
|
|
||||||
#
|
|
||||||
# General notes:
|
|
||||||
#
|
|
||||||
# This table contains the data the Unicode Consortium has on how
|
|
||||||
# ISO/IEC 8859-16:2001 characters map into Unicode.
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the ISO/IEC 8859-16 code (in hex as 0xXX)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in ISO/IEC 8859-16 order.
|
|
||||||
#
|
|
||||||
# Updated versions of this file may be found in:
|
|
||||||
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
|
|
||||||
#
|
|
||||||
# Any comments or problems, contact <errata@unicode.org>
|
|
||||||
# Please note that <errata@unicode.org> is an archival address;
|
|
||||||
# notices will be checked, but do not expect an immediate response.
|
|
||||||
#
|
|
||||||
0x00 0x0000 # NULL
|
|
||||||
0x01 0x0001 # START OF HEADING
|
|
||||||
0x02 0x0002 # START OF TEXT
|
|
||||||
0x03 0x0003 # END OF TEXT
|
|
||||||
0x04 0x0004 # END OF TRANSMISSION
|
|
||||||
0x05 0x0005 # ENQUIRY
|
|
||||||
0x06 0x0006 # ACKNOWLEDGE
|
|
||||||
0x07 0x0007 # BELL
|
|
||||||
0x08 0x0008 # BACKSPACE
|
|
||||||
0x09 0x0009 # HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A # LINE FEED
|
|
||||||
0x0B 0x000B # VERTICAL TABULATION
|
|
||||||
0x0C 0x000C # FORM FEED
|
|
||||||
0x0D 0x000D # CARRIAGE RETURN
|
|
||||||
0x0E 0x000E # SHIFT OUT
|
|
||||||
0x0F 0x000F # SHIFT IN
|
|
||||||
0x10 0x0010 # DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 # DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 # DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 # DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 # DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 # SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 # END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 # CANCEL
|
|
||||||
0x19 0x0019 # END OF MEDIUM
|
|
||||||
0x1A 0x001A # SUBSTITUTE
|
|
||||||
0x1B 0x001B # ESCAPE
|
|
||||||
0x1C 0x001C # FILE SEPARATOR
|
|
||||||
0x1D 0x001D # GROUP SEPARATOR
|
|
||||||
0x1E 0x001E # RECORD SEPARATOR
|
|
||||||
0x1F 0x001F # UNIT SEPARATOR
|
|
||||||
0x20 0x0020 # SPACE
|
|
||||||
0x21 0x0021 # EXCLAMATION MARK
|
|
||||||
0x22 0x0022 # QUOTATION MARK
|
|
||||||
0x23 0x0023 # NUMBER SIGN
|
|
||||||
0x24 0x0024 # DOLLAR SIGN
|
|
||||||
0x25 0x0025 # PERCENT SIGN
|
|
||||||
0x26 0x0026 # AMPERSAND
|
|
||||||
0x27 0x0027 # APOSTROPHE
|
|
||||||
0x28 0x0028 # LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 # RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A # ASTERISK
|
|
||||||
0x2B 0x002B # PLUS SIGN
|
|
||||||
0x2C 0x002C # COMMA
|
|
||||||
0x2D 0x002D # HYPHEN-MINUS
|
|
||||||
0x2E 0x002E # FULL STOP
|
|
||||||
0x2F 0x002F # SOLIDUS
|
|
||||||
0x30 0x0030 # DIGIT ZERO
|
|
||||||
0x31 0x0031 # DIGIT ONE
|
|
||||||
0x32 0x0032 # DIGIT TWO
|
|
||||||
0x33 0x0033 # DIGIT THREE
|
|
||||||
0x34 0x0034 # DIGIT FOUR
|
|
||||||
0x35 0x0035 # DIGIT FIVE
|
|
||||||
0x36 0x0036 # DIGIT SIX
|
|
||||||
0x37 0x0037 # DIGIT SEVEN
|
|
||||||
0x38 0x0038 # DIGIT EIGHT
|
|
||||||
0x39 0x0039 # DIGIT NINE
|
|
||||||
0x3A 0x003A # COLON
|
|
||||||
0x3B 0x003B # SEMICOLON
|
|
||||||
0x3C 0x003C # LESS-THAN SIGN
|
|
||||||
0x3D 0x003D # EQUALS SIGN
|
|
||||||
0x3E 0x003E # GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F # QUESTION MARK
|
|
||||||
0x40 0x0040 # COMMERCIAL AT
|
|
||||||
0x41 0x0041 # LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 # LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 # LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 # LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 # LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 # LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 # LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 # LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 # LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A # LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B # LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C # LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D # LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E # LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F # LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 # LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 # LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 # LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 # LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 # LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 # LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 # LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 # LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 # LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 # LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A # LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B # LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C # REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D # RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E # CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F # LOW LINE
|
|
||||||
0x60 0x0060 # GRAVE ACCENT
|
|
||||||
0x61 0x0061 # LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 # LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 # LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 # LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 # LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 # LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 # LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 # LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 # LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A # LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B # LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C # LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D # LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E # LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F # LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 # LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 # LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 # LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 # LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 # LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 # LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 # LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 # LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 # LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 # LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A # LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B # LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C # VERTICAL LINE
|
|
||||||
0x7D 0x007D # RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E # TILDE
|
|
||||||
0x7F 0x007F # DELETE
|
|
||||||
0x80 0x0080 # <control>
|
|
||||||
0x81 0x0081 # <control>
|
|
||||||
0x82 0x0082 # <control>
|
|
||||||
0x83 0x0083 # <control>
|
|
||||||
0x84 0x0084 # <control>
|
|
||||||
0x85 0x0085 # <control>
|
|
||||||
0x86 0x0086 # <control>
|
|
||||||
0x87 0x0087 # <control>
|
|
||||||
0x88 0x0088 # <control>
|
|
||||||
0x89 0x0089 # <control>
|
|
||||||
0x8A 0x008A # <control>
|
|
||||||
0x8B 0x008B # <control>
|
|
||||||
0x8C 0x008C # <control>
|
|
||||||
0x8D 0x008D # <control>
|
|
||||||
0x8E 0x008E # <control>
|
|
||||||
0x8F 0x008F # <control>
|
|
||||||
0x90 0x0090 # <control>
|
|
||||||
0x91 0x0091 # <control>
|
|
||||||
0x92 0x0092 # <control>
|
|
||||||
0x93 0x0093 # <control>
|
|
||||||
0x94 0x0094 # <control>
|
|
||||||
0x95 0x0095 # <control>
|
|
||||||
0x96 0x0096 # <control>
|
|
||||||
0x97 0x0097 # <control>
|
|
||||||
0x98 0x0098 # <control>
|
|
||||||
0x99 0x0099 # <control>
|
|
||||||
0x9A 0x009A # <control>
|
|
||||||
0x9B 0x009B # <control>
|
|
||||||
0x9C 0x009C # <control>
|
|
||||||
0x9D 0x009D # <control>
|
|
||||||
0x9E 0x009E # <control>
|
|
||||||
0x9F 0x009F # <control>
|
|
||||||
0xA0 0x00A0 # NO-BREAK SPACE
|
|
||||||
0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK
|
|
||||||
0xA2 0x0105 # LATIN SMALL LETTER A WITH OGONEK
|
|
||||||
0xA3 0x0141 # LATIN CAPITAL LETTER L WITH STROKE
|
|
||||||
0xA4 0x20AC # EURO SIGN
|
|
||||||
0xA5 0x201E # DOUBLE LOW-9 QUOTATION MARK
|
|
||||||
0xA6 0x0160 # LATIN CAPITAL LETTER S WITH CARON
|
|
||||||
0xA7 0x00A7 # SECTION SIGN
|
|
||||||
0xA8 0x0161 # LATIN SMALL LETTER S WITH CARON
|
|
||||||
0xA9 0x00A9 # COPYRIGHT SIGN
|
|
||||||
0xAA 0x0218 # LATIN CAPITAL LETTER S WITH COMMA BELOW
|
|
||||||
0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xAC 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE
|
|
||||||
0xAD 0x00AD # SOFT HYPHEN
|
|
||||||
0xAE 0x017A # LATIN SMALL LETTER Z WITH ACUTE
|
|
||||||
0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
|
|
||||||
0xB0 0x00B0 # DEGREE SIGN
|
|
||||||
0xB1 0x00B1 # PLUS-MINUS SIGN
|
|
||||||
0xB2 0x010C # LATIN CAPITAL LETTER C WITH CARON
|
|
||||||
0xB3 0x0142 # LATIN SMALL LETTER L WITH STROKE
|
|
||||||
0xB4 0x017D # LATIN CAPITAL LETTER Z WITH CARON
|
|
||||||
0xB5 0x201D # RIGHT DOUBLE QUOTATION MARK
|
|
||||||
0xB6 0x00B6 # PILCROW SIGN
|
|
||||||
0xB7 0x00B7 # MIDDLE DOT
|
|
||||||
0xB8 0x017E # LATIN SMALL LETTER Z WITH CARON
|
|
||||||
0xB9 0x010D # LATIN SMALL LETTER C WITH CARON
|
|
||||||
0xBA 0x0219 # LATIN SMALL LETTER S WITH COMMA BELOW
|
|
||||||
0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xBC 0x0152 # LATIN CAPITAL LIGATURE OE
|
|
||||||
0xBD 0x0153 # LATIN SMALL LIGATURE OE
|
|
||||||
0xBE 0x0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
|
|
||||||
0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE
|
|
||||||
0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
|
|
||||||
0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
|
|
||||||
0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xC3 0x0102 # LATIN CAPITAL LETTER A WITH BREVE
|
|
||||||
0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
|
|
||||||
0xC5 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE
|
|
||||||
0xC6 0x00C6 # LATIN CAPITAL LETTER AE
|
|
||||||
0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
|
|
||||||
0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
|
|
||||||
0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
|
|
||||||
0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
|
|
||||||
0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
|
|
||||||
0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
|
|
||||||
0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
|
|
||||||
0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
|
|
||||||
0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE
|
|
||||||
0xD1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE
|
|
||||||
0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
|
|
||||||
0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
|
|
||||||
0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xD5 0x0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
|
|
||||||
0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
|
|
||||||
0xD7 0x015A # LATIN CAPITAL LETTER S WITH ACUTE
|
|
||||||
0xD8 0x0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
|
|
||||||
0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
|
|
||||||
0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
|
|
||||||
0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
|
|
||||||
0xDD 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK
|
|
||||||
0xDE 0x021A # LATIN CAPITAL LETTER T WITH COMMA BELOW
|
|
||||||
0xDF 0x00DF # LATIN SMALL LETTER SHARP S
|
|
||||||
0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
|
|
||||||
0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
|
|
||||||
0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xE3 0x0103 # LATIN SMALL LETTER A WITH BREVE
|
|
||||||
0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
|
|
||||||
0xE5 0x0107 # LATIN SMALL LETTER C WITH ACUTE
|
|
||||||
0xE6 0x00E6 # LATIN SMALL LETTER AE
|
|
||||||
0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
|
|
||||||
0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
|
|
||||||
0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
|
|
||||||
0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
|
|
||||||
0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
|
|
||||||
0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
|
|
||||||
0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
|
|
||||||
0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
|
|
||||||
0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE
|
|
||||||
0xF1 0x0144 # LATIN SMALL LETTER N WITH ACUTE
|
|
||||||
0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
|
|
||||||
0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
|
|
||||||
0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xF5 0x0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE
|
|
||||||
0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
|
|
||||||
0xF7 0x015B # LATIN SMALL LETTER S WITH ACUTE
|
|
||||||
0xF8 0x0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE
|
|
||||||
0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
|
|
||||||
0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
|
|
||||||
0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
|
|
||||||
0xFD 0x0119 # LATIN SMALL LETTER E WITH OGONEK
|
|
||||||
0xFE 0x021B # LATIN SMALL LETTER T WITH COMMA BELOW
|
|
||||||
0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS
|
|
@ -1,303 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: ISO 8859-2:1999 to Unicode
|
|
||||||
# Unicode version: 3.0
|
|
||||||
# Table version: 1.0
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 1999 July 27
|
|
||||||
# Authors: Ken Whistler <kenw@sybase.com>
|
|
||||||
#
|
|
||||||
# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
|
|
||||||
#
|
|
||||||
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
|
|
||||||
# No claims are made as to fitness for any particular purpose. No
|
|
||||||
# warranties of any kind are expressed or implied. The recipient
|
|
||||||
# agrees to determine applicability of information provided. If this
|
|
||||||
# file has been provided on optical media by Unicode, Inc., the sole
|
|
||||||
# remedy for any claim will be exchange of defective media within 90
|
|
||||||
# days of receipt.
|
|
||||||
#
|
|
||||||
# Unicode, Inc. hereby grants the right to freely use the information
|
|
||||||
# supplied in this file in the creation of products supporting the
|
|
||||||
# Unicode Standard, and to make copies of this file in any form for
|
|
||||||
# internal or external distribution as long as this notice remains
|
|
||||||
# attached.
|
|
||||||
#
|
|
||||||
# General notes:
|
|
||||||
#
|
|
||||||
# This table contains the data the Unicode Consortium has on how
|
|
||||||
# ISO/IEC 8859-2:1999 characters map into Unicode.
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the ISO/IEC 8859-2 code (in hex as 0xXX)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in ISO/IEC 8859-2 order.
|
|
||||||
#
|
|
||||||
# Version history
|
|
||||||
# 1.0 version updates 0.1 version by adding mappings for all
|
|
||||||
# control characters.
|
|
||||||
#
|
|
||||||
# Updated versions of this file may be found in:
|
|
||||||
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
|
|
||||||
#
|
|
||||||
# Any comments or problems, contact <errata@unicode.org>
|
|
||||||
# Please note that <errata@unicode.org> is an archival address;
|
|
||||||
# notices will be checked, but do not expect an immediate response.
|
|
||||||
#
|
|
||||||
0x00 0x0000 # NULL
|
|
||||||
0x01 0x0001 # START OF HEADING
|
|
||||||
0x02 0x0002 # START OF TEXT
|
|
||||||
0x03 0x0003 # END OF TEXT
|
|
||||||
0x04 0x0004 # END OF TRANSMISSION
|
|
||||||
0x05 0x0005 # ENQUIRY
|
|
||||||
0x06 0x0006 # ACKNOWLEDGE
|
|
||||||
0x07 0x0007 # BELL
|
|
||||||
0x08 0x0008 # BACKSPACE
|
|
||||||
0x09 0x0009 # HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A # LINE FEED
|
|
||||||
0x0B 0x000B # VERTICAL TABULATION
|
|
||||||
0x0C 0x000C # FORM FEED
|
|
||||||
0x0D 0x000D # CARRIAGE RETURN
|
|
||||||
0x0E 0x000E # SHIFT OUT
|
|
||||||
0x0F 0x000F # SHIFT IN
|
|
||||||
0x10 0x0010 # DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 # DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 # DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 # DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 # DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 # SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 # END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 # CANCEL
|
|
||||||
0x19 0x0019 # END OF MEDIUM
|
|
||||||
0x1A 0x001A # SUBSTITUTE
|
|
||||||
0x1B 0x001B # ESCAPE
|
|
||||||
0x1C 0x001C # FILE SEPARATOR
|
|
||||||
0x1D 0x001D # GROUP SEPARATOR
|
|
||||||
0x1E 0x001E # RECORD SEPARATOR
|
|
||||||
0x1F 0x001F # UNIT SEPARATOR
|
|
||||||
0x20 0x0020 # SPACE
|
|
||||||
0x21 0x0021 # EXCLAMATION MARK
|
|
||||||
0x22 0x0022 # QUOTATION MARK
|
|
||||||
0x23 0x0023 # NUMBER SIGN
|
|
||||||
0x24 0x0024 # DOLLAR SIGN
|
|
||||||
0x25 0x0025 # PERCENT SIGN
|
|
||||||
0x26 0x0026 # AMPERSAND
|
|
||||||
0x27 0x0027 # APOSTROPHE
|
|
||||||
0x28 0x0028 # LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 # RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A # ASTERISK
|
|
||||||
0x2B 0x002B # PLUS SIGN
|
|
||||||
0x2C 0x002C # COMMA
|
|
||||||
0x2D 0x002D # HYPHEN-MINUS
|
|
||||||
0x2E 0x002E # FULL STOP
|
|
||||||
0x2F 0x002F # SOLIDUS
|
|
||||||
0x30 0x0030 # DIGIT ZERO
|
|
||||||
0x31 0x0031 # DIGIT ONE
|
|
||||||
0x32 0x0032 # DIGIT TWO
|
|
||||||
0x33 0x0033 # DIGIT THREE
|
|
||||||
0x34 0x0034 # DIGIT FOUR
|
|
||||||
0x35 0x0035 # DIGIT FIVE
|
|
||||||
0x36 0x0036 # DIGIT SIX
|
|
||||||
0x37 0x0037 # DIGIT SEVEN
|
|
||||||
0x38 0x0038 # DIGIT EIGHT
|
|
||||||
0x39 0x0039 # DIGIT NINE
|
|
||||||
0x3A 0x003A # COLON
|
|
||||||
0x3B 0x003B # SEMICOLON
|
|
||||||
0x3C 0x003C # LESS-THAN SIGN
|
|
||||||
0x3D 0x003D # EQUALS SIGN
|
|
||||||
0x3E 0x003E # GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F # QUESTION MARK
|
|
||||||
0x40 0x0040 # COMMERCIAL AT
|
|
||||||
0x41 0x0041 # LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 # LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 # LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 # LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 # LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 # LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 # LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 # LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 # LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A # LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B # LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C # LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D # LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E # LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F # LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 # LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 # LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 # LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 # LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 # LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 # LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 # LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 # LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 # LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 # LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A # LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B # LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C # REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D # RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E # CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F # LOW LINE
|
|
||||||
0x60 0x0060 # GRAVE ACCENT
|
|
||||||
0x61 0x0061 # LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 # LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 # LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 # LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 # LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 # LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 # LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 # LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 # LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A # LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B # LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C # LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D # LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E # LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F # LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 # LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 # LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 # LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 # LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 # LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 # LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 # LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 # LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 # LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 # LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A # LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B # LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C # VERTICAL LINE
|
|
||||||
0x7D 0x007D # RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E # TILDE
|
|
||||||
0x7F 0x007F # DELETE
|
|
||||||
0x80 0x0080 # <control>
|
|
||||||
0x81 0x0081 # <control>
|
|
||||||
0x82 0x0082 # <control>
|
|
||||||
0x83 0x0083 # <control>
|
|
||||||
0x84 0x0084 # <control>
|
|
||||||
0x85 0x0085 # <control>
|
|
||||||
0x86 0x0086 # <control>
|
|
||||||
0x87 0x0087 # <control>
|
|
||||||
0x88 0x0088 # <control>
|
|
||||||
0x89 0x0089 # <control>
|
|
||||||
0x8A 0x008A # <control>
|
|
||||||
0x8B 0x008B # <control>
|
|
||||||
0x8C 0x008C # <control>
|
|
||||||
0x8D 0x008D # <control>
|
|
||||||
0x8E 0x008E # <control>
|
|
||||||
0x8F 0x008F # <control>
|
|
||||||
0x90 0x0090 # <control>
|
|
||||||
0x91 0x0091 # <control>
|
|
||||||
0x92 0x0092 # <control>
|
|
||||||
0x93 0x0093 # <control>
|
|
||||||
0x94 0x0094 # <control>
|
|
||||||
0x95 0x0095 # <control>
|
|
||||||
0x96 0x0096 # <control>
|
|
||||||
0x97 0x0097 # <control>
|
|
||||||
0x98 0x0098 # <control>
|
|
||||||
0x99 0x0099 # <control>
|
|
||||||
0x9A 0x009A # <control>
|
|
||||||
0x9B 0x009B # <control>
|
|
||||||
0x9C 0x009C # <control>
|
|
||||||
0x9D 0x009D # <control>
|
|
||||||
0x9E 0x009E # <control>
|
|
||||||
0x9F 0x009F # <control>
|
|
||||||
0xA0 0x00A0 # NO-BREAK SPACE
|
|
||||||
0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK
|
|
||||||
0xA2 0x02D8 # BREVE
|
|
||||||
0xA3 0x0141 # LATIN CAPITAL LETTER L WITH STROKE
|
|
||||||
0xA4 0x00A4 # CURRENCY SIGN
|
|
||||||
0xA5 0x013D # LATIN CAPITAL LETTER L WITH CARON
|
|
||||||
0xA6 0x015A # LATIN CAPITAL LETTER S WITH ACUTE
|
|
||||||
0xA7 0x00A7 # SECTION SIGN
|
|
||||||
0xA8 0x00A8 # DIAERESIS
|
|
||||||
0xA9 0x0160 # LATIN CAPITAL LETTER S WITH CARON
|
|
||||||
0xAA 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA
|
|
||||||
0xAB 0x0164 # LATIN CAPITAL LETTER T WITH CARON
|
|
||||||
0xAC 0x0179 # LATIN CAPITAL LETTER Z WITH ACUTE
|
|
||||||
0xAD 0x00AD # SOFT HYPHEN
|
|
||||||
0xAE 0x017D # LATIN CAPITAL LETTER Z WITH CARON
|
|
||||||
0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
|
|
||||||
0xB0 0x00B0 # DEGREE SIGN
|
|
||||||
0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK
|
|
||||||
0xB2 0x02DB # OGONEK
|
|
||||||
0xB3 0x0142 # LATIN SMALL LETTER L WITH STROKE
|
|
||||||
0xB4 0x00B4 # ACUTE ACCENT
|
|
||||||
0xB5 0x013E # LATIN SMALL LETTER L WITH CARON
|
|
||||||
0xB6 0x015B # LATIN SMALL LETTER S WITH ACUTE
|
|
||||||
0xB7 0x02C7 # CARON
|
|
||||||
0xB8 0x00B8 # CEDILLA
|
|
||||||
0xB9 0x0161 # LATIN SMALL LETTER S WITH CARON
|
|
||||||
0xBA 0x015F # LATIN SMALL LETTER S WITH CEDILLA
|
|
||||||
0xBB 0x0165 # LATIN SMALL LETTER T WITH CARON
|
|
||||||
0xBC 0x017A # LATIN SMALL LETTER Z WITH ACUTE
|
|
||||||
0xBD 0x02DD # DOUBLE ACUTE ACCENT
|
|
||||||
0xBE 0x017E # LATIN SMALL LETTER Z WITH CARON
|
|
||||||
0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE
|
|
||||||
0xC0 0x0154 # LATIN CAPITAL LETTER R WITH ACUTE
|
|
||||||
0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
|
|
||||||
0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xC3 0x0102 # LATIN CAPITAL LETTER A WITH BREVE
|
|
||||||
0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
|
|
||||||
0xC5 0x0139 # LATIN CAPITAL LETTER L WITH ACUTE
|
|
||||||
0xC6 0x0106 # LATIN CAPITAL LETTER C WITH ACUTE
|
|
||||||
0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
|
|
||||||
0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON
|
|
||||||
0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
|
|
||||||
0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK
|
|
||||||
0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
|
|
||||||
0xCC 0x011A # LATIN CAPITAL LETTER E WITH CARON
|
|
||||||
0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
|
|
||||||
0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xCF 0x010E # LATIN CAPITAL LETTER D WITH CARON
|
|
||||||
0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE
|
|
||||||
0xD1 0x0143 # LATIN CAPITAL LETTER N WITH ACUTE
|
|
||||||
0xD2 0x0147 # LATIN CAPITAL LETTER N WITH CARON
|
|
||||||
0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
|
|
||||||
0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xD5 0x0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
|
|
||||||
0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
|
|
||||||
0xD7 0x00D7 # MULTIPLICATION SIGN
|
|
||||||
0xD8 0x0158 # LATIN CAPITAL LETTER R WITH CARON
|
|
||||||
0xD9 0x016E # LATIN CAPITAL LETTER U WITH RING ABOVE
|
|
||||||
0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
|
|
||||||
0xDB 0x0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
|
|
||||||
0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
|
|
||||||
0xDD 0x00DD # LATIN CAPITAL LETTER Y WITH ACUTE
|
|
||||||
0xDE 0x0162 # LATIN CAPITAL LETTER T WITH CEDILLA
|
|
||||||
0xDF 0x00DF # LATIN SMALL LETTER SHARP S
|
|
||||||
0xE0 0x0155 # LATIN SMALL LETTER R WITH ACUTE
|
|
||||||
0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
|
|
||||||
0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xE3 0x0103 # LATIN SMALL LETTER A WITH BREVE
|
|
||||||
0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
|
|
||||||
0xE5 0x013A # LATIN SMALL LETTER L WITH ACUTE
|
|
||||||
0xE6 0x0107 # LATIN SMALL LETTER C WITH ACUTE
|
|
||||||
0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
|
|
||||||
0xE8 0x010D # LATIN SMALL LETTER C WITH CARON
|
|
||||||
0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
|
|
||||||
0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK
|
|
||||||
0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
|
|
||||||
0xEC 0x011B # LATIN SMALL LETTER E WITH CARON
|
|
||||||
0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
|
|
||||||
0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xEF 0x010F # LATIN SMALL LETTER D WITH CARON
|
|
||||||
0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE
|
|
||||||
0xF1 0x0144 # LATIN SMALL LETTER N WITH ACUTE
|
|
||||||
0xF2 0x0148 # LATIN SMALL LETTER N WITH CARON
|
|
||||||
0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
|
|
||||||
0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xF5 0x0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE
|
|
||||||
0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
|
|
||||||
0xF7 0x00F7 # DIVISION SIGN
|
|
||||||
0xF8 0x0159 # LATIN SMALL LETTER R WITH CARON
|
|
||||||
0xF9 0x016F # LATIN SMALL LETTER U WITH RING ABOVE
|
|
||||||
0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
|
|
||||||
0xFB 0x0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE
|
|
||||||
0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
|
|
||||||
0xFD 0x00FD # LATIN SMALL LETTER Y WITH ACUTE
|
|
||||||
0xFE 0x0163 # LATIN SMALL LETTER T WITH CEDILLA
|
|
||||||
0xFF 0x02D9 # DOT ABOVE
|
|
@ -1,296 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: ISO/IEC 8859-3:1999 to Unicode
|
|
||||||
# Unicode version: 3.0
|
|
||||||
# Table version: 1.0
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 1999 July 27
|
|
||||||
# Authors: Ken Whistler <kenw@sybase.com>
|
|
||||||
#
|
|
||||||
# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
|
|
||||||
#
|
|
||||||
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
|
|
||||||
# No claims are made as to fitness for any particular purpose. No
|
|
||||||
# warranties of any kind are expressed or implied. The recipient
|
|
||||||
# agrees to determine applicability of information provided. If this
|
|
||||||
# file has been provided on optical media by Unicode, Inc., the sole
|
|
||||||
# remedy for any claim will be exchange of defective media within 90
|
|
||||||
# days of receipt.
|
|
||||||
#
|
|
||||||
# Unicode, Inc. hereby grants the right to freely use the information
|
|
||||||
# supplied in this file in the creation of products supporting the
|
|
||||||
# Unicode Standard, and to make copies of this file in any form for
|
|
||||||
# internal or external distribution as long as this notice remains
|
|
||||||
# attached.
|
|
||||||
#
|
|
||||||
# General notes:
|
|
||||||
#
|
|
||||||
# This table contains the data the Unicode Consortium has on how
|
|
||||||
# ISO/IEC 8859-3:1999 characters map into Unicode.
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the ISO/IEC 8859-3 code (in hex as 0xXX)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in ISO/IEC 8859-3 order.
|
|
||||||
#
|
|
||||||
# Version history
|
|
||||||
# 1.0 version updates 0.1 version by adding mappings for all
|
|
||||||
# control characters.
|
|
||||||
#
|
|
||||||
# Updated versions of this file may be found in:
|
|
||||||
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
|
|
||||||
#
|
|
||||||
# Any comments or problems, contact <errata@unicode.org>
|
|
||||||
# Please note that <errata@unicode.org> is an archival address;
|
|
||||||
# notices will be checked, but do not expect an immediate response.
|
|
||||||
#
|
|
||||||
0x00 0x0000 # NULL
|
|
||||||
0x01 0x0001 # START OF HEADING
|
|
||||||
0x02 0x0002 # START OF TEXT
|
|
||||||
0x03 0x0003 # END OF TEXT
|
|
||||||
0x04 0x0004 # END OF TRANSMISSION
|
|
||||||
0x05 0x0005 # ENQUIRY
|
|
||||||
0x06 0x0006 # ACKNOWLEDGE
|
|
||||||
0x07 0x0007 # BELL
|
|
||||||
0x08 0x0008 # BACKSPACE
|
|
||||||
0x09 0x0009 # HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A # LINE FEED
|
|
||||||
0x0B 0x000B # VERTICAL TABULATION
|
|
||||||
0x0C 0x000C # FORM FEED
|
|
||||||
0x0D 0x000D # CARRIAGE RETURN
|
|
||||||
0x0E 0x000E # SHIFT OUT
|
|
||||||
0x0F 0x000F # SHIFT IN
|
|
||||||
0x10 0x0010 # DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 # DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 # DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 # DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 # DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 # SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 # END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 # CANCEL
|
|
||||||
0x19 0x0019 # END OF MEDIUM
|
|
||||||
0x1A 0x001A # SUBSTITUTE
|
|
||||||
0x1B 0x001B # ESCAPE
|
|
||||||
0x1C 0x001C # FILE SEPARATOR
|
|
||||||
0x1D 0x001D # GROUP SEPARATOR
|
|
||||||
0x1E 0x001E # RECORD SEPARATOR
|
|
||||||
0x1F 0x001F # UNIT SEPARATOR
|
|
||||||
0x20 0x0020 # SPACE
|
|
||||||
0x21 0x0021 # EXCLAMATION MARK
|
|
||||||
0x22 0x0022 # QUOTATION MARK
|
|
||||||
0x23 0x0023 # NUMBER SIGN
|
|
||||||
0x24 0x0024 # DOLLAR SIGN
|
|
||||||
0x25 0x0025 # PERCENT SIGN
|
|
||||||
0x26 0x0026 # AMPERSAND
|
|
||||||
0x27 0x0027 # APOSTROPHE
|
|
||||||
0x28 0x0028 # LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 # RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A # ASTERISK
|
|
||||||
0x2B 0x002B # PLUS SIGN
|
|
||||||
0x2C 0x002C # COMMA
|
|
||||||
0x2D 0x002D # HYPHEN-MINUS
|
|
||||||
0x2E 0x002E # FULL STOP
|
|
||||||
0x2F 0x002F # SOLIDUS
|
|
||||||
0x30 0x0030 # DIGIT ZERO
|
|
||||||
0x31 0x0031 # DIGIT ONE
|
|
||||||
0x32 0x0032 # DIGIT TWO
|
|
||||||
0x33 0x0033 # DIGIT THREE
|
|
||||||
0x34 0x0034 # DIGIT FOUR
|
|
||||||
0x35 0x0035 # DIGIT FIVE
|
|
||||||
0x36 0x0036 # DIGIT SIX
|
|
||||||
0x37 0x0037 # DIGIT SEVEN
|
|
||||||
0x38 0x0038 # DIGIT EIGHT
|
|
||||||
0x39 0x0039 # DIGIT NINE
|
|
||||||
0x3A 0x003A # COLON
|
|
||||||
0x3B 0x003B # SEMICOLON
|
|
||||||
0x3C 0x003C # LESS-THAN SIGN
|
|
||||||
0x3D 0x003D # EQUALS SIGN
|
|
||||||
0x3E 0x003E # GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F # QUESTION MARK
|
|
||||||
0x40 0x0040 # COMMERCIAL AT
|
|
||||||
0x41 0x0041 # LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 # LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 # LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 # LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 # LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 # LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 # LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 # LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 # LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A # LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B # LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C # LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D # LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E # LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F # LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 # LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 # LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 # LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 # LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 # LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 # LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 # LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 # LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 # LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 # LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A # LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B # LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C # REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D # RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E # CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F # LOW LINE
|
|
||||||
0x60 0x0060 # GRAVE ACCENT
|
|
||||||
0x61 0x0061 # LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 # LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 # LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 # LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 # LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 # LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 # LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 # LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 # LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A # LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B # LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C # LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D # LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E # LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F # LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 # LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 # LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 # LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 # LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 # LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 # LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 # LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 # LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 # LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 # LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A # LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B # LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C # VERTICAL LINE
|
|
||||||
0x7D 0x007D # RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E # TILDE
|
|
||||||
0x7F 0x007F # DELETE
|
|
||||||
0x80 0x0080 # <control>
|
|
||||||
0x81 0x0081 # <control>
|
|
||||||
0x82 0x0082 # <control>
|
|
||||||
0x83 0x0083 # <control>
|
|
||||||
0x84 0x0084 # <control>
|
|
||||||
0x85 0x0085 # <control>
|
|
||||||
0x86 0x0086 # <control>
|
|
||||||
0x87 0x0087 # <control>
|
|
||||||
0x88 0x0088 # <control>
|
|
||||||
0x89 0x0089 # <control>
|
|
||||||
0x8A 0x008A # <control>
|
|
||||||
0x8B 0x008B # <control>
|
|
||||||
0x8C 0x008C # <control>
|
|
||||||
0x8D 0x008D # <control>
|
|
||||||
0x8E 0x008E # <control>
|
|
||||||
0x8F 0x008F # <control>
|
|
||||||
0x90 0x0090 # <control>
|
|
||||||
0x91 0x0091 # <control>
|
|
||||||
0x92 0x0092 # <control>
|
|
||||||
0x93 0x0093 # <control>
|
|
||||||
0x94 0x0094 # <control>
|
|
||||||
0x95 0x0095 # <control>
|
|
||||||
0x96 0x0096 # <control>
|
|
||||||
0x97 0x0097 # <control>
|
|
||||||
0x98 0x0098 # <control>
|
|
||||||
0x99 0x0099 # <control>
|
|
||||||
0x9A 0x009A # <control>
|
|
||||||
0x9B 0x009B # <control>
|
|
||||||
0x9C 0x009C # <control>
|
|
||||||
0x9D 0x009D # <control>
|
|
||||||
0x9E 0x009E # <control>
|
|
||||||
0x9F 0x009F # <control>
|
|
||||||
0xA0 0x00A0 # NO-BREAK SPACE
|
|
||||||
0xA1 0x0126 # LATIN CAPITAL LETTER H WITH STROKE
|
|
||||||
0xA2 0x02D8 # BREVE
|
|
||||||
0xA3 0x00A3 # POUND SIGN
|
|
||||||
0xA4 0x00A4 # CURRENCY SIGN
|
|
||||||
0xA6 0x0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
|
|
||||||
0xA7 0x00A7 # SECTION SIGN
|
|
||||||
0xA8 0x00A8 # DIAERESIS
|
|
||||||
0xA9 0x0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE
|
|
||||||
0xAA 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA
|
|
||||||
0xAB 0x011E # LATIN CAPITAL LETTER G WITH BREVE
|
|
||||||
0xAC 0x0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
|
|
||||||
0xAD 0x00AD # SOFT HYPHEN
|
|
||||||
0xAF 0x017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE
|
|
||||||
0xB0 0x00B0 # DEGREE SIGN
|
|
||||||
0xB1 0x0127 # LATIN SMALL LETTER H WITH STROKE
|
|
||||||
0xB2 0x00B2 # SUPERSCRIPT TWO
|
|
||||||
0xB3 0x00B3 # SUPERSCRIPT THREE
|
|
||||||
0xB4 0x00B4 # ACUTE ACCENT
|
|
||||||
0xB5 0x00B5 # MICRO SIGN
|
|
||||||
0xB6 0x0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX
|
|
||||||
0xB7 0x00B7 # MIDDLE DOT
|
|
||||||
0xB8 0x00B8 # CEDILLA
|
|
||||||
0xB9 0x0131 # LATIN SMALL LETTER DOTLESS I
|
|
||||||
0xBA 0x015F # LATIN SMALL LETTER S WITH CEDILLA
|
|
||||||
0xBB 0x011F # LATIN SMALL LETTER G WITH BREVE
|
|
||||||
0xBC 0x0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX
|
|
||||||
0xBD 0x00BD # VULGAR FRACTION ONE HALF
|
|
||||||
0xBF 0x017C # LATIN SMALL LETTER Z WITH DOT ABOVE
|
|
||||||
0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
|
|
||||||
0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
|
|
||||||
0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
|
|
||||||
0xC5 0x010A # LATIN CAPITAL LETTER C WITH DOT ABOVE
|
|
||||||
0xC6 0x0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
|
|
||||||
0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
|
|
||||||
0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
|
|
||||||
0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
|
|
||||||
0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
|
|
||||||
0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
|
|
||||||
0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
|
|
||||||
0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
|
|
||||||
0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
|
|
||||||
0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
|
|
||||||
0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
|
|
||||||
0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
|
|
||||||
0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xD5 0x0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE
|
|
||||||
0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
|
|
||||||
0xD7 0x00D7 # MULTIPLICATION SIGN
|
|
||||||
0xD8 0x011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
|
|
||||||
0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
|
|
||||||
0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
|
|
||||||
0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
|
|
||||||
0xDD 0x016C # LATIN CAPITAL LETTER U WITH BREVE
|
|
||||||
0xDE 0x015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
|
|
||||||
0xDF 0x00DF # LATIN SMALL LETTER SHARP S
|
|
||||||
0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
|
|
||||||
0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
|
|
||||||
0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
|
|
||||||
0xE5 0x010B # LATIN SMALL LETTER C WITH DOT ABOVE
|
|
||||||
0xE6 0x0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX
|
|
||||||
0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
|
|
||||||
0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
|
|
||||||
0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
|
|
||||||
0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
|
|
||||||
0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
|
|
||||||
0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
|
|
||||||
0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
|
|
||||||
0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
|
|
||||||
0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE
|
|
||||||
0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
|
|
||||||
0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
|
|
||||||
0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xF5 0x0121 # LATIN SMALL LETTER G WITH DOT ABOVE
|
|
||||||
0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
|
|
||||||
0xF7 0x00F7 # DIVISION SIGN
|
|
||||||
0xF8 0x011D # LATIN SMALL LETTER G WITH CIRCUMFLEX
|
|
||||||
0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
|
|
||||||
0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
|
|
||||||
0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
|
|
||||||
0xFD 0x016D # LATIN SMALL LETTER U WITH BREVE
|
|
||||||
0xFE 0x015D # LATIN SMALL LETTER S WITH CIRCUMFLEX
|
|
||||||
0xFF 0x02D9 # DOT ABOVE
|
|
@ -1,303 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: ISO/IEC 8859-4:1998 to Unicode
|
|
||||||
# Unicode version: 3.0
|
|
||||||
# Table version: 1.0
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 1999 July 27
|
|
||||||
# Authors: Ken Whistler <kenw@sybase.com>
|
|
||||||
#
|
|
||||||
# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
|
|
||||||
#
|
|
||||||
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
|
|
||||||
# No claims are made as to fitness for any particular purpose. No
|
|
||||||
# warranties of any kind are expressed or implied. The recipient
|
|
||||||
# agrees to determine applicability of information provided. If this
|
|
||||||
# file has been provided on optical media by Unicode, Inc., the sole
|
|
||||||
# remedy for any claim will be exchange of defective media within 90
|
|
||||||
# days of receipt.
|
|
||||||
#
|
|
||||||
# Unicode, Inc. hereby grants the right to freely use the information
|
|
||||||
# supplied in this file in the creation of products supporting the
|
|
||||||
# Unicode Standard, and to make copies of this file in any form for
|
|
||||||
# internal or external distribution as long as this notice remains
|
|
||||||
# attached.
|
|
||||||
#
|
|
||||||
# General notes:
|
|
||||||
#
|
|
||||||
# This table contains the data the Unicode Consortium has on how
|
|
||||||
# ISO/IEC 8859-4:1998 characters map into Unicode.
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the ISO/IEC 8859-4 code (in hex as 0xXX)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in ISO/IEC 8859-4 order.
|
|
||||||
#
|
|
||||||
# Version history
|
|
||||||
# 1.0 version updates 0.1 version by adding mappings for all
|
|
||||||
# control characters.
|
|
||||||
#
|
|
||||||
# Updated versions of this file may be found in:
|
|
||||||
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
|
|
||||||
#
|
|
||||||
# Any comments or problems, contact <errata@unicode.org>
|
|
||||||
# Please note that <errata@unicode.org> is an archival address;
|
|
||||||
# notices will be checked, but do not expect an immediate response.
|
|
||||||
#
|
|
||||||
0x00 0x0000 # NULL
|
|
||||||
0x01 0x0001 # START OF HEADING
|
|
||||||
0x02 0x0002 # START OF TEXT
|
|
||||||
0x03 0x0003 # END OF TEXT
|
|
||||||
0x04 0x0004 # END OF TRANSMISSION
|
|
||||||
0x05 0x0005 # ENQUIRY
|
|
||||||
0x06 0x0006 # ACKNOWLEDGE
|
|
||||||
0x07 0x0007 # BELL
|
|
||||||
0x08 0x0008 # BACKSPACE
|
|
||||||
0x09 0x0009 # HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A # LINE FEED
|
|
||||||
0x0B 0x000B # VERTICAL TABULATION
|
|
||||||
0x0C 0x000C # FORM FEED
|
|
||||||
0x0D 0x000D # CARRIAGE RETURN
|
|
||||||
0x0E 0x000E # SHIFT OUT
|
|
||||||
0x0F 0x000F # SHIFT IN
|
|
||||||
0x10 0x0010 # DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 # DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 # DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 # DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 # DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 # SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 # END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 # CANCEL
|
|
||||||
0x19 0x0019 # END OF MEDIUM
|
|
||||||
0x1A 0x001A # SUBSTITUTE
|
|
||||||
0x1B 0x001B # ESCAPE
|
|
||||||
0x1C 0x001C # FILE SEPARATOR
|
|
||||||
0x1D 0x001D # GROUP SEPARATOR
|
|
||||||
0x1E 0x001E # RECORD SEPARATOR
|
|
||||||
0x1F 0x001F # UNIT SEPARATOR
|
|
||||||
0x20 0x0020 # SPACE
|
|
||||||
0x21 0x0021 # EXCLAMATION MARK
|
|
||||||
0x22 0x0022 # QUOTATION MARK
|
|
||||||
0x23 0x0023 # NUMBER SIGN
|
|
||||||
0x24 0x0024 # DOLLAR SIGN
|
|
||||||
0x25 0x0025 # PERCENT SIGN
|
|
||||||
0x26 0x0026 # AMPERSAND
|
|
||||||
0x27 0x0027 # APOSTROPHE
|
|
||||||
0x28 0x0028 # LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 # RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A # ASTERISK
|
|
||||||
0x2B 0x002B # PLUS SIGN
|
|
||||||
0x2C 0x002C # COMMA
|
|
||||||
0x2D 0x002D # HYPHEN-MINUS
|
|
||||||
0x2E 0x002E # FULL STOP
|
|
||||||
0x2F 0x002F # SOLIDUS
|
|
||||||
0x30 0x0030 # DIGIT ZERO
|
|
||||||
0x31 0x0031 # DIGIT ONE
|
|
||||||
0x32 0x0032 # DIGIT TWO
|
|
||||||
0x33 0x0033 # DIGIT THREE
|
|
||||||
0x34 0x0034 # DIGIT FOUR
|
|
||||||
0x35 0x0035 # DIGIT FIVE
|
|
||||||
0x36 0x0036 # DIGIT SIX
|
|
||||||
0x37 0x0037 # DIGIT SEVEN
|
|
||||||
0x38 0x0038 # DIGIT EIGHT
|
|
||||||
0x39 0x0039 # DIGIT NINE
|
|
||||||
0x3A 0x003A # COLON
|
|
||||||
0x3B 0x003B # SEMICOLON
|
|
||||||
0x3C 0x003C # LESS-THAN SIGN
|
|
||||||
0x3D 0x003D # EQUALS SIGN
|
|
||||||
0x3E 0x003E # GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F # QUESTION MARK
|
|
||||||
0x40 0x0040 # COMMERCIAL AT
|
|
||||||
0x41 0x0041 # LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 # LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 # LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 # LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 # LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 # LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 # LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 # LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 # LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A # LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B # LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C # LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D # LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E # LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F # LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 # LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 # LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 # LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 # LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 # LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 # LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 # LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 # LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 # LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 # LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A # LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B # LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C # REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D # RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E # CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F # LOW LINE
|
|
||||||
0x60 0x0060 # GRAVE ACCENT
|
|
||||||
0x61 0x0061 # LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 # LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 # LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 # LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 # LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 # LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 # LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 # LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 # LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A # LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B # LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C # LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D # LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E # LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F # LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 # LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 # LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 # LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 # LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 # LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 # LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 # LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 # LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 # LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 # LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A # LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B # LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C # VERTICAL LINE
|
|
||||||
0x7D 0x007D # RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E # TILDE
|
|
||||||
0x7F 0x007F # DELETE
|
|
||||||
0x80 0x0080 # <control>
|
|
||||||
0x81 0x0081 # <control>
|
|
||||||
0x82 0x0082 # <control>
|
|
||||||
0x83 0x0083 # <control>
|
|
||||||
0x84 0x0084 # <control>
|
|
||||||
0x85 0x0085 # <control>
|
|
||||||
0x86 0x0086 # <control>
|
|
||||||
0x87 0x0087 # <control>
|
|
||||||
0x88 0x0088 # <control>
|
|
||||||
0x89 0x0089 # <control>
|
|
||||||
0x8A 0x008A # <control>
|
|
||||||
0x8B 0x008B # <control>
|
|
||||||
0x8C 0x008C # <control>
|
|
||||||
0x8D 0x008D # <control>
|
|
||||||
0x8E 0x008E # <control>
|
|
||||||
0x8F 0x008F # <control>
|
|
||||||
0x90 0x0090 # <control>
|
|
||||||
0x91 0x0091 # <control>
|
|
||||||
0x92 0x0092 # <control>
|
|
||||||
0x93 0x0093 # <control>
|
|
||||||
0x94 0x0094 # <control>
|
|
||||||
0x95 0x0095 # <control>
|
|
||||||
0x96 0x0096 # <control>
|
|
||||||
0x97 0x0097 # <control>
|
|
||||||
0x98 0x0098 # <control>
|
|
||||||
0x99 0x0099 # <control>
|
|
||||||
0x9A 0x009A # <control>
|
|
||||||
0x9B 0x009B # <control>
|
|
||||||
0x9C 0x009C # <control>
|
|
||||||
0x9D 0x009D # <control>
|
|
||||||
0x9E 0x009E # <control>
|
|
||||||
0x9F 0x009F # <control>
|
|
||||||
0xA0 0x00A0 # NO-BREAK SPACE
|
|
||||||
0xA1 0x0104 # LATIN CAPITAL LETTER A WITH OGONEK
|
|
||||||
0xA2 0x0138 # LATIN SMALL LETTER KRA
|
|
||||||
0xA3 0x0156 # LATIN CAPITAL LETTER R WITH CEDILLA
|
|
||||||
0xA4 0x00A4 # CURRENCY SIGN
|
|
||||||
0xA5 0x0128 # LATIN CAPITAL LETTER I WITH TILDE
|
|
||||||
0xA6 0x013B # LATIN CAPITAL LETTER L WITH CEDILLA
|
|
||||||
0xA7 0x00A7 # SECTION SIGN
|
|
||||||
0xA8 0x00A8 # DIAERESIS
|
|
||||||
0xA9 0x0160 # LATIN CAPITAL LETTER S WITH CARON
|
|
||||||
0xAA 0x0112 # LATIN CAPITAL LETTER E WITH MACRON
|
|
||||||
0xAB 0x0122 # LATIN CAPITAL LETTER G WITH CEDILLA
|
|
||||||
0xAC 0x0166 # LATIN CAPITAL LETTER T WITH STROKE
|
|
||||||
0xAD 0x00AD # SOFT HYPHEN
|
|
||||||
0xAE 0x017D # LATIN CAPITAL LETTER Z WITH CARON
|
|
||||||
0xAF 0x00AF # MACRON
|
|
||||||
0xB0 0x00B0 # DEGREE SIGN
|
|
||||||
0xB1 0x0105 # LATIN SMALL LETTER A WITH OGONEK
|
|
||||||
0xB2 0x02DB # OGONEK
|
|
||||||
0xB3 0x0157 # LATIN SMALL LETTER R WITH CEDILLA
|
|
||||||
0xB4 0x00B4 # ACUTE ACCENT
|
|
||||||
0xB5 0x0129 # LATIN SMALL LETTER I WITH TILDE
|
|
||||||
0xB6 0x013C # LATIN SMALL LETTER L WITH CEDILLA
|
|
||||||
0xB7 0x02C7 # CARON
|
|
||||||
0xB8 0x00B8 # CEDILLA
|
|
||||||
0xB9 0x0161 # LATIN SMALL LETTER S WITH CARON
|
|
||||||
0xBA 0x0113 # LATIN SMALL LETTER E WITH MACRON
|
|
||||||
0xBB 0x0123 # LATIN SMALL LETTER G WITH CEDILLA
|
|
||||||
0xBC 0x0167 # LATIN SMALL LETTER T WITH STROKE
|
|
||||||
0xBD 0x014A # LATIN CAPITAL LETTER ENG
|
|
||||||
0xBE 0x017E # LATIN SMALL LETTER Z WITH CARON
|
|
||||||
0xBF 0x014B # LATIN SMALL LETTER ENG
|
|
||||||
0xC0 0x0100 # LATIN CAPITAL LETTER A WITH MACRON
|
|
||||||
0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
|
|
||||||
0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
|
|
||||||
0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
|
|
||||||
0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
|
|
||||||
0xC6 0x00C6 # LATIN CAPITAL LETTER AE
|
|
||||||
0xC7 0x012E # LATIN CAPITAL LETTER I WITH OGONEK
|
|
||||||
0xC8 0x010C # LATIN CAPITAL LETTER C WITH CARON
|
|
||||||
0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
|
|
||||||
0xCA 0x0118 # LATIN CAPITAL LETTER E WITH OGONEK
|
|
||||||
0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
|
|
||||||
0xCC 0x0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE
|
|
||||||
0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
|
|
||||||
0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xCF 0x012A # LATIN CAPITAL LETTER I WITH MACRON
|
|
||||||
0xD0 0x0110 # LATIN CAPITAL LETTER D WITH STROKE
|
|
||||||
0xD1 0x0145 # LATIN CAPITAL LETTER N WITH CEDILLA
|
|
||||||
0xD2 0x014C # LATIN CAPITAL LETTER O WITH MACRON
|
|
||||||
0xD3 0x0136 # LATIN CAPITAL LETTER K WITH CEDILLA
|
|
||||||
0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
|
|
||||||
0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
|
|
||||||
0xD7 0x00D7 # MULTIPLICATION SIGN
|
|
||||||
0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
|
|
||||||
0xD9 0x0172 # LATIN CAPITAL LETTER U WITH OGONEK
|
|
||||||
0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
|
|
||||||
0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
|
|
||||||
0xDD 0x0168 # LATIN CAPITAL LETTER U WITH TILDE
|
|
||||||
0xDE 0x016A # LATIN CAPITAL LETTER U WITH MACRON
|
|
||||||
0xDF 0x00DF # LATIN SMALL LETTER SHARP S
|
|
||||||
0xE0 0x0101 # LATIN SMALL LETTER A WITH MACRON
|
|
||||||
0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
|
|
||||||
0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
|
|
||||||
0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
|
|
||||||
0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
|
|
||||||
0xE6 0x00E6 # LATIN SMALL LETTER AE
|
|
||||||
0xE7 0x012F # LATIN SMALL LETTER I WITH OGONEK
|
|
||||||
0xE8 0x010D # LATIN SMALL LETTER C WITH CARON
|
|
||||||
0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
|
|
||||||
0xEA 0x0119 # LATIN SMALL LETTER E WITH OGONEK
|
|
||||||
0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
|
|
||||||
0xEC 0x0117 # LATIN SMALL LETTER E WITH DOT ABOVE
|
|
||||||
0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
|
|
||||||
0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xEF 0x012B # LATIN SMALL LETTER I WITH MACRON
|
|
||||||
0xF0 0x0111 # LATIN SMALL LETTER D WITH STROKE
|
|
||||||
0xF1 0x0146 # LATIN SMALL LETTER N WITH CEDILLA
|
|
||||||
0xF2 0x014D # LATIN SMALL LETTER O WITH MACRON
|
|
||||||
0xF3 0x0137 # LATIN SMALL LETTER K WITH CEDILLA
|
|
||||||
0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
|
|
||||||
0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
|
|
||||||
0xF7 0x00F7 # DIVISION SIGN
|
|
||||||
0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
|
|
||||||
0xF9 0x0173 # LATIN SMALL LETTER U WITH OGONEK
|
|
||||||
0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
|
|
||||||
0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
|
|
||||||
0xFD 0x0169 # LATIN SMALL LETTER U WITH TILDE
|
|
||||||
0xFE 0x016B # LATIN SMALL LETTER U WITH MACRON
|
|
||||||
0xFF 0x02D9 # DOT ABOVE
|
|
@ -1,303 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: ISO 8859-5:1999 to Unicode
|
|
||||||
# Unicode version: 3.0
|
|
||||||
# Table version: 1.0
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 1999 July 27
|
|
||||||
# Authors: Ken Whistler <kenw@sybase.com>
|
|
||||||
#
|
|
||||||
# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
|
|
||||||
#
|
|
||||||
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
|
|
||||||
# No claims are made as to fitness for any particular purpose. No
|
|
||||||
# warranties of any kind are expressed or implied. The recipient
|
|
||||||
# agrees to determine applicability of information provided. If this
|
|
||||||
# file has been provided on optical media by Unicode, Inc., the sole
|
|
||||||
# remedy for any claim will be exchange of defective media within 90
|
|
||||||
# days of receipt.
|
|
||||||
#
|
|
||||||
# Unicode, Inc. hereby grants the right to freely use the information
|
|
||||||
# supplied in this file in the creation of products supporting the
|
|
||||||
# Unicode Standard, and to make copies of this file in any form for
|
|
||||||
# internal or external distribution as long as this notice remains
|
|
||||||
# attached.
|
|
||||||
#
|
|
||||||
# General notes:
|
|
||||||
#
|
|
||||||
# This table contains the data the Unicode Consortium has on how
|
|
||||||
# ISO/IEC 8859-5:1999 characters map into Unicode.
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the ISO/IEC 8859-5 code (in hex as 0xXX)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in ISO/IEC 8859-5 order.
|
|
||||||
#
|
|
||||||
# Version history
|
|
||||||
# 1.0 version updates 0.1 version by adding mappings for all
|
|
||||||
# control characters.
|
|
||||||
#
|
|
||||||
# Updated versions of this file may be found in:
|
|
||||||
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
|
|
||||||
#
|
|
||||||
# Any comments or problems, contact <errata@unicode.org>
|
|
||||||
# Please note that <errata@unicode.org> is an archival address;
|
|
||||||
# notices will be checked, but do not expect an immediate response.
|
|
||||||
#
|
|
||||||
0x00 0x0000 # NULL
|
|
||||||
0x01 0x0001 # START OF HEADING
|
|
||||||
0x02 0x0002 # START OF TEXT
|
|
||||||
0x03 0x0003 # END OF TEXT
|
|
||||||
0x04 0x0004 # END OF TRANSMISSION
|
|
||||||
0x05 0x0005 # ENQUIRY
|
|
||||||
0x06 0x0006 # ACKNOWLEDGE
|
|
||||||
0x07 0x0007 # BELL
|
|
||||||
0x08 0x0008 # BACKSPACE
|
|
||||||
0x09 0x0009 # HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A # LINE FEED
|
|
||||||
0x0B 0x000B # VERTICAL TABULATION
|
|
||||||
0x0C 0x000C # FORM FEED
|
|
||||||
0x0D 0x000D # CARRIAGE RETURN
|
|
||||||
0x0E 0x000E # SHIFT OUT
|
|
||||||
0x0F 0x000F # SHIFT IN
|
|
||||||
0x10 0x0010 # DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 # DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 # DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 # DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 # DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 # SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 # END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 # CANCEL
|
|
||||||
0x19 0x0019 # END OF MEDIUM
|
|
||||||
0x1A 0x001A # SUBSTITUTE
|
|
||||||
0x1B 0x001B # ESCAPE
|
|
||||||
0x1C 0x001C # FILE SEPARATOR
|
|
||||||
0x1D 0x001D # GROUP SEPARATOR
|
|
||||||
0x1E 0x001E # RECORD SEPARATOR
|
|
||||||
0x1F 0x001F # UNIT SEPARATOR
|
|
||||||
0x20 0x0020 # SPACE
|
|
||||||
0x21 0x0021 # EXCLAMATION MARK
|
|
||||||
0x22 0x0022 # QUOTATION MARK
|
|
||||||
0x23 0x0023 # NUMBER SIGN
|
|
||||||
0x24 0x0024 # DOLLAR SIGN
|
|
||||||
0x25 0x0025 # PERCENT SIGN
|
|
||||||
0x26 0x0026 # AMPERSAND
|
|
||||||
0x27 0x0027 # APOSTROPHE
|
|
||||||
0x28 0x0028 # LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 # RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A # ASTERISK
|
|
||||||
0x2B 0x002B # PLUS SIGN
|
|
||||||
0x2C 0x002C # COMMA
|
|
||||||
0x2D 0x002D # HYPHEN-MINUS
|
|
||||||
0x2E 0x002E # FULL STOP
|
|
||||||
0x2F 0x002F # SOLIDUS
|
|
||||||
0x30 0x0030 # DIGIT ZERO
|
|
||||||
0x31 0x0031 # DIGIT ONE
|
|
||||||
0x32 0x0032 # DIGIT TWO
|
|
||||||
0x33 0x0033 # DIGIT THREE
|
|
||||||
0x34 0x0034 # DIGIT FOUR
|
|
||||||
0x35 0x0035 # DIGIT FIVE
|
|
||||||
0x36 0x0036 # DIGIT SIX
|
|
||||||
0x37 0x0037 # DIGIT SEVEN
|
|
||||||
0x38 0x0038 # DIGIT EIGHT
|
|
||||||
0x39 0x0039 # DIGIT NINE
|
|
||||||
0x3A 0x003A # COLON
|
|
||||||
0x3B 0x003B # SEMICOLON
|
|
||||||
0x3C 0x003C # LESS-THAN SIGN
|
|
||||||
0x3D 0x003D # EQUALS SIGN
|
|
||||||
0x3E 0x003E # GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F # QUESTION MARK
|
|
||||||
0x40 0x0040 # COMMERCIAL AT
|
|
||||||
0x41 0x0041 # LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 # LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 # LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 # LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 # LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 # LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 # LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 # LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 # LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A # LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B # LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C # LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D # LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E # LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F # LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 # LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 # LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 # LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 # LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 # LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 # LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 # LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 # LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 # LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 # LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A # LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B # LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C # REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D # RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E # CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F # LOW LINE
|
|
||||||
0x60 0x0060 # GRAVE ACCENT
|
|
||||||
0x61 0x0061 # LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 # LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 # LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 # LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 # LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 # LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 # LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 # LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 # LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A # LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B # LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C # LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D # LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E # LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F # LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 # LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 # LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 # LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 # LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 # LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 # LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 # LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 # LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 # LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 # LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A # LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B # LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C # VERTICAL LINE
|
|
||||||
0x7D 0x007D # RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E # TILDE
|
|
||||||
0x7F 0x007F # DELETE
|
|
||||||
0x80 0x0080 # <control>
|
|
||||||
0x81 0x0081 # <control>
|
|
||||||
0x82 0x0082 # <control>
|
|
||||||
0x83 0x0083 # <control>
|
|
||||||
0x84 0x0084 # <control>
|
|
||||||
0x85 0x0085 # <control>
|
|
||||||
0x86 0x0086 # <control>
|
|
||||||
0x87 0x0087 # <control>
|
|
||||||
0x88 0x0088 # <control>
|
|
||||||
0x89 0x0089 # <control>
|
|
||||||
0x8A 0x008A # <control>
|
|
||||||
0x8B 0x008B # <control>
|
|
||||||
0x8C 0x008C # <control>
|
|
||||||
0x8D 0x008D # <control>
|
|
||||||
0x8E 0x008E # <control>
|
|
||||||
0x8F 0x008F # <control>
|
|
||||||
0x90 0x0090 # <control>
|
|
||||||
0x91 0x0091 # <control>
|
|
||||||
0x92 0x0092 # <control>
|
|
||||||
0x93 0x0093 # <control>
|
|
||||||
0x94 0x0094 # <control>
|
|
||||||
0x95 0x0095 # <control>
|
|
||||||
0x96 0x0096 # <control>
|
|
||||||
0x97 0x0097 # <control>
|
|
||||||
0x98 0x0098 # <control>
|
|
||||||
0x99 0x0099 # <control>
|
|
||||||
0x9A 0x009A # <control>
|
|
||||||
0x9B 0x009B # <control>
|
|
||||||
0x9C 0x009C # <control>
|
|
||||||
0x9D 0x009D # <control>
|
|
||||||
0x9E 0x009E # <control>
|
|
||||||
0x9F 0x009F # <control>
|
|
||||||
0xA0 0x00A0 # NO-BREAK SPACE
|
|
||||||
0xA1 0x0401 # CYRILLIC CAPITAL LETTER IO
|
|
||||||
0xA2 0x0402 # CYRILLIC CAPITAL LETTER DJE
|
|
||||||
0xA3 0x0403 # CYRILLIC CAPITAL LETTER GJE
|
|
||||||
0xA4 0x0404 # CYRILLIC CAPITAL LETTER UKRAINIAN IE
|
|
||||||
0xA5 0x0405 # CYRILLIC CAPITAL LETTER DZE
|
|
||||||
0xA6 0x0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
|
|
||||||
0xA7 0x0407 # CYRILLIC CAPITAL LETTER YI
|
|
||||||
0xA8 0x0408 # CYRILLIC CAPITAL LETTER JE
|
|
||||||
0xA9 0x0409 # CYRILLIC CAPITAL LETTER LJE
|
|
||||||
0xAA 0x040A # CYRILLIC CAPITAL LETTER NJE
|
|
||||||
0xAB 0x040B # CYRILLIC CAPITAL LETTER TSHE
|
|
||||||
0xAC 0x040C # CYRILLIC CAPITAL LETTER KJE
|
|
||||||
0xAD 0x00AD # SOFT HYPHEN
|
|
||||||
0xAE 0x040E # CYRILLIC CAPITAL LETTER SHORT U
|
|
||||||
0xAF 0x040F # CYRILLIC CAPITAL LETTER DZHE
|
|
||||||
0xB0 0x0410 # CYRILLIC CAPITAL LETTER A
|
|
||||||
0xB1 0x0411 # CYRILLIC CAPITAL LETTER BE
|
|
||||||
0xB2 0x0412 # CYRILLIC CAPITAL LETTER VE
|
|
||||||
0xB3 0x0413 # CYRILLIC CAPITAL LETTER GHE
|
|
||||||
0xB4 0x0414 # CYRILLIC CAPITAL LETTER DE
|
|
||||||
0xB5 0x0415 # CYRILLIC CAPITAL LETTER IE
|
|
||||||
0xB6 0x0416 # CYRILLIC CAPITAL LETTER ZHE
|
|
||||||
0xB7 0x0417 # CYRILLIC CAPITAL LETTER ZE
|
|
||||||
0xB8 0x0418 # CYRILLIC CAPITAL LETTER I
|
|
||||||
0xB9 0x0419 # CYRILLIC CAPITAL LETTER SHORT I
|
|
||||||
0xBA 0x041A # CYRILLIC CAPITAL LETTER KA
|
|
||||||
0xBB 0x041B # CYRILLIC CAPITAL LETTER EL
|
|
||||||
0xBC 0x041C # CYRILLIC CAPITAL LETTER EM
|
|
||||||
0xBD 0x041D # CYRILLIC CAPITAL LETTER EN
|
|
||||||
0xBE 0x041E # CYRILLIC CAPITAL LETTER O
|
|
||||||
0xBF 0x041F # CYRILLIC CAPITAL LETTER PE
|
|
||||||
0xC0 0x0420 # CYRILLIC CAPITAL LETTER ER
|
|
||||||
0xC1 0x0421 # CYRILLIC CAPITAL LETTER ES
|
|
||||||
0xC2 0x0422 # CYRILLIC CAPITAL LETTER TE
|
|
||||||
0xC3 0x0423 # CYRILLIC CAPITAL LETTER U
|
|
||||||
0xC4 0x0424 # CYRILLIC CAPITAL LETTER EF
|
|
||||||
0xC5 0x0425 # CYRILLIC CAPITAL LETTER HA
|
|
||||||
0xC6 0x0426 # CYRILLIC CAPITAL LETTER TSE
|
|
||||||
0xC7 0x0427 # CYRILLIC CAPITAL LETTER CHE
|
|
||||||
0xC8 0x0428 # CYRILLIC CAPITAL LETTER SHA
|
|
||||||
0xC9 0x0429 # CYRILLIC CAPITAL LETTER SHCHA
|
|
||||||
0xCA 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN
|
|
||||||
0xCB 0x042B # CYRILLIC CAPITAL LETTER YERU
|
|
||||||
0xCC 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN
|
|
||||||
0xCD 0x042D # CYRILLIC CAPITAL LETTER E
|
|
||||||
0xCE 0x042E # CYRILLIC CAPITAL LETTER YU
|
|
||||||
0xCF 0x042F # CYRILLIC CAPITAL LETTER YA
|
|
||||||
0xD0 0x0430 # CYRILLIC SMALL LETTER A
|
|
||||||
0xD1 0x0431 # CYRILLIC SMALL LETTER BE
|
|
||||||
0xD2 0x0432 # CYRILLIC SMALL LETTER VE
|
|
||||||
0xD3 0x0433 # CYRILLIC SMALL LETTER GHE
|
|
||||||
0xD4 0x0434 # CYRILLIC SMALL LETTER DE
|
|
||||||
0xD5 0x0435 # CYRILLIC SMALL LETTER IE
|
|
||||||
0xD6 0x0436 # CYRILLIC SMALL LETTER ZHE
|
|
||||||
0xD7 0x0437 # CYRILLIC SMALL LETTER ZE
|
|
||||||
0xD8 0x0438 # CYRILLIC SMALL LETTER I
|
|
||||||
0xD9 0x0439 # CYRILLIC SMALL LETTER SHORT I
|
|
||||||
0xDA 0x043A # CYRILLIC SMALL LETTER KA
|
|
||||||
0xDB 0x043B # CYRILLIC SMALL LETTER EL
|
|
||||||
0xDC 0x043C # CYRILLIC SMALL LETTER EM
|
|
||||||
0xDD 0x043D # CYRILLIC SMALL LETTER EN
|
|
||||||
0xDE 0x043E # CYRILLIC SMALL LETTER O
|
|
||||||
0xDF 0x043F # CYRILLIC SMALL LETTER PE
|
|
||||||
0xE0 0x0440 # CYRILLIC SMALL LETTER ER
|
|
||||||
0xE1 0x0441 # CYRILLIC SMALL LETTER ES
|
|
||||||
0xE2 0x0442 # CYRILLIC SMALL LETTER TE
|
|
||||||
0xE3 0x0443 # CYRILLIC SMALL LETTER U
|
|
||||||
0xE4 0x0444 # CYRILLIC SMALL LETTER EF
|
|
||||||
0xE5 0x0445 # CYRILLIC SMALL LETTER HA
|
|
||||||
0xE6 0x0446 # CYRILLIC SMALL LETTER TSE
|
|
||||||
0xE7 0x0447 # CYRILLIC SMALL LETTER CHE
|
|
||||||
0xE8 0x0448 # CYRILLIC SMALL LETTER SHA
|
|
||||||
0xE9 0x0449 # CYRILLIC SMALL LETTER SHCHA
|
|
||||||
0xEA 0x044A # CYRILLIC SMALL LETTER HARD SIGN
|
|
||||||
0xEB 0x044B # CYRILLIC SMALL LETTER YERU
|
|
||||||
0xEC 0x044C # CYRILLIC SMALL LETTER SOFT SIGN
|
|
||||||
0xED 0x044D # CYRILLIC SMALL LETTER E
|
|
||||||
0xEE 0x044E # CYRILLIC SMALL LETTER YU
|
|
||||||
0xEF 0x044F # CYRILLIC SMALL LETTER YA
|
|
||||||
0xF0 0x2116 # NUMERO SIGN
|
|
||||||
0xF1 0x0451 # CYRILLIC SMALL LETTER IO
|
|
||||||
0xF2 0x0452 # CYRILLIC SMALL LETTER DJE
|
|
||||||
0xF3 0x0453 # CYRILLIC SMALL LETTER GJE
|
|
||||||
0xF4 0x0454 # CYRILLIC SMALL LETTER UKRAINIAN IE
|
|
||||||
0xF5 0x0455 # CYRILLIC SMALL LETTER DZE
|
|
||||||
0xF6 0x0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
|
|
||||||
0xF7 0x0457 # CYRILLIC SMALL LETTER YI
|
|
||||||
0xF8 0x0458 # CYRILLIC SMALL LETTER JE
|
|
||||||
0xF9 0x0459 # CYRILLIC SMALL LETTER LJE
|
|
||||||
0xFA 0x045A # CYRILLIC SMALL LETTER NJE
|
|
||||||
0xFB 0x045B # CYRILLIC SMALL LETTER TSHE
|
|
||||||
0xFC 0x045C # CYRILLIC SMALL LETTER KJE
|
|
||||||
0xFD 0x00A7 # SECTION SIGN
|
|
||||||
0xFE 0x045E # CYRILLIC SMALL LETTER SHORT U
|
|
||||||
0xFF 0x045F # CYRILLIC SMALL LETTER DZHE
|
|
@ -1,260 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: ISO 8859-6:1999 to Unicode
|
|
||||||
# Unicode version: 3.0
|
|
||||||
# Table version: 1.0
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 1999 July 27
|
|
||||||
# Authors: Ken Whistler <kenw@sybase.com>
|
|
||||||
#
|
|
||||||
# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
|
|
||||||
#
|
|
||||||
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
|
|
||||||
# No claims are made as to fitness for any particular purpose. No
|
|
||||||
# warranties of any kind are expressed or implied. The recipient
|
|
||||||
# agrees to determine applicability of information provided. If this
|
|
||||||
# file has been provided on optical media by Unicode, Inc., the sole
|
|
||||||
# remedy for any claim will be exchange of defective media within 90
|
|
||||||
# days of receipt.
|
|
||||||
#
|
|
||||||
# Unicode, Inc. hereby grants the right to freely use the information
|
|
||||||
# supplied in this file in the creation of products supporting the
|
|
||||||
# Unicode Standard, and to make copies of this file in any form for
|
|
||||||
# internal or external distribution as long as this notice remains
|
|
||||||
# attached.
|
|
||||||
#
|
|
||||||
# General notes:
|
|
||||||
#
|
|
||||||
# This table contains the data the Unicode Consortium has on how
|
|
||||||
# ISO/IEC 8859-6:1999 characters map into Unicode.
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the ISO/IEC 8859-6 code (in hex as 0xXX)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in ISO/IEC 8859-6 order.
|
|
||||||
#
|
|
||||||
# Version history
|
|
||||||
# 1.0 version updates 0.1 version by adding mappings for all
|
|
||||||
# control characters.
|
|
||||||
# 0x30..0x39 remapped to the ASCII digits (U+0030..U+0039) instead
|
|
||||||
# of the Arabic digits (U+0660..U+0669).
|
|
||||||
#
|
|
||||||
# Updated versions of this file may be found in:
|
|
||||||
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
|
|
||||||
#
|
|
||||||
# Any comments or problems, contact <errata@unicode.org>
|
|
||||||
# Please note that <errata@unicode.org> is an archival address;
|
|
||||||
# notices will be checked, but do not expect an immediate response.
|
|
||||||
#
|
|
||||||
0x00 0x0000 # NULL
|
|
||||||
0x01 0x0001 # START OF HEADING
|
|
||||||
0x02 0x0002 # START OF TEXT
|
|
||||||
0x03 0x0003 # END OF TEXT
|
|
||||||
0x04 0x0004 # END OF TRANSMISSION
|
|
||||||
0x05 0x0005 # ENQUIRY
|
|
||||||
0x06 0x0006 # ACKNOWLEDGE
|
|
||||||
0x07 0x0007 # BELL
|
|
||||||
0x08 0x0008 # BACKSPACE
|
|
||||||
0x09 0x0009 # HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A # LINE FEED
|
|
||||||
0x0B 0x000B # VERTICAL TABULATION
|
|
||||||
0x0C 0x000C # FORM FEED
|
|
||||||
0x0D 0x000D # CARRIAGE RETURN
|
|
||||||
0x0E 0x000E # SHIFT OUT
|
|
||||||
0x0F 0x000F # SHIFT IN
|
|
||||||
0x10 0x0010 # DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 # DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 # DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 # DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 # DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 # SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 # END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 # CANCEL
|
|
||||||
0x19 0x0019 # END OF MEDIUM
|
|
||||||
0x1A 0x001A # SUBSTITUTE
|
|
||||||
0x1B 0x001B # ESCAPE
|
|
||||||
0x1C 0x001C # FILE SEPARATOR
|
|
||||||
0x1D 0x001D # GROUP SEPARATOR
|
|
||||||
0x1E 0x001E # RECORD SEPARATOR
|
|
||||||
0x1F 0x001F # UNIT SEPARATOR
|
|
||||||
0x20 0x0020 # SPACE
|
|
||||||
0x21 0x0021 # EXCLAMATION MARK
|
|
||||||
0x22 0x0022 # QUOTATION MARK
|
|
||||||
0x23 0x0023 # NUMBER SIGN
|
|
||||||
0x24 0x0024 # DOLLAR SIGN
|
|
||||||
0x25 0x0025 # PERCENT SIGN
|
|
||||||
0x26 0x0026 # AMPERSAND
|
|
||||||
0x27 0x0027 # APOSTROPHE
|
|
||||||
0x28 0x0028 # LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 # RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A # ASTERISK
|
|
||||||
0x2B 0x002B # PLUS SIGN
|
|
||||||
0x2C 0x002C # COMMA
|
|
||||||
0x2D 0x002D # HYPHEN-MINUS
|
|
||||||
0x2E 0x002E # FULL STOP
|
|
||||||
0x2F 0x002F # SOLIDUS
|
|
||||||
0x30 0x0030 # DIGIT ZERO
|
|
||||||
0x31 0x0031 # DIGIT ONE
|
|
||||||
0x32 0x0032 # DIGIT TWO
|
|
||||||
0x33 0x0033 # DIGIT THREE
|
|
||||||
0x34 0x0034 # DIGIT FOUR
|
|
||||||
0x35 0x0035 # DIGIT FIVE
|
|
||||||
0x36 0x0036 # DIGIT SIX
|
|
||||||
0x37 0x0037 # DIGIT SEVEN
|
|
||||||
0x38 0x0038 # DIGIT EIGHT
|
|
||||||
0x39 0x0039 # DIGIT NINE
|
|
||||||
0x3A 0x003A # COLON
|
|
||||||
0x3B 0x003B # SEMICOLON
|
|
||||||
0x3C 0x003C # LESS-THAN SIGN
|
|
||||||
0x3D 0x003D # EQUALS SIGN
|
|
||||||
0x3E 0x003E # GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F # QUESTION MARK
|
|
||||||
0x40 0x0040 # COMMERCIAL AT
|
|
||||||
0x41 0x0041 # LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 # LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 # LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 # LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 # LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 # LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 # LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 # LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 # LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A # LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B # LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C # LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D # LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E # LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F # LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 # LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 # LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 # LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 # LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 # LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 # LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 # LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 # LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 # LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 # LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A # LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B # LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C # REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D # RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E # CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F # LOW LINE
|
|
||||||
0x60 0x0060 # GRAVE ACCENT
|
|
||||||
0x61 0x0061 # LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 # LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 # LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 # LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 # LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 # LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 # LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 # LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 # LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A # LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B # LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C # LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D # LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E # LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F # LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 # LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 # LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 # LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 # LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 # LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 # LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 # LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 # LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 # LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 # LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A # LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B # LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C # VERTICAL LINE
|
|
||||||
0x7D 0x007D # RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E # TILDE
|
|
||||||
0x7F 0x007F # DELETE
|
|
||||||
0x80 0x0080 # <control>
|
|
||||||
0x81 0x0081 # <control>
|
|
||||||
0x82 0x0082 # <control>
|
|
||||||
0x83 0x0083 # <control>
|
|
||||||
0x84 0x0084 # <control>
|
|
||||||
0x85 0x0085 # <control>
|
|
||||||
0x86 0x0086 # <control>
|
|
||||||
0x87 0x0087 # <control>
|
|
||||||
0x88 0x0088 # <control>
|
|
||||||
0x89 0x0089 # <control>
|
|
||||||
0x8A 0x008A # <control>
|
|
||||||
0x8B 0x008B # <control>
|
|
||||||
0x8C 0x008C # <control>
|
|
||||||
0x8D 0x008D # <control>
|
|
||||||
0x8E 0x008E # <control>
|
|
||||||
0x8F 0x008F # <control>
|
|
||||||
0x90 0x0090 # <control>
|
|
||||||
0x91 0x0091 # <control>
|
|
||||||
0x92 0x0092 # <control>
|
|
||||||
0x93 0x0093 # <control>
|
|
||||||
0x94 0x0094 # <control>
|
|
||||||
0x95 0x0095 # <control>
|
|
||||||
0x96 0x0096 # <control>
|
|
||||||
0x97 0x0097 # <control>
|
|
||||||
0x98 0x0098 # <control>
|
|
||||||
0x99 0x0099 # <control>
|
|
||||||
0x9A 0x009A # <control>
|
|
||||||
0x9B 0x009B # <control>
|
|
||||||
0x9C 0x009C # <control>
|
|
||||||
0x9D 0x009D # <control>
|
|
||||||
0x9E 0x009E # <control>
|
|
||||||
0x9F 0x009F # <control>
|
|
||||||
0xA0 0x00A0 # NO-BREAK SPACE
|
|
||||||
0xA4 0x00A4 # CURRENCY SIGN
|
|
||||||
0xAC 0x060C # ARABIC COMMA
|
|
||||||
0xAD 0x00AD # SOFT HYPHEN
|
|
||||||
0xBB 0x061B # ARABIC SEMICOLON
|
|
||||||
0xBF 0x061F # ARABIC QUESTION MARK
|
|
||||||
0xC1 0x0621 # ARABIC LETTER HAMZA
|
|
||||||
0xC2 0x0622 # ARABIC LETTER ALEF WITH MADDA ABOVE
|
|
||||||
0xC3 0x0623 # ARABIC LETTER ALEF WITH HAMZA ABOVE
|
|
||||||
0xC4 0x0624 # ARABIC LETTER WAW WITH HAMZA ABOVE
|
|
||||||
0xC5 0x0625 # ARABIC LETTER ALEF WITH HAMZA BELOW
|
|
||||||
0xC6 0x0626 # ARABIC LETTER YEH WITH HAMZA ABOVE
|
|
||||||
0xC7 0x0627 # ARABIC LETTER ALEF
|
|
||||||
0xC8 0x0628 # ARABIC LETTER BEH
|
|
||||||
0xC9 0x0629 # ARABIC LETTER TEH MARBUTA
|
|
||||||
0xCA 0x062A # ARABIC LETTER TEH
|
|
||||||
0xCB 0x062B # ARABIC LETTER THEH
|
|
||||||
0xCC 0x062C # ARABIC LETTER JEEM
|
|
||||||
0xCD 0x062D # ARABIC LETTER HAH
|
|
||||||
0xCE 0x062E # ARABIC LETTER KHAH
|
|
||||||
0xCF 0x062F # ARABIC LETTER DAL
|
|
||||||
0xD0 0x0630 # ARABIC LETTER THAL
|
|
||||||
0xD1 0x0631 # ARABIC LETTER REH
|
|
||||||
0xD2 0x0632 # ARABIC LETTER ZAIN
|
|
||||||
0xD3 0x0633 # ARABIC LETTER SEEN
|
|
||||||
0xD4 0x0634 # ARABIC LETTER SHEEN
|
|
||||||
0xD5 0x0635 # ARABIC LETTER SAD
|
|
||||||
0xD6 0x0636 # ARABIC LETTER DAD
|
|
||||||
0xD7 0x0637 # ARABIC LETTER TAH
|
|
||||||
0xD8 0x0638 # ARABIC LETTER ZAH
|
|
||||||
0xD9 0x0639 # ARABIC LETTER AIN
|
|
||||||
0xDA 0x063A # ARABIC LETTER GHAIN
|
|
||||||
0xE0 0x0640 # ARABIC TATWEEL
|
|
||||||
0xE1 0x0641 # ARABIC LETTER FEH
|
|
||||||
0xE2 0x0642 # ARABIC LETTER QAF
|
|
||||||
0xE3 0x0643 # ARABIC LETTER KAF
|
|
||||||
0xE4 0x0644 # ARABIC LETTER LAM
|
|
||||||
0xE5 0x0645 # ARABIC LETTER MEEM
|
|
||||||
0xE6 0x0646 # ARABIC LETTER NOON
|
|
||||||
0xE7 0x0647 # ARABIC LETTER HEH
|
|
||||||
0xE8 0x0648 # ARABIC LETTER WAW
|
|
||||||
0xE9 0x0649 # ARABIC LETTER ALEF MAKSURA
|
|
||||||
0xEA 0x064A # ARABIC LETTER YEH
|
|
||||||
0xEB 0x064B # ARABIC FATHATAN
|
|
||||||
0xEC 0x064C # ARABIC DAMMATAN
|
|
||||||
0xED 0x064D # ARABIC KASRATAN
|
|
||||||
0xEE 0x064E # ARABIC FATHA
|
|
||||||
0xEF 0x064F # ARABIC DAMMA
|
|
||||||
0xF0 0x0650 # ARABIC KASRA
|
|
||||||
0xF1 0x0651 # ARABIC SHADDA
|
|
||||||
0xF2 0x0652 # ARABIC SUKUN
|
|
@ -1,308 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: ISO 8859-7:2003 to Unicode
|
|
||||||
# Unicode version: 4.0
|
|
||||||
# Table version: 2.0
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 2003-Nov-12
|
|
||||||
# Authors: Ken Whistler <kenw@sybase.com>
|
|
||||||
#
|
|
||||||
# Copyright (c) 1991-2003 Unicode, Inc. All Rights reserved.
|
|
||||||
#
|
|
||||||
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
|
|
||||||
# No claims are made as to fitness for any particular purpose. No
|
|
||||||
# warranties of any kind are expressed or implied. The recipient
|
|
||||||
# agrees to determine applicability of information provided. If this
|
|
||||||
# file has been provided on optical media by Unicode, Inc., the sole
|
|
||||||
# remedy for any claim will be exchange of defective media within 90
|
|
||||||
# days of receipt.
|
|
||||||
#
|
|
||||||
# Unicode, Inc. hereby grants the right to freely use the information
|
|
||||||
# supplied in this file in the creation of products supporting the
|
|
||||||
# Unicode Standard, and to make copies of this file in any form for
|
|
||||||
# internal or external distribution as long as this notice remains
|
|
||||||
# attached.
|
|
||||||
#
|
|
||||||
# General notes:
|
|
||||||
#
|
|
||||||
# This table contains the data the Unicode Consortium has on how
|
|
||||||
# ISO 8859-7:2003 characters map into Unicode.
|
|
||||||
#
|
|
||||||
# ISO 8859-7:1987 is equivalent to ISO-IR-126, ELOT 928,
|
|
||||||
# and ECMA 118. ISO 8859-7:2003 adds two currency signs
|
|
||||||
# and one other character not in the earlier standard.
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the ISO 8859-7 code (in hex as 0xXX)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in ISO 8859-7 order.
|
|
||||||
#
|
|
||||||
# Version history
|
|
||||||
# 1.0 version updates 0.1 version by adding mappings for all
|
|
||||||
# control characters.
|
|
||||||
# Remap 0xA1 to U+2018 (instead of 0x02BD) to match text of 8859-7
|
|
||||||
# Remap 0xA2 to U+2019 (instead of 0x02BC) to match text of 8859-7
|
|
||||||
#
|
|
||||||
# 2.0 version updates 1.0 version by adding mappings for the
|
|
||||||
# three newly added characters 0xA4, 0xA5, 0xAA.
|
|
||||||
#
|
|
||||||
# Updated versions of this file may be found in:
|
|
||||||
# <http://www.unicode.org/Public/MAPPINGS/>
|
|
||||||
#
|
|
||||||
# Any comments or problems, contact the Unicode Consortium at:
|
|
||||||
# <http://www.unicode.org/reporting.html>
|
|
||||||
#
|
|
||||||
0x00 0x0000 # NULL
|
|
||||||
0x01 0x0001 # START OF HEADING
|
|
||||||
0x02 0x0002 # START OF TEXT
|
|
||||||
0x03 0x0003 # END OF TEXT
|
|
||||||
0x04 0x0004 # END OF TRANSMISSION
|
|
||||||
0x05 0x0005 # ENQUIRY
|
|
||||||
0x06 0x0006 # ACKNOWLEDGE
|
|
||||||
0x07 0x0007 # BELL
|
|
||||||
0x08 0x0008 # BACKSPACE
|
|
||||||
0x09 0x0009 # HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A # LINE FEED
|
|
||||||
0x0B 0x000B # VERTICAL TABULATION
|
|
||||||
0x0C 0x000C # FORM FEED
|
|
||||||
0x0D 0x000D # CARRIAGE RETURN
|
|
||||||
0x0E 0x000E # SHIFT OUT
|
|
||||||
0x0F 0x000F # SHIFT IN
|
|
||||||
0x10 0x0010 # DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 # DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 # DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 # DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 # DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 # SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 # END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 # CANCEL
|
|
||||||
0x19 0x0019 # END OF MEDIUM
|
|
||||||
0x1A 0x001A # SUBSTITUTE
|
|
||||||
0x1B 0x001B # ESCAPE
|
|
||||||
0x1C 0x001C # FILE SEPARATOR
|
|
||||||
0x1D 0x001D # GROUP SEPARATOR
|
|
||||||
0x1E 0x001E # RECORD SEPARATOR
|
|
||||||
0x1F 0x001F # UNIT SEPARATOR
|
|
||||||
0x20 0x0020 # SPACE
|
|
||||||
0x21 0x0021 # EXCLAMATION MARK
|
|
||||||
0x22 0x0022 # QUOTATION MARK
|
|
||||||
0x23 0x0023 # NUMBER SIGN
|
|
||||||
0x24 0x0024 # DOLLAR SIGN
|
|
||||||
0x25 0x0025 # PERCENT SIGN
|
|
||||||
0x26 0x0026 # AMPERSAND
|
|
||||||
0x27 0x0027 # APOSTROPHE
|
|
||||||
0x28 0x0028 # LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 # RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A # ASTERISK
|
|
||||||
0x2B 0x002B # PLUS SIGN
|
|
||||||
0x2C 0x002C # COMMA
|
|
||||||
0x2D 0x002D # HYPHEN-MINUS
|
|
||||||
0x2E 0x002E # FULL STOP
|
|
||||||
0x2F 0x002F # SOLIDUS
|
|
||||||
0x30 0x0030 # DIGIT ZERO
|
|
||||||
0x31 0x0031 # DIGIT ONE
|
|
||||||
0x32 0x0032 # DIGIT TWO
|
|
||||||
0x33 0x0033 # DIGIT THREE
|
|
||||||
0x34 0x0034 # DIGIT FOUR
|
|
||||||
0x35 0x0035 # DIGIT FIVE
|
|
||||||
0x36 0x0036 # DIGIT SIX
|
|
||||||
0x37 0x0037 # DIGIT SEVEN
|
|
||||||
0x38 0x0038 # DIGIT EIGHT
|
|
||||||
0x39 0x0039 # DIGIT NINE
|
|
||||||
0x3A 0x003A # COLON
|
|
||||||
0x3B 0x003B # SEMICOLON
|
|
||||||
0x3C 0x003C # LESS-THAN SIGN
|
|
||||||
0x3D 0x003D # EQUALS SIGN
|
|
||||||
0x3E 0x003E # GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F # QUESTION MARK
|
|
||||||
0x40 0x0040 # COMMERCIAL AT
|
|
||||||
0x41 0x0041 # LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 # LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 # LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 # LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 # LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 # LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 # LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 # LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 # LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A # LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B # LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C # LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D # LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E # LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F # LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 # LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 # LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 # LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 # LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 # LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 # LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 # LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 # LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 # LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 # LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A # LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B # LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C # REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D # RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E # CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F # LOW LINE
|
|
||||||
0x60 0x0060 # GRAVE ACCENT
|
|
||||||
0x61 0x0061 # LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 # LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 # LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 # LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 # LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 # LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 # LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 # LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 # LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A # LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B # LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C # LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D # LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E # LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F # LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 # LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 # LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 # LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 # LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 # LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 # LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 # LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 # LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 # LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 # LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A # LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B # LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C # VERTICAL LINE
|
|
||||||
0x7D 0x007D # RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E # TILDE
|
|
||||||
0x7F 0x007F # DELETE
|
|
||||||
0x80 0x0080 # <control>
|
|
||||||
0x81 0x0081 # <control>
|
|
||||||
0x82 0x0082 # <control>
|
|
||||||
0x83 0x0083 # <control>
|
|
||||||
0x84 0x0084 # <control>
|
|
||||||
0x85 0x0085 # <control>
|
|
||||||
0x86 0x0086 # <control>
|
|
||||||
0x87 0x0087 # <control>
|
|
||||||
0x88 0x0088 # <control>
|
|
||||||
0x89 0x0089 # <control>
|
|
||||||
0x8A 0x008A # <control>
|
|
||||||
0x8B 0x008B # <control>
|
|
||||||
0x8C 0x008C # <control>
|
|
||||||
0x8D 0x008D # <control>
|
|
||||||
0x8E 0x008E # <control>
|
|
||||||
0x8F 0x008F # <control>
|
|
||||||
0x90 0x0090 # <control>
|
|
||||||
0x91 0x0091 # <control>
|
|
||||||
0x92 0x0092 # <control>
|
|
||||||
0x93 0x0093 # <control>
|
|
||||||
0x94 0x0094 # <control>
|
|
||||||
0x95 0x0095 # <control>
|
|
||||||
0x96 0x0096 # <control>
|
|
||||||
0x97 0x0097 # <control>
|
|
||||||
0x98 0x0098 # <control>
|
|
||||||
0x99 0x0099 # <control>
|
|
||||||
0x9A 0x009A # <control>
|
|
||||||
0x9B 0x009B # <control>
|
|
||||||
0x9C 0x009C # <control>
|
|
||||||
0x9D 0x009D # <control>
|
|
||||||
0x9E 0x009E # <control>
|
|
||||||
0x9F 0x009F # <control>
|
|
||||||
0xA0 0x00A0 # NO-BREAK SPACE
|
|
||||||
0xA1 0x2018 # LEFT SINGLE QUOTATION MARK
|
|
||||||
0xA2 0x2019 # RIGHT SINGLE QUOTATION MARK
|
|
||||||
0xA3 0x00A3 # POUND SIGN
|
|
||||||
0xA4 0x20AC # EURO SIGN
|
|
||||||
0xA5 0x20AF # DRACHMA SIGN
|
|
||||||
0xA6 0x00A6 # BROKEN BAR
|
|
||||||
0xA7 0x00A7 # SECTION SIGN
|
|
||||||
0xA8 0x00A8 # DIAERESIS
|
|
||||||
0xA9 0x00A9 # COPYRIGHT SIGN
|
|
||||||
0xAA 0x037A # GREEK YPOGEGRAMMENI
|
|
||||||
0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xAC 0x00AC # NOT SIGN
|
|
||||||
0xAD 0x00AD # SOFT HYPHEN
|
|
||||||
0xAF 0x2015 # HORIZONTAL BAR
|
|
||||||
0xB0 0x00B0 # DEGREE SIGN
|
|
||||||
0xB1 0x00B1 # PLUS-MINUS SIGN
|
|
||||||
0xB2 0x00B2 # SUPERSCRIPT TWO
|
|
||||||
0xB3 0x00B3 # SUPERSCRIPT THREE
|
|
||||||
0xB4 0x0384 # GREEK TONOS
|
|
||||||
0xB5 0x0385 # GREEK DIALYTIKA TONOS
|
|
||||||
0xB6 0x0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS
|
|
||||||
0xB7 0x00B7 # MIDDLE DOT
|
|
||||||
0xB8 0x0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS
|
|
||||||
0xB9 0x0389 # GREEK CAPITAL LETTER ETA WITH TONOS
|
|
||||||
0xBA 0x038A # GREEK CAPITAL LETTER IOTA WITH TONOS
|
|
||||||
0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xBC 0x038C # GREEK CAPITAL LETTER OMICRON WITH TONOS
|
|
||||||
0xBD 0x00BD # VULGAR FRACTION ONE HALF
|
|
||||||
0xBE 0x038E # GREEK CAPITAL LETTER UPSILON WITH TONOS
|
|
||||||
0xBF 0x038F # GREEK CAPITAL LETTER OMEGA WITH TONOS
|
|
||||||
0xC0 0x0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
|
|
||||||
0xC1 0x0391 # GREEK CAPITAL LETTER ALPHA
|
|
||||||
0xC2 0x0392 # GREEK CAPITAL LETTER BETA
|
|
||||||
0xC3 0x0393 # GREEK CAPITAL LETTER GAMMA
|
|
||||||
0xC4 0x0394 # GREEK CAPITAL LETTER DELTA
|
|
||||||
0xC5 0x0395 # GREEK CAPITAL LETTER EPSILON
|
|
||||||
0xC6 0x0396 # GREEK CAPITAL LETTER ZETA
|
|
||||||
0xC7 0x0397 # GREEK CAPITAL LETTER ETA
|
|
||||||
0xC8 0x0398 # GREEK CAPITAL LETTER THETA
|
|
||||||
0xC9 0x0399 # GREEK CAPITAL LETTER IOTA
|
|
||||||
0xCA 0x039A # GREEK CAPITAL LETTER KAPPA
|
|
||||||
0xCB 0x039B # GREEK CAPITAL LETTER LAMDA
|
|
||||||
0xCC 0x039C # GREEK CAPITAL LETTER MU
|
|
||||||
0xCD 0x039D # GREEK CAPITAL LETTER NU
|
|
||||||
0xCE 0x039E # GREEK CAPITAL LETTER XI
|
|
||||||
0xCF 0x039F # GREEK CAPITAL LETTER OMICRON
|
|
||||||
0xD0 0x03A0 # GREEK CAPITAL LETTER PI
|
|
||||||
0xD1 0x03A1 # GREEK CAPITAL LETTER RHO
|
|
||||||
0xD3 0x03A3 # GREEK CAPITAL LETTER SIGMA
|
|
||||||
0xD4 0x03A4 # GREEK CAPITAL LETTER TAU
|
|
||||||
0xD5 0x03A5 # GREEK CAPITAL LETTER UPSILON
|
|
||||||
0xD6 0x03A6 # GREEK CAPITAL LETTER PHI
|
|
||||||
0xD7 0x03A7 # GREEK CAPITAL LETTER CHI
|
|
||||||
0xD8 0x03A8 # GREEK CAPITAL LETTER PSI
|
|
||||||
0xD9 0x03A9 # GREEK CAPITAL LETTER OMEGA
|
|
||||||
0xDA 0x03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
|
|
||||||
0xDB 0x03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
|
|
||||||
0xDC 0x03AC # GREEK SMALL LETTER ALPHA WITH TONOS
|
|
||||||
0xDD 0x03AD # GREEK SMALL LETTER EPSILON WITH TONOS
|
|
||||||
0xDE 0x03AE # GREEK SMALL LETTER ETA WITH TONOS
|
|
||||||
0xDF 0x03AF # GREEK SMALL LETTER IOTA WITH TONOS
|
|
||||||
0xE0 0x03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
|
|
||||||
0xE1 0x03B1 # GREEK SMALL LETTER ALPHA
|
|
||||||
0xE2 0x03B2 # GREEK SMALL LETTER BETA
|
|
||||||
0xE3 0x03B3 # GREEK SMALL LETTER GAMMA
|
|
||||||
0xE4 0x03B4 # GREEK SMALL LETTER DELTA
|
|
||||||
0xE5 0x03B5 # GREEK SMALL LETTER EPSILON
|
|
||||||
0xE6 0x03B6 # GREEK SMALL LETTER ZETA
|
|
||||||
0xE7 0x03B7 # GREEK SMALL LETTER ETA
|
|
||||||
0xE8 0x03B8 # GREEK SMALL LETTER THETA
|
|
||||||
0xE9 0x03B9 # GREEK SMALL LETTER IOTA
|
|
||||||
0xEA 0x03BA # GREEK SMALL LETTER KAPPA
|
|
||||||
0xEB 0x03BB # GREEK SMALL LETTER LAMDA
|
|
||||||
0xEC 0x03BC # GREEK SMALL LETTER MU
|
|
||||||
0xED 0x03BD # GREEK SMALL LETTER NU
|
|
||||||
0xEE 0x03BE # GREEK SMALL LETTER XI
|
|
||||||
0xEF 0x03BF # GREEK SMALL LETTER OMICRON
|
|
||||||
0xF0 0x03C0 # GREEK SMALL LETTER PI
|
|
||||||
0xF1 0x03C1 # GREEK SMALL LETTER RHO
|
|
||||||
0xF2 0x03C2 # GREEK SMALL LETTER FINAL SIGMA
|
|
||||||
0xF3 0x03C3 # GREEK SMALL LETTER SIGMA
|
|
||||||
0xF4 0x03C4 # GREEK SMALL LETTER TAU
|
|
||||||
0xF5 0x03C5 # GREEK SMALL LETTER UPSILON
|
|
||||||
0xF6 0x03C6 # GREEK SMALL LETTER PHI
|
|
||||||
0xF7 0x03C7 # GREEK SMALL LETTER CHI
|
|
||||||
0xF8 0x03C8 # GREEK SMALL LETTER PSI
|
|
||||||
0xF9 0x03C9 # GREEK SMALL LETTER OMEGA
|
|
||||||
0xFA 0x03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA
|
|
||||||
0xFB 0x03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA
|
|
||||||
0xFC 0x03CC # GREEK SMALL LETTER OMICRON WITH TONOS
|
|
||||||
0xFD 0x03CD # GREEK SMALL LETTER UPSILON WITH TONOS
|
|
||||||
0xFE 0x03CE # GREEK SMALL LETTER OMEGA WITH TONOS
|
|
@ -1,270 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: ISO/IEC 8859-8:1999 to Unicode
|
|
||||||
# Unicode version: 3.0
|
|
||||||
# Table version: 1.1
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 2000-Jan-03
|
|
||||||
# Authors: Ken Whistler <kenw@sybase.com>
|
|
||||||
#
|
|
||||||
# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
|
|
||||||
#
|
|
||||||
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
|
|
||||||
# No claims are made as to fitness for any particular purpose. No
|
|
||||||
# warranties of any kind are expressed or implied. The recipient
|
|
||||||
# agrees to determine applicability of information provided. If this
|
|
||||||
# file has been provided on optical media by Unicode, Inc., the sole
|
|
||||||
# remedy for any claim will be exchange of defective media within 90
|
|
||||||
# days of receipt.
|
|
||||||
#
|
|
||||||
# Unicode, Inc. hereby grants the right to freely use the information
|
|
||||||
# supplied in this file in the creation of products supporting the
|
|
||||||
# Unicode Standard, and to make copies of this file in any form for
|
|
||||||
# internal or external distribution as long as this notice remains
|
|
||||||
# attached.
|
|
||||||
#
|
|
||||||
# General notes:
|
|
||||||
#
|
|
||||||
# This table contains the data the Unicode Consortium has on how
|
|
||||||
# ISO/IEC 8859-8:1999 characters map into Unicode.
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the ISO/IEC 8859-8 code (in hex as 0xXX)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in ISO/IEC 8859-8 order.
|
|
||||||
#
|
|
||||||
# Version history
|
|
||||||
# 1.0 version updates 0.1 version by adding mappings for all
|
|
||||||
# control characters.
|
|
||||||
# 1.1 version updates to the published 8859-8:1999, correcting
|
|
||||||
# the mapping of 0xAF and adding mappings for LRM and RLM.
|
|
||||||
#
|
|
||||||
# Updated versions of this file may be found in:
|
|
||||||
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
|
|
||||||
#
|
|
||||||
# Any comments or problems, contact <errata@unicode.org>
|
|
||||||
# Please note that <errata@unicode.org> is an archival address;
|
|
||||||
# notices will be checked, but do not expect an immediate response.
|
|
||||||
#
|
|
||||||
0x00 0x0000 # NULL
|
|
||||||
0x01 0x0001 # START OF HEADING
|
|
||||||
0x02 0x0002 # START OF TEXT
|
|
||||||
0x03 0x0003 # END OF TEXT
|
|
||||||
0x04 0x0004 # END OF TRANSMISSION
|
|
||||||
0x05 0x0005 # ENQUIRY
|
|
||||||
0x06 0x0006 # ACKNOWLEDGE
|
|
||||||
0x07 0x0007 # BELL
|
|
||||||
0x08 0x0008 # BACKSPACE
|
|
||||||
0x09 0x0009 # HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A # LINE FEED
|
|
||||||
0x0B 0x000B # VERTICAL TABULATION
|
|
||||||
0x0C 0x000C # FORM FEED
|
|
||||||
0x0D 0x000D # CARRIAGE RETURN
|
|
||||||
0x0E 0x000E # SHIFT OUT
|
|
||||||
0x0F 0x000F # SHIFT IN
|
|
||||||
0x10 0x0010 # DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 # DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 # DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 # DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 # DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 # SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 # END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 # CANCEL
|
|
||||||
0x19 0x0019 # END OF MEDIUM
|
|
||||||
0x1A 0x001A # SUBSTITUTE
|
|
||||||
0x1B 0x001B # ESCAPE
|
|
||||||
0x1C 0x001C # FILE SEPARATOR
|
|
||||||
0x1D 0x001D # GROUP SEPARATOR
|
|
||||||
0x1E 0x001E # RECORD SEPARATOR
|
|
||||||
0x1F 0x001F # UNIT SEPARATOR
|
|
||||||
0x20 0x0020 # SPACE
|
|
||||||
0x21 0x0021 # EXCLAMATION MARK
|
|
||||||
0x22 0x0022 # QUOTATION MARK
|
|
||||||
0x23 0x0023 # NUMBER SIGN
|
|
||||||
0x24 0x0024 # DOLLAR SIGN
|
|
||||||
0x25 0x0025 # PERCENT SIGN
|
|
||||||
0x26 0x0026 # AMPERSAND
|
|
||||||
0x27 0x0027 # APOSTROPHE
|
|
||||||
0x28 0x0028 # LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 # RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A # ASTERISK
|
|
||||||
0x2B 0x002B # PLUS SIGN
|
|
||||||
0x2C 0x002C # COMMA
|
|
||||||
0x2D 0x002D # HYPHEN-MINUS
|
|
||||||
0x2E 0x002E # FULL STOP
|
|
||||||
0x2F 0x002F # SOLIDUS
|
|
||||||
0x30 0x0030 # DIGIT ZERO
|
|
||||||
0x31 0x0031 # DIGIT ONE
|
|
||||||
0x32 0x0032 # DIGIT TWO
|
|
||||||
0x33 0x0033 # DIGIT THREE
|
|
||||||
0x34 0x0034 # DIGIT FOUR
|
|
||||||
0x35 0x0035 # DIGIT FIVE
|
|
||||||
0x36 0x0036 # DIGIT SIX
|
|
||||||
0x37 0x0037 # DIGIT SEVEN
|
|
||||||
0x38 0x0038 # DIGIT EIGHT
|
|
||||||
0x39 0x0039 # DIGIT NINE
|
|
||||||
0x3A 0x003A # COLON
|
|
||||||
0x3B 0x003B # SEMICOLON
|
|
||||||
0x3C 0x003C # LESS-THAN SIGN
|
|
||||||
0x3D 0x003D # EQUALS SIGN
|
|
||||||
0x3E 0x003E # GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F # QUESTION MARK
|
|
||||||
0x40 0x0040 # COMMERCIAL AT
|
|
||||||
0x41 0x0041 # LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 # LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 # LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 # LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 # LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 # LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 # LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 # LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 # LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A # LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B # LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C # LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D # LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E # LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F # LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 # LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 # LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 # LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 # LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 # LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 # LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 # LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 # LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 # LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 # LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A # LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B # LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C # REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D # RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E # CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F # LOW LINE
|
|
||||||
0x60 0x0060 # GRAVE ACCENT
|
|
||||||
0x61 0x0061 # LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 # LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 # LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 # LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 # LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 # LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 # LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 # LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 # LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A # LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B # LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C # LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D # LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E # LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F # LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 # LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 # LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 # LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 # LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 # LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 # LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 # LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 # LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 # LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 # LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A # LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B # LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C # VERTICAL LINE
|
|
||||||
0x7D 0x007D # RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E # TILDE
|
|
||||||
0x7F 0x007F # DELETE
|
|
||||||
0x80 0x0080 # <control>
|
|
||||||
0x81 0x0081 # <control>
|
|
||||||
0x82 0x0082 # <control>
|
|
||||||
0x83 0x0083 # <control>
|
|
||||||
0x84 0x0084 # <control>
|
|
||||||
0x85 0x0085 # <control>
|
|
||||||
0x86 0x0086 # <control>
|
|
||||||
0x87 0x0087 # <control>
|
|
||||||
0x88 0x0088 # <control>
|
|
||||||
0x89 0x0089 # <control>
|
|
||||||
0x8A 0x008A # <control>
|
|
||||||
0x8B 0x008B # <control>
|
|
||||||
0x8C 0x008C # <control>
|
|
||||||
0x8D 0x008D # <control>
|
|
||||||
0x8E 0x008E # <control>
|
|
||||||
0x8F 0x008F # <control>
|
|
||||||
0x90 0x0090 # <control>
|
|
||||||
0x91 0x0091 # <control>
|
|
||||||
0x92 0x0092 # <control>
|
|
||||||
0x93 0x0093 # <control>
|
|
||||||
0x94 0x0094 # <control>
|
|
||||||
0x95 0x0095 # <control>
|
|
||||||
0x96 0x0096 # <control>
|
|
||||||
0x97 0x0097 # <control>
|
|
||||||
0x98 0x0098 # <control>
|
|
||||||
0x99 0x0099 # <control>
|
|
||||||
0x9A 0x009A # <control>
|
|
||||||
0x9B 0x009B # <control>
|
|
||||||
0x9C 0x009C # <control>
|
|
||||||
0x9D 0x009D # <control>
|
|
||||||
0x9E 0x009E # <control>
|
|
||||||
0x9F 0x009F # <control>
|
|
||||||
0xA0 0x00A0 # NO-BREAK SPACE
|
|
||||||
0xA2 0x00A2 # CENT SIGN
|
|
||||||
0xA3 0x00A3 # POUND SIGN
|
|
||||||
0xA4 0x00A4 # CURRENCY SIGN
|
|
||||||
0xA5 0x00A5 # YEN SIGN
|
|
||||||
0xA6 0x00A6 # BROKEN BAR
|
|
||||||
0xA7 0x00A7 # SECTION SIGN
|
|
||||||
0xA8 0x00A8 # DIAERESIS
|
|
||||||
0xA9 0x00A9 # COPYRIGHT SIGN
|
|
||||||
0xAA 0x00D7 # MULTIPLICATION SIGN
|
|
||||||
0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xAC 0x00AC # NOT SIGN
|
|
||||||
0xAD 0x00AD # SOFT HYPHEN
|
|
||||||
0xAE 0x00AE # REGISTERED SIGN
|
|
||||||
0xAF 0x00AF # MACRON
|
|
||||||
0xB0 0x00B0 # DEGREE SIGN
|
|
||||||
0xB1 0x00B1 # PLUS-MINUS SIGN
|
|
||||||
0xB2 0x00B2 # SUPERSCRIPT TWO
|
|
||||||
0xB3 0x00B3 # SUPERSCRIPT THREE
|
|
||||||
0xB4 0x00B4 # ACUTE ACCENT
|
|
||||||
0xB5 0x00B5 # MICRO SIGN
|
|
||||||
0xB6 0x00B6 # PILCROW SIGN
|
|
||||||
0xB7 0x00B7 # MIDDLE DOT
|
|
||||||
0xB8 0x00B8 # CEDILLA
|
|
||||||
0xB9 0x00B9 # SUPERSCRIPT ONE
|
|
||||||
0xBA 0x00F7 # DIVISION SIGN
|
|
||||||
0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xBC 0x00BC # VULGAR FRACTION ONE QUARTER
|
|
||||||
0xBD 0x00BD # VULGAR FRACTION ONE HALF
|
|
||||||
0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS
|
|
||||||
0xDF 0x2017 # DOUBLE LOW LINE
|
|
||||||
0xE0 0x05D0 # HEBREW LETTER ALEF
|
|
||||||
0xE1 0x05D1 # HEBREW LETTER BET
|
|
||||||
0xE2 0x05D2 # HEBREW LETTER GIMEL
|
|
||||||
0xE3 0x05D3 # HEBREW LETTER DALET
|
|
||||||
0xE4 0x05D4 # HEBREW LETTER HE
|
|
||||||
0xE5 0x05D5 # HEBREW LETTER VAV
|
|
||||||
0xE6 0x05D6 # HEBREW LETTER ZAYIN
|
|
||||||
0xE7 0x05D7 # HEBREW LETTER HET
|
|
||||||
0xE8 0x05D8 # HEBREW LETTER TET
|
|
||||||
0xE9 0x05D9 # HEBREW LETTER YOD
|
|
||||||
0xEA 0x05DA # HEBREW LETTER FINAL KAF
|
|
||||||
0xEB 0x05DB # HEBREW LETTER KAF
|
|
||||||
0xEC 0x05DC # HEBREW LETTER LAMED
|
|
||||||
0xED 0x05DD # HEBREW LETTER FINAL MEM
|
|
||||||
0xEE 0x05DE # HEBREW LETTER MEM
|
|
||||||
0xEF 0x05DF # HEBREW LETTER FINAL NUN
|
|
||||||
0xF0 0x05E0 # HEBREW LETTER NUN
|
|
||||||
0xF1 0x05E1 # HEBREW LETTER SAMEKH
|
|
||||||
0xF2 0x05E2 # HEBREW LETTER AYIN
|
|
||||||
0xF3 0x05E3 # HEBREW LETTER FINAL PE
|
|
||||||
0xF4 0x05E4 # HEBREW LETTER PE
|
|
||||||
0xF5 0x05E5 # HEBREW LETTER FINAL TSADI
|
|
||||||
0xF6 0x05E6 # HEBREW LETTER TSADI
|
|
||||||
0xF7 0x05E7 # HEBREW LETTER QOF
|
|
||||||
0xF8 0x05E8 # HEBREW LETTER RESH
|
|
||||||
0xF9 0x05E9 # HEBREW LETTER SHIN
|
|
||||||
0xFA 0x05EA # HEBREW LETTER TAV
|
|
||||||
0xFD 0x200E # LEFT-TO-RIGHT MARK
|
|
||||||
0xFE 0x200F # RIGHT-TO-LEFT MARK
|
|
||||||
|
|
@ -1,307 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: ISO/IEC 8859-9:1999 to Unicode
|
|
||||||
# Unicode version: 3.0
|
|
||||||
# Table version: 1.0
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 1999 July 27
|
|
||||||
# Authors: Ken Whistler <kenw@sybase.com>
|
|
||||||
#
|
|
||||||
# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
|
|
||||||
#
|
|
||||||
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
|
|
||||||
# No claims are made as to fitness for any particular purpose. No
|
|
||||||
# warranties of any kind are expressed or implied. The recipient
|
|
||||||
# agrees to determine applicability of information provided. If this
|
|
||||||
# file has been provided on magnetic media by Unicode, Inc., the sole
|
|
||||||
# remedy for any claim will be exchange of defective media within 90
|
|
||||||
# days of receipt.
|
|
||||||
#
|
|
||||||
# Unicode, Inc. hereby grants the right to freely use the information
|
|
||||||
# supplied in this file in the creation of products supporting the
|
|
||||||
# Unicode Standard, and to make copies of this file in any form for
|
|
||||||
# internal or external distribution as long as this notice remains
|
|
||||||
# attached.
|
|
||||||
#
|
|
||||||
# General notes:
|
|
||||||
#
|
|
||||||
# This table contains the data the Unicode Consortium has on how
|
|
||||||
# ISO/IEC 8859-9:1999 characters map into Unicode.
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the ISO/IEC 8859-9 code (in hex as 0xXX)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in ISO/IEC 8859-9 order.
|
|
||||||
#
|
|
||||||
# ISO/IEC 8859-9 is also equivalent to ISO-IR-148.
|
|
||||||
#
|
|
||||||
# Version history
|
|
||||||
# 1.0 version updates 0.1 version by adding mappings for all
|
|
||||||
# control characters.
|
|
||||||
#
|
|
||||||
# Updated versions of this file may be found in:
|
|
||||||
# <ftp://ftp.unicode.org/Public/MAPPINGS/>
|
|
||||||
#
|
|
||||||
# Any comments or problems, contact <errata@unicode.org>
|
|
||||||
# Please note that <errata@unicode.org> is an archival address;
|
|
||||||
# notices will be checked, but do not expect an immediate response.
|
|
||||||
#
|
|
||||||
0x00 0x0000 # NULL
|
|
||||||
0x01 0x0001 # START OF HEADING
|
|
||||||
0x02 0x0002 # START OF TEXT
|
|
||||||
0x03 0x0003 # END OF TEXT
|
|
||||||
0x04 0x0004 # END OF TRANSMISSION
|
|
||||||
0x05 0x0005 # ENQUIRY
|
|
||||||
0x06 0x0006 # ACKNOWLEDGE
|
|
||||||
0x07 0x0007 # BELL
|
|
||||||
0x08 0x0008 # BACKSPACE
|
|
||||||
0x09 0x0009 # HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A # LINE FEED
|
|
||||||
0x0B 0x000B # VERTICAL TABULATION
|
|
||||||
0x0C 0x000C # FORM FEED
|
|
||||||
0x0D 0x000D # CARRIAGE RETURN
|
|
||||||
0x0E 0x000E # SHIFT OUT
|
|
||||||
0x0F 0x000F # SHIFT IN
|
|
||||||
0x10 0x0010 # DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 # DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 # DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 # DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 # DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 # SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 # END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 # CANCEL
|
|
||||||
0x19 0x0019 # END OF MEDIUM
|
|
||||||
0x1A 0x001A # SUBSTITUTE
|
|
||||||
0x1B 0x001B # ESCAPE
|
|
||||||
0x1C 0x001C # FILE SEPARATOR
|
|
||||||
0x1D 0x001D # GROUP SEPARATOR
|
|
||||||
0x1E 0x001E # RECORD SEPARATOR
|
|
||||||
0x1F 0x001F # UNIT SEPARATOR
|
|
||||||
0x20 0x0020 # SPACE
|
|
||||||
0x21 0x0021 # EXCLAMATION MARK
|
|
||||||
0x22 0x0022 # QUOTATION MARK
|
|
||||||
0x23 0x0023 # NUMBER SIGN
|
|
||||||
0x24 0x0024 # DOLLAR SIGN
|
|
||||||
0x25 0x0025 # PERCENT SIGN
|
|
||||||
0x26 0x0026 # AMPERSAND
|
|
||||||
0x27 0x0027 # APOSTROPHE
|
|
||||||
0x28 0x0028 # LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 # RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A # ASTERISK
|
|
||||||
0x2B 0x002B # PLUS SIGN
|
|
||||||
0x2C 0x002C # COMMA
|
|
||||||
0x2D 0x002D # HYPHEN-MINUS
|
|
||||||
0x2E 0x002E # FULL STOP
|
|
||||||
0x2F 0x002F # SOLIDUS
|
|
||||||
0x30 0x0030 # DIGIT ZERO
|
|
||||||
0x31 0x0031 # DIGIT ONE
|
|
||||||
0x32 0x0032 # DIGIT TWO
|
|
||||||
0x33 0x0033 # DIGIT THREE
|
|
||||||
0x34 0x0034 # DIGIT FOUR
|
|
||||||
0x35 0x0035 # DIGIT FIVE
|
|
||||||
0x36 0x0036 # DIGIT SIX
|
|
||||||
0x37 0x0037 # DIGIT SEVEN
|
|
||||||
0x38 0x0038 # DIGIT EIGHT
|
|
||||||
0x39 0x0039 # DIGIT NINE
|
|
||||||
0x3A 0x003A # COLON
|
|
||||||
0x3B 0x003B # SEMICOLON
|
|
||||||
0x3C 0x003C # LESS-THAN SIGN
|
|
||||||
0x3D 0x003D # EQUALS SIGN
|
|
||||||
0x3E 0x003E # GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F # QUESTION MARK
|
|
||||||
0x40 0x0040 # COMMERCIAL AT
|
|
||||||
0x41 0x0041 # LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 # LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 # LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 # LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 # LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 # LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 # LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 # LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 # LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A # LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B # LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C # LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D # LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E # LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F # LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 # LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 # LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 # LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 # LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 # LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 # LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 # LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 # LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 # LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 # LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A # LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B # LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C # REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D # RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E # CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F # LOW LINE
|
|
||||||
0x60 0x0060 # GRAVE ACCENT
|
|
||||||
0x61 0x0061 # LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 # LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 # LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 # LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 # LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 # LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 # LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 # LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 # LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A # LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B # LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C # LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D # LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E # LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F # LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 # LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 # LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 # LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 # LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 # LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 # LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 # LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 # LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 # LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 # LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A # LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B # LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C # VERTICAL LINE
|
|
||||||
0x7D 0x007D # RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E # TILDE
|
|
||||||
0x7F 0x007F # DELETE
|
|
||||||
0x80 0x0080 # <control>
|
|
||||||
0x81 0x0081 # <control>
|
|
||||||
0x82 0x0082 # <control>
|
|
||||||
0x83 0x0083 # <control>
|
|
||||||
0x84 0x0084 # <control>
|
|
||||||
0x85 0x0085 # <control>
|
|
||||||
0x86 0x0086 # <control>
|
|
||||||
0x87 0x0087 # <control>
|
|
||||||
0x88 0x0088 # <control>
|
|
||||||
0x89 0x0089 # <control>
|
|
||||||
0x8A 0x008A # <control>
|
|
||||||
0x8B 0x008B # <control>
|
|
||||||
0x8C 0x008C # <control>
|
|
||||||
0x8D 0x008D # <control>
|
|
||||||
0x8E 0x008E # <control>
|
|
||||||
0x8F 0x008F # <control>
|
|
||||||
0x90 0x0090 # <control>
|
|
||||||
0x91 0x0091 # <control>
|
|
||||||
0x92 0x0092 # <control>
|
|
||||||
0x93 0x0093 # <control>
|
|
||||||
0x94 0x0094 # <control>
|
|
||||||
0x95 0x0095 # <control>
|
|
||||||
0x96 0x0096 # <control>
|
|
||||||
0x97 0x0097 # <control>
|
|
||||||
0x98 0x0098 # <control>
|
|
||||||
0x99 0x0099 # <control>
|
|
||||||
0x9A 0x009A # <control>
|
|
||||||
0x9B 0x009B # <control>
|
|
||||||
0x9C 0x009C # <control>
|
|
||||||
0x9D 0x009D # <control>
|
|
||||||
0x9E 0x009E # <control>
|
|
||||||
0x9F 0x009F # <control>
|
|
||||||
0xA0 0x00A0 # NO-BREAK SPACE
|
|
||||||
0xA1 0x00A1 # INVERTED EXCLAMATION MARK
|
|
||||||
0xA2 0x00A2 # CENT SIGN
|
|
||||||
0xA3 0x00A3 # POUND SIGN
|
|
||||||
0xA4 0x00A4 # CURRENCY SIGN
|
|
||||||
0xA5 0x00A5 # YEN SIGN
|
|
||||||
0xA6 0x00A6 # BROKEN BAR
|
|
||||||
0xA7 0x00A7 # SECTION SIGN
|
|
||||||
0xA8 0x00A8 # DIAERESIS
|
|
||||||
0xA9 0x00A9 # COPYRIGHT SIGN
|
|
||||||
0xAA 0x00AA # FEMININE ORDINAL INDICATOR
|
|
||||||
0xAB 0x00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xAC 0x00AC # NOT SIGN
|
|
||||||
0xAD 0x00AD # SOFT HYPHEN
|
|
||||||
0xAE 0x00AE # REGISTERED SIGN
|
|
||||||
0xAF 0x00AF # MACRON
|
|
||||||
0xB0 0x00B0 # DEGREE SIGN
|
|
||||||
0xB1 0x00B1 # PLUS-MINUS SIGN
|
|
||||||
0xB2 0x00B2 # SUPERSCRIPT TWO
|
|
||||||
0xB3 0x00B3 # SUPERSCRIPT THREE
|
|
||||||
0xB4 0x00B4 # ACUTE ACCENT
|
|
||||||
0xB5 0x00B5 # MICRO SIGN
|
|
||||||
0xB6 0x00B6 # PILCROW SIGN
|
|
||||||
0xB7 0x00B7 # MIDDLE DOT
|
|
||||||
0xB8 0x00B8 # CEDILLA
|
|
||||||
0xB9 0x00B9 # SUPERSCRIPT ONE
|
|
||||||
0xBA 0x00BA # MASCULINE ORDINAL INDICATOR
|
|
||||||
0xBB 0x00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
|
|
||||||
0xBC 0x00BC # VULGAR FRACTION ONE QUARTER
|
|
||||||
0xBD 0x00BD # VULGAR FRACTION ONE HALF
|
|
||||||
0xBE 0x00BE # VULGAR FRACTION THREE QUARTERS
|
|
||||||
0xBF 0x00BF # INVERTED QUESTION MARK
|
|
||||||
0xC0 0x00C0 # LATIN CAPITAL LETTER A WITH GRAVE
|
|
||||||
0xC1 0x00C1 # LATIN CAPITAL LETTER A WITH ACUTE
|
|
||||||
0xC2 0x00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xC3 0x00C3 # LATIN CAPITAL LETTER A WITH TILDE
|
|
||||||
0xC4 0x00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
|
|
||||||
0xC5 0x00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
|
|
||||||
0xC6 0x00C6 # LATIN CAPITAL LETTER AE
|
|
||||||
0xC7 0x00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
|
|
||||||
0xC8 0x00C8 # LATIN CAPITAL LETTER E WITH GRAVE
|
|
||||||
0xC9 0x00C9 # LATIN CAPITAL LETTER E WITH ACUTE
|
|
||||||
0xCA 0x00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
|
|
||||||
0xCB 0x00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
|
|
||||||
0xCC 0x00CC # LATIN CAPITAL LETTER I WITH GRAVE
|
|
||||||
0xCD 0x00CD # LATIN CAPITAL LETTER I WITH ACUTE
|
|
||||||
0xCE 0x00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xCF 0x00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
|
|
||||||
0xD0 0x011E # LATIN CAPITAL LETTER G WITH BREVE
|
|
||||||
0xD1 0x00D1 # LATIN CAPITAL LETTER N WITH TILDE
|
|
||||||
0xD2 0x00D2 # LATIN CAPITAL LETTER O WITH GRAVE
|
|
||||||
0xD3 0x00D3 # LATIN CAPITAL LETTER O WITH ACUTE
|
|
||||||
0xD4 0x00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xD5 0x00D5 # LATIN CAPITAL LETTER O WITH TILDE
|
|
||||||
0xD6 0x00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
|
|
||||||
0xD7 0x00D7 # MULTIPLICATION SIGN
|
|
||||||
0xD8 0x00D8 # LATIN CAPITAL LETTER O WITH STROKE
|
|
||||||
0xD9 0x00D9 # LATIN CAPITAL LETTER U WITH GRAVE
|
|
||||||
0xDA 0x00DA # LATIN CAPITAL LETTER U WITH ACUTE
|
|
||||||
0xDB 0x00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xDC 0x00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
|
|
||||||
0xDD 0x0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE
|
|
||||||
0xDE 0x015E # LATIN CAPITAL LETTER S WITH CEDILLA
|
|
||||||
0xDF 0x00DF # LATIN SMALL LETTER SHARP S
|
|
||||||
0xE0 0x00E0 # LATIN SMALL LETTER A WITH GRAVE
|
|
||||||
0xE1 0x00E1 # LATIN SMALL LETTER A WITH ACUTE
|
|
||||||
0xE2 0x00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
|
|
||||||
0xE3 0x00E3 # LATIN SMALL LETTER A WITH TILDE
|
|
||||||
0xE4 0x00E4 # LATIN SMALL LETTER A WITH DIAERESIS
|
|
||||||
0xE5 0x00E5 # LATIN SMALL LETTER A WITH RING ABOVE
|
|
||||||
0xE6 0x00E6 # LATIN SMALL LETTER AE
|
|
||||||
0xE7 0x00E7 # LATIN SMALL LETTER C WITH CEDILLA
|
|
||||||
0xE8 0x00E8 # LATIN SMALL LETTER E WITH GRAVE
|
|
||||||
0xE9 0x00E9 # LATIN SMALL LETTER E WITH ACUTE
|
|
||||||
0xEA 0x00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
|
|
||||||
0xEB 0x00EB # LATIN SMALL LETTER E WITH DIAERESIS
|
|
||||||
0xEC 0x00EC # LATIN SMALL LETTER I WITH GRAVE
|
|
||||||
0xED 0x00ED # LATIN SMALL LETTER I WITH ACUTE
|
|
||||||
0xEE 0x00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
|
|
||||||
0xEF 0x00EF # LATIN SMALL LETTER I WITH DIAERESIS
|
|
||||||
0xF0 0x011F # LATIN SMALL LETTER G WITH BREVE
|
|
||||||
0xF1 0x00F1 # LATIN SMALL LETTER N WITH TILDE
|
|
||||||
0xF2 0x00F2 # LATIN SMALL LETTER O WITH GRAVE
|
|
||||||
0xF3 0x00F3 # LATIN SMALL LETTER O WITH ACUTE
|
|
||||||
0xF4 0x00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
|
|
||||||
0xF5 0x00F5 # LATIN SMALL LETTER O WITH TILDE
|
|
||||||
0xF6 0x00F6 # LATIN SMALL LETTER O WITH DIAERESIS
|
|
||||||
0xF7 0x00F7 # DIVISION SIGN
|
|
||||||
0xF8 0x00F8 # LATIN SMALL LETTER O WITH STROKE
|
|
||||||
0xF9 0x00F9 # LATIN SMALL LETTER U WITH GRAVE
|
|
||||||
0xFA 0x00FA # LATIN SMALL LETTER U WITH ACUTE
|
|
||||||
0xFB 0x00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
|
|
||||||
0xFC 0x00FC # LATIN SMALL LETTER U WITH DIAERESIS
|
|
||||||
0xFD 0x0131 # LATIN SMALL LETTER DOTLESS I
|
|
||||||
0xFE 0x015F # LATIN SMALL LETTER S WITH CEDILLA
|
|
||||||
0xFF 0x00FF # LATIN SMALL LETTER Y WITH DIAERESIS
|
|
||||||
|
|
||||||
|
|
@ -1,302 +0,0 @@
|
|||||||
#
|
|
||||||
# Name: KOI8-R (RFC1489) to Unicode
|
|
||||||
# Unicode version: 3.0
|
|
||||||
# Table version: 1.0
|
|
||||||
# Table format: Format A
|
|
||||||
# Date: 18 August 1999
|
|
||||||
# Authors: Helmut Richter <richter@lrz.de>
|
|
||||||
#
|
|
||||||
# Copyright (c) 1991-1999 Unicode, Inc. All Rights reserved.
|
|
||||||
#
|
|
||||||
# This file is provided as-is by Unicode, Inc. (The Unicode Consortium).
|
|
||||||
# No claims are made as to fitness for any particular purpose. No
|
|
||||||
# warranties of any kind are expressed or implied. The recipient
|
|
||||||
# agrees to determine applicability of information provided. If this
|
|
||||||
# file has been provided on optical media by Unicode, Inc., the sole
|
|
||||||
# remedy for any claim will be exchange of defective media within 90
|
|
||||||
# days of receipt.
|
|
||||||
#
|
|
||||||
# Unicode, Inc. hereby grants the right to freely use the information
|
|
||||||
# supplied in this file in the creation of products supporting the
|
|
||||||
# Unicode Standard, and to make copies of this file in any form for
|
|
||||||
# internal or external distribution as long as this notice remains
|
|
||||||
# attached.
|
|
||||||
#
|
|
||||||
# General notes:
|
|
||||||
#
|
|
||||||
# This table contains the data the Unicode Consortium has on how
|
|
||||||
# KOI8-R characters map into Unicode. The underlying document is the
|
|
||||||
# mapping described in RFC 1489. No statements are made as to whether
|
|
||||||
# this mapping is the same as the mapping defined as "Code Page 878"
|
|
||||||
# with some vendors.
|
|
||||||
#
|
|
||||||
# Format: Three tab-separated columns
|
|
||||||
# Column #1 is the KOI8-R code (in hex as 0xXX)
|
|
||||||
# Column #2 is the Unicode (in hex as 0xXXXX)
|
|
||||||
# Column #3 the Unicode name (follows a comment sign, '#')
|
|
||||||
#
|
|
||||||
# The entries are in KOI8-R order.
|
|
||||||
#
|
|
||||||
# Version history
|
|
||||||
# 1.0 version: created.
|
|
||||||
#
|
|
||||||
# Any comments or problems, contact <errata@unicode.org>
|
|
||||||
# Please note that <errata@unicode.org> is an archival address;
|
|
||||||
# notices will be checked, but do not expect an immediate response.
|
|
||||||
#
|
|
||||||
0x00 0x0000 # NULL
|
|
||||||
0x01 0x0001 # START OF HEADING
|
|
||||||
0x02 0x0002 # START OF TEXT
|
|
||||||
0x03 0x0003 # END OF TEXT
|
|
||||||
0x04 0x0004 # END OF TRANSMISSION
|
|
||||||
0x05 0x0005 # ENQUIRY
|
|
||||||
0x06 0x0006 # ACKNOWLEDGE
|
|
||||||
0x07 0x0007 # BELL
|
|
||||||
0x08 0x0008 # BACKSPACE
|
|
||||||
0x09 0x0009 # HORIZONTAL TABULATION
|
|
||||||
0x0A 0x000A # LINE FEED
|
|
||||||
0x0B 0x000B # VERTICAL TABULATION
|
|
||||||
0x0C 0x000C # FORM FEED
|
|
||||||
0x0D 0x000D # CARRIAGE RETURN
|
|
||||||
0x0E 0x000E # SHIFT OUT
|
|
||||||
0x0F 0x000F # SHIFT IN
|
|
||||||
0x10 0x0010 # DATA LINK ESCAPE
|
|
||||||
0x11 0x0011 # DEVICE CONTROL ONE
|
|
||||||
0x12 0x0012 # DEVICE CONTROL TWO
|
|
||||||
0x13 0x0013 # DEVICE CONTROL THREE
|
|
||||||
0x14 0x0014 # DEVICE CONTROL FOUR
|
|
||||||
0x15 0x0015 # NEGATIVE ACKNOWLEDGE
|
|
||||||
0x16 0x0016 # SYNCHRONOUS IDLE
|
|
||||||
0x17 0x0017 # END OF TRANSMISSION BLOCK
|
|
||||||
0x18 0x0018 # CANCEL
|
|
||||||
0x19 0x0019 # END OF MEDIUM
|
|
||||||
0x1A 0x001A # SUBSTITUTE
|
|
||||||
0x1B 0x001B # ESCAPE
|
|
||||||
0x1C 0x001C # FILE SEPARATOR
|
|
||||||
0x1D 0x001D # GROUP SEPARATOR
|
|
||||||
0x1E 0x001E # RECORD SEPARATOR
|
|
||||||
0x1F 0x001F # UNIT SEPARATOR
|
|
||||||
0x20 0x0020 # SPACE
|
|
||||||
0x21 0x0021 # EXCLAMATION MARK
|
|
||||||
0x22 0x0022 # QUOTATION MARK
|
|
||||||
0x23 0x0023 # NUMBER SIGN
|
|
||||||
0x24 0x0024 # DOLLAR SIGN
|
|
||||||
0x25 0x0025 # PERCENT SIGN
|
|
||||||
0x26 0x0026 # AMPERSAND
|
|
||||||
0x27 0x0027 # APOSTROPHE
|
|
||||||
0x28 0x0028 # LEFT PARENTHESIS
|
|
||||||
0x29 0x0029 # RIGHT PARENTHESIS
|
|
||||||
0x2A 0x002A # ASTERISK
|
|
||||||
0x2B 0x002B # PLUS SIGN
|
|
||||||
0x2C 0x002C # COMMA
|
|
||||||
0x2D 0x002D # HYPHEN-MINUS
|
|
||||||
0x2E 0x002E # FULL STOP
|
|
||||||
0x2F 0x002F # SOLIDUS
|
|
||||||
0x30 0x0030 # DIGIT ZERO
|
|
||||||
0x31 0x0031 # DIGIT ONE
|
|
||||||
0x32 0x0032 # DIGIT TWO
|
|
||||||
0x33 0x0033 # DIGIT THREE
|
|
||||||
0x34 0x0034 # DIGIT FOUR
|
|
||||||
0x35 0x0035 # DIGIT FIVE
|
|
||||||
0x36 0x0036 # DIGIT SIX
|
|
||||||
0x37 0x0037 # DIGIT SEVEN
|
|
||||||
0x38 0x0038 # DIGIT EIGHT
|
|
||||||
0x39 0x0039 # DIGIT NINE
|
|
||||||
0x3A 0x003A # COLON
|
|
||||||
0x3B 0x003B # SEMICOLON
|
|
||||||
0x3C 0x003C # LESS-THAN SIGN
|
|
||||||
0x3D 0x003D # EQUALS SIGN
|
|
||||||
0x3E 0x003E # GREATER-THAN SIGN
|
|
||||||
0x3F 0x003F # QUESTION MARK
|
|
||||||
0x40 0x0040 # COMMERCIAL AT
|
|
||||||
0x41 0x0041 # LATIN CAPITAL LETTER A
|
|
||||||
0x42 0x0042 # LATIN CAPITAL LETTER B
|
|
||||||
0x43 0x0043 # LATIN CAPITAL LETTER C
|
|
||||||
0x44 0x0044 # LATIN CAPITAL LETTER D
|
|
||||||
0x45 0x0045 # LATIN CAPITAL LETTER E
|
|
||||||
0x46 0x0046 # LATIN CAPITAL LETTER F
|
|
||||||
0x47 0x0047 # LATIN CAPITAL LETTER G
|
|
||||||
0x48 0x0048 # LATIN CAPITAL LETTER H
|
|
||||||
0x49 0x0049 # LATIN CAPITAL LETTER I
|
|
||||||
0x4A 0x004A # LATIN CAPITAL LETTER J
|
|
||||||
0x4B 0x004B # LATIN CAPITAL LETTER K
|
|
||||||
0x4C 0x004C # LATIN CAPITAL LETTER L
|
|
||||||
0x4D 0x004D # LATIN CAPITAL LETTER M
|
|
||||||
0x4E 0x004E # LATIN CAPITAL LETTER N
|
|
||||||
0x4F 0x004F # LATIN CAPITAL LETTER O
|
|
||||||
0x50 0x0050 # LATIN CAPITAL LETTER P
|
|
||||||
0x51 0x0051 # LATIN CAPITAL LETTER Q
|
|
||||||
0x52 0x0052 # LATIN CAPITAL LETTER R
|
|
||||||
0x53 0x0053 # LATIN CAPITAL LETTER S
|
|
||||||
0x54 0x0054 # LATIN CAPITAL LETTER T
|
|
||||||
0x55 0x0055 # LATIN CAPITAL LETTER U
|
|
||||||
0x56 0x0056 # LATIN CAPITAL LETTER V
|
|
||||||
0x57 0x0057 # LATIN CAPITAL LETTER W
|
|
||||||
0x58 0x0058 # LATIN CAPITAL LETTER X
|
|
||||||
0x59 0x0059 # LATIN CAPITAL LETTER Y
|
|
||||||
0x5A 0x005A # LATIN CAPITAL LETTER Z
|
|
||||||
0x5B 0x005B # LEFT SQUARE BRACKET
|
|
||||||
0x5C 0x005C # REVERSE SOLIDUS
|
|
||||||
0x5D 0x005D # RIGHT SQUARE BRACKET
|
|
||||||
0x5E 0x005E # CIRCUMFLEX ACCENT
|
|
||||||
0x5F 0x005F # LOW LINE
|
|
||||||
0x60 0x0060 # GRAVE ACCENT
|
|
||||||
0x61 0x0061 # LATIN SMALL LETTER A
|
|
||||||
0x62 0x0062 # LATIN SMALL LETTER B
|
|
||||||
0x63 0x0063 # LATIN SMALL LETTER C
|
|
||||||
0x64 0x0064 # LATIN SMALL LETTER D
|
|
||||||
0x65 0x0065 # LATIN SMALL LETTER E
|
|
||||||
0x66 0x0066 # LATIN SMALL LETTER F
|
|
||||||
0x67 0x0067 # LATIN SMALL LETTER G
|
|
||||||
0x68 0x0068 # LATIN SMALL LETTER H
|
|
||||||
0x69 0x0069 # LATIN SMALL LETTER I
|
|
||||||
0x6A 0x006A # LATIN SMALL LETTER J
|
|
||||||
0x6B 0x006B # LATIN SMALL LETTER K
|
|
||||||
0x6C 0x006C # LATIN SMALL LETTER L
|
|
||||||
0x6D 0x006D # LATIN SMALL LETTER M
|
|
||||||
0x6E 0x006E # LATIN SMALL LETTER N
|
|
||||||
0x6F 0x006F # LATIN SMALL LETTER O
|
|
||||||
0x70 0x0070 # LATIN SMALL LETTER P
|
|
||||||
0x71 0x0071 # LATIN SMALL LETTER Q
|
|
||||||
0x72 0x0072 # LATIN SMALL LETTER R
|
|
||||||
0x73 0x0073 # LATIN SMALL LETTER S
|
|
||||||
0x74 0x0074 # LATIN SMALL LETTER T
|
|
||||||
0x75 0x0075 # LATIN SMALL LETTER U
|
|
||||||
0x76 0x0076 # LATIN SMALL LETTER V
|
|
||||||
0x77 0x0077 # LATIN SMALL LETTER W
|
|
||||||
0x78 0x0078 # LATIN SMALL LETTER X
|
|
||||||
0x79 0x0079 # LATIN SMALL LETTER Y
|
|
||||||
0x7A 0x007A # LATIN SMALL LETTER Z
|
|
||||||
0x7B 0x007B # LEFT CURLY BRACKET
|
|
||||||
0x7C 0x007C # VERTICAL LINE
|
|
||||||
0x7D 0x007D # RIGHT CURLY BRACKET
|
|
||||||
0x7E 0x007E # TILDE
|
|
||||||
0x7F 0x007F # DELETE
|
|
||||||
0x80 0x2500 # BOX DRAWINGS LIGHT HORIZONTAL
|
|
||||||
0x81 0x2502 # BOX DRAWINGS LIGHT VERTICAL
|
|
||||||
0x82 0x250C # BOX DRAWINGS LIGHT DOWN AND RIGHT
|
|
||||||
0x83 0x2510 # BOX DRAWINGS LIGHT DOWN AND LEFT
|
|
||||||
0x84 0x2514 # BOX DRAWINGS LIGHT UP AND RIGHT
|
|
||||||
0x85 0x2518 # BOX DRAWINGS LIGHT UP AND LEFT
|
|
||||||
0x86 0x251C # BOX DRAWINGS LIGHT VERTICAL AND RIGHT
|
|
||||||
0x87 0x2524 # BOX DRAWINGS LIGHT VERTICAL AND LEFT
|
|
||||||
0x88 0x252C # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
|
|
||||||
0x89 0x2534 # BOX DRAWINGS LIGHT UP AND HORIZONTAL
|
|
||||||
0x8A 0x253C # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
|
|
||||||
0x8B 0x2580 # UPPER HALF BLOCK
|
|
||||||
0x8C 0x2584 # LOWER HALF BLOCK
|
|
||||||
0x8D 0x2588 # FULL BLOCK
|
|
||||||
0x8E 0x258C # LEFT HALF BLOCK
|
|
||||||
0x8F 0x2590 # RIGHT HALF BLOCK
|
|
||||||
0x90 0x2591 # LIGHT SHADE
|
|
||||||
0x91 0x2592 # MEDIUM SHADE
|
|
||||||
0x92 0x2593 # DARK SHADE
|
|
||||||
0x93 0x2320 # TOP HALF INTEGRAL
|
|
||||||
0x94 0x25A0 # BLACK SQUARE
|
|
||||||
0x95 0x2219 # BULLET OPERATOR
|
|
||||||
0x96 0x221A # SQUARE ROOT
|
|
||||||
0x97 0x2248 # ALMOST EQUAL TO
|
|
||||||
0x98 0x2264 # LESS-THAN OR EQUAL TO
|
|
||||||
0x99 0x2265 # GREATER-THAN OR EQUAL TO
|
|
||||||
0x9A 0x00A0 # NO-BREAK SPACE
|
|
||||||
0x9B 0x2321 # BOTTOM HALF INTEGRAL
|
|
||||||
0x9C 0x00B0 # DEGREE SIGN
|
|
||||||
0x9D 0x00B2 # SUPERSCRIPT TWO
|
|
||||||
0x9E 0x00B7 # MIDDLE DOT
|
|
||||||
0x9F 0x00F7 # DIVISION SIGN
|
|
||||||
0xA0 0x2550 # BOX DRAWINGS DOUBLE HORIZONTAL
|
|
||||||
0xA1 0x2551 # BOX DRAWINGS DOUBLE VERTICAL
|
|
||||||
0xA2 0x2552 # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
|
|
||||||
0xA3 0x0451 # CYRILLIC SMALL LETTER IO
|
|
||||||
0xA4 0x2553 # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
|
|
||||||
0xA5 0x2554 # BOX DRAWINGS DOUBLE DOWN AND RIGHT
|
|
||||||
0xA6 0x2555 # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
|
|
||||||
0xA7 0x2556 # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
|
|
||||||
0xA8 0x2557 # BOX DRAWINGS DOUBLE DOWN AND LEFT
|
|
||||||
0xA9 0x2558 # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
|
|
||||||
0xAA 0x2559 # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
|
|
||||||
0xAB 0x255A # BOX DRAWINGS DOUBLE UP AND RIGHT
|
|
||||||
0xAC 0x255B # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
|
|
||||||
0xAD 0x255C # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
|
|
||||||
0xAE 0x255D # BOX DRAWINGS DOUBLE UP AND LEFT
|
|
||||||
0xAF 0x255E # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
|
|
||||||
0xB0 0x255F # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
|
|
||||||
0xB1 0x2560 # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
|
|
||||||
0xB2 0x2561 # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
|
|
||||||
0xB3 0x0401 # CYRILLIC CAPITAL LETTER IO
|
|
||||||
0xB4 0x2562 # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
|
|
||||||
0xB5 0x2563 # BOX DRAWINGS DOUBLE VERTICAL AND LEFT
|
|
||||||
0xB6 0x2564 # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
|
|
||||||
0xB7 0x2565 # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
|
|
||||||
0xB8 0x2566 # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
|
|
||||||
0xB9 0x2567 # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
|
|
||||||
0xBA 0x2568 # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
|
|
||||||
0xBB 0x2569 # BOX DRAWINGS DOUBLE UP AND HORIZONTAL
|
|
||||||
0xBC 0x256A # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
|
|
||||||
0xBD 0x256B # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
|
|
||||||
0xBE 0x256C # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
|
|
||||||
0xBF 0x00A9 # COPYRIGHT SIGN
|
|
||||||
0xC0 0x044E # CYRILLIC SMALL LETTER YU
|
|
||||||
0xC1 0x0430 # CYRILLIC SMALL LETTER A
|
|
||||||
0xC2 0x0431 # CYRILLIC SMALL LETTER BE
|
|
||||||
0xC3 0x0446 # CYRILLIC SMALL LETTER TSE
|
|
||||||
0xC4 0x0434 # CYRILLIC SMALL LETTER DE
|
|
||||||
0xC5 0x0435 # CYRILLIC SMALL LETTER IE
|
|
||||||
0xC6 0x0444 # CYRILLIC SMALL LETTER EF
|
|
||||||
0xC7 0x0433 # CYRILLIC SMALL LETTER GHE
|
|
||||||
0xC8 0x0445 # CYRILLIC SMALL LETTER HA
|
|
||||||
0xC9 0x0438 # CYRILLIC SMALL LETTER I
|
|
||||||
0xCA 0x0439 # CYRILLIC SMALL LETTER SHORT I
|
|
||||||
0xCB 0x043A # CYRILLIC SMALL LETTER KA
|
|
||||||
0xCC 0x043B # CYRILLIC SMALL LETTER EL
|
|
||||||
0xCD 0x043C # CYRILLIC SMALL LETTER EM
|
|
||||||
0xCE 0x043D # CYRILLIC SMALL LETTER EN
|
|
||||||
0xCF 0x043E # CYRILLIC SMALL LETTER O
|
|
||||||
0xD0 0x043F # CYRILLIC SMALL LETTER PE
|
|
||||||
0xD1 0x044F # CYRILLIC SMALL LETTER YA
|
|
||||||
0xD2 0x0440 # CYRILLIC SMALL LETTER ER
|
|
||||||
0xD3 0x0441 # CYRILLIC SMALL LETTER ES
|
|
||||||
0xD4 0x0442 # CYRILLIC SMALL LETTER TE
|
|
||||||
0xD5 0x0443 # CYRILLIC SMALL LETTER U
|
|
||||||
0xD6 0x0436 # CYRILLIC SMALL LETTER ZHE
|
|
||||||
0xD7 0x0432 # CYRILLIC SMALL LETTER VE
|
|
||||||
0xD8 0x044C # CYRILLIC SMALL LETTER SOFT SIGN
|
|
||||||
0xD9 0x044B # CYRILLIC SMALL LETTER YERU
|
|
||||||
0xDA 0x0437 # CYRILLIC SMALL LETTER ZE
|
|
||||||
0xDB 0x0448 # CYRILLIC SMALL LETTER SHA
|
|
||||||
0xDC 0x044D # CYRILLIC SMALL LETTER E
|
|
||||||
0xDD 0x0449 # CYRILLIC SMALL LETTER SHCHA
|
|
||||||
0xDE 0x0447 # CYRILLIC SMALL LETTER CHE
|
|
||||||
0xDF 0x044A # CYRILLIC SMALL LETTER HARD SIGN
|
|
||||||
0xE0 0x042E # CYRILLIC CAPITAL LETTER YU
|
|
||||||
0xE1 0x0410 # CYRILLIC CAPITAL LETTER A
|
|
||||||
0xE2 0x0411 # CYRILLIC CAPITAL LETTER BE
|
|
||||||
0xE3 0x0426 # CYRILLIC CAPITAL LETTER TSE
|
|
||||||
0xE4 0x0414 # CYRILLIC CAPITAL LETTER DE
|
|
||||||
0xE5 0x0415 # CYRILLIC CAPITAL LETTER IE
|
|
||||||
0xE6 0x0424 # CYRILLIC CAPITAL LETTER EF
|
|
||||||
0xE7 0x0413 # CYRILLIC CAPITAL LETTER GHE
|
|
||||||
0xE8 0x0425 # CYRILLIC CAPITAL LETTER HA
|
|
||||||
0xE9 0x0418 # CYRILLIC CAPITAL LETTER I
|
|
||||||
0xEA 0x0419 # CYRILLIC CAPITAL LETTER SHORT I
|
|
||||||
0xEB 0x041A # CYRILLIC CAPITAL LETTER KA
|
|
||||||
0xEC 0x041B # CYRILLIC CAPITAL LETTER EL
|
|
||||||
0xED 0x041C # CYRILLIC CAPITAL LETTER EM
|
|
||||||
0xEE 0x041D # CYRILLIC CAPITAL LETTER EN
|
|
||||||
0xEF 0x041E # CYRILLIC CAPITAL LETTER O
|
|
||||||
0xF0 0x041F # CYRILLIC CAPITAL LETTER PE
|
|
||||||
0xF1 0x042F # CYRILLIC CAPITAL LETTER YA
|
|
||||||
0xF2 0x0420 # CYRILLIC CAPITAL LETTER ER
|
|
||||||
0xF3 0x0421 # CYRILLIC CAPITAL LETTER ES
|
|
||||||
0xF4 0x0422 # CYRILLIC CAPITAL LETTER TE
|
|
||||||
0xF5 0x0423 # CYRILLIC CAPITAL LETTER U
|
|
||||||
0xF6 0x0416 # CYRILLIC CAPITAL LETTER ZHE
|
|
||||||
0xF7 0x0412 # CYRILLIC CAPITAL LETTER VE
|
|
||||||
0xF8 0x042C # CYRILLIC CAPITAL LETTER SOFT SIGN
|
|
||||||
0xF9 0x042B # CYRILLIC CAPITAL LETTER YERU
|
|
||||||
0xFA 0x0417 # CYRILLIC CAPITAL LETTER ZE
|
|
||||||
0xFB 0x0428 # CYRILLIC CAPITAL LETTER SHA
|
|
||||||
0xFC 0x042D # CYRILLIC CAPITAL LETTER E
|
|
||||||
0xFD 0x0429 # CYRILLIC CAPITAL LETTER SHCHA
|
|
||||||
0xFE 0x0427 # CYRILLIC CAPITAL LETTER CHE
|
|
||||||
0xFF 0x042A # CYRILLIC CAPITAL LETTER HARD SIGN
|
|
File diff suppressed because it is too large
Load Diff
@ -1,171 +0,0 @@
|
|||||||
<?php
|
|
||||||
/*
|
|
||||||
utf8 1.0
|
|
||||||
Copyright: Left
|
|
||||||
---------------------------------------------------------------------------------
|
|
||||||
Version: 1.0
|
|
||||||
Date: 23 November 2004
|
|
||||||
---------------------------------------------------------------------------------
|
|
||||||
Author: Alexander Minkovsky (a_minkovsky@hotmail.com)
|
|
||||||
---------------------------------------------------------------------------------
|
|
||||||
License: Choose the more appropriated for You - I don't care.
|
|
||||||
---------------------------------------------------------------------------------
|
|
||||||
Description:
|
|
||||||
Class provides functionality to convert single byte strings, such as CP1251
|
|
||||||
ti UTF-8 multibyte format and vice versa.
|
|
||||||
Class loads a concrete charset map, for example CP1251.
|
|
||||||
(Refer to ftp://ftp.unicode.org/Public/MAPPINGS/ for map files)
|
|
||||||
Directory containing MAP files is predefined as constant.
|
|
||||||
Each charset is also predefined as constant pointing to the MAP file.
|
|
||||||
---------------------------------------------------------------------------------
|
|
||||||
Example usage:
|
|
||||||
Pass the desired charset in the class constructor:
|
|
||||||
$utfConverter = new utf8(CP1251); //defaults to CP1250.
|
|
||||||
or load the charset MAP using loadCharset method like this:
|
|
||||||
$utfConverter->loadCharset(CP1252);
|
|
||||||
Then call
|
|
||||||
$res = $utfConverter->strToUtf8($str);
|
|
||||||
or
|
|
||||||
$res = $utfConverter->utf8ToStr($utf);
|
|
||||||
to get the needed encoding.
|
|
||||||
---------------------------------------------------------------------------------
|
|
||||||
Note:
|
|
||||||
Rewrite or Override the onError method if needed. It's the error handler used from everywhere and takes 2 parameters:
|
|
||||||
err_code and err_text. By default it just prints out a message about the error.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Charset maps
|
|
||||||
// Adapted to fit Roundcube
|
|
||||||
define("UTF8_MAP_DIR", "program/lib/encoding");
|
|
||||||
|
|
||||||
//Error constants
|
|
||||||
define("ERR_OPEN_MAP_FILE", "ERR_OPEN_MAP_FILE");
|
|
||||||
|
|
||||||
//Class definition
|
|
||||||
Class utf8 {
|
|
||||||
|
|
||||||
var $charset = "ISO-8859-1";
|
|
||||||
var $ascMap = array();
|
|
||||||
var $utfMap = array();
|
|
||||||
var $aliases = array(
|
|
||||||
'KOI8-R' => 'KOI8R'
|
|
||||||
);
|
|
||||||
var $error = null;
|
|
||||||
|
|
||||||
function __construct($charset="ISO-8859-1") {
|
|
||||||
$this->loadCharset($charset);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Load charset
|
|
||||||
function loadCharset($charset) {
|
|
||||||
|
|
||||||
$charset = preg_replace(array('/^WINDOWS-*125([0-8])$/', '/^CP-/'), array('CP125\\1', 'CP'), $charset);
|
|
||||||
if (isset($this->aliases[$charset]))
|
|
||||||
$charset = $this->aliases[$charset];
|
|
||||||
|
|
||||||
$this->charset = $charset;
|
|
||||||
|
|
||||||
if (empty($this->ascMap[$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){
|
|
||||||
$asc=hexdec(substr($parts[1],0,2));
|
|
||||||
$utf=hexdec(substr($parts[2],0,4));
|
|
||||||
$this->ascMap[$charset][$asc]=$utf;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->utfMap = array_flip($this->ascMap[$charset]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Error handler
|
|
||||||
function onError($err_code,$err_text){
|
|
||||||
$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]);
|
|
||||||
|
|
||||||
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++)
|
|
||||||
$res .= $this->_utf8ToChar($chars, $i);
|
|
||||||
|
|
||||||
return $res;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Char to UTF-8 sequence
|
|
||||||
function _charToUtf8(&$char){
|
|
||||||
$c = (int)$this->ascMap[$this->charset][$char];
|
|
||||||
if ($c < 0x80){
|
|
||||||
$char = chr($c);
|
|
||||||
}
|
|
||||||
else if($c<0x800) // 2 bytes
|
|
||||||
$char = (chr(0xC0 | $c>>6) . chr(0x80 | $c & 0x3F));
|
|
||||||
else if($c<0x10000) // 3 bytes
|
|
||||||
$char = (chr(0xE0 | $c>>12) . chr(0x80 | $c>>6 & 0x3F) . chr(0x80 | $c & 0x3F));
|
|
||||||
else if($c<0x200000) // 4 bytes
|
|
||||||
$char = (chr(0xF0 | $c>>18) . chr(0x80 | $c>>12 & 0x3F) . chr(0x80 | $c>>6 & 0x3F) . chr(0x80 | $c & 0x3F));
|
|
||||||
}
|
|
||||||
|
|
||||||
//UTF-8 sequence to single byte character
|
|
||||||
function _utf8ToChar(&$chars, &$idx){
|
|
||||||
if(($chars[$idx] >= 240) && ($chars[$idx] <= 255)){ // 4 bytes
|
|
||||||
$utf = (intval($chars[$idx]-240) << 18) +
|
|
||||||
(intval($chars[++$idx]-128) << 12) +
|
|
||||||
(intval($chars[++$idx]-128) << 6) +
|
|
||||||
(intval($chars[++$idx]-128) << 0);
|
|
||||||
}
|
|
||||||
else if (($chars[$idx] >= 224) && ($chars[$idx] <= 239)){ // 3 bytes
|
|
||||||
$utf = (intval($chars[$idx]-224) << 12) +
|
|
||||||
(intval($chars[++$idx]-128) << 6) +
|
|
||||||
(intval($chars[++$idx]-128) << 0);
|
|
||||||
}
|
|
||||||
else if (($chars[$idx] >= 192) && ($chars[$idx] <= 223)){ // 2 bytes
|
|
||||||
$utf = (intval($chars[$idx]-192) << 6) +
|
|
||||||
(intval($chars[++$idx]-128) << 0);
|
|
||||||
}
|
|
||||||
else{ // 1 byte
|
|
||||||
$utf = $chars[$idx];
|
|
||||||
}
|
|
||||||
if(array_key_exists($utf,$this->utfMap))
|
|
||||||
return chr($this->utfMap[$utf]);
|
|
||||||
else
|
|
||||||
return "?";
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
Loading…
Reference in New Issue