Merge branch 'master' into feature/redesign-7144

Conflicts:
	library/Icinga/Web/Menu.php
	public/css/icinga/menu.less
This commit is contained in:
Bernd Erk 2014-11-13 21:11:36 +01:00
commit 903219b302
518 changed files with 104633 additions and 118867 deletions

4
.gitattributes vendored
View File

@ -1 +1,5 @@
# Exclude files related to git when generating an archive
.git* export-ignore
# Normalize puppet manifests' line endings to LF on checkin and prevent conversion to CRLF when the files are checked out
.vagrant-puppet/* eol=lf

46
.gitignore vendored
View File

@ -1,46 +1,12 @@
# Exclude all hidden files
.*
# But not .gitignore, .gitattributes, .vagrant-puppet, .htaccess and .gitkeep
!.gitignore
!.gitattributes
!.vagrant-puppet
!public/.htaccess
!packages/rhel/usr/share/icingaweb/public/.htaccess
!public/.htaccess.in
!.gitkeep
build/
# Except those related to git and vagrant
!.git*
!.vagrant-puppet/*
development/
# ./configure output
config.log
autom4te.cache
autoscan*
config.status
Makefile
# cmd tester
modules/test/bin/extcmd_test
# misc test output
test/php/library/Icinga/Protocol/Statusdat/.cache
# Generated API documentation
doc/api
# Enabled modules
# Exclude enabled modules
config/enabledModules/
# User preferences
config/preferences/*.ini
# Application logfiles
var/log/*.log
# Packaging
/debian
*.tar.gz
*.komodoproject
# Exclude application log files
var/log/*

View File

@ -1 +0,0 @@
* -crlf

View File

@ -1,158 +0,0 @@
SHELL=/bin/sh
PACKAGE_TARNAME=@PACKAGE_TARNAME@
PACKAGE_NAME=@PACKAGE_NAME@
PACKAGE_VERSION=@PACKAGE_VERSION@
prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@
HTTPD_CONFIG_PATH=@httpd_config_path@
ICINGAWEB_CONFIG_PATH=@icingaweb_config_path@
ICINGAWEB_LOG_PATH=@icingaweb_log_path@
INSTALL=@INSTALL@
INSTALL_OPTS=@INSTALL_OPTS@
INSTALL_OPTS_WEB=@INSTALL_OPTS_WEB@
default:
@echo "IcingaWeb make targets: "
@printf "%b" " -install:\t\t\tInstall the application and overwrite configs\n"
@printf "%b" " -update:\t\t\tInstall the application without touching the configs\n"
@printf "%b" " -install-apache-config:\tInstall the apache configuration\n"
#
# Installs the whole application w\o httpd configurations
#
install: install-config install-basic ensure-writable-folders install-cli
#
# Install icingacli bin
#
install-cli:
$(INSTALL) -m 755 -d $(INSTALL_OPTS) $(bindir)
$(INSTALL) -m 755 $(INSTALL_OPTS) "./bin/icingacli" $(bindir)/icingacli;
#
# Installs the whole application w\o configuration
#
install-basic: install-static-files install-runtime-dirs ensure-writable-folders
#
# Updates only the application
#
update: install-application
#
# Removes files created by ./configure
#
clean:
if [ -f ./Makefile ];then \
rm ./Makefile; \
fi; \
if [ -f ./etc/apache/icingaweb.conf ];then \
rm ./etc/apache/icingaweb.conf; \
fi;
#
# Installs/copies all static files (executables, scripts, html, etc)
#
install-static-files: install-application copy-web-files-public copy-web-files-modules
#
# Installs all configuration files
#
install-config:
$(INSTALL) -m 755 $(INSTALL_OPTS_WEB) -d $(DESTDIR)$(ICINGAWEB_CONFIG_PATH)
@dirs=`cd ./config ; find . -mindepth 1 -type d `;\
for dir in $$dirs; do \
$(INSTALL) -m 755 $(INSTALL_OPTS_WEB) -d $(DESTDIR)$(ICINGAWEB_CONFIG_PATH)/"$$dir"; \
done;
@files=`cd ./config ; find . -mindepth 1 -type f \
-and ! -name ".*" -and ! -name "*.in"`; \
for file in $$files; do \
$(INSTALL) -m 644 $(INSTALL_OPTS_WEB) "./config/$$file" $(DESTDIR)$(ICINGAWEB_CONFIG_PATH)/"$$file"; \
done
#
# Installs runtime directories like the application cache
#
install-runtime-dirs:
$(INSTALL) -m 755 $(INSTALL_OPTS_WEB) -d $(DESTDIR)$(prefix)/application/cache
#
# Copies the tests into the installation directory
#
install-tests: copy-folder-tests
#
# Install configurations for apache2
#
install-apache-config:
$(INSTALL) -m 755 -d $(INSTALL_OPTS) $(DESTDIR)$(HTTPD_CONFIG_PATH)
$(INSTALL) -m 644 $(INSTALL_OPTS) "./etc/apache/icingaweb.conf" $(DESTDIR)$(HTTPD_CONFIG_PATH)/icingaweb.conf;
#
# Installs the php files to the prefix
#
install-application: copy-web-files-application copy-web-files-library install-cli
#
# Rule for copying folders and containing files (arbitary types), hidden files are excluded
#
copy-folder-%:
$(INSTALL) -m 755 $(INSTALL_OPTS) -d $(DESTDIR)$(prefix)/$*
@dirs=`find ./$* -mindepth 1 -type d `;\
for dir in $$dirs; do \
$(INSTALL) -m 755 $(INSTALL_OPTS) -d $(DESTDIR)$(prefix)/"$$dir"; \
done;
@files=`find ./$* -mindepth 1 -type f \
-and ! -name ".*"`; \
for file in $$files; do \
$(INSTALL) -m 644 $(INSTALL_OPTS) "$$file" $(DESTDIR)$(prefix)/"$$file"; \
done
ensure-writable-folders:
$(INSTALL) -m 775 $(INSTALL_OPTS_WEB) -d $(DESTDIR)$(prefix)/var/
$(INSTALL) -m 775 $(INSTALL_OPTS_WEB) -d $(DESTDIR)$(ICINGAWEB_LOG_PATH)
chmod -R 775 $(DESTDIR)$(ICINGAWEB_CONFIG_PATH)
#
# Rule for copying only php, *html, js and ini files. Hidden files are ignored
#
copy-web-files-%:
$(INSTALL) -m 755 $(INSTALL_OPTS) -d $(DESTDIR)$(prefix)/$*
@dirs=`find ./$* -mindepth 1 -type d `;\
for dir in $$dirs; do \
$(INSTALL) -m 755 $(INSTALL_OPTS_WEB) -d $(DESTDIR)$(prefix)/"$$dir"; \
done;
@files=`find ./$* -mindepth 1 -type f \
-name "*.php" -or -name "*.ini" -or -name "*.*html" \
-or -name "*.js" -or -name "*.css" -or -name "*.less" \
-or -name "*.otf" -or -name "*.ttf" -or -name "*.otf" \
-or -name "*.svg" -or -name "*.woff" -or -name "*.png" \
-and ! -name ".*"`; \
for file in $$files; do \
$(INSTALL) -m 644 $(INSTALL_OPTS_WEB) "$$file" $(DESTDIR)$(prefix)/"$$file"; \
done
#
# Create release or snapshot tarball
#
# TODO: Use git-archive
# create-tarball:
# @./bin/make-tarball --prefix $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)/
#
# create-tarball-nightly:
# ./bin/make-tarball --prefix $(PACKAGE_TARNAME)-$(PACKAGE_VERSION)-`date +%Y%m%d`-`git rev-parse --short HEAD`/

84
aclocal.m4 vendored
View File

@ -1,84 +0,0 @@
AC_DEFUN([AC_USER_GUESS],[
$2=$3
for x in $1; do
AC_MSG_CHECKING([if user $x exists])
AS_IF([ $GREP -q "^$x:" /etc/passwd ],
[ AC_MSG_RESULT([found]); $2=$x ; break],
[ AC_MSG_RESULT([not found]) ])
done
])
AC_DEFUN([AC_CHECK_PHP_MODULE],[
for x in $1;do
AC_MSG_CHECKING([if php has $x module])
AS_IF([ php -m | $GREP -iq "^$x$" ],
[ AC_MSG_RESULT([found]) ],
[ AC_MSG_ERROR([not found])])
done
])
AC_DEFUN([AC_CHECK_PHP_VERSION],[
AC_MSG_CHECKING([if php has at least version $1.$2.$3])
AS_IF([ test $1 -le `php -r 'echo PHP_MAJOR_VERSION;'` && \
test $2 -le `php -r 'echo PHP_MINOR_VERSION;'` && \
test $3 -le `php -r 'echo PHP_RELEASE_VERSION;'`],
[ AC_MSG_RESULT([PHP version is correct])],
[ AC_MSG_ERROR([You need at least PHP version $1.$2.$3])])
])
AC_DEFUN([AC_CHECK_PHP_INCLUDE],[
AC_MSG_CHECKING([if PHP runtime dependency '$2' is available])
AS_IF([ php -r 'require "$1";' ],
[ AC_MSG_RESULT([PHP runtime dependency fulfilled])],
[ AC_MSG_ERROR([PHP runtime dependency '$2' is missing])])
])
AC_DEFUN([AC_GROUP_GUESS],[
$2=$3
for x in $1; do
AC_MSG_CHECKING([if group $x exists])
AS_IF([ $GREP -q "^$x:" /etc/group ],
[ AC_MSG_RESULT([found]); $2=$x ; break],
[ AC_MSG_RESULT([not found]) ])
done
])
AC_DEFUN([AC_CHECK_BIN], [
AC_PATH_PROG([$1],[$2],[not found])
AS_IF([ test "XX${$1}" == "XXnot found" ],
[ AC_MSG_WARN([binary $2 not found in PATH]) ])
test "XX${$1}" == "XXnot found" && $1=""
])
AC_DEFUN([AC_PATH_GUESS], [
$2=$3
for x in $1; do
AC_MSG_CHECKING([if path $x exists])
AS_IF([test -d $x],
[AC_MSG_RESULT([found]); $2=$x; break],
[AC_MSG_RESULT([not found])]
)
done
])
# ICINGA_CHECK_DBTYPE(DBTYPE, ARGUMENT_NAME)
# ------------------------------------------
AC_DEFUN([ICINGA_CHECK_DBTYPE], [
AC_MSG_CHECKING([Testing database type for $2])
AS_IF(echo "$1" | $GREP -q "^\(my\|pg\)sql$",
AC_MSG_RESULT([OK ($1)]),
AC_MSG_ERROR([$1])
)
])
# ICINGA_CHECK_BACKENDTYPE(BACKENDTYPE, ARGUMENT_NAME)
# ------------------------------------------
AC_DEFUN([ICINGA_CHECK_BACKENDTYPE], [
AC_MSG_CHECKING([Testing backend type for $2])
AS_IF(echo "$1" | $GREP -q "^\(ido\|statusdat\|livestatus\)$",
AC_MSG_RESULT([OK ($1)]),
AC_MSG_ERROR([$1])
)
])

View File

@ -25,9 +25,9 @@ class PreferenceController extends BasePreferenceController
public static function createProvidedTabs()
{
return array(
'general' => new Tab(
'preferences' => new Tab(
array(
'title' => 'General settings',
'title' => t('Preferences'),
'url' => Url::fromPath('/preference')
)
)
@ -51,6 +51,6 @@ class PreferenceController extends BasePreferenceController
$form->handleRequest();
$this->view->form = $form;
$this->getTabs()->activate('general');
$this->getTabs()->activate('preferences');
}
}

View File

@ -29,44 +29,6 @@ class ApplicationConfigForm extends Form
*/
public function createElements(array $formData)
{
$languages = array();
foreach (Translator::getAvailableLocaleCodes() as $language) {
$languages[$language] = $language;
}
$this->addElement(
'select',
'global_language',
array(
'label' => t('Default Language'),
'required' => true,
'multiOptions' => $languages,
'description' => t(
'Select the language to use by default. Can be overwritten by a user in his preferences.'
)
)
);
$tzList = array();
foreach (DateTimeZone::listIdentifiers() as $tz) {
$tzList[$tz] = $tz;
}
$this->addElement(
'select',
'global_timezone',
array(
'label' => t('Default Application Timezone'),
'required' => true,
'multiOptions' => $tzList,
'description' => t(
'Select the timezone to be used as the default. User\'s can set their own timezone if'
. ' they like to, but this is the timezone to be used as the default setting .'
),
'value' => date_default_timezone_get()
)
);
$this->addElement(
'text',
'global_modulePath',

View File

@ -7,10 +7,12 @@ namespace Icinga\Form;
use Exception;
use DateTimeZone;
use Icinga\Application\Logger;
use Icinga\Authentication\Manager;
use Icinga\User\Preferences;
use Icinga\User\Preferences\PreferencesStore;
use Icinga\Util\TimezoneDetect;
use Icinga\Util\Translator;
use Icinga\Web\Controller\ControllerTabCollector;
use Icinga\Web\Form;
use Icinga\Web\Notification;
use Icinga\Web\Request;
@ -41,7 +43,6 @@ class PreferenceForm extends Form
public function init()
{
$this->setName('form_config_preferences');
$this->setSubmitLabel(t('Save Changes'));
}
/**
@ -76,7 +77,6 @@ class PreferenceForm extends Form
*/
public function save()
{
$this->store->load(); // Necessary for patching existing preferences
$this->store->save($this->preferences);
return $this;
}
@ -88,9 +88,11 @@ class PreferenceForm extends Form
*/
public function onSuccess(Request $request)
{
$this->preferences = new Preferences($this->store->load());
$webPreferences = $this->preferences->get('icingaweb', array());
foreach ($this->getValues() as $key => $value) {
if ($value === null) {
if ($value === null || $value === 'autodetect') {
if (isset($webPreferences[$key])) {
unset($webPreferences[$key]);
}
@ -103,8 +105,12 @@ class PreferenceForm extends Form
Session::getSession()->user->setPreferences($this->preferences);
try {
$this->save();
Notification::success(t('Preferences successfully saved'));
if ($this->getElement('btn_submit_preferences')->isChecked()) {
$this->save();
Notification::success(t('Preferences successfully saved'));
} else {
Notification::success(t('Preferences successfully saved for the current session'));
}
} catch (Exception $e) {
Logger::error($e);
Notification::error($e->getMessage());
@ -118,9 +124,17 @@ class PreferenceForm extends Form
*/
public function onRequest(Request $request)
{
$values = $this->preferences->get('icingaweb', array());
$values['browser_language'] = false === isset($values['language']);
$values['local_timezone'] = false === isset($values['timezone']);
$auth = Manager::getInstance();
$values = $auth->getUser()->getPreferences()->get('icingaweb');
if (! isset($values['language'])) {
$values['language'] = 'autodetect';
}
if (! isset($values['timezone'])) {
$values['timezone'] = 'autodetect';
}
$this->populate($values);
}
@ -130,72 +144,40 @@ class PreferenceForm extends Form
public function createElements(array $formData)
{
$languages = array();
$languages['autodetect'] = sprintf(t('Browser (%s)', 'preferences.form'), $this->getLocale());
foreach (Translator::getAvailableLocaleCodes() as $language) {
$languages[$language] = $language;
}
$tzList = array();
$tzList['autodetect'] = sprintf(t('Browser (%s)', 'preferences.form'), $this->getDefaultTimezone());
foreach (DateTimeZone::listIdentifiers() as $tz) {
$tzList[$tz] = $tz;
}
$this->addElement(
'checkbox',
'browser_language',
array(
'ignore' => true,
'required' => true,
'autosubmit' => true,
'value' => true,
'label' => t('Use your browser\'s language suggestions')
)
);
$useBrowserLanguage = isset($formData['browser_language']) ? $formData['browser_language'] == 1 : true;
$languageSelection = $this->createElement(
'select',
'language',
array(
'required' => false === $useBrowserLanguage,
'required' => true,
'label' => t('Your Current Language'),
'description' => t('Use the following language to display texts and messages'),
'multiOptions' => $languages,
'value' => substr(setlocale(LC_ALL, 0), 0, 5)
)
);
if ($useBrowserLanguage) {
$languageSelection->setAttrib('disabled', 'disabled');
}
$this->addElement($languageSelection);
$this->addElement(
'checkbox',
'local_timezone',
array(
'ignore' => true,
'required' => true,
'autosubmit' => true,
'value' => true,
'label' => t('Use your local timezone')
)
);
$useLocalTimezone = isset($formData['local_timezone']) ? $formData['local_timezone'] == 1 : true;
$timezoneSelection = $this->createElement(
'select',
'timezone',
array(
'required' => false === $useLocalTimezone,
'required' => true,
'label' => t('Your Current Timezone'),
'description' => t('Use the following timezone for dates and times'),
'multiOptions' => $tzList,
'value' => $this->getDefaultTimezone()
)
);
if ($useLocalTimezone) {
$timezoneSelection->setAttrib('disabled', 'disabled');
}
$this->addElement($timezoneSelection);
$this->addElement(
'checkbox',
@ -205,6 +187,43 @@ class PreferenceForm extends Form
'label' => t('Use benchmark')
)
);
$this->addElement(
'submit',
'btn_submit_preferences',
array(
'ignore' => true,
'label' => t('Save to the Preferences'),
'decorators' => array(
'ViewHelper',
array('HtmlTag', array('tag' => 'div'))
)
)
);
$this->addElement(
'submit',
'btn_submit_session',
array(
'ignore' => true,
'label' => t('Save for the current Session'),
'decorators' => array(
'ViewHelper',
array('HtmlTag', array('tag' => 'div'))
)
)
);
$this->addDisplayGroup(
array('btn_submit_preferences', 'btn_submit_session'),
'submit_buttons',
array(
'decorators' => array(
'FormElements',
array('HtmlTag', array('tag' => 'div', 'class' => 'control-group'))
)
)
);
}
/**
@ -221,4 +240,15 @@ class PreferenceForm extends Form
return date_default_timezone_get();
}
}
/**
* Return the preferred locale based on the given HTTP header and the available translations
*
* @return string
*/
protected function getLocale()
{
$locale = Translator::getPreferredLocaleCode($_SERVER['HTTP_ACCEPT_LANGUAGE']);
return $locale;
}
}

6
config/.gitignore vendored
View File

@ -1,6 +0,0 @@
authentication.ini
config.ini
modules/monitoring/backends.ini
modules/monitoring/instances.ini
resources.ini

View File

@ -1,29 +0,0 @@
; authentication.ini
;
; Each section listed in this configuration represents a backend used to authenticate users. The backend configurations
; must define a resource referring to a configured database or LDAP connection in the INI file resources.ini.
;
; The backends will be processed from top to bottom using the first backend for authentication which reports that
; the user trying to log in is available.
[autologin]
backend = autologin
;
; If you want to strip the domain
; strip_username_regexp = /\@[^$]+$/
[internal_ldap_authentication]
@ldap_auth_disabled@
backend = ldap
resource = internal_ldap
user_class = @ldap_user_objectclass@
user_name_attribute = @ldap_attribute_username@
group_base_dn = @ldap_group_base_dn@
group_attribute = @ldap_group_attribute@
group_member_attribute = @ldap_group_member_attribute@
group_class = @ldap_group_class@
[internal_db_authentication]
@internal_auth_disabled@
backend = db
resource = internal_db

View File

@ -1,41 +0,0 @@
[global]
timezone = "Europe/Berlin"
; Contains the directories that will be searched for available modules. Modules that
; don't exist in these directories can still be symlinked in the module folder, but
; won't show up in the list of disabled modules
; modulePath = "/vagrant/modules:/usr/share/icingaweb/modules"
[logging]
enable = true
; Writing to a Stream
type = "file"
; Write data to the following file
target = "@icingaweb_log_path@/icingaweb.log"
; Write data to a PHP stream
;target = "php://output"
; Writing to the System Log
;type = "syslog"
; Prefix all syslog messages generated with the string "icingaweb"
;application = "icingaweb"
;facility = "LOG_USER"
level = 1
; The default level is WARNING, which means that only events of this level and
; above will be tracked. Level numbers descend in order of importance where
; ERROR (0) is the most important level and DEBUG (3) is the least important
; level:
;
; ERROR = 0 - Error: error conditions
; WARNING = 1 - Warning: warning conditions
; INFO = 2 - Informational: informational messages
; DEBUG = 3 - Debug: debug messages
[preferences]
; Use INI file storage to save preferences to a local disk
type = "ini"
; Use database storage to save preferences in either a MySQL or PostgreSQL database
;type = db
;resource = icingaweb-mysql

View File

@ -1 +0,0 @@
Enabled modules shall be symlinked here.

View File

@ -1,4 +0,0 @@
# Use given CA file
TLS_REQCERT demand
TLS_CACERT @prefix@/config/ssl/cacerts/trusted.crt

View File

@ -1,4 +0,0 @@
# This config file will allow TLS-based LDAP connections ignoring
# unknown certificates
TLS_REQCERT never

View File

@ -1,9 +0,0 @@
[membership-set1]
backend = groupX
users = icingaadmin,tgelf
groups = admin,users
[membership-set2]
backend = groupY
users = icingaadmin
groups = support1,support2

View File

@ -1,19 +0,0 @@
[localdb]
@ido_enabled@
type = ido
resource = "ido"
[locallive]
@livestatus_enabled@
type = livestatus
resource = livestatus
[localfile]
@statusdat_enabled@
type = statusdat
resource = statusdat
;[localfailsafe]
;enabled=false
;type = combo
;backends = localdb, locallive, localfile

View File

@ -1,2 +0,0 @@
[security]
protected_customvars = "*pw*,*pass*,community"

View File

@ -1,2 +0,0 @@
[icinga]
path = "@icinga_commandpipe@"

View File

@ -1,11 +0,0 @@
[test1]
users = icingaadmin,root,tgelf
groups = support2,support2
permission_1 = monitoring, monitoring/log
permission_2 = monitoring/command/all
[test2]
users = root
groups = admin
permission_2 = test/permission/1, test/permission/2
permission_3 = test/permission/15, test/permission/7

View File

@ -1,55 +0,0 @@
; resources.ini
;
; The configuration file *resources.ini* contains data sources that
; can be referenced in other configurations. This allows you to manage
; all connections to SQL databases in one single place, avoiding the need
; to edit several different configuration files, when the connection
; information of a resource change.
;
; Each section represents a resource, with the section name being the
; identifier used to reference this certain section. Depending on the
; resource type, each section contains different properties. The property
; *type* defines the resource type and thus how the properties are going to
; be interpreted. Currently only the resource type *db* is available.
[internal_db]
type = db
db = @internal_db_type@
host = @internal_db_host@
port = @internal_db_port@
password = @internal_db_password@
username = @internal_db_user@
dbname = @internal_db_name@
[ido]
type = db
db = @ido_db_type@
host = @ido_host@
port = @ido_port@
password = @ido_password@
username = @ido_user@
dbname = @ido_db_name@
[statusdat]
type = statusdat
status_file = @statusdat_file@
object_file = @objects_cache_file@
[livestatus]
type = livestatus
socket = @livestatus_socket@
[internal_ldap]
type = ldap
hostname = @ldap_host@
port = @ldap_port@
root_dn = "@ldap_rootdn@"
bind_dn = "@ldap_binddn@"
bind_pw = @ldap_bindpass@
[logfile]
type = file
filename = "@icingaweb_log_path@/icingaweb.log"
fields = "/^(?<datetime>[0-9]{4}(-[0-9]{2}){2}T[0-9]{2}(:[0-9]{2}){2}(\\+[0-9]{2}:[0-9]{2})?) - (?<loglevel>[A-Za-z]+) - (?<message>.*)$/"
; format: PCRE

View File

@ -1,16 +0,0 @@
[test1]
users = "user1"
groups = "no-such-group"
name = "monitoring/filter"
restriction = "hostgroup=lalala&service_description=*ping*"
[test2]
users = "user2"
name = "monitoring/filter"
restriction = "hostgroup=kunden*&service_description=*ping*"
[test3]
users = "user3"
name = "monitoring/filter"
restriction = "hostgroup=kunden*&service_description=*ping-ping*"

4125
configure vendored

File diff suppressed because it is too large Load Diff

View File

@ -1,448 +0,0 @@
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.61])
AC_INIT([IcingaWeb2], [1.0.0], [info@icinga.org])
AC_PREFIX_DEFAULT(/usr/local/icingaweb)
if test "x$prefix" = "xNONE" ; then
installDir="/usr/local/icingaweb"
prefix=$installDir
else
installDir=$prefix
fi
# Checks for programs.
AC_PROG_INSTALL
AC_PROG_GREP
AC_PROG_SED
# Check for php
AC_ARG_VAR([PHP],[php cli binary])
AC_CHECK_PHP_INCLUDE([Zend/Application.php],[Zend Framework])
AC_CHECK_PHP_VERSION([5],[3],[0])
AC_CHECK_BIN([PHP], [php])
# Checks for libraries.
AC_CHECK_PHP_MODULE([sockets json])
#
# Configuration files
#
AC_ARG_WITH([icingaweb_config_path],
AS_HELP_STRING([--with-icingaweb-config-path=PATH], [Configuration path for icinga web (default $prefix/config)]),
icingaweb_config_path=$withval,
icingaweb_config_path=$prefix/config
)
#
# Log files
#
AC_ARG_WITH([icingaweb_log_path],
AS_HELP_STRING([--with-icingaweb-log-path=PATH], [Log path for icinga web (default $prefix/var/log)]),
icingaweb_log_path=$withval,
icingaweb_log_path=$prefix/var/log
)
#
# Users for webfiles
#
AC_ARG_WITH([web_user],
AS_HELP_STRING([--with-web-user=USER], [username for web writable files (default www-data)]),
web_user=$withval,
AC_USER_GUESS([www wwwrun www-data apache httpd nobody],[web_user],[www-data])
)
AC_ARG_WITH([web_group],
AS_HELP_STRING([--with-web-group=GROUP], [group for web writable files (default www-data)]),
web_group=$withval,
AC_GROUP_GUESS([www www-data apache httpd nogroup nobody],[web_group], [www-data])
)
AC_ARG_WITH([web_path],
AS_HELP_STRING([--with-web-path=PATH], [web sub path (default /icingaweb)]),
web_path=$withval,
web_path=/icingaweb
)
AC_ARG_WITH([httpd_config_path],
AS_HELP_STRING([--with-httpd-config-path=PATH], [Include folder apache2 (default /etc/apache2/conf.d)]),
httpd_config_path=$withval,
httpd_config_path=AC_PATH_GUESS([/etc/httpd/conf.d /etc/apache2/conf-available /etc/apache2/conf.d /etc/apache/conf.d], [httpd_config_path], [/etc/apache2/conf.d])
)
#
# Users and groups for installation
#
AC_ARG_WITH([bin_user],
AS_HELP_STRING([--with-bin-user=USER], [user for all other files (default root)]),
bin_user=$withval,
bin_user=root
)
AC_ARG_WITH([bin_group],
AS_HELP_STRING([--with-bin-group=GROUP], [group for all other files (default bin)]),
bin_group=$withval,
bin_group=bin
)
#
# Internal database setup
#
AC_ARG_WITH([internal_db_type],
AS_HELP_STRING([--with-internal-db-type=TYPE], [database type to use for internal database (default mysql, supported: pgsql, mysql)]),
internal_db_type=$withval,
internal_db_type=mysql
)
ICINGA_CHECK_DBTYPE($internal_db_type, [--with-internal-db-type])
AC_ARG_WITH([internal_db_name],
AS_HELP_STRING([--with-internal-db-name=NAME], [database name to use for internal database (default icingaweb)]),
internal_db_name=$withval,
internal_db_name=icingaweb
)
AC_ARG_WITH([internal_db_host],
AS_HELP_STRING([--with-internal-db-host=HOST], [database host to use for internal database (default localhost)]),
internal_db_host=$withval,
internal_db_host=localhost
)
AC_ARG_WITH([internal_db_port],
AS_HELP_STRING([--with-internal-db-port=PORT], [database port to use for internal database (default: 3306 for mysql, 5432 for pgsql)]),
internal_db_port=$withval,
internal_db_port=db_default_port
)
AC_ARG_WITH([internal_db_password],
AS_HELP_STRING([--with-internal-db-password=PASS], [database pass to use for internal database (default icingaweb)]),
internal_db_password=$withval,
internal_db_password=icingaweb
)
AC_ARG_WITH([internal_db_user],
AS_HELP_STRING([--with-internal-db-user=USER], [database user to use for internal database (default icingaweb)]),
internal_db_user=$withval,
internal_db_user=icingaweb
)
#
# Authorization method
#
AC_ARG_WITH([internal_authentication],
AC_HELP_STRING([--with-internal-authentication], [use the internal database for authentication (default: yes)]),
internal_authentication=$withval,
internal_authentication=yes
)
AC_ARG_WITH([ldap_authentication],
AC_HELP_STRING([--with-ldap-authentication], [use a ldap server for authentication (default: no)]),
ldap_authentication=$withval,
ldap_authentication=no
)
#
# LDAP Authorization
#
AC_ARG_WITH([ldap_host],
AS_HELP_STRING([--with-ldap-host=HOST], [host to use for authentication via ldap (default localhost)]),
ldap_host=$withval,
ldap_host=localhost
)
AC_ARG_WITH([ldap_port],
AS_HELP_STRING([--with-ldap-port=PORT], [port to use for authentication via ldap (default 389)]),
ldap_port=$withval,
ldap_port=389
)
AC_ARG_WITH([ldap_binddn],
AS_HELP_STRING([--with-ldap-binddn=DN], [dn to use for retrieving user information via ldap (default cn=admin, cn=config)]),
ldap_binddn=$withval,
ldap_binddn=["cn=admin,cn=config"]
)
AC_ARG_WITH([ldap_bindpass],
AS_HELP_STRING([--with-ldap-bindpass=PASS], [password to use for retrieving user information via ldap (default admin)]),
ldap_bindpass=$withval,
ldap_bindpass=["admin"]
)
AC_ARG_WITH([ldap_rootdn],
AS_HELP_STRING([--with-ldap-rootdn=LDAP_ATTRIBUTE], [root dn to use for user lookup (default ou=people, dc=icinga, dc=org)]),
ldap_rootdn=$withval,
ldap_rootdn=["ou=people, dc=icinga, dc=org"]
)
AC_ARG_WITH([ldap_user_objectclass],
AS_HELP_STRING([--with-ldap-user-objectclass=LDAP_OBJECT_CLASS], [ldap object class to use for user authentication (default: inetOrgPerson)]),
ldap_user_objectclass=$withval,
ldap_user_objectclass="inetOrgPerson"
)
AC_ARG_WITH([ldap_attribute_username],
AS_HELP_STRING([--with-ldap-attribute-username=LDAP_ATTRIBUTE], [user attribute to use for the username (default: uid)]),
ldap_attribute_username=$withval,
ldap_attribute_username="uid"
)
#
# Icinga backend selection
#
AC_ARG_WITH([icinga_backend],
AS_HELP_STRING([--with-icinga-backend=(ido, statusdat, livestatus)], [backend to use for rb (default: statusdat)]),
icinga_backend=$withval,
icinga_backend="statusdat"
)
ICINGA_CHECK_BACKENDTYPE($icinga_backend, [--with-icinga-backend])
#
# Ido settings
#
AC_ARG_WITH([ido_db_type],
AS_HELP_STRING([--with-ido-db-type=(mysql, pgsql)], [database engine to use for retrieving data from the ido db (default: mysql)]),
ido_db_type=$withval,
ido_db_type="mysql"
)
ICINGA_CHECK_DBTYPE($ido_db_type, [--with-ido-db-type])
AC_ARG_WITH([ido_host],
AS_HELP_STRING([--with-ido-host=HOST], [host to use for retrieving data from the ido db (default: localhost)]),
ido_host=$withval,
ido_host="localhost"
)
AC_ARG_WITH([ido_port],
AS_HELP_STRING([--with-ido-port=PORT], [backend to use for retrieving data from the ido db (default: 3306 for mysql. 5432 for pgsql)]),
ido_port=$withval,
ido_port=db_default_port
)
AC_ARG_WITH([ido_db_name],
AS_HELP_STRING([--with-ido-db-name=DATABASE], [database name to use for retrieving data from the ido db (default: icinga)]),
ido_db_name=$withval,
ido_db_name="icinga"
)
AC_ARG_WITH([ido_user],
AS_HELP_STRING([--with-ido-user=USER], [user to use for retrieving data from the ido db (default: icinga)]),
ido_user=$withval,
ido_user="icinga"
)
AC_ARG_WITH([ido_password],
AS_HELP_STRING([--with-ido-password=PASSWORD], [password to use for retrieving data from the ido db (default: icinga)]),
ido_password=$withval,
ido_password="icinga"
)
#
# Statusdat file location
#
AC_ARG_WITH([statusdat_file],
AS_HELP_STRING([--with-statusdat-file=FILE], [location of the status.dat file when retrieving data from status.dat (default: /usr/local/icinga/var/status.dat)]),
statusdat_file=$withval,
statusdat_file="/usr/local/icinga/var/status.dat"
)
AC_ARG_WITH([objects_cache_file],
AS_HELP_STRING([--with-objects-cache-file=FILE], [location of the objects.cache file when retrieving data from status.dat (default: /usr/local/icinga/var/objects.cache)]),
objects_cache_file=$withval,
objects_cache_file="/usr/local/icinga/var/objects.cache"
)
#
# Livestatus connection
#
AC_ARG_WITH([livestatus_socket],
AS_HELP_STRING([--with-livestatus-socket=FILE], [location of the livestatus socket (default: /usr/local/icinga/var/rw/live)]),
livestatus_socket=$withval,
livestatus_socket="/usr/local/icinga/var/rw/live"
)
#
# Icinga commandpipe
#
AC_ARG_WITH([icinga_commandpipe],
AS_HELP_STRING([--with-icinga-commandpipe=FILE], [location of the command pipe used for sending commands (default: /usr/local/icinga/var/rw/icinga.cmd)]),
icinga_commandpipe=$withval,
icinga_commandpipe="/usr/local/icinga/var/rw/icinga.cmd"
)
AC_ARG_WITH([objects_cache_file],
AS_HELP_STRING([--with-objects-file=FILE], [location of the objects.cache file when retrieving data from status.dat (default: /usr/local/icinga/var/objects.cache)]),
objects_cache_file=$withval,
objects_cache_file="/usr/local/icinga/var/objects.cache"
)
#
# Livestatus connection
#
AC_ARG_WITH([livestatus_socket],
AS_HELP_STRING([--with-livestatus-socket=FILE], [location of the livestatus socket (default: /usr/local/icinga/var/rw/live)]),
livestatus_socket=$withval,
livestatus_socket="/usr/local/icinga/var/rw/live"
)
#
# Icinga commandpipe
#
AC_ARG_WITH([icinga_commandpipe],
AS_HELP_STRING([--with-icinga-commandpipe=FILE], [location of the command pipe used for sending commands (default: /usr/local/icinga/var/rw/icinga.cmd)]),
icinga_commandpipe=$withval,
icinga_commandpipe="/usr/local/icinga/var/rw/icinga.cmd"
)
# Installation options
INSTALL_OPTS="-o $bin_user -g $bin_group"
INSTALL_OPTS_WEB="-o $web_user -g $web_group"
AS_IF([test "x$internal_db_type" = xmysql], [
AC_CHECK_PHP_INCLUDE([Zend/Db/Adapter/Pdo/Mysql.php],[Zend Framework - MySQL PDO Adapter])
AC_CHECK_PHP_MODULE([mysql])
AS_IF([test "x$internal_db_port" == xdb_default_port], [internal_db_port=3306])
])
AS_IF([test "x$ido_db_type" = xmysql], [
AC_CHECK_PHP_INCLUDE([Zend/Db/Adapter/Pdo/Mysql.php],[Zend Framework - MySQL PDO Adapter])
AC_CHECK_PHP_MODULE([mysql])
AS_IF([test "x$ido_port" = xdb_default_port], [ido_port=3306])
])
AS_IF([test "x$internal_db_type" = xpgsql], [
AC_CHECK_PHP_INCLUDE([Zend/Db/Adapter/Pdo/Pgsql.php],[Zend Framework - PostgreSQL PDO Adapter])
AC_CHECK_PHP_MODULE([pgsql])
AS_IF([test "x$internal_db_port" = xdb_default_port], [internal_db_port=5432])
])
AS_IF([test "x$ido_db_type" = xpgsql], [
AC_CHECK_PHP_INCLUDE([Zend/Db/Adapter/Pdo/Pgsql.php],[Zend Framework - PostgreSQL PDO Adapter])
AC_CHECK_PHP_MODULE([pgsql])
AS_IF([test "x$ido_port" = xdb_default_port], [ido_port=5432])
])
#
# Disable authentication backends
#
ido_enabled="disabled = \"1\""
statusdat_enabled="disabled = \"1\""
livestatus_enabled="disabled = \"1\""
AS_CASE([$icinga_backend],
["ido"], [ido_enabled=""],
["statusdat"], [statusdat_enabled=""],
["livestatus"], [livestatus_enabled=""],
[statusdat_enabled=""])
ldap_auth_disabled="disabled = \"1\""
AS_IF([test "x$ldap_authentication" != xno],
AC_CHECK_PHP_MODULE([ldap])
ldap_auth_disabled=""
)
internal_auth_disabled="disabled = \"1\""
AS_IF([test "x$internal_authentication" != xno],
AC_CHECK_PHP_MODULE([ldap])
internal_auth_disabled=""
)
#
# Substitution variables
#
# Installation directives
AC_SUBST(app_name)
AC_SUBST(web_user)
AC_SUBST(web_group)
AC_SUBST(web_path)
AC_SUBST(httpd_config_path)
AC_SUBST(bin_user)
AC_SUBST(bin_group)
AC_SUBST(icingaweb_config_path)
AC_SUBST(icingaweb_log_path)
# Internal db setup
AC_SUBST(internal_db_type)
AC_SUBST(internal_db_name)
AC_SUBST(internal_db_host)
AC_SUBST(internal_db_port)
AC_SUBST(internal_db_user)
AC_SUBST(internal_db_password)
# ldap setup
AC_SUBST(ldap_host)
AC_SUBST(ldap_port)
AC_SUBST(ldap_rootdn)
AC_SUBST(ldap_binddn)
AC_SUBST(ldap_bindpass)
AC_SUBST(ldap_user_objectclass)
AC_SUBST(ldap_attribute_basedn)
AC_SUBST(ldap_attribute_username)
# backend setup
AC_SUBST(icinga_backend)
# ido backend variables
AC_SUBST(ido_enabled)
AC_SUBST(ido_db_type)
AC_SUBST(ido_host)
AC_SUBST(ido_port)
AC_SUBST(ido_db_name)
AC_SUBST(ido_user)
AC_SUBST(ido_password)
# status.dat backend
AC_SUBST(statusdat_enabled)
AC_SUBST(statusdat_file)
AC_SUBST(objects_cache_file)
# livestatus backend
AC_SUBST(livestatus_socket)
AC_SUBST(livestatus_enabled)
# command pipe
AC_SUBST(icinga_commandpipe)
# Comment placeholders for toggling backends
AC_SUBST(ldap_auth_disabled)
AC_SUBST(internal_auth_disabled)
# Application and installation
AC_SUBST(PHP)
AC_SUBST(INSTALL_OPTS)
AC_SUBST(INSTALL_OPTS_WEB)
#
# Create config files
#
AC_CONFIG_FILES([
Makefile
config/authentication.ini
config/config.ini
config/resources.ini
config/modules/monitoring/backends.ini
config/modules/monitoring/instances.ini
etc/apache/icingaweb.conf
])
#
# Commit and write
#
AC_OUTPUT

View File

View File

@ -1,27 +0,0 @@
# Create API documentation
## Prerequisites
You need phpDocumentor 2 installed on your system to create the api
documentation. Please visit [phpdoc's website](http://phpdoc.org/) for more
information. Additionally, the graphviz package is required to be installed.
## Configuration
phpDocumentator is configured with xml configuration reside in doc/phpdoc.xml.
In there you'll find the target path where the documentation is created as
html. Default location is doc/api/. Just point to index.html in this directory
with a browser.
If you generated the documentation already, you can follow [this link](apidoc/idnex.html).
## Generation
Change to Icinga Web 2 root directory (source tree) and run:
bin/createapidoc.sh
## Options for createapidoc.sh
--build Optional, silent build mode
--help Displays help message

View File

@ -1 +0,0 @@
icingaweb.conf

View File

@ -1,32 +0,0 @@
Alias @web_path@ "@prefix@/public"
<Directory "@prefix@/public">
Options SymLinksIfOwnerMatch
AllowOverride None
<IfModule mod_authz_core.c>
# Apache 2.4
<RequireAll>
Require all granted
</RequireAll>
</IfModule>
<IfModule !mod_authz_core.c>
# Apache 2.2
Order allow,deny
Allow from all
</IfModule>
SetEnv ICINGAWEB_CONFIGDIR @icingaweb_config_path@
EnableSendfile Off
RewriteEngine on
RewriteBase @web_path@/
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
</Directory>

View File

@ -27,9 +27,10 @@ CREATE TABLE `icingaweb_user`(
CREATE TABLE `icingaweb_user_preference`(
`username` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
`section` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
`name` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
`value` varchar(255) NOT NULL,
`ctime` timestamp NULL DEFAULT NULL,
`mtime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`username`,`name`)
PRIMARY KEY (`username`,`section`,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

View File

@ -1,520 +0,0 @@
#!/bin/sh
# install - install a program, script, or datafile
scriptversion=2009-04-28.21; # UTC
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
# following copyright and license.
#
# Copyright (C) 1994 X Consortium
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
# Except as contained in this notice, the name of the X Consortium shall not
# be used in advertising or otherwise to promote the sale, use or other deal-
# ings in this Software without prior written authorization from the X Consor-
# tium.
#
#
# FSF changes to this file are in the public domain.
#
# Calling this script install-sh is preferred over install.sh, to prevent
# `make' implicit rules from creating a file called install from it
# when there is no Makefile.
#
# This script is compatible with the BSD install script, but was written
# from scratch.
nl='
'
IFS=" "" $nl"
# set DOITPROG to echo to test this script
# Don't use :- since 4.3BSD and earlier shells don't like it.
doit=${DOITPROG-}
if test -z "$doit"; then
doit_exec=exec
else
doit_exec=$doit
fi
# Put in absolute file names if you don't have them in your path;
# or use environment vars.
chgrpprog=${CHGRPPROG-chgrp}
chmodprog=${CHMODPROG-chmod}
chownprog=${CHOWNPROG-chown}
cmpprog=${CMPPROG-cmp}
cpprog=${CPPROG-cp}
mkdirprog=${MKDIRPROG-mkdir}
mvprog=${MVPROG-mv}
rmprog=${RMPROG-rm}
stripprog=${STRIPPROG-strip}
posix_glob='?'
initialize_posix_glob='
test "$posix_glob" != "?" || {
if (set -f) 2>/dev/null; then
posix_glob=
else
posix_glob=:
fi
}
'
posix_mkdir=
# Desired mode of installed file.
mode=0755
chgrpcmd=
chmodcmd=$chmodprog
chowncmd=
mvcmd=$mvprog
rmcmd="$rmprog -f"
stripcmd=
src=
dst=
dir_arg=
dst_arg=
copy_on_change=false
no_target_directory=
usage="\
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
or: $0 [OPTION]... SRCFILES... DIRECTORY
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
or: $0 [OPTION]... -d DIRECTORIES...
In the 1st form, copy SRCFILE to DSTFILE.
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
In the 4th, create DIRECTORIES.
Options:
--help display this help and exit.
--version display version info and exit.
-c (ignored)
-C install only if different (preserve the last data modification time)
-d create directories instead of installing files.
-g GROUP $chgrpprog installed files to GROUP.
-m MODE $chmodprog installed files to MODE.
-o USER $chownprog installed files to USER.
-s $stripprog installed files.
-t DIRECTORY install into DIRECTORY.
-T report an error if DSTFILE is a directory.
Environment variables override the default commands:
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
RMPROG STRIPPROG
"
while test $# -ne 0; do
case $1 in
-c) ;;
-C) copy_on_change=true;;
-d) dir_arg=true;;
-g) chgrpcmd="$chgrpprog $2"
shift;;
--help) echo "$usage"; exit $?;;
-m) mode=$2
case $mode in
*' '* | *' '* | *'
'* | *'*'* | *'?'* | *'['*)
echo "$0: invalid mode: $mode" >&2
exit 1;;
esac
shift;;
-o) chowncmd="$chownprog $2"
shift;;
-s) stripcmd=$stripprog;;
-t) dst_arg=$2
shift;;
-T) no_target_directory=true;;
--version) echo "$0 $scriptversion"; exit $?;;
--) shift
break;;
-*) echo "$0: invalid option: $1" >&2
exit 1;;
*) break;;
esac
shift
done
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
# When -d is used, all remaining arguments are directories to create.
# When -t is used, the destination is already specified.
# Otherwise, the last argument is the destination. Remove it from $@.
for arg
do
if test -n "$dst_arg"; then
# $@ is not empty: it contains at least $arg.
set fnord "$@" "$dst_arg"
shift # fnord
fi
shift # arg
dst_arg=$arg
done
fi
if test $# -eq 0; then
if test -z "$dir_arg"; then
echo "$0: no input file specified." >&2
exit 1
fi
# It's OK to call `install-sh -d' without argument.
# This can happen when creating conditional directories.
exit 0
fi
if test -z "$dir_arg"; then
trap '(exit $?); exit' 1 2 13 15
# Set umask so as not to create temps with too-generous modes.
# However, 'strip' requires both read and write access to temps.
case $mode in
# Optimize common cases.
*644) cp_umask=133;;
*755) cp_umask=22;;
*[0-7])
if test -z "$stripcmd"; then
u_plus_rw=
else
u_plus_rw='% 200'
fi
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
*)
if test -z "$stripcmd"; then
u_plus_rw=
else
u_plus_rw=,u+rw
fi
cp_umask=$mode$u_plus_rw;;
esac
fi
for src
do
# Protect names starting with `-'.
case $src in
-*) src=./$src;;
esac
if test -n "$dir_arg"; then
dst=$src
dstdir=$dst
test -d "$dstdir"
dstdir_status=$?
else
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
# might cause directories to be created, which would be especially bad
# if $src (and thus $dsttmp) contains '*'.
if test ! -f "$src" && test ! -d "$src"; then
echo "$0: $src does not exist." >&2
exit 1
fi
if test -z "$dst_arg"; then
echo "$0: no destination specified." >&2
exit 1
fi
dst=$dst_arg
# Protect names starting with `-'.
case $dst in
-*) dst=./$dst;;
esac
# If destination is a directory, append the input filename; won't work
# if double slashes aren't ignored.
if test -d "$dst"; then
if test -n "$no_target_directory"; then
echo "$0: $dst_arg: Is a directory" >&2
exit 1
fi
dstdir=$dst
dst=$dstdir/`basename "$src"`
dstdir_status=0
else
# Prefer dirname, but fall back on a substitute if dirname fails.
dstdir=`
(dirname "$dst") 2>/dev/null ||
expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
X"$dst" : 'X\(//\)[^/]' \| \
X"$dst" : 'X\(//\)$' \| \
X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
echo X"$dst" |
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
s//\1/
q
}
/^X\(\/\/\)[^/].*/{
s//\1/
q
}
/^X\(\/\/\)$/{
s//\1/
q
}
/^X\(\/\).*/{
s//\1/
q
}
s/.*/./; q'
`
test -d "$dstdir"
dstdir_status=$?
fi
fi
obsolete_mkdir_used=false
if test $dstdir_status != 0; then
case $posix_mkdir in
'')
# Create intermediate dirs using mode 755 as modified by the umask.
# This is like FreeBSD 'install' as of 1997-10-28.
umask=`umask`
case $stripcmd.$umask in
# Optimize common cases.
*[2367][2367]) mkdir_umask=$umask;;
.*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
*[0-7])
mkdir_umask=`expr $umask + 22 \
- $umask % 100 % 40 + $umask % 20 \
- $umask % 10 % 4 + $umask % 2
`;;
*) mkdir_umask=$umask,go-w;;
esac
# With -d, create the new directory with the user-specified mode.
# Otherwise, rely on $mkdir_umask.
if test -n "$dir_arg"; then
mkdir_mode=-m$mode
else
mkdir_mode=
fi
posix_mkdir=false
case $umask in
*[123567][0-7][0-7])
# POSIX mkdir -p sets u+wx bits regardless of umask, which
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
;;
*)
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
if (umask $mkdir_umask &&
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
then
if test -z "$dir_arg" || {
# Check for POSIX incompatibilities with -m.
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
# other-writeable bit of parent directory when it shouldn't.
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
ls_ld_tmpdir=`ls -ld "$tmpdir"`
case $ls_ld_tmpdir in
d????-?r-*) different_mode=700;;
d????-?--*) different_mode=755;;
*) false;;
esac &&
$mkdirprog -m$different_mode -p -- "$tmpdir" && {
ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
}
}
then posix_mkdir=:
fi
rmdir "$tmpdir/d" "$tmpdir"
else
# Remove any dirs left behind by ancient mkdir implementations.
rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
fi
trap '' 0;;
esac;;
esac
if
$posix_mkdir && (
umask $mkdir_umask &&
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
)
then :
else
# The umask is ridiculous, or mkdir does not conform to POSIX,
# or it failed possibly due to a race condition. Create the
# directory the slow way, step by step, checking for races as we go.
case $dstdir in
/*) prefix='/';;
-*) prefix='./';;
*) prefix='';;
esac
eval "$initialize_posix_glob"
oIFS=$IFS
IFS=/
$posix_glob set -f
set fnord $dstdir
shift
$posix_glob set +f
IFS=$oIFS
prefixes=
for d
do
test -z "$d" && continue
prefix=$prefix$d
if test -d "$prefix"; then
prefixes=
else
if $posix_mkdir; then
(umask=$mkdir_umask &&
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
# Don't fail if two instances are running concurrently.
test -d "$prefix" || exit 1
else
case $prefix in
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
*) qprefix=$prefix;;
esac
prefixes="$prefixes '$qprefix'"
fi
fi
prefix=$prefix/
done
if test -n "$prefixes"; then
# Don't fail if two instances are running concurrently.
(umask $mkdir_umask &&
eval "\$doit_exec \$mkdirprog $prefixes") ||
test -d "$dstdir" || exit 1
obsolete_mkdir_used=true
fi
fi
fi
if test -n "$dir_arg"; then
{ test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
{ test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
else
# Make a couple of temp file names in the proper directory.
dsttmp=$dstdir/_inst.$$_
rmtmp=$dstdir/_rm.$$_
# Trap to clean up those temp files at exit.
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
# Copy the file name to the temp name.
(umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
# and set any options; do chmod last to preserve setuid bits.
#
# If any of these fail, we abort the whole thing. If we want to
# ignore errors from any of these, just make sure not to ignore
# errors from the above "$doit $cpprog $src $dsttmp" command.
#
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
{ test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
{ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
# If -C, don't bother to copy if it wouldn't change the file.
if $copy_on_change &&
old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
eval "$initialize_posix_glob" &&
$posix_glob set -f &&
set X $old && old=:$2:$4:$5:$6 &&
set X $new && new=:$2:$4:$5:$6 &&
$posix_glob set +f &&
test "$old" = "$new" &&
$cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
then
rm -f "$dsttmp"
else
# Rename the file to the real destination.
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
# The rename failed, perhaps because mv can't rename something else
# to itself, or perhaps because mv is so ancient that it does not
# support -f.
{
# Now remove or move aside any old file at destination location.
# We try this two ways since rm can't unlink itself on some
# systems and the destination file might be busy for other
# reasons. In this case, the final cleanup might fail but the new
# file should still install successfully.
{
test ! -f "$dst" ||
$doit $rmcmd -f "$dst" 2>/dev/null ||
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
{ $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
} ||
{ echo "$0: cannot unlink or rename $dst" >&2
(exit 1); exit 1
}
} &&
# Now rename the file to the real destination.
$doit $mvcmd "$dsttmp" "$dst"
}
fi || exit 1
trap '' 0
fi
done
# Local variables:
# eval: (add-hook 'write-file-hooks 'time-stamp)
# time-stamp-start: "scriptversion="
# time-stamp-format: "%:y-%02m-%02d.%02H"
# time-stamp-time-zone: "UTC"
# time-stamp-end: "; # UTC"
# End:

View File

@ -13,7 +13,7 @@ use Icinga\Exception\NotReadableError;
use Icinga\Application\Logger;
use Icinga\Util\DateTimeFactory;
use Icinga\Util\Translator;
use Icinga\File\Ini\IniWriter;
use Icinga\Util\TimezoneDetect;
use Icinga\Exception\IcingaException;
/**
@ -141,6 +141,13 @@ abstract class ApplicationBootstrap
$this->setupAutoloader();
$this->setupZendAutoloader();
set_include_path(
implode(
PATH_SEPARATOR,
array($this->vendorDir, get_include_path())
)
);
Benchmark::measure('Bootstrap, autoloader registered');
Icinga::setApp($this);
@ -478,42 +485,62 @@ abstract class ApplicationBootstrap
}
/**
* Setup default timezone
* Detect the timezone
*
* @return self
* @throws ConfigurationError if the timezone in config.ini isn't valid
* @return null|string
*/
protected function setupTimezone()
protected function detectTimezone()
{
$default = @date_default_timezone_get();
if (! $default) {
$default = 'UTC';
return null;
}
/**
* Set up the timezone
*
* @return $this
*/
protected final function setupTimezone()
{
$timezone = $this->detectTimeZone();
if ($timezone === null || @date_default_timezone_set($timezone) === false) {
$timezone = @date_default_timezone_get();
if ($timezone === false) {
$timezone = 'UTC';
date_default_timezone_set($timezone);
}
}
$timeZoneString = $this->config->fromSection('global', 'timezone', $default);
date_default_timezone_set($timeZoneString);
DateTimeFactory::setConfig(array('timezone' => $timeZoneString));
DateTimeFactory::setConfig(array('timezone' => $timezone));
return $this;
}
/**
* Setup internationalization using gettext
* Detect the locale
*
* Uses the preferred language sent by the browser or the default one
*
* @return self
* @return null|string
*/
protected function setupInternationalization()
protected function detectLocale()
{
return null;
}
/**
* Set up internationalization using gettext
*
* @return $this
*/
protected final function setupInternationalization()
{
if ($this->hasLocales()) {
Translator::registerDomain(Translator::DEFAULT_DOMAIN, $this->getLocaleDir());
}
$locale = $this->detectLocale();
if ($locale === null) {
$locale = Translator::DEFAULT_LOCALE;
}
try {
Translator::setupLocale(
isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])
? Translator::getPreferredLocaleCode($_SERVER['HTTP_ACCEPT_LANGUAGE'])
: Translator::DEFAULT_LOCALE
);
Translator::setupLocale($locale);
} catch (Exception $error) {
Logger::error($error);
}

View File

@ -7,6 +7,7 @@ namespace Icinga\Application;
require_once __DIR__ . '/ApplicationBootstrap.php';
use Icinga\Authentication\Manager as AuthenticationManager;
use Icinga\Authentication\Manager;
use Icinga\Exception\ConfigurationError;
use Icinga\Exception\NotReadableError;
use Icinga\Application\Logger;
@ -14,6 +15,8 @@ use Icinga\Util\TimezoneDetect;
use Icinga\Web\Request;
use Icinga\Web\Response;
use Icinga\Web\View;
use Icinga\Web\Session\Session as BaseSession;
use Icinga\Web\Session;
use Icinga\User;
use Icinga\Util\Translator;
use Icinga\Util\DateTimeFactory;
@ -58,6 +61,13 @@ class Web extends ApplicationBootstrap
*/
private $request;
/**
* Session object
*
* @var BaseSession
*/
private $session;
/**
* User object
*
@ -84,6 +94,7 @@ class Web extends ApplicationBootstrap
->setupErrorHandling()
->loadConfig()
->setupResourceFactory()
->setupSession()
->setupUser()
->setupTimezone()
->setupLogger()
@ -164,6 +175,7 @@ class Web extends ApplicationBootstrap
$this->setupFrontController();
$this->setupViewRenderer();
return $this;
}
@ -183,6 +195,17 @@ class Web extends ApplicationBootstrap
return $this;
}
/**
* Initialize a session provider
*
* @return self
*/
private function setupSession()
{
$this->session = Session::create();
return $this;
}
/**
* Inject dependencies into request
*
@ -268,29 +291,19 @@ class Web extends ApplicationBootstrap
}
/**
* Setup user timezone if set and valid, otherwise global default timezone
*
* @return self
* @see ApplicationBootstrap::setupTimezone
* (non-PHPDoc)
* @see ApplicationBootstrap::detectTimezone() For the method documentation.
*/
protected function setupTimezone()
protected function detectTimezone()
{
$userTimezone = null;
if ($this->user !== null && $this->user->getPreferences() !== null) {
$auth = Manager::getInstance();
if (! $auth->isAuthenticated()
|| ($timezone = $auth->getUser()->getPreferences()->getValue('icingaweb', 'timezone')) === null
) {
$detect = new TimezoneDetect();
$userTimezone = $this->user->getPreferences()
->getValue('icingaweb', 'timezone', $detect->getTimezoneName());
$timezone = $detect->getTimezoneName();
}
try {
DateTimeFactory::setConfig(array('timezone' => $userTimezone));
date_default_timezone_set($userTimezone);
} catch (ConfigurationError $e) {
return parent::setupTimezone();
}
return $this;
return $timezone;
}
/**
@ -300,22 +313,16 @@ class Web extends ApplicationBootstrap
*
* @return self
*/
protected function setupInternationalization()
protected function detectLocale()
{
parent::setupInternationalization();
if ($this->user !== null && $this->user->getPreferences() !== null
&& (($locale = $this->user->getPreferences()->getValue('icingaweb', 'language')) !== null)
$auth = Manager::getInstance();
if (! $auth->isAuthenticated()
|| ($locale = $auth->getUser()->getPreferences()->getValue('icingaweb', 'language')) === null
&& isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])
) {
try {
Translator::setupLocale($locale);
} catch (Exception $error) {
Logger::warning(
'Cannot set locale "' . $locale . '" configured in ' .
'preferences of user "' . $this->user->getUsername() . '"'
);
}
$locale = Translator::getPreferredLocaleCode($_SERVER['HTTP_ACCEPT_LANGUAGE']);
}
return $this;
return $locale;
}
/**
@ -332,3 +339,4 @@ class Web extends ApplicationBootstrap
return $this;
}
}
// @codeCoverageIgnoreEnd

View File

@ -13,9 +13,8 @@ use Icinga\Web\StyleSheet;
use Icinga\Web\Url;
use Icinga\Exception\ProgrammingError;
require_once 'IcingaVendor/dompdf/dompdf_config.inc.php';
spl_autoload_register('DOMPDF_autoload');
require_once 'dompdf/dompdf_config.inc.php';
require_once 'dompdf/include/autoload.inc.php';
class Pdf extends DOMPDF
{

View File

@ -9,6 +9,7 @@ use Icinga\Exception\NotReadableError;
use Icinga\Exception\NotWritableError;
use Icinga\User\Preferences;
use Icinga\User\Preferences\PreferencesStore;
use Zend_Db_Expr;
/**
* Load and save user preferences by using a database
@ -20,22 +21,37 @@ class DbStore extends PreferencesStore
*/
const COLUMN_USERNAME = 'username';
/**
* Column name for section
*/
const COLUMN_SECTION = 'section';
/**
* Column name for preference
*/
const COLUMN_PREFERENCE = 'key';
const COLUMN_PREFERENCE = 'name';
/**
* Column name for value
*/
const COLUMN_VALUE = 'value';
/**
* Column name for created time
*/
const COLUMN_CREATED_TIME = 'ctime';
/**
* Column name for modified time
*/
const COLUMN_MODIFIED_TIME = 'mtime';
/**
* Table name
*
* @var string
*/
protected $table = 'preference';
protected $table = 'icingaweb_user_preference';
/**
* Stored preferences
@ -74,7 +90,7 @@ class DbStore extends PreferencesStore
try {
$select = $this->getStoreConfig()->connection->getDbAdapter()->select();
$result = $select
->from($this->table, array(self::COLUMN_PREFERENCE, self::COLUMN_VALUE))
->from($this->table, array(self::COLUMN_SECTION, self::COLUMN_PREFERENCE, self::COLUMN_VALUE))
->where(self::COLUMN_USERNAME . ' = ?', $this->getUser()->getUsername())
->query()
->fetchAll();
@ -89,7 +105,7 @@ class DbStore extends PreferencesStore
if ($result !== false) {
$values = array();
foreach ($result as $row) {
$values[$row->{self::COLUMN_PREFERENCE}] = $row->{self::COLUMN_VALUE};
$values[$row->{self::COLUMN_SECTION}][$row->{self::COLUMN_PREFERENCE}] = $row->{self::COLUMN_VALUE};
}
$this->preferences = $values;
}
@ -106,22 +122,32 @@ class DbStore extends PreferencesStore
{
$preferences = $preferences->toArray();
$toBeInserted = array_diff_key($preferences, $this->preferences);
if (!empty($toBeInserted)) {
$this->insert($toBeInserted);
}
$sections = array_keys($preferences);
$toBeUpdated = array_intersect_key(
array_diff_assoc($preferences, $this->preferences),
array_diff_assoc($this->preferences, $preferences)
);
if (!empty($toBeUpdated)) {
$this->update($toBeUpdated);
}
foreach ($sections as $section) {
if (! array_key_exists($section, $this->preferences)) {
$this->preferences[$section] = array();
}
if (! array_key_exists($section, $preferences)) {
$preferences[$section] = array();
}
$toBeInserted = array_diff_key($preferences[$section], $this->preferences[$section]);
if (!empty($toBeInserted)) {
$this->insert($toBeInserted, $section);
}
$toBeDeleted = array_keys(array_diff_key($this->preferences, $preferences));
if (!empty($toBeDeleted)) {
$this->delete($toBeDeleted);
$toBeUpdated = array_intersect_key(
array_diff_assoc($preferences[$section], $this->preferences[$section]),
array_diff_assoc($this->preferences[$section], $preferences[$section])
);
if (!empty($toBeUpdated)) {
$this->update($toBeUpdated, $section);
}
$toBeDeleted = array_keys(array_diff_key($this->preferences[$section], $preferences[$section]));
if (!empty($toBeDeleted)) {
$this->delete($toBeDeleted, $section);
}
}
}
@ -129,11 +155,13 @@ class DbStore extends PreferencesStore
* Insert the given preferences into the database
*
* @param array $preferences The preferences to insert
* @param string $section The preferences in section to update
*
* @throws NotWritableError In case the database operation failed
*/
protected function insert(array $preferences)
protected function insert(array $preferences, $section)
{
/** @var \Zend_Db_Adapter_Abstract $db */
$db = $this->getStoreConfig()->connection->getDbAdapter();
try {
@ -142,8 +170,11 @@ class DbStore extends PreferencesStore
$this->table,
array(
self::COLUMN_USERNAME => $this->getUser()->getUsername(),
$db->quoteIdentifier(self::COLUMN_SECTION) => $section,
$db->quoteIdentifier(self::COLUMN_PREFERENCE) => $key,
self::COLUMN_VALUE => $value
self::COLUMN_VALUE => $value,
self::COLUMN_CREATED_TIME => new Zend_Db_Expr('NOW()'),
self::COLUMN_MODIFIED_TIME => new Zend_Db_Expr('NOW()')
)
);
}
@ -160,11 +191,13 @@ class DbStore extends PreferencesStore
* Update the given preferences in the database
*
* @param array $preferences The preferences to update
* @param string $section The preferences in section to update
*
* @throws NotWritableError In case the database operation failed
*/
protected function update(array $preferences)
protected function update(array $preferences, $section)
{
/** @var \Zend_Db_Adapter_Abstract $db */
$db = $this->getStoreConfig()->connection->getDbAdapter();
try {
@ -174,7 +207,9 @@ class DbStore extends PreferencesStore
array(self::COLUMN_VALUE => $value),
array(
self::COLUMN_USERNAME . '=?' => $this->getUser()->getUsername(),
$db->quoteIdentifier(self::COLUMN_PREFERENCE) . '=?' => $key
$db->quoteIdentifier(self::COLUMN_SECTION) . '=?' => $section,
$db->quoteIdentifier(self::COLUMN_PREFERENCE) . '=?' => $key,
self::COLUMN_MODIFIED_TIME => new Zend_Db_Expr('NOW()')
)
);
}
@ -191,11 +226,13 @@ class DbStore extends PreferencesStore
* Delete the given preference names from the database
*
* @param array $preferenceKeys The preference names to delete
* @param string $section The preferences in section to update
*
* @throws NotWritableError In case the database operation failed
*/
protected function delete(array $preferenceKeys)
protected function delete(array $preferenceKeys, $section)
{
/** @var \Zend_Db_Adapter_Abstract $db */
$db = $this->getStoreConfig()->connection->getDbAdapter();
try {
@ -203,6 +240,7 @@ class DbStore extends PreferencesStore
$this->table,
array(
self::COLUMN_USERNAME . '=?' => $this->getUser()->getUsername(),
$db->quoteIdentifier(self::COLUMN_SECTION) . '=?' => $section,
$db->quoteIdentifier(self::COLUMN_PREFERENCE) . ' IN (?)' => $preferenceKeys
)
);

View File

@ -67,7 +67,7 @@ class IniStore extends PreferencesStore
$this->getUser()->getUsername()
);
} else {
$this->preferences = parse_ini_file($this->preferencesFile);
$this->preferences = parse_ini_file($this->preferencesFile, true);
}
}
@ -81,9 +81,13 @@ class IniStore extends PreferencesStore
*/
public function save(Preferences $preferences)
{
$preferences = $preferences->toArray();
$this->update(array_diff_assoc($preferences, $this->preferences));
$this->delete(array_keys(array_diff_key($this->preferences, $preferences)));
$this->preferences = $preferences->toArray();
// TODO: Elaborate whether we need to patch the contents
// $preferences = $preferences->toArray();
// $this->update(array_diff_assoc($preferences, $this->preferences));
// $this->delete(array_keys(array_diff_key($this->preferences, $preferences)));
$this->write();
}

View File

@ -4,6 +4,7 @@
namespace Icinga\Web;
use Icinga\Authentication\Manager;
use Icinga\Web\Menu\MenuItemRenderer;
use RecursiveIterator;
use Icinga\Application\Config;
@ -200,41 +201,50 @@ class Menu implements RecursiveIterator
*/
protected function addMainMenuItems()
{
$this->add(t('Dashboard'), array(
'url' => 'dashboard',
'icon' => 'dashboard',
'priority' => 10
));
$auth = Manager::getInstance();
$section = $this->add(t('System'), array(
'icon' => 'conf-alt',
'priority' => 200
));
$section->add(t('Preferences'), array(
'url' => 'preference',
'priority' => 200
));
$section->add(t('Configuration'), array(
'url' => 'config',
'priority' => 300
));
$section->add(t('Modules'), array(
'url' => 'config/modules',
'priority' => 400
));
if ($auth->isAuthenticated()) {
if (Logger::writesToFile()) {
$section->add(t('Application Log'), array(
'url' => 'list/applicationlog',
'priority' => 500
$this->add(t('Dashboard'), array(
'url' => 'dashboard',
'icon' => 'dashboard',
'priority' => 10
));
$section = $this->add(t('System'), array(
'icon' => 'conf-alt',
'priority' => 200
));
$section->add(t('Configuration'), array(
'url' => 'config',
'priority' => 300
));
$section->add(t('Modules'), array(
'url' => 'config/modules',
'priority' => 400
));
if (Logger::writesToFile()) {
$section->add(t('Application Log'), array(
'url' => 'list/applicationlog',
'priority' => 500
));
}
$section = $this->add($auth->getUser()->getUsername(), array(
'icon' => 'user',
'priority' => 600
));
$section->add(t('Preferences'), array(
'url' => 'preference',
'priority' => 601
));
$section->add(t('Logout'), array(
'url' => 'authentication/logout',
'priority' => 700
));
}
$this->add(t('Logout'), array(
'url' => 'authentication/logout',
'icon' => 'user',
'priority' => 300
));
}
/**

View File

@ -1,7 +0,0 @@
# ignore all files
*
**/*
lib/fonts/log.htm
# except of gitignore
!.gitignore

View File

@ -1,213 +0,0 @@
DOMPDF 0.6.0 beta 3 Release Notes
New Features
HTML/CSS/Images support
* Limited support for CSS float (disabled by default). See
DOMPDF_ENABLE_CSS_FLOAT
<http://code.google.com/p/dompdf/source/browse/tags/dompdf_0-6-0_beta3/dompdf/dompdf_config.inc.php#301>(r407,
r408, r415, r438, r457, r459, r471)
* Support for nth-child selectors (r407, r419)
* Support for @font-face (r407, r413)
* Font sub-setting now available (disabled by default). See
DOMPDF_ENABLE_FONTSUBSETTING
<http://code.google.com/p/dompdf/source/browse/tags/dompdf_0-6-0_beta3/dompdf/dompdf_config.inc.php#134>
(r466, r468, r469)
* Added an HTML5 Parser to enable improved document parsing/correction
(disabled by default). See DOMPDF_ENABLE_HTML5PARSER
<http://code.google.com/p/dompdf/source/browse/tags/dompdf_0-6-0_beta3/dompdf/dompdf_config.inc.php#316>
(r429, r430, r431, r441)
* Added support for ID in anchors tags (r373)
* Added a message for broken images and updated the broken_image.png
file to
something less aggressive (r377)
* Added support for transparent PNG in background-image and improved
background-image handling (r380, r404, r450, r453)
* Improved absolute positioning (r387, r409, r459, r460)
* Added support for the "rem" CSS unit (r389)
* Improved support for the "ex" CSS unit (r390)
* When parsing tables, TR elements not contained by TBODY, TFOOT, or
THEAD are automatically encapsulated by TBODY (r390)
* Added support for the CSS declaration word-wrap: break-word (r391)
* Added support for @page :left, :right, :first, :odd, and :even (r393)
* Added support for CSS visibility and empty-cells properties (r393)
* Type selectors (e.g. h1) are now case insensitive (r417)
* Image type detection is now based on file header instead of filename
extension (r422)
* Added support for HTML5-style charset metatag (<meta
charset=?utf-8?>) (r430)
* Added support for nested CSS counters (r438)
* Replaced TTF2UFM with php-font-lib and remove all dependencies on
TTF2UFM (r447)
* Table columns widths are now consistent across pages (r462)
* Added limited support for table captions (r456)
* Reduced rendering time by using caches (r469)
Installation / configuration / debugging
* Added frame (i.e. discreet document element) count to the sample
website debugger output (r399)
* DOMPDF_ENABLE_REMOTE is no longer needed for stylesheet references
that use a URL with domain component (r407)
* Added a ready-to-use web-based font installer to the sample website
(www/fonts.php) (r417, r418)
* Added the Unicode-compatible DejaVu Fonts <http://dejavu-fonts.org>
as part of the base installation (r388)
Major bug fixes
* Fixes compatibility with the Symfony framework autoloader (disabled
by default). See DOMPDF_AUTOLOAD_PREPEND
<http://code.google.com/p/dompdf/source/browse/tags/dompdf_0-6-0_beta3/dompdf/dompdf_config.inc.php#310>
(r374)
* Fixes errors in how margins were collapsed between siblings (r375)
* Improves the way lines are aligned vertically (see the
css_baseline example) (r375)
* Corrects the bounding box used for drawing backgrounds (r377)
* Fixes the z-index rendering process (r377, r378, r379, r393)
* Adds support for color styling inheritance (r390)
* Fixes bugs with nested tables and HTML attributes (r393)
* Fixes handling of URLs with non-ascii chars in the CPDF adapter (r394)
* Fixes a rgb()-style color parsing bug (r402)
* Fixes RLE4 compressed bitmap image support (r405)
* Fixes bug that caused generated content to occasionally display
multiple times (r406)
* Improves background image clipping (r417)
* Fixes table layout bug caused by zero-height rows (r464)
* Fixes layout bug caused by 100% width tables centered with margin
auto (r465)
For a full list of modifications since DOMPDF 0.6.0 beta 2 see the
changes listed on this page of the repository changelog
<http://code.google.com/p/dompdf/source/list?num=88&start=472&path=/trunk>.
Known Issues
* Table cells cannot be split over multiple pages
* CSS float support is not yet perfected
For a full list of known issues, see the issue tracker
<http://code.google.com/p/dompdf/issues/list>.
Installation Notes
* Starting with DOMPDF 0.6.0 the dompdf.php script will no longer
allow conversion of HTML document on the local file system that are
located outside of the path specified by DOMPDF_CHROOT
<http://code.google.com/p/dompdf/source/browse/tags/dompdf_0-6-0_beta3/dompdf/dompdf_config.inc.php#109>
* If you are installing DOMPDF on top of an existing installation you
should remove any existing font metrics. This can be done manually
or through the sample website (www/fonts.php).
* When upgrading to a new version of DOMPDF you must replace
dompdf_config.inc.php with the new one. To simplify the upgrade
process you can store your configuration settings in
dompdf_config.custom.inc.php (which does not need to be overwritten).
------------------------------------------------------------------------
DOMPDF 0.6.0 beta 2
New Features
HTML/CSS/Images support
* CSS3: opacity, 2D transforms
* CSS2: outline, letter-spacing, z-index, position: relative,
overflow: hidden
* CSS Pseudo elements :before and :after with generated content
* CSS2 pseudo-selectors (last-child, disabled, checked, enabled)
* CSS3 attribute selectors (ends-width, starts-width, contains)
* Improves absolute positioning
* Adds fixed positioning
* CMYK colors and CMYK Jpeg images
* 32bit PNG with alpha channel (Cpdf backend)
* BMP images (8, 24 and 32 bit)
* Adds support for image embedding via ?data? URI
* Adds support for ordered list
* Adds support for embedding PDF JavaScript
* Uses the HTML document title element and certain meta tags to
populate the PDF?s meta information (title, author, keywords and
subject)
* Uses the ?alt? attribute of an image when the image is inaccessible
* Supports loading system fonts
Installation / configuration
* The demo page now shows the HTML file and the PDF document in an iframe
* Adds a setup/configuration tool that provides information about the
server configuration, dompdf parameters, and installed fonts.
* The font metrics cache files can now be cleared using the
setup/config tool
* Adds a debug tool that shows side-by-side the HTML file, the
rendered PDF, and a console showing memory consumption, rendering
time, warning, and debug messages
* Adds examples showing new features
* Moves ttf2ufm out of the DOMPDF code repository and into an external
project <http://code.google.com/p/ttf2ufm/>
* Disables inline PHP support by default
* Disables direct input in the examples page for non-localhost access
* Adds configuration option to help debugging (see DEBUG_LAYOUT) which
draws rectangles around the different types of blocks and frames
Major bug fixes
* Addresses memory leaks from running eval() on the font metrics cache
* Reduces memory consumption caused by the font metrics (when using
the Cpdf backend)
* Updates text wrapping to prevent splitting text into more lines than
needed (issue 198
<http://code.google.com/p/dompdf/issues/detail?id=198>)
* Implements a check against an infinite loop caused by table cells
larger than a page
* Improves text height and width calculations as well as placement
(improves, for example, justified text rendering for text that is
not iso-8859-1)
* Updates the fallback MBString functions
* Supports PHP 5.3 and includes improved compatibility with older
versions of PHP 5
* Improves image placement
* Addresses problems with table flow caused by empty table cells
* Addresses warning/errors caused by unrecognized CSS rules or selectors
For a full list of modifications since DOMPDF 0.6.0 beta 1 see the
repository changelog
<http://code.google.com/p/dompdf/source/list?path=/tags/dompdf_0-6-0_beta2&num=104>
Known Issues
* Table cells cannot be split over multiple pages
* Column widths of tables that span more than one page may not be
consistent across pages
Installation Notes
* Starting with dompdf 0.6.0 dompdf.php will no longer allow
conversion of HTML document on the local file system that are
located outside of the path specified by DOMPDF_CHROOT
* The format of the font metrics cache has changed as of this release.
You should manually remove any existing font metrics prior to
upgrading or use the setup/configuration tool to do so immediately
after.
* Inline PHP is *disabled* by default now (see DOMPDF_ENABLE_PHP)
* Because additional configuration options have been added you will
need to replace your dompdf_config.inc.php file with the new one.
You may modify this file or copy your configuration settings to
dompdf_config.custom.inc.php.

View File

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<docblox>
<parser>
<target>docs</target>
</parser>
<transformer>
<target>docs</target>
</transformer>
<files>
<directory>.</directory>
<ignore>*/lib/fonts/*</ignore>
<ignore>*/lib/html5lib/*</ignore>
<ignore>*/lib/php-font-lib/*</ignore>
<ignore>*www/*</ignore>
<ignore>*.svn*</ignore>
</files>
<transformations>
<template name="new_black" />
</transformations>
</docblox>

View File

@ -1,865 +0,0 @@
<?php
/**
* @package dompdf
* @link http://www.dompdf.com/
* @author Benj Carson <benjcarson@digitaljunkies.ca>
* @author Helmut Tischer <htischer@weihenstephan.org>
* @author Fabien Ménager <fabien.menager@gmail.com>
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @version $Id: abstract_renderer.cls.php 448 2011-11-13 13:00:03Z fabien.menager $
*/
/**
* Base renderer class
*
* @access private
* @package dompdf
*/
abstract class Abstract_Renderer {
/**
* Rendering backend
*
* @var Canvas
*/
protected $_canvas;
/**
* Current dompdf instance
*
* @var DOMPDF
*/
protected $_dompdf;
/**
* Class constructor
*
* @param DOMPDF $dompdf The current dompdf instance
*/
function __construct(DOMPDF $dompdf) {
$this->_dompdf = $dompdf;
$this->_canvas = $dompdf->get_canvas();
}
/**
* Render a frame.
*
* Specialized in child classes
*
* @param Frame $frame The frame to render
*/
abstract function render(Frame $frame);
//........................................................................
/**
* Render a background image over a rectangular area
*
* @param string $img The background image to load
* @param float $x The left edge of the rectangular area
* @param float $y The top edge of the rectangular area
* @param float $width The width of the rectangular area
* @param float $height The height of the rectangular area
* @param Style $style The associated Style object
*/
protected function _background_image($url, $x, $y, $width, $height, $style) {
$sheet = $style->get_stylesheet();
// Skip degenerate cases
if ( $width == 0 || $height == 0 )
return;
$box_width = $width;
$box_height = $height;
//debugpng
if (DEBUGPNG) print '[_background_image '.$url.']';
list($img, $type, $msg) = Image_Cache::resolve_url($url,
$sheet->get_protocol(),
$sheet->get_host(),
$sheet->get_base_path());
// Bail if the image is no good
if ( Image_Cache::is_broken($img) )
return;
//Try to optimize away reading and composing of same background multiple times
//Postponing read with imagecreatefrom ...()
//final composition paramters and name not known yet
//Therefore read dimension directly from file, instead of creating gd object first.
//$img_w = imagesx($src); $img_h = imagesy($src);
list($img_w, $img_h) = dompdf_getimagesize($img);
if (!isset($img_w) || $img_w == 0 || !isset($img_h) || $img_h == 0) {
return;
}
$repeat = $style->background_repeat;
$bg_color = $style->background_color;
//Increase background resolution and dependent box size according to image resolution to be placed in
//Then image can be copied in without resize
$bg_width = round((float)($width * DOMPDF_DPI) / 72);
$bg_height = round((float)($height * DOMPDF_DPI) / 72);
//Need %bg_x, $bg_y as background pos, where img starts, converted to pixel
list($bg_x, $bg_y) = $style->background_position;
if ( is_percent($bg_x) ) {
// The point $bg_x % from the left edge of the image is placed
// $bg_x % from the left edge of the background rectangle
$p = ((float)$bg_x)/100.0;
$x1 = $p * $img_w;
$x2 = $p * $bg_width;
$bg_x = $x2 - $x1;
} else {
$bg_x = (float)($style->length_in_pt($bg_x)*DOMPDF_DPI) / 72;
}
$bg_x = round($bg_x + $style->length_in_pt($style->border_left_width)*DOMPDF_DPI / 72);
if ( is_percent($bg_y) ) {
// The point $bg_y % from the left edge of the image is placed
// $bg_y % from the left edge of the background rectangle
$p = ((float)$bg_y)/100.0;
$y1 = $p * $img_h;
$y2 = $p * $bg_height;
$bg_y = $y2 - $y1;
} else {
$bg_y = (float)($style->length_in_pt($bg_y)*DOMPDF_DPI) / 72;
}
$bg_y = round($bg_y + $style->length_in_pt($style->border_top_width)*DOMPDF_DPI / 72);
//clip background to the image area on partial repeat. Nothing to do if img off area
//On repeat, normalize start position to the tile at immediate left/top or 0/0 of area
//On no repeat with positive offset: move size/start to have offset==0
//Handle x/y Dimensions separately
if ( $repeat !== "repeat" && $repeat !== "repeat-x" ) {
//No repeat x
if ($bg_x < 0) {
$bg_width = $img_w + $bg_x;
} else {
$x += ($bg_x * 72)/DOMPDF_DPI;
$bg_width = $bg_width - $bg_x;
if ($bg_width > $img_w) {
$bg_width = $img_w;
}
$bg_x = 0;
}
if ($bg_width <= 0) {
return;
}
$width = (float)($bg_width * 72)/DOMPDF_DPI;
} else {
//repeat x
if ($bg_x < 0) {
$bg_x = - ((-$bg_x) % $img_w);
} else {
$bg_x = $bg_x % $img_w;
if ($bg_x > 0) {
$bg_x -= $img_w;
}
}
}
if ( $repeat !== "repeat" && $repeat !== "repeat-y" ) {
//no repeat y
if ($bg_y < 0) {
$bg_height = $img_h + $bg_y;
} else {
$y += ($bg_y * 72)/DOMPDF_DPI;
$bg_height = $bg_height - $bg_y;
if ($bg_height > $img_h) {
$bg_height = $img_h;
}
$bg_y = 0;
}
if ($bg_height <= 0) {
return;
}
$height = (float)($bg_height * 72)/DOMPDF_DPI;
} else {
//repeat y
if ($bg_y < 0) {
$bg_y = - ((-$bg_y) % $img_h);
} else {
$bg_y = $bg_y % $img_h;
if ($bg_y > 0) {
$bg_y -= $img_h;
}
}
}
//Optimization, if repeat has no effect
if ( $repeat === "repeat" && $bg_y <= 0 && $img_h+$bg_y >= $bg_height ) {
$repeat = "repeat-x";
}
if ( $repeat === "repeat" && $bg_x <= 0 && $img_w+$bg_x >= $bg_width ) {
$repeat = "repeat-y";
}
if ( ($repeat === "repeat-x" && $bg_x <= 0 && $img_w+$bg_x >= $bg_width) ||
($repeat === "repeat-y" && $bg_y <= 0 && $img_h+$bg_y >= $bg_height) ) {
$repeat = "no-repeat";
}
//Use filename as indicator only
//different names for different variants to have different copies in the pdf
//This is not dependent of background color of box! .'_'.(is_array($bg_color) ? $bg_color["hex"] : $bg_color)
//Note: Here, bg_* are the start values, not end values after going through the tile loops!
$filedummy = $img;
/*
//Make shorter strings with limited characters for cache associative array index - needed?
//Strip common base path - server root, explicite temp, default temp; remove unwanted characters;
$filedummy = strtr($filedummy,"\\:","//");
$p = strtr($_SERVER["DOCUMENT_ROOT"],"\\:","//");
$l = strlen($p);
if ( substr($filedummy,0,$l) == $p) {
$filedummy = substr($filedummy,$l);
} else {
$p = strtr(DOMPDF_TEMP_DIR,"\\:","//");
$l = strlen($p);
if ( substr($filedummy,0,$l) == $p) {
$filedummy = substr($filedummy,$l);
} else {
$p = strtr(sys_get_temp_dir(),"\\:","//");
$l = strlen($p);
if ( substr($filedummy,0,$l) == $p) {
$filedummy = substr($filedummy,$l);
}
}
}
*/
$is_png = false;
$filedummy .= '_'.$bg_width.'_'.$bg_height.'_'.$bg_x.'_'.$bg_y.'_'.$repeat;
//debugpng
//if (DEBUGPNG) print '<pre>[_background_image name '.$filedummy.']</pre>';
//Optimization to avoid multiple times rendering the same image.
//If check functions are existing and identical image already cached,
//then skip creation of duplicate, because it is not needed by addImagePng
if ( method_exists( $this->_canvas, "get_cpdf" ) &&
method_exists( $this->_canvas->get_cpdf(), "addImagePng" ) &&
method_exists( $this->_canvas->get_cpdf(), "image_iscached" ) &&
$this->_canvas->get_cpdf()->image_iscached($filedummy) ) {
$bg = null;
//debugpng
//if (DEBUGPNG) print '[_background_image skip]';
}
else {
// Create a new image to fit over the background rectangle
$bg = imagecreatetruecolor($bg_width, $bg_height);
switch (strtolower($type)) {
case IMAGETYPE_PNG:
$is_png = true;
imagesavealpha($bg, true);
imagealphablending($bg, false);
$src = imagecreatefrompng($img);
break;
case IMAGETYPE_JPEG:
$src = imagecreatefromjpeg($img);
break;
case IMAGETYPE_GIF:
$src = imagecreatefromgif($img);
break;
case IMAGETYPE_BMP:
$src = imagecreatefrombmp($img);
break;
default: return; // Unsupported image type
}
if ($src == null) {
return;
}
//Background color if box is not relevant here
//Non transparent image: box clipped to real size. Background non relevant.
//Transparent image: The image controls the transparency and lets shine through whatever background.
//However on transparent imaage preset the composed image with the transparency color,
//to keep the transparency when copying over the non transparent parts of the tiles.
$ti = imagecolortransparent($src);
if ($ti >= 0) {
$tc = imagecolorsforindex($src,$ti);
$ti = imagecolorallocate($bg,$tc['red'],$tc['green'],$tc['blue']);
imagefill($bg,0,0,$ti);
imagecolortransparent($bg, $ti);
}
//This has only an effect for the non repeatable dimension.
//compute start of src and dest coordinates of the single copy
if ( $bg_x < 0 ) {
$dst_x = 0;
$src_x = -$bg_x;
} else {
$src_x = 0;
$dst_x = $bg_x;
}
if ( $bg_y < 0 ) {
$dst_y = 0;
$src_y = -$bg_y;
} else {
$src_y = 0;
$dst_y = $bg_y;
}
//For historical reasons exchange meanings of variables:
//start_* will be the start values, while bg_* will be the temporary start values in the loops
$start_x = $bg_x;
$start_y = $bg_y;
// Copy regions from the source image to the background
if ( $repeat === "no-repeat" ) {
// Simply place the image on the background
imagecopy($bg, $src, $dst_x, $dst_y, $src_x, $src_y, $img_w, $img_h);
} else if ( $repeat === "repeat-x" ) {
for ( $bg_x = $start_x; $bg_x < $bg_width; $bg_x += $img_w ) {
if ( $bg_x < 0 ) {
$dst_x = 0;
$src_x = -$bg_x;
$w = $img_w + $bg_x;
} else {
$dst_x = $bg_x;
$src_x = 0;
$w = $img_w;
}
imagecopy($bg, $src, $dst_x, $dst_y, $src_x, $src_y, $w, $img_h);
}
} else if ( $repeat === "repeat-y" ) {
for ( $bg_y = $start_y; $bg_y < $bg_height; $bg_y += $img_h ) {
if ( $bg_y < 0 ) {
$dst_y = 0;
$src_y = -$bg_y;
$h = $img_h + $bg_y;
} else {
$dst_y = $bg_y;
$src_y = 0;
$h = $img_h;
}
imagecopy($bg, $src, $dst_x, $dst_y, $src_x, $src_y, $img_w, $h);
}
} else if ( $repeat === "repeat" ) {
for ( $bg_y = $start_y; $bg_y < $bg_height; $bg_y += $img_h ) {
for ( $bg_x = $start_x; $bg_x < $bg_width; $bg_x += $img_w ) {
if ( $bg_x < 0 ) {
$dst_x = 0;
$src_x = -$bg_x;
$w = $img_w + $bg_x;
} else {
$dst_x = $bg_x;
$src_x = 0;
$w = $img_w;
}
if ( $bg_y < 0 ) {
$dst_y = 0;
$src_y = -$bg_y;
$h = $img_h + $bg_y;
} else {
$dst_y = $bg_y;
$src_y = 0;
$h = $img_h;
}
imagecopy($bg, $src, $dst_x, $dst_y, $src_x, $src_y, $w, $h);
}
}
}
else {
print 'Unknown repeat!';
}
imagedestroy($src);
} /* End optimize away creation of duplicates */
$this->_canvas->clipping_rectangle($x, $y, $box_width, $box_height);
//img: image url string
//img_w, img_h: original image size in px
//width, height: box size in pt
//bg_width, bg_height: box size in px
//x, y: left/top edge of box on page in pt
//start_x, start_y: placement of image relativ to pattern
//$repeat: repeat mode
//$bg: GD object of result image
//$src: GD object of original image
//When using cpdf and optimization to direct png creation from gd object is available,
//don't create temp file, but place gd object directly into the pdf
if ( !$is_png && method_exists( $this->_canvas, "get_cpdf" ) &&
method_exists( $this->_canvas->get_cpdf(), "addImagePng" ) ) {
// Note: CPDF_Adapter image converts y position
$this->_canvas->get_cpdf()->addImagePng($filedummy, $x, $this->_canvas->get_height() - $y - $height, $width, $height, $bg);
}
else {
$tmp_name = tempnam(DOMPDF_TEMP_DIR, "bg_dompdf_img_");
@unlink($tmp_name);
$tmp_file = "$tmp_name.png";
//debugpng
if (DEBUGPNG) print '[_background_image '.$tmp_file.']';
imagepng($bg, $tmp_file);
$this->_canvas->image($tmp_file, $x, $y, $width, $height);
imagedestroy($bg);
//debugpng
if (DEBUGPNG) print '[_background_image unlink '.$tmp_file.']';
if (!DEBUGKEEPTEMP)
unlink($tmp_file);
}
$this->_canvas->clipping_end();
}
protected function _get_dash_pattern($style, $width) {
$pattern = array();
switch ($style) {
default:
/*case "solid":
case "double":
case "groove":
case "inset":
case "outset":
case "ridge":*/
case "none": break;
case "dotted":
if ( $width <= 1 )
$pattern = array($width, $width*2);
else
$pattern = array($width);
break;
case "dashed":
$pattern = array(3 * $width);
break;
}
return $pattern;
}
protected function _border_none($x, $y, $length, $color, $widths, $side, $corner_style = "bevel") {
return;
}
protected function _border_hidden($x, $y, $length, $color, $widths, $side, $corner_style = "bevel") {
return;
}
// Border rendering functions
protected function _border_dotted($x, $y, $length, $color, $widths, $side, $corner_style = "bevel") {
list($top, $right, $bottom, $left) = $widths;
$pattern = $this->_get_dash_pattern("dotted", $$side);
switch ($side) {
case "top":
$delta = $top / 2;
case "bottom":
$delta = isset($delta) ? $delta : -$bottom / 2;
$this->_canvas->line($x, $y + $delta, $x + $length, $y + $delta, $color, $$side, $pattern);
break;
case "left":
$delta = $left / 2;
case "right":
$delta = isset($delta) ? $delta : - $right / 2;
$this->_canvas->line($x + $delta, $y, $x + $delta, $y + $length, $color, $$side, $pattern);
break;
default:
return;
}
}
protected function _border_dashed($x, $y, $length, $color, $widths, $side, $corner_style = "bevel") {
list($top, $right, $bottom, $left) = $widths;
$pattern = $this->_get_dash_pattern("dashed", $$side);
switch ($side) {
case "top":
$delta = $top / 2;
case "bottom":
$delta = isset($delta) ? $delta : -$bottom / 2;
$this->_canvas->line($x, $y + $delta, $x + $length, $y + $delta, $color, $$side, $pattern);
break;
case "left":
$delta = $left / 2;
case "right":
$delta = isset($delta) ? $delta : - $right / 2;
$this->_canvas->line($x + $delta, $y, $x + $delta, $y + $length, $color, $$side, $pattern);
break;
default:
return;
}
}
protected function _border_solid($x, $y, $length, $color, $widths, $side, $corner_style = "bevel") {
list($top, $right, $bottom, $left) = $widths;
// All this polygon business is for beveled corners...
switch ($side) {
case "top":
if ( $corner_style === "bevel" ) {
$points = array($x, $y,
$x + $length, $y,
$x + $length - $right, $y + $top,
$x + $left, $y + $top);
$this->_canvas->polygon($points, $color, null, null, true);
} else
$this->_canvas->filled_rectangle($x, $y, $length, $top, $color);
break;
case "bottom":
if ( $corner_style === "bevel" ) {
$points = array($x, $y,
$x + $length, $y,
$x + $length - $right, $y - $bottom,
$x + $left, $y - $bottom);
$this->_canvas->polygon($points, $color, null, null, true);
} else
$this->_canvas->filled_rectangle($x, $y - $bottom, $length, $bottom, $color);
break;
case "left":
if ( $corner_style === "bevel" ) {
$points = array($x, $y,
$x, $y + $length,
$x + $left, $y + $length - $bottom,
$x + $left, $y + $top);
$this->_canvas->polygon($points, $color, null, null, true);
} else
$this->_canvas->filled_rectangle($x, $y, $left, $length, $color);
break;
case "right":
if ( $corner_style === "bevel" ) {
$points = array($x, $y,
$x, $y + $length,
$x - $right, $y + $length - $bottom,
$x - $right, $y + $top);
$this->_canvas->polygon($points, $color, null, null, true);
} else
$this->_canvas->filled_rectangle($x - $right, $y, $right, $length, $color);
break;
default:
return;
}
}
protected function _border_double($x, $y, $length, $color, $widths, $side, $corner_style = "bevel") {
list($top, $right, $bottom, $left) = $widths;
$line_width = $$side / 3;
// We draw the outermost edge first. Points are ordered: outer left,
// outer right, inner right, inner left, or outer top, outer bottom,
// inner bottom, inner top.
switch ($side) {
case "top":
if ( $corner_style === "bevel" ) {
$left_line_width = $left / 3;
$right_line_width = $right / 3;
$points = array($x, $y,
$x + $length, $y,
$x + $length - $right_line_width, $y + $line_width,
$x + $left_line_width, $y + $line_width,);
$this->_canvas->polygon($points, $color, null, null, true);
$points = array($x + $left - $left_line_width, $y + $top - $line_width,
$x + $length - $right + $right_line_width, $y + $top - $line_width,
$x + $length - $right, $y + $top,
$x + $left, $y + $top);
$this->_canvas->polygon($points, $color, null, null, true);
} else {
$this->_canvas->filled_rectangle($x, $y, $length, $line_width, $color);
$this->_canvas->filled_rectangle($x, $y + $top - $line_width, $length, $line_width, $color);
}
break;
case "bottom":
if ( $corner_style === "bevel" ) {
$left_line_width = $left / 3;
$right_line_width = $right / 3;
$points = array($x, $y,
$x + $length, $y,
$x + $length - $right_line_width, $y - $line_width,
$x + $left_line_width, $y - $line_width);
$this->_canvas->polygon($points, $color, null, null, true);
$points = array($x + $left - $left_line_width, $y - $bottom + $line_width,
$x + $length - $right + $right_line_width, $y - $bottom + $line_width,
$x + $length - $right, $y - $bottom,
$x + $left, $y - $bottom);
$this->_canvas->polygon($points, $color, null, null, true);
} else {
$this->_canvas->filled_rectangle($x, $y - $line_width, $length, $line_width, $color);
$this->_canvas->filled_rectangle($x, $y - $bottom, $length, $line_width, $color);
}
break;
case "left":
if ( $corner_style === "bevel" ) {
$top_line_width = $top / 3;
$bottom_line_width = $bottom / 3;
$points = array($x, $y,
$x, $y + $length,
$x + $line_width, $y + $length - $bottom_line_width,
$x + $line_width, $y + $top_line_width);
$this->_canvas->polygon($points, $color, null, null, true);
$points = array($x + $left - $line_width, $y + $top - $top_line_width,
$x + $left - $line_width, $y + $length - $bottom + $bottom_line_width,
$x + $left, $y + $length - $bottom,
$x + $left, $y + $top);
$this->_canvas->polygon($points, $color, null, null, true);
} else {
$this->_canvas->filled_rectangle($x, $y, $line_width, $length, $color);
$this->_canvas->filled_rectangle($x + $left - $line_width, $y, $line_width, $length, $color);
}
break;
case "right":
if ( $corner_style === "bevel" ) {
$top_line_width = $top / 3;
$bottom_line_width = $bottom / 3;
$points = array($x, $y,
$x, $y + $length,
$x - $line_width, $y + $length - $bottom_line_width,
$x - $line_width, $y + $top_line_width);
$this->_canvas->polygon($points, $color, null, null, true);
$points = array($x - $right + $line_width, $y + $top - $top_line_width,
$x - $right + $line_width, $y + $length - $bottom + $bottom_line_width,
$x - $right, $y + $length - $bottom,
$x - $right, $y + $top);
$this->_canvas->polygon($points, $color, null, null, true);
} else {
$this->_canvas->filled_rectangle($x - $line_width, $y, $line_width, $length, $color);
$this->_canvas->filled_rectangle($x - $right, $y, $line_width, $length, $color);
}
break;
default:
return;
}
}
protected function _border_groove($x, $y, $length, $color, $widths, $side, $corner_style = "bevel") {
list($top, $right, $bottom, $left) = $widths;
$half_widths = array($top / 2, $right / 2, $bottom / 2, $left / 2);
$this->_border_inset($x, $y, $length, $color, $half_widths, $side);
switch ($side) {
case "top":
$x += $left / 2;
$y += $top / 2;
$length -= $left / 2 + $right / 2;
break;
case "bottom":
$x += $left / 2;
$y -= $bottom / 2;
$length -= $left / 2 + $right / 2;
break;
case "left":
$x += $left / 2;
$y += $top / 2;
$length -= $top / 2 + $bottom / 2;
break;
case "right":
$x -= $right / 2;
$y += $top / 2;
$length -= $top / 2 + $bottom / 2;
break;
default:
return;
}
$this->_border_outset($x, $y, $length, $color, $half_widths, $side);
}
protected function _border_ridge($x, $y, $length, $color, $widths, $side, $corner_style = "bevel") {
list($top, $right, $bottom, $left) = $widths;
$half_widths = array($top / 2, $right / 2, $bottom / 2, $left / 2);
$this->_border_outset($x, $y, $length, $color, $half_widths, $side);
switch ($side) {
case "top":
$x += $left / 2;
$y += $top / 2;
$length -= $left / 2 + $right / 2;
break;
case "bottom":
$x += $left / 2;
$y -= $bottom / 2;
$length -= $left / 2 + $right / 2;
break;
case "left":
$x += $left / 2;
$y += $top / 2;
$length -= $top / 2 + $bottom / 2;
break;
case "right":
$x -= $right / 2;
$y += $top / 2;
$length -= $top / 2 + $bottom / 2;
break;
default:
return;
}
$this->_border_inset($x, $y, $length, $color, $half_widths, $side);
}
protected function _tint($c) {
if ( !is_numeric($c) )
return $c;
return min(1, $c + 0.16);
}
protected function _shade($c) {
if ( !is_numeric($c) )
return $c;
return max(0, $c - 0.33);
}
protected function _border_inset($x, $y, $length, $color, $widths, $side, $corner_style = "bevel") {
list($top, $right, $bottom, $left) = $widths;
switch ($side) {
case "top":
case "left":
$shade = array_map(array($this, "_shade"), $color);
$this->_border_solid($x, $y, $length, $shade, $widths, $side);
break;
case "bottom":
case "right":
$tint = array_map(array($this, "_tint"), $color);
$this->_border_solid($x, $y, $length, $tint, $widths, $side);
break;
default:
return;
}
}
protected function _border_outset($x, $y, $length, $color, $widths, $side, $corner_style = "bevel") {
list($top, $right, $bottom, $left) = $widths;
switch ($side) {
case "top":
case "left":
$tint = array_map(array($this, "_tint"), $color);
$this->_border_solid($x, $y, $length, $tint, $widths, $side);
break;
case "bottom":
case "right":
$shade = array_map(array($this, "_shade"), $color);
$this->_border_solid($x, $y, $length, $shade, $widths, $side);
break;
default:
return;
}
}
protected function _set_opacity($opacity) {
if ( is_numeric($opacity) && $opacity <= 1.0 && $opacity >= 0.0 ) {
$this->_canvas->set_opacity( $opacity );
}
}
protected function _debug_layout($box, $color = "red", $style = array()) {
$this->_canvas->rectangle($box[0], $box[1], $box[2], $box[3], CSS_Color::parse($color), 0.1, $style);
}
//........................................................................
}

View File

@ -1,9 +0,0 @@
<?php
/**
* @package dompdf
* @link http://www.dompdf.com/
* @author Benj Carson <benjcarson@digitaljunkies.ca>
* @author ...
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @version $Id: file.skel 448 2011-11-13 13:00:03Z fabien.menager $
*/

View File

@ -1,286 +0,0 @@
<?php
/**
* @package dompdf
* @link http://www.dompdf.com/
* @author Benj Carson <benjcarson@digitaljunkies.ca>
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @version $Id: renderer.cls.php 448 2011-11-13 13:00:03Z fabien.menager $
*/
/**
* Concrete renderer
*
* Instantiates several specific renderers in order to render any given
* frame.
*
* @access private
* @package dompdf
*/
class Renderer extends Abstract_Renderer {
/**
* Array of renderers for specific frame types
*
* @var array
*/
protected $_renderers;
/**
* Cache of the callbacks array
*
* @var array
*/
private $_callbacks;
/**
* true when a stacking context is currently built
* @var bool
*/
public static $stacking_first_pass = true;
/**
* Class destructor
*/
function __destruct() {
clear_object($this);
}
/**
* Advance the canvas to the next page
*/
function new_page() {
$this->_canvas->new_page();
}
/**
* Render frames recursively
*
* @param Frame $frame the frame to render
*/
function render(Frame $frame, $stacking = false) {
global $_dompdf_debug;
if ( $_dompdf_debug ) {
echo $frame;
flush();
}
$style = $frame->get_style();
if ( in_array($style->visibility, array("hidden", "collapse")) ) {
return;
}
$render_self = self::$stacking_first_pass && !$stacking || !self::$stacking_first_pass;
if ( $render_self ) {
$display = $style->display;
// Starts the CSS transformation
if ( $style->transform && is_array($style->transform) ) {
$this->_canvas->save();
list($x, $y, $w, $h) = $frame->get_padding_box();
$origin = $style->transform_origin;
foreach($style->transform as $transform) {
list($function, $values) = $transform;
if ( $function === "matrix" ) {
$function = "transform";
}
$values = array_map("floatval", $values);
$values[] = $x + $style->length_in_pt($origin[0], $style->width);
$values[] = $y + $style->length_in_pt($origin[1], $style->height);
call_user_func_array(array($this->_canvas, $function), $values);
}
}
switch ($display) {
case "block":
case "list-item":
case "inline-block":
case "table":
case "inline-table":
$this->_render_frame("block", $frame);
break;
case "inline":
if ( $frame->is_text_node() )
$this->_render_frame("text", $frame);
else
$this->_render_frame("inline", $frame);
break;
case "table-cell":
$this->_render_frame("table-cell", $frame);
break;
case "table-row-group":
case "table-header-group":
case "table-footer-group":
$this->_render_frame("table-row-group", $frame);
break;
case "-dompdf-list-bullet":
$this->_render_frame("list-bullet", $frame);
break;
case "-dompdf-image":
$this->_render_frame("image", $frame);
break;
case "none":
$node = $frame->get_node();
if ( $node->nodeName === "script" ) {
if ( $node->getAttribute("type") === "text/php" ||
$node->getAttribute("language") === "php" ) {
// Evaluate embedded php scripts
$this->_render_frame("php", $frame);
}
elseif ( $node->getAttribute("type") === "text/javascript" ||
$node->getAttribute("language") === "javascript" ) {
// Insert JavaScript
$this->_render_frame("javascript", $frame);
}
}
// Don't render children, so skip to next iter
return;
default:
break;
}
// Check for begin frame callback
$this->_check_callbacks("begin_frame", $frame);
// Starts the overflow: hidden box
if ( $style->overflow === "hidden" ) {
list($x, $y, $w, $h) = $frame->get_padding_box();
$this->_canvas->clipping_rectangle($x, $y, $w, $h);
}
}
$page = $frame->get_root()->get_reflower();
foreach ($frame->get_children() as $child) {
$child_style = $child->get_style();
$_stacking = $stacking;
// Stacking context
if ( self::$stacking_first_pass && (
$child_style->z_index !== "auto" ||
$child_style->float !== "none" ||
$child->is_positionned()) ) {
$z_index = ($child_style->z_index === "auto") ? 0 : intval($child_style->z_index);
$page->add_frame_to_stacking_context($child, $z_index);
$_stacking = true;
}
$this->render($child, $_stacking);
}
if ( $render_self ) {
// Ends the overflow: hidden box
if ( $style->overflow === "hidden" ) {
$this->_canvas->clipping_end();
}
if ( $style->transform && is_array($style->transform) ) {
$this->_canvas->restore();
}
// Check for end frame callback
$this->_check_callbacks("end_frame", $frame);
}
}
/**
* Check for callbacks that need to be performed when a given event
* gets triggered on a frame
*
* @param string $event the type of event
* @param Frame $frame the frame that event is triggered on
*/
protected function _check_callbacks($event, $frame) {
if (!isset($this->_callbacks)) {
$this->_callbacks = $this->_dompdf->get_callbacks();
}
if (is_array($this->_callbacks) && isset($this->_callbacks[$event])) {
$info = array(0 => $this->_canvas, "canvas" => $this->_canvas,
1 => $frame, "frame" => $frame);
$fs = $this->_callbacks[$event];
foreach ($fs as $f) {
if (is_callable($f)) {
if (is_array($f)) {
$f[0]->$f[1]($info);
} else {
$f($info);
}
}
}
}
}
/**
* Render a single frame
*
* Creates Renderer objects on demand
*
* @param string $type type of renderer to use
* @param Frame $frame the frame to render
*/
protected function _render_frame($type, $frame) {
if ( !isset($this->_renderers[$type]) ) {
switch ($type) {
case "block":
$this->_renderers[$type] = new Block_Renderer($this->_dompdf);
break;
case "inline":
$this->_renderers[$type] = new Inline_Renderer($this->_dompdf);
break;
case "text":
$this->_renderers[$type] = new Text_Renderer($this->_dompdf);
break;
case "image":
$this->_renderers[$type] = new Image_Renderer($this->_dompdf);
break;
case "table-cell":
$this->_renderers[$type] = new Table_Cell_Renderer($this->_dompdf);
break;
case "table-row-group":
$this->_renderers[$type] = new Table_Row_Group_Renderer($this->_dompdf);
break;
case "list-bullet":
$this->_renderers[$type] = new List_Bullet_Renderer($this->_dompdf);
break;
case "php":
$this->_renderers[$type] = new PHP_Evaluator($this->_canvas);
break;
case "javascript":
$this->_renderers[$type] = new Javascript_Embedder($this->_dompdf);
break;
}
}
$this->_renderers[$type]->render($frame);
}
}

View File

@ -1 +0,0 @@
<?php header("Location: www/"); ?>

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

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

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

View File

@ -1,570 +0,0 @@
<?php return array (
'codeToName' =>
array (
32 => 'space',
160 => 'space',
33 => 'exclam',
34 => 'quotedbl',
35 => 'numbersign',
36 => 'dollar',
37 => 'percent',
38 => 'ampersand',
146 => 'quoteright',
40 => 'parenleft',
41 => 'parenright',
42 => 'asterisk',
43 => 'plus',
44 => 'comma',
45 => 'hyphen',
173 => 'hyphen',
46 => 'period',
47 => 'slash',
48 => 'zero',
49 => 'one',
50 => 'two',
51 => 'three',
52 => 'four',
53 => 'five',
54 => 'six',
55 => 'seven',
56 => 'eight',
57 => 'nine',
58 => 'colon',
59 => 'semicolon',
60 => 'less',
61 => 'equal',
62 => 'greater',
63 => 'question',
64 => 'at',
65 => 'A',
66 => 'B',
67 => 'C',
68 => 'D',
69 => 'E',
70 => 'F',
71 => 'G',
72 => 'H',
73 => 'I',
74 => 'J',
75 => 'K',
76 => 'L',
77 => 'M',
78 => 'N',
79 => 'O',
80 => 'P',
81 => 'Q',
82 => 'R',
83 => 'S',
84 => 'T',
85 => 'U',
86 => 'V',
87 => 'W',
88 => 'X',
89 => 'Y',
90 => 'Z',
91 => 'bracketleft',
92 => 'backslash',
93 => 'bracketright',
94 => 'asciicircum',
95 => 'underscore',
145 => 'quoteleft',
97 => 'a',
98 => 'b',
99 => 'c',
100 => 'd',
101 => 'e',
102 => 'f',
103 => 'g',
104 => 'h',
105 => 'i',
106 => 'j',
107 => 'k',
108 => 'l',
109 => 'm',
110 => 'n',
111 => 'o',
112 => 'p',
113 => 'q',
114 => 'r',
115 => 's',
116 => 't',
117 => 'u',
118 => 'v',
119 => 'w',
120 => 'x',
121 => 'y',
122 => 'z',
123 => 'braceleft',
124 => 'bar',
125 => 'braceright',
126 => 'asciitilde',
161 => 'exclamdown',
162 => 'cent',
163 => 'sterling',
165 => 'yen',
131 => 'florin',
167 => 'section',
164 => 'currency',
39 => 'quotesingle',
147 => 'quotedblleft',
170 => 'ordfeminine',
139 => 'guilsinglleft',
155 => 'guilsinglright',
150 => 'endash',
134 => 'dagger',
135 => 'daggerdbl',
183 => 'periodcentered',
182 => 'paragraph',
149 => 'bullet',
130 => 'quotesinglbase',
132 => 'quotedblbase',
148 => 'quotedblright',
187 => 'guillemotright',
133 => 'ellipsis',
137 => 'perthousand',
191 => 'questiondown',
96 => 'grave',
180 => 'acute',
136 => 'circumflex',
152 => 'tilde',
175 => 'macron',
168 => 'dieresis',
184 => 'cedilla',
151 => 'emdash',
198 => 'AE',
216 => 'Oslash',
140 => 'OE',
186 => 'ordmasculine',
230 => 'ae',
248 => 'oslash',
156 => 'oe',
223 => 'germandbls',
207 => 'Idieresis',
233 => 'eacute',
159 => 'Ydieresis',
247 => 'divide',
221 => 'Yacute',
194 => 'Acircumflex',
225 => 'aacute',
219 => 'Ucircumflex',
253 => 'yacute',
234 => 'ecircumflex',
220 => 'Udieresis',
218 => 'Uacute',
203 => 'Edieresis',
169 => 'copyright',
229 => 'aring',
224 => 'agrave',
227 => 'atilde',
154 => 'scaron',
237 => 'iacute',
251 => 'ucircumflex',
226 => 'acircumflex',
231 => 'ccedilla',
222 => 'Thorn',
179 => 'threesuperior',
210 => 'Ograve',
192 => 'Agrave',
215 => 'multiply',
250 => 'uacute',
255 => 'ydieresis',
238 => 'icircumflex',
202 => 'Ecircumflex',
228 => 'adieresis',
235 => 'edieresis',
205 => 'Iacute',
177 => 'plusminus',
166 => 'brokenbar',
174 => 'registered',
200 => 'Egrave',
142 => 'Zcaron',
208 => 'Eth',
199 => 'Ccedilla',
193 => 'Aacute',
196 => 'Adieresis',
232 => 'egrave',
211 => 'Oacute',
243 => 'oacute',
239 => 'idieresis',
212 => 'Ocircumflex',
217 => 'Ugrave',
254 => 'thorn',
178 => 'twosuperior',
214 => 'Odieresis',
181 => 'mu',
236 => 'igrave',
190 => 'threequarters',
153 => 'trademark',
204 => 'Igrave',
189 => 'onehalf',
244 => 'ocircumflex',
241 => 'ntilde',
201 => 'Eacute',
188 => 'onequarter',
138 => 'Scaron',
176 => 'degree',
242 => 'ograve',
249 => 'ugrave',
209 => 'Ntilde',
245 => 'otilde',
195 => 'Atilde',
197 => 'Aring',
213 => 'Otilde',
206 => 'Icircumflex',
172 => 'logicalnot',
246 => 'odieresis',
252 => 'udieresis',
240 => 'eth',
158 => 'zcaron',
185 => 'onesuperior',
128 => 'Euro',
),
'isUnicode' => false,
'FontName' => 'Helvetica-Bold',
'FullName' => 'Helvetica Bold',
'FamilyName' => 'Helvetica',
'Weight' => 'Bold',
'ItalicAngle' => '0',
'IsFixedPitch' => 'false',
'CharacterSet' => 'ExtendedRoman',
'FontBBox' =>
array (
0 => '-170',
1 => '-228',
2 => '1003',
3 => '962',
),
'UnderlinePosition' => '-100',
'UnderlineThickness' => '50',
'Version' => '002.000',
'EncodingScheme' => 'WinAnsiEncoding',
'CapHeight' => '718',
'XHeight' => '532',
'Ascender' => '718',
'Descender' => '-207',
'StdHW' => '118',
'StdVW' => '140',
'StartCharMetrics' => '317',
'C' =>
array (
32 => 278,
160 => 278,
33 => 333,
34 => 474,
35 => 556,
36 => 556,
37 => 889,
38 => 722,
146 => 278,
40 => 333,
41 => 333,
42 => 389,
43 => 584,
44 => 278,
45 => 333,
173 => 333,
46 => 278,
47 => 278,
48 => 556,
49 => 556,
50 => 556,
51 => 556,
52 => 556,
53 => 556,
54 => 556,
55 => 556,
56 => 556,
57 => 556,
58 => 333,
59 => 333,
60 => 584,
61 => 584,
62 => 584,
63 => 611,
64 => 975,
65 => 722,
66 => 722,
67 => 722,
68 => 722,
69 => 667,
70 => 611,
71 => 778,
72 => 722,
73 => 278,
74 => 556,
75 => 722,
76 => 611,
77 => 833,
78 => 722,
79 => 778,
80 => 667,
81 => 778,
82 => 722,
83 => 667,
84 => 611,
85 => 722,
86 => 667,
87 => 944,
88 => 667,
89 => 667,
90 => 611,
91 => 333,
92 => 278,
93 => 333,
94 => 584,
95 => 556,
145 => 278,
97 => 556,
98 => 611,
99 => 556,
100 => 611,
101 => 556,
102 => 333,
103 => 611,
104 => 611,
105 => 278,
106 => 278,
107 => 556,
108 => 278,
109 => 889,
110 => 611,
111 => 611,
112 => 611,
113 => 611,
114 => 389,
115 => 556,
116 => 333,
117 => 611,
118 => 556,
119 => 778,
120 => 556,
121 => 556,
122 => 500,
123 => 389,
124 => 280,
125 => 389,
126 => 584,
161 => 333,
162 => 556,
163 => 556,
'fraction' => 167,
165 => 556,
131 => 556,
167 => 556,
164 => 556,
39 => 238,
147 => 500,
170 => 370,
139 => 333,
155 => 333,
'fi' => 611,
'fl' => 611,
150 => 556,
134 => 556,
135 => 556,
183 => 278,
182 => 556,
149 => 350,
130 => 278,
132 => 500,
148 => 500,
187 => 556,
133 => 1000,
137 => 1000,
191 => 611,
96 => 333,
180 => 333,
136 => 333,
152 => 333,
175 => 333,
'breve' => 333,
'dotaccent' => 333,
168 => 333,
'ring' => 333,
184 => 333,
'hungarumlaut' => 333,
'ogonek' => 333,
'caron' => 333,
151 => 1000,
198 => 1000,
'Lslash' => 611,
216 => 778,
140 => 1000,
186 => 365,
230 => 889,
'dotlessi' => 278,
'lslash' => 278,
248 => 611,
156 => 944,
223 => 611,
207 => 278,
233 => 556,
'abreve' => 556,
'uhungarumlaut' => 611,
'ecaron' => 556,
159 => 667,
247 => 584,
221 => 667,
194 => 722,
225 => 556,
219 => 722,
253 => 556,
'scommaaccent' => 556,
234 => 556,
'Uring' => 722,
220 => 722,
'aogonek' => 556,
218 => 722,
'uogonek' => 611,
203 => 667,
'Dcroat' => 722,
'commaaccent' => 250,
169 => 737,
'Emacron' => 667,
'ccaron' => 556,
229 => 556,
'Ncommaaccent' => 722,
'lacute' => 278,
224 => 556,
'Tcommaaccent' => 611,
'Cacute' => 722,
227 => 556,
'Edotaccent' => 667,
154 => 556,
'scedilla' => 556,
237 => 278,
'lozenge' => 494,
'Rcaron' => 722,
'Gcommaaccent' => 778,
251 => 611,
226 => 556,
'Amacron' => 722,
'rcaron' => 389,
231 => 556,
'Zdotaccent' => 611,
222 => 667,
'Omacron' => 778,
'Racute' => 722,
'Sacute' => 667,
'dcaron' => 743,
'Umacron' => 722,
'uring' => 611,
179 => 333,
210 => 778,
192 => 722,
'Abreve' => 722,
215 => 584,
250 => 611,
'Tcaron' => 611,
'partialdiff' => 494,
255 => 556,
'Nacute' => 722,
238 => 278,
202 => 667,
228 => 556,
235 => 556,
'cacute' => 556,
'nacute' => 611,
'umacron' => 611,
'Ncaron' => 722,
205 => 278,
177 => 584,
166 => 280,
174 => 737,
'Gbreve' => 778,
'Idotaccent' => 278,
'summation' => 600,
200 => 667,
'racute' => 389,
'omacron' => 611,
'Zacute' => 611,
142 => 611,
'greaterequal' => 549,
208 => 722,
199 => 722,
'lcommaaccent' => 278,
'tcaron' => 389,
'eogonek' => 556,
'Uogonek' => 722,
193 => 722,
196 => 722,
232 => 556,
'zacute' => 500,
'iogonek' => 278,
211 => 778,
243 => 611,
'amacron' => 556,
'sacute' => 556,
239 => 278,
212 => 778,
217 => 722,
'Delta' => 612,
254 => 611,
178 => 333,
214 => 778,
181 => 611,
236 => 278,
'ohungarumlaut' => 611,
'Eogonek' => 667,
'dcroat' => 611,
190 => 834,
'Scedilla' => 667,
'lcaron' => 400,
'Kcommaaccent' => 722,
'Lacute' => 611,
153 => 1000,
'edotaccent' => 556,
204 => 278,
'Imacron' => 278,
'Lcaron' => 611,
189 => 834,
'lessequal' => 549,
244 => 611,
241 => 611,
'Uhungarumlaut' => 722,
201 => 667,
'emacron' => 556,
'gbreve' => 611,
188 => 834,
138 => 667,
'Scommaaccent' => 667,
'Ohungarumlaut' => 778,
176 => 400,
242 => 611,
'Ccaron' => 722,
249 => 611,
'radical' => 549,
'Dcaron' => 722,
'rcommaaccent' => 389,
209 => 722,
245 => 611,
'Rcommaaccent' => 722,
'Lcommaaccent' => 611,
195 => 722,
'Aogonek' => 722,
197 => 722,
213 => 778,
'zdotaccent' => 500,
'Ecaron' => 667,
'Iogonek' => 278,
'kcommaaccent' => 556,
'minus' => 584,
206 => 278,
'ncaron' => 611,
'tcommaaccent' => 333,
172 => 584,
246 => 611,
252 => 611,
'notequal' => 549,
'gcommaaccent' => 611,
240 => 611,
158 => 500,
'ncommaaccent' => 611,
185 => 333,
'imacron' => 278,
128 => 556,
),
'CIDtoGID_Compressed' => true,
'CIDtoGID' => 'eJwDAAAAAAE=',
'_version_' => 5,
);

View File

@ -1,570 +0,0 @@
<?php return array (
'codeToName' =>
array (
32 => 'space',
160 => 'space',
33 => 'exclam',
34 => 'quotedbl',
35 => 'numbersign',
36 => 'dollar',
37 => 'percent',
38 => 'ampersand',
146 => 'quoteright',
40 => 'parenleft',
41 => 'parenright',
42 => 'asterisk',
43 => 'plus',
44 => 'comma',
45 => 'hyphen',
173 => 'hyphen',
46 => 'period',
47 => 'slash',
48 => 'zero',
49 => 'one',
50 => 'two',
51 => 'three',
52 => 'four',
53 => 'five',
54 => 'six',
55 => 'seven',
56 => 'eight',
57 => 'nine',
58 => 'colon',
59 => 'semicolon',
60 => 'less',
61 => 'equal',
62 => 'greater',
63 => 'question',
64 => 'at',
65 => 'A',
66 => 'B',
67 => 'C',
68 => 'D',
69 => 'E',
70 => 'F',
71 => 'G',
72 => 'H',
73 => 'I',
74 => 'J',
75 => 'K',
76 => 'L',
77 => 'M',
78 => 'N',
79 => 'O',
80 => 'P',
81 => 'Q',
82 => 'R',
83 => 'S',
84 => 'T',
85 => 'U',
86 => 'V',
87 => 'W',
88 => 'X',
89 => 'Y',
90 => 'Z',
91 => 'bracketleft',
92 => 'backslash',
93 => 'bracketright',
94 => 'asciicircum',
95 => 'underscore',
145 => 'quoteleft',
97 => 'a',
98 => 'b',
99 => 'c',
100 => 'd',
101 => 'e',
102 => 'f',
103 => 'g',
104 => 'h',
105 => 'i',
106 => 'j',
107 => 'k',
108 => 'l',
109 => 'm',
110 => 'n',
111 => 'o',
112 => 'p',
113 => 'q',
114 => 'r',
115 => 's',
116 => 't',
117 => 'u',
118 => 'v',
119 => 'w',
120 => 'x',
121 => 'y',
122 => 'z',
123 => 'braceleft',
124 => 'bar',
125 => 'braceright',
126 => 'asciitilde',
161 => 'exclamdown',
162 => 'cent',
163 => 'sterling',
165 => 'yen',
131 => 'florin',
167 => 'section',
164 => 'currency',
39 => 'quotesingle',
147 => 'quotedblleft',
170 => 'ordfeminine',
139 => 'guilsinglleft',
155 => 'guilsinglright',
150 => 'endash',
134 => 'dagger',
135 => 'daggerdbl',
183 => 'periodcentered',
182 => 'paragraph',
149 => 'bullet',
130 => 'quotesinglbase',
132 => 'quotedblbase',
148 => 'quotedblright',
187 => 'guillemotright',
133 => 'ellipsis',
137 => 'perthousand',
191 => 'questiondown',
96 => 'grave',
180 => 'acute',
136 => 'circumflex',
152 => 'tilde',
175 => 'macron',
168 => 'dieresis',
184 => 'cedilla',
151 => 'emdash',
198 => 'AE',
216 => 'Oslash',
140 => 'OE',
186 => 'ordmasculine',
230 => 'ae',
248 => 'oslash',
156 => 'oe',
223 => 'germandbls',
207 => 'Idieresis',
233 => 'eacute',
159 => 'Ydieresis',
247 => 'divide',
221 => 'Yacute',
194 => 'Acircumflex',
225 => 'aacute',
219 => 'Ucircumflex',
253 => 'yacute',
234 => 'ecircumflex',
220 => 'Udieresis',
218 => 'Uacute',
203 => 'Edieresis',
169 => 'copyright',
229 => 'aring',
224 => 'agrave',
227 => 'atilde',
154 => 'scaron',
237 => 'iacute',
251 => 'ucircumflex',
226 => 'acircumflex',
231 => 'ccedilla',
222 => 'Thorn',
179 => 'threesuperior',
210 => 'Ograve',
192 => 'Agrave',
215 => 'multiply',
250 => 'uacute',
255 => 'ydieresis',
238 => 'icircumflex',
202 => 'Ecircumflex',
228 => 'adieresis',
235 => 'edieresis',
205 => 'Iacute',
177 => 'plusminus',
166 => 'brokenbar',
174 => 'registered',
200 => 'Egrave',
142 => 'Zcaron',
208 => 'Eth',
199 => 'Ccedilla',
193 => 'Aacute',
196 => 'Adieresis',
232 => 'egrave',
211 => 'Oacute',
243 => 'oacute',
239 => 'idieresis',
212 => 'Ocircumflex',
217 => 'Ugrave',
254 => 'thorn',
178 => 'twosuperior',
214 => 'Odieresis',
181 => 'mu',
236 => 'igrave',
190 => 'threequarters',
153 => 'trademark',
204 => 'Igrave',
189 => 'onehalf',
244 => 'ocircumflex',
241 => 'ntilde',
201 => 'Eacute',
188 => 'onequarter',
138 => 'Scaron',
176 => 'degree',
242 => 'ograve',
249 => 'ugrave',
209 => 'Ntilde',
245 => 'otilde',
195 => 'Atilde',
197 => 'Aring',
213 => 'Otilde',
206 => 'Icircumflex',
172 => 'logicalnot',
246 => 'odieresis',
252 => 'udieresis',
240 => 'eth',
158 => 'zcaron',
185 => 'onesuperior',
128 => 'Euro',
),
'isUnicode' => false,
'FontName' => 'Helvetica',
'FullName' => 'Helvetica',
'FamilyName' => 'Helvetica',
'Weight' => 'Medium',
'ItalicAngle' => '0',
'IsFixedPitch' => 'false',
'CharacterSet' => 'ExtendedRoman',
'FontBBox' =>
array (
0 => '-166',
1 => '-225',
2 => '1000',
3 => '931',
),
'UnderlinePosition' => '-100',
'UnderlineThickness' => '50',
'Version' => '002.000',
'EncodingScheme' => 'WinAnsiEncoding',
'CapHeight' => '718',
'XHeight' => '523',
'Ascender' => '718',
'Descender' => '-207',
'StdHW' => '76',
'StdVW' => '88',
'StartCharMetrics' => '317',
'C' =>
array (
32 => 278,
160 => 278,
33 => 278,
34 => 355,
35 => 556,
36 => 556,
37 => 889,
38 => 667,
146 => 222,
40 => 333,
41 => 333,
42 => 389,
43 => 584,
44 => 278,
45 => 333,
173 => 333,
46 => 278,
47 => 278,
48 => 556,
49 => 556,
50 => 556,
51 => 556,
52 => 556,
53 => 556,
54 => 556,
55 => 556,
56 => 556,
57 => 556,
58 => 278,
59 => 278,
60 => 584,
61 => 584,
62 => 584,
63 => 556,
64 => 1015,
65 => 667,
66 => 667,
67 => 722,
68 => 722,
69 => 667,
70 => 611,
71 => 778,
72 => 722,
73 => 278,
74 => 500,
75 => 667,
76 => 556,
77 => 833,
78 => 722,
79 => 778,
80 => 667,
81 => 778,
82 => 722,
83 => 667,
84 => 611,
85 => 722,
86 => 667,
87 => 944,
88 => 667,
89 => 667,
90 => 611,
91 => 278,
92 => 278,
93 => 278,
94 => 469,
95 => 556,
145 => 222,
97 => 556,
98 => 556,
99 => 500,
100 => 556,
101 => 556,
102 => 278,
103 => 556,
104 => 556,
105 => 222,
106 => 222,
107 => 500,
108 => 222,
109 => 833,
110 => 556,
111 => 556,
112 => 556,
113 => 556,
114 => 333,
115 => 500,
116 => 278,
117 => 556,
118 => 500,
119 => 722,
120 => 500,
121 => 500,
122 => 500,
123 => 334,
124 => 260,
125 => 334,
126 => 584,
161 => 333,
162 => 556,
163 => 556,
'fraction' => 167,
165 => 556,
131 => 556,
167 => 556,
164 => 556,
39 => 191,
147 => 333,
170 => 370,
139 => 333,
155 => 333,
'fi' => 500,
'fl' => 500,
150 => 556,
134 => 556,
135 => 556,
183 => 278,
182 => 537,
149 => 350,
130 => 222,
132 => 333,
148 => 333,
187 => 556,
133 => 1000,
137 => 1000,
191 => 611,
96 => 333,
180 => 333,
136 => 333,
152 => 333,
175 => 333,
'breve' => 333,
'dotaccent' => 333,
168 => 333,
'ring' => 333,
184 => 333,
'hungarumlaut' => 333,
'ogonek' => 333,
'caron' => 333,
151 => 1000,
198 => 1000,
'Lslash' => 556,
216 => 778,
140 => 1000,
186 => 365,
230 => 889,
'dotlessi' => 278,
'lslash' => 222,
248 => 611,
156 => 944,
223 => 611,
207 => 278,
233 => 556,
'abreve' => 556,
'uhungarumlaut' => 556,
'ecaron' => 556,
159 => 667,
247 => 584,
221 => 667,
194 => 667,
225 => 556,
219 => 722,
253 => 500,
'scommaaccent' => 500,
234 => 556,
'Uring' => 722,
220 => 722,
'aogonek' => 556,
218 => 722,
'uogonek' => 556,
203 => 667,
'Dcroat' => 722,
'commaaccent' => 250,
169 => 737,
'Emacron' => 667,
'ccaron' => 500,
229 => 556,
'Ncommaaccent' => 722,
'lacute' => 222,
224 => 556,
'Tcommaaccent' => 611,
'Cacute' => 722,
227 => 556,
'Edotaccent' => 667,
154 => 500,
'scedilla' => 500,
237 => 278,
'lozenge' => 471,
'Rcaron' => 722,
'Gcommaaccent' => 778,
251 => 556,
226 => 556,
'Amacron' => 667,
'rcaron' => 333,
231 => 500,
'Zdotaccent' => 611,
222 => 667,
'Omacron' => 778,
'Racute' => 722,
'Sacute' => 667,
'dcaron' => 643,
'Umacron' => 722,
'uring' => 556,
179 => 333,
210 => 778,
192 => 667,
'Abreve' => 667,
215 => 584,
250 => 556,
'Tcaron' => 611,
'partialdiff' => 476,
255 => 500,
'Nacute' => 722,
238 => 278,
202 => 667,
228 => 556,
235 => 556,
'cacute' => 500,
'nacute' => 556,
'umacron' => 556,
'Ncaron' => 722,
205 => 278,
177 => 584,
166 => 260,
174 => 737,
'Gbreve' => 778,
'Idotaccent' => 278,
'summation' => 600,
200 => 667,
'racute' => 333,
'omacron' => 556,
'Zacute' => 611,
142 => 611,
'greaterequal' => 549,
208 => 722,
199 => 722,
'lcommaaccent' => 222,
'tcaron' => 317,
'eogonek' => 556,
'Uogonek' => 722,
193 => 667,
196 => 667,
232 => 556,
'zacute' => 500,
'iogonek' => 222,
211 => 778,
243 => 556,
'amacron' => 556,
'sacute' => 500,
239 => 278,
212 => 778,
217 => 722,
'Delta' => 612,
254 => 556,
178 => 333,
214 => 778,
181 => 556,
236 => 278,
'ohungarumlaut' => 556,
'Eogonek' => 667,
'dcroat' => 556,
190 => 834,
'Scedilla' => 667,
'lcaron' => 299,
'Kcommaaccent' => 667,
'Lacute' => 556,
153 => 1000,
'edotaccent' => 556,
204 => 278,
'Imacron' => 278,
'Lcaron' => 556,
189 => 834,
'lessequal' => 549,
244 => 556,
241 => 556,
'Uhungarumlaut' => 722,
201 => 667,
'emacron' => 556,
'gbreve' => 556,
188 => 834,
138 => 667,
'Scommaaccent' => 667,
'Ohungarumlaut' => 778,
176 => 400,
242 => 556,
'Ccaron' => 722,
249 => 556,
'radical' => 453,
'Dcaron' => 722,
'rcommaaccent' => 333,
209 => 722,
245 => 556,
'Rcommaaccent' => 722,
'Lcommaaccent' => 556,
195 => 667,
'Aogonek' => 667,
197 => 667,
213 => 778,
'zdotaccent' => 500,
'Ecaron' => 667,
'Iogonek' => 278,
'kcommaaccent' => 500,
'minus' => 584,
206 => 278,
'ncaron' => 556,
'tcommaaccent' => 278,
172 => 584,
246 => 556,
252 => 556,
'notequal' => 549,
'gcommaaccent' => 556,
240 => 556,
158 => 500,
'ncommaaccent' => 556,
185 => 333,
'imacron' => 278,
128 => 556,
),
'CIDtoGID_Compressed' => true,
'CIDtoGID' => 'eJwDAAAAAAE=',
'_version_' => 5,
);

View File

@ -1,570 +0,0 @@
<?php return array (
'codeToName' =>
array (
32 => 'space',
160 => 'space',
33 => 'exclam',
34 => 'quotedbl',
35 => 'numbersign',
36 => 'dollar',
37 => 'percent',
38 => 'ampersand',
146 => 'quoteright',
40 => 'parenleft',
41 => 'parenright',
42 => 'asterisk',
43 => 'plus',
44 => 'comma',
45 => 'hyphen',
173 => 'hyphen',
46 => 'period',
47 => 'slash',
48 => 'zero',
49 => 'one',
50 => 'two',
51 => 'three',
52 => 'four',
53 => 'five',
54 => 'six',
55 => 'seven',
56 => 'eight',
57 => 'nine',
58 => 'colon',
59 => 'semicolon',
60 => 'less',
61 => 'equal',
62 => 'greater',
63 => 'question',
64 => 'at',
65 => 'A',
66 => 'B',
67 => 'C',
68 => 'D',
69 => 'E',
70 => 'F',
71 => 'G',
72 => 'H',
73 => 'I',
74 => 'J',
75 => 'K',
76 => 'L',
77 => 'M',
78 => 'N',
79 => 'O',
80 => 'P',
81 => 'Q',
82 => 'R',
83 => 'S',
84 => 'T',
85 => 'U',
86 => 'V',
87 => 'W',
88 => 'X',
89 => 'Y',
90 => 'Z',
91 => 'bracketleft',
92 => 'backslash',
93 => 'bracketright',
94 => 'asciicircum',
95 => 'underscore',
145 => 'quoteleft',
97 => 'a',
98 => 'b',
99 => 'c',
100 => 'd',
101 => 'e',
102 => 'f',
103 => 'g',
104 => 'h',
105 => 'i',
106 => 'j',
107 => 'k',
108 => 'l',
109 => 'm',
110 => 'n',
111 => 'o',
112 => 'p',
113 => 'q',
114 => 'r',
115 => 's',
116 => 't',
117 => 'u',
118 => 'v',
119 => 'w',
120 => 'x',
121 => 'y',
122 => 'z',
123 => 'braceleft',
124 => 'bar',
125 => 'braceright',
126 => 'asciitilde',
161 => 'exclamdown',
162 => 'cent',
163 => 'sterling',
165 => 'yen',
131 => 'florin',
167 => 'section',
164 => 'currency',
39 => 'quotesingle',
147 => 'quotedblleft',
170 => 'ordfeminine',
139 => 'guilsinglleft',
155 => 'guilsinglright',
150 => 'endash',
134 => 'dagger',
135 => 'daggerdbl',
183 => 'periodcentered',
182 => 'paragraph',
149 => 'bullet',
130 => 'quotesinglbase',
132 => 'quotedblbase',
148 => 'quotedblright',
187 => 'guillemotright',
133 => 'ellipsis',
137 => 'perthousand',
191 => 'questiondown',
96 => 'grave',
180 => 'acute',
136 => 'circumflex',
152 => 'tilde',
175 => 'macron',
168 => 'dieresis',
184 => 'cedilla',
151 => 'emdash',
198 => 'AE',
216 => 'Oslash',
140 => 'OE',
186 => 'ordmasculine',
230 => 'ae',
248 => 'oslash',
156 => 'oe',
223 => 'germandbls',
207 => 'Idieresis',
233 => 'eacute',
159 => 'Ydieresis',
247 => 'divide',
221 => 'Yacute',
194 => 'Acircumflex',
225 => 'aacute',
219 => 'Ucircumflex',
253 => 'yacute',
234 => 'ecircumflex',
220 => 'Udieresis',
218 => 'Uacute',
203 => 'Edieresis',
169 => 'copyright',
229 => 'aring',
224 => 'agrave',
227 => 'atilde',
154 => 'scaron',
237 => 'iacute',
251 => 'ucircumflex',
226 => 'acircumflex',
231 => 'ccedilla',
222 => 'Thorn',
179 => 'threesuperior',
210 => 'Ograve',
192 => 'Agrave',
215 => 'multiply',
250 => 'uacute',
255 => 'ydieresis',
238 => 'icircumflex',
202 => 'Ecircumflex',
228 => 'adieresis',
235 => 'edieresis',
205 => 'Iacute',
177 => 'plusminus',
166 => 'brokenbar',
174 => 'registered',
200 => 'Egrave',
142 => 'Zcaron',
208 => 'Eth',
199 => 'Ccedilla',
193 => 'Aacute',
196 => 'Adieresis',
232 => 'egrave',
211 => 'Oacute',
243 => 'oacute',
239 => 'idieresis',
212 => 'Ocircumflex',
217 => 'Ugrave',
254 => 'thorn',
178 => 'twosuperior',
214 => 'Odieresis',
181 => 'mu',
236 => 'igrave',
190 => 'threequarters',
153 => 'trademark',
204 => 'Igrave',
189 => 'onehalf',
244 => 'ocircumflex',
241 => 'ntilde',
201 => 'Eacute',
188 => 'onequarter',
138 => 'Scaron',
176 => 'degree',
242 => 'ograve',
249 => 'ugrave',
209 => 'Ntilde',
245 => 'otilde',
195 => 'Atilde',
197 => 'Aring',
213 => 'Otilde',
206 => 'Icircumflex',
172 => 'logicalnot',
246 => 'odieresis',
252 => 'udieresis',
240 => 'eth',
158 => 'zcaron',
185 => 'onesuperior',
128 => 'Euro',
),
'isUnicode' => false,
'FontName' => 'Times-Roman',
'FullName' => 'Times Roman',
'FamilyName' => 'Times',
'Weight' => 'Roman',
'ItalicAngle' => '0',
'IsFixedPitch' => 'false',
'CharacterSet' => 'ExtendedRoman',
'FontBBox' =>
array (
0 => '-168',
1 => '-218',
2 => '1000',
3 => '898',
),
'UnderlinePosition' => '-100',
'UnderlineThickness' => '50',
'Version' => '002.00',
'EncodingScheme' => 'WinAnsiEncoding',
'CapHeight' => '662',
'XHeight' => '450',
'Ascender' => '683',
'Descender' => '-217',
'StdHW' => '28',
'StdVW' => '84',
'StartCharMetrics' => '317',
'C' =>
array (
32 => 250,
160 => 250,
33 => 333,
34 => 408,
35 => 500,
36 => 500,
37 => 833,
38 => 778,
146 => 333,
40 => 333,
41 => 333,
42 => 500,
43 => 564,
44 => 250,
45 => 333,
173 => 333,
46 => 250,
47 => 278,
48 => 500,
49 => 500,
50 => 500,
51 => 500,
52 => 500,
53 => 500,
54 => 500,
55 => 500,
56 => 500,
57 => 500,
58 => 278,
59 => 278,
60 => 564,
61 => 564,
62 => 564,
63 => 444,
64 => 921,
65 => 722,
66 => 667,
67 => 667,
68 => 722,
69 => 611,
70 => 556,
71 => 722,
72 => 722,
73 => 333,
74 => 389,
75 => 722,
76 => 611,
77 => 889,
78 => 722,
79 => 722,
80 => 556,
81 => 722,
82 => 667,
83 => 556,
84 => 611,
85 => 722,
86 => 722,
87 => 944,
88 => 722,
89 => 722,
90 => 611,
91 => 333,
92 => 278,
93 => 333,
94 => 469,
95 => 500,
145 => 333,
97 => 444,
98 => 500,
99 => 444,
100 => 500,
101 => 444,
102 => 333,
103 => 500,
104 => 500,
105 => 278,
106 => 278,
107 => 500,
108 => 278,
109 => 778,
110 => 500,
111 => 500,
112 => 500,
113 => 500,
114 => 333,
115 => 389,
116 => 278,
117 => 500,
118 => 500,
119 => 722,
120 => 500,
121 => 500,
122 => 444,
123 => 480,
124 => 200,
125 => 480,
126 => 541,
161 => 333,
162 => 500,
163 => 500,
'fraction' => 167,
165 => 500,
131 => 500,
167 => 500,
164 => 500,
39 => 180,
147 => 444,
170 => 276,
139 => 333,
155 => 333,
'fi' => 556,
'fl' => 556,
150 => 500,
134 => 500,
135 => 500,
183 => 250,
182 => 453,
149 => 350,
130 => 333,
132 => 444,
148 => 444,
187 => 500,
133 => 1000,
137 => 1000,
191 => 444,
96 => 333,
180 => 333,
136 => 333,
152 => 333,
175 => 333,
'breve' => 333,
'dotaccent' => 333,
168 => 333,
'ring' => 333,
184 => 333,
'hungarumlaut' => 333,
'ogonek' => 333,
'caron' => 333,
151 => 1000,
198 => 889,
'Lslash' => 611,
216 => 722,
140 => 889,
186 => 310,
230 => 667,
'dotlessi' => 278,
'lslash' => 278,
248 => 500,
156 => 722,
223 => 500,
207 => 333,
233 => 444,
'abreve' => 444,
'uhungarumlaut' => 500,
'ecaron' => 444,
159 => 722,
247 => 564,
221 => 722,
194 => 722,
225 => 444,
219 => 722,
253 => 500,
'scommaaccent' => 389,
234 => 444,
'Uring' => 722,
220 => 722,
'aogonek' => 444,
218 => 722,
'uogonek' => 500,
203 => 611,
'Dcroat' => 722,
'commaaccent' => 250,
169 => 760,
'Emacron' => 611,
'ccaron' => 444,
229 => 444,
'Ncommaaccent' => 722,
'lacute' => 278,
224 => 444,
'Tcommaaccent' => 611,
'Cacute' => 667,
227 => 444,
'Edotaccent' => 611,
154 => 389,
'scedilla' => 389,
237 => 278,
'lozenge' => 471,
'Rcaron' => 667,
'Gcommaaccent' => 722,
251 => 500,
226 => 444,
'Amacron' => 722,
'rcaron' => 333,
231 => 444,
'Zdotaccent' => 611,
222 => 556,
'Omacron' => 722,
'Racute' => 667,
'Sacute' => 556,
'dcaron' => 588,
'Umacron' => 722,
'uring' => 500,
179 => 300,
210 => 722,
192 => 722,
'Abreve' => 722,
215 => 564,
250 => 500,
'Tcaron' => 611,
'partialdiff' => 476,
255 => 500,
'Nacute' => 722,
238 => 278,
202 => 611,
228 => 444,
235 => 444,
'cacute' => 444,
'nacute' => 500,
'umacron' => 500,
'Ncaron' => 722,
205 => 333,
177 => 564,
166 => 200,
174 => 760,
'Gbreve' => 722,
'Idotaccent' => 333,
'summation' => 600,
200 => 611,
'racute' => 333,
'omacron' => 500,
'Zacute' => 611,
142 => 611,
'greaterequal' => 549,
208 => 722,
199 => 667,
'lcommaaccent' => 278,
'tcaron' => 326,
'eogonek' => 444,
'Uogonek' => 722,
193 => 722,
196 => 722,
232 => 444,
'zacute' => 444,
'iogonek' => 278,
211 => 722,
243 => 500,
'amacron' => 444,
'sacute' => 389,
239 => 278,
212 => 722,
217 => 722,
'Delta' => 612,
254 => 500,
178 => 300,
214 => 722,
181 => 500,
236 => 278,
'ohungarumlaut' => 500,
'Eogonek' => 611,
'dcroat' => 500,
190 => 750,
'Scedilla' => 556,
'lcaron' => 344,
'Kcommaaccent' => 722,
'Lacute' => 611,
153 => 980,
'edotaccent' => 444,
204 => 333,
'Imacron' => 333,
'Lcaron' => 611,
189 => 750,
'lessequal' => 549,
244 => 500,
241 => 500,
'Uhungarumlaut' => 722,
201 => 611,
'emacron' => 444,
'gbreve' => 500,
188 => 750,
138 => 556,
'Scommaaccent' => 556,
'Ohungarumlaut' => 722,
176 => 400,
242 => 500,
'Ccaron' => 667,
249 => 500,
'radical' => 453,
'Dcaron' => 722,
'rcommaaccent' => 333,
209 => 722,
245 => 500,
'Rcommaaccent' => 667,
'Lcommaaccent' => 611,
195 => 722,
'Aogonek' => 722,
197 => 722,
213 => 722,
'zdotaccent' => 444,
'Ecaron' => 611,
'Iogonek' => 333,
'kcommaaccent' => 500,
'minus' => 564,
206 => 333,
'ncaron' => 500,
'tcommaaccent' => 278,
172 => 564,
246 => 500,
252 => 500,
'notequal' => 549,
'gcommaaccent' => 500,
240 => 500,
158 => 444,
'ncommaaccent' => 500,
185 => 300,
'imacron' => 278,
128 => 500,
),
'CIDtoGID_Compressed' => true,
'CIDtoGID' => 'eJwDAAAAAAE=',
'_version_' => 5,
);

View File

@ -1,111 +0,0 @@
<?php return array (
'sans-serif' =>
array (
'normal' => DOMPDF_FONT_DIR . 'Helvetica',
'bold' => DOMPDF_FONT_DIR . 'Helvetica-Bold',
'italic' => DOMPDF_FONT_DIR . 'Helvetica-Oblique',
'bold_italic' => DOMPDF_FONT_DIR . 'Helvetica-BoldOblique',
),
'times' =>
array (
'normal' => DOMPDF_FONT_DIR . 'Times-Roman',
'bold' => DOMPDF_FONT_DIR . 'Times-Bold',
'italic' => DOMPDF_FONT_DIR . 'Times-Italic',
'bold_italic' => DOMPDF_FONT_DIR . 'Times-BoldItalic',
),
'times-roman' =>
array (
'normal' => DOMPDF_FONT_DIR . 'Times-Roman',
'bold' => DOMPDF_FONT_DIR . 'Times-Bold',
'italic' => DOMPDF_FONT_DIR . 'Times-Italic',
'bold_italic' => DOMPDF_FONT_DIR . 'Times-BoldItalic',
),
'courier' =>
array (
'normal' => DOMPDF_FONT_DIR . 'Courier',
'bold' => DOMPDF_FONT_DIR . 'Courier-Bold',
'italic' => DOMPDF_FONT_DIR . 'Courier-Oblique',
'bold_italic' => DOMPDF_FONT_DIR . 'Courier-BoldOblique',
),
'helvetica' =>
array (
'normal' => DOMPDF_FONT_DIR . 'Helvetica',
'bold' => DOMPDF_FONT_DIR . 'Helvetica-Bold',
'italic' => DOMPDF_FONT_DIR . 'Helvetica-Oblique',
'bold_italic' => DOMPDF_FONT_DIR . 'Helvetica-BoldOblique',
),
'zapfdingbats' =>
array (
'normal' => DOMPDF_FONT_DIR . 'ZapfDingbats',
'bold' => DOMPDF_FONT_DIR . 'ZapfDingbats',
'italic' => DOMPDF_FONT_DIR . 'ZapfDingbats',
'bold_italic' => DOMPDF_FONT_DIR . 'ZapfDingbats',
),
'symbol' =>
array (
'normal' => DOMPDF_FONT_DIR . 'Symbol',
'bold' => DOMPDF_FONT_DIR . 'Symbol',
'italic' => DOMPDF_FONT_DIR . 'Symbol',
'bold_italic' => DOMPDF_FONT_DIR . 'Symbol',
),
'serif' =>
array (
'normal' => DOMPDF_FONT_DIR . 'Times-Roman',
'bold' => DOMPDF_FONT_DIR . 'Times-Bold',
'italic' => DOMPDF_FONT_DIR . 'Times-Italic',
'bold_italic' => DOMPDF_FONT_DIR . 'Times-BoldItalic',
),
'monospace' =>
array (
'normal' => DOMPDF_FONT_DIR . 'Courier',
'bold' => DOMPDF_FONT_DIR . 'Courier-Bold',
'italic' => DOMPDF_FONT_DIR . 'Courier-Oblique',
'bold_italic' => DOMPDF_FONT_DIR . 'Courier-BoldOblique',
),
'fixed' =>
array (
'normal' => DOMPDF_FONT_DIR . 'Courier',
'bold' => DOMPDF_FONT_DIR . 'Courier-Bold',
'italic' => DOMPDF_FONT_DIR . 'Courier-Oblique',
'bold_italic' => DOMPDF_FONT_DIR . 'Courier-BoldOblique',
),
'dejavu sans' =>
array (
'bold' => DOMPDF_FONT_DIR . 'DejaVuSans-Bold',
'bold_italic' => DOMPDF_FONT_DIR . 'DejaVuSans-BoldOblique',
'italic' => DOMPDF_FONT_DIR . 'DejaVuSans-Oblique',
'normal' => DOMPDF_FONT_DIR . 'DejaVuSans',
),
'dejavu sans light' =>
array (
'normal' => DOMPDF_FONT_DIR . 'DejaVuSans-ExtraLight',
),
'dejavu sans condensed' =>
array (
'bold' => DOMPDF_FONT_DIR . 'DejaVuSansCondensed-Bold',
'bold_italic' => DOMPDF_FONT_DIR . 'DejaVuSansCondensed-BoldOblique',
'italic' => DOMPDF_FONT_DIR . 'DejaVuSansCondensed-Oblique',
'normal' => DOMPDF_FONT_DIR . 'DejaVuSansCondensed',
),
'dejavu sans mono' =>
array (
'bold' => DOMPDF_FONT_DIR . 'DejaVuSansMono-Bold',
'bold_italic' => DOMPDF_FONT_DIR . 'DejaVuSansMono-BoldOblique',
'italic' => DOMPDF_FONT_DIR . 'DejaVuSansMono-Oblique',
'normal' => DOMPDF_FONT_DIR . 'DejaVuSansMono',
),
'dejavu serif' =>
array (
'bold' => DOMPDF_FONT_DIR . 'DejaVuSerif-Bold',
'bold_italic' => DOMPDF_FONT_DIR . 'DejaVuSerif-BoldItalic',
'italic' => DOMPDF_FONT_DIR . 'DejaVuSerif-Italic',
'normal' => DOMPDF_FONT_DIR . 'DejaVuSerif',
),
'dejavu serif condensed' =>
array (
'bold' => DOMPDF_FONT_DIR . 'DejaVuSerifCondensed-Bold',
'bold_italic' => DOMPDF_FONT_DIR . 'DejaVuSerifCondensed-BoldItalic',
'italic' => DOMPDF_FONT_DIR . 'DejaVuSerifCondensed-Italic',
'normal' => DOMPDF_FONT_DIR . 'DejaVuSerifCondensed',
),
) ?>

View File

@ -1,208 +0,0 @@
<?php
/**
* @package php-font-lib
* @link http://php-font-lib.googlecode.com/
* @author Fabien Ménager <fabien.menager@gmail.com>
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @version $Id: adobe_font_metrics.cls.php 35 2011-11-02 22:30:45Z fabien.menager $
*/
require_once dirname(__FILE__)."/encoding_map.cls.php";
/**
* Adobe Font Metrics file creation utility class.
*
* @package php-font-lib
*/
class Adobe_Font_Metrics {
private $f;
/**
* @var Font_TrueType
*/
private $font;
function __construct(Font_TrueType $font) {
$this->font = $font;
}
function write($file, $encoding = null){
if ($encoding) {
$encoding = preg_replace("/[^a-z0-9-_]/", "", $encoding);
$map_file = dirname(__FILE__)."/../maps/$encoding.map";
if (!file_exists($map_file)) {
throw new Exception("Unkown encoding ($encoding)");
}
$map = new Encoding_Map($map_file);
$map_data = $map->parse();
}
$this->f = fopen($file, "w+");
$font = $this->font;
$this->startSection("FontMetrics", 4.1);
$this->addPair("Notice", "Converted by PHP-font-lib");
$this->addPair("Comment", "http://php-font-lib.googlecode.com/");
$encoding_scheme = ($encoding ? $encoding : "FontSpecific");
$this->addPair("EncodingScheme", $encoding_scheme);
$records = $font->getData("name", "records");
foreach($records as $id => $record) {
if (!isset(Font_TrueType::$nameIdCodes[$id]) || preg_match("/[\r\n]/", $record->string)) {
continue;
}
$this->addPair(Font_TrueType::$nameIdCodes[$id], $record->string);
}
$os2 = $font->getData("OS/2");
$this->addPair("Weight", ($os2["usWeightClass"] > 400 ? "Bold" : "Medium"));
$post = $font->getData("post");
$this->addPair("ItalicAngle", $post["italicAngle"]);
$this->addPair("IsFixedPitch", ($post["isFixedPitch"] ? "true" : "false"));
$this->addPair("UnderlineThickness", $font->normalizeFUnit($post["underlineThickness"]));
$this->addPair("UnderlinePosition", $font->normalizeFUnit($post["underlinePosition"]));
$hhea = $font->getData("hhea");
if (isset($os2["typoAscender"])) {
$this->addPair("FontHeightOffset", $font->normalizeFUnit($os2["typoLineGap"]));
$this->addPair("Ascender", $font->normalizeFUnit($os2["typoAscender"]));
$this->addPair("Descender", $font->normalizeFUnit($os2["typoDescender"]));
}
else {
$this->addPair("FontHeightOffset", $font->normalizeFUnit($hhea["lineGap"]));
$this->addPair("Ascender", $font->normalizeFUnit($hhea["ascent"]));
$this->addPair("Descender", $font->normalizeFUnit($hhea["descent"]));
}
$head = $font->getData("head");
$this->addArray("FontBBox", array(
$font->normalizeFUnit($head["xMin"]),
$font->normalizeFUnit($head["yMin"]),
$font->normalizeFUnit($head["xMax"]),
$font->normalizeFUnit($head["yMax"]),
));
$subtable = null;
foreach($font->getData("cmap", "subtables") as $_subtable) {
if ($_subtable["platformID"] == 0 || $_subtable["platformID"] == 3 && $_subtable["platformSpecificID"] == 1) {
$subtable = $_subtable;
break;
}
}
if ($subtable) {
$hmtx = $font->getData("hmtx");
$names = $font->getData("post", "names");
$glyphIndexArray = $subtable["glyphIndexArray"];
$this->startSection("CharMetrics", count($hmtx));
if ($encoding) {
foreach($map_data as $code => $value) {
list($c, $name) = $value;
if (!isset($glyphIndexArray[$c])) continue;
$g = $glyphIndexArray[$c];
if (!isset($hmtx[$g])) {
$hmtx[$g] = $hmtx[0];
}
$this->addMetric(array(
"C" => ($code > 255 ? -1 : $code),
"WX" => $font->normalizeFUnit($hmtx[$g][0]),
"N" => $name,
));
}
}
else {
foreach($glyphIndexArray as $c => $g) {
if (!isset($hmtx[$g])) {
$hmtx[$g] = $hmtx[0];
}
$this->addMetric(array(
"U" => $c,
"WX" => $font->normalizeFUnit($hmtx[$g][0]),
"N" => (isset($names[$g]) ? $names[$g] : sprintf("uni%04x", $c)),
"G" => $g,
));
}
}
$this->endSection("CharMetrics");
$kern = $font->getData("kern", "subtable");
$tree = $kern["tree"];
if (!$encoding && is_array($tree)) {
$this->startSection("KernData");
$this->startSection("KernPairs", count($tree, COUNT_RECURSIVE) - count($tree));
foreach($tree as $left => $values) {
if (!is_array($values)) continue;
if (!isset($glyphIndexArray[$left])) continue;
$left_gid = $glyphIndexArray[$left];
if (!isset($names[$left_gid])) continue;
$left_name = $names[$left_gid];
$this->addLine("");
foreach($values as $right => $value) {
if (!isset($glyphIndexArray[$right])) continue;
$right_gid = $glyphIndexArray[$right];
if (!isset($names[$right_gid])) continue;
$right_name = $names[$right_gid];
$this->addPair("KPX", "$left_name $right_name $value");
}
}
$this->endSection("KernPairs");
$this->endSection("KernData");
}
}
$this->endSection("FontMetrics");
}
function addLine($line) {
fwrite($this->f, "$line\n");
}
function addPair($key, $value) {
$this->addLine("$key $value");
}
function addArray($key, $array) {
$this->addLine("$key ".implode(" ", $array));
}
function addMetric($data) {
$array = array();
foreach($data as $key => $value) {
$array[] = "$key $value";
}
$this->addLine(implode(" ; ", $array));
}
function startSection($name, $value = "") {
$this->addLine("Start$name $value");
}
function endSection($name) {
$this->addLine("End$name");
}
}

View File

@ -1,68 +0,0 @@
<?php
/**
* @package php-font-lib
* @link http://php-font-lib.googlecode.com/
* @author Fabien Ménager <fabien.menager@gmail.com>
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @version $Id: font_eot.cls.php 34 2011-10-23 13:53:25Z fabien.menager $
*/
require_once dirname(__FILE__)."/font_truetype.cls.php";
/**
* EOT font file.
*
* @package php-font-lib
*/
class Font_EOT extends Font_TrueType {
private $origF;
private $fileOffset = 0;
public $header;
function parseHeader(){
$this->header = $this->unpack(array(
"EOTSize" => self::uint32,
"FontDataSize" => self::uint32,
"Version" => self::uint32,
"Flags" => self::uint32,
));
$this->header["FontPANOSE"] = $this->read(10);
$this->header += $this->unpack(array(
"Charset" => self::uint8,
"Italic" => self::uint8,
"Weight" => self::uint32,
"fsType" => self::uint16,
"MagicNumber" => self::uint16,
"UnicodeRange1" => self::uint32,
"UnicodeRange2" => self::uint32,
"UnicodeRange3" => self::uint32,
"UnicodeRange4" => self::uint32,
"CodePageRange1" => self::uint32,
"CodePageRange2" => self::uint32,
"CheckSumAdjustment" => self::uint32,
"Reserved1" => self::uint32,
"Reserved2" => self::uint32,
"Reserved3" => self::uint32,
"Reserved4" => self::uint32,
"Padding1" => self::uint16,
"FamilyNameSize" => self::uint16,
));
}
function parse() {
exit("EOT not supported yet");
}
public function readUInt16() {
$a = unpack('vv', $this->read(2));
return $a['v'];
}
public function readUInt32() {
$a = unpack('VV', $this->read(4));
return $a['V'];
}
}

View File

@ -1,35 +0,0 @@
<?php
/**
* @package php-font-lib
* @link http://php-font-lib.googlecode.com/
* @author Fabien Ménager <fabien.menager@gmail.com>
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @version $Id: font_header.cls.php 34 2011-10-23 13:53:25Z fabien.menager $
*/
/**
* Font header container.
*
* @package php-font-lib
*/
abstract class Font_Header extends Font_Binary_Stream {
/**
* @var Font_TrueType
*/
protected $font;
protected $def = array();
public $data;
public function __construct(Font_TrueType $font) {
$this->font = $font;
}
public function encode(){
return $this->font->pack($this->def, $this->data);
}
public function parse(){
$this->data = $this->font->unpack($this->def);
}
}

View File

@ -1,20 +0,0 @@
<?php
/**
* @package php-font-lib
* @link http://php-font-lib.googlecode.com/
* @author Fabien Ménager <fabien.menager@gmail.com>
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @version $Id: font_opentype.cls.php 34 2011-10-23 13:53:25Z fabien.menager $
*/
require_once dirname(__FILE__)."/font_truetype.cls.php";
require_once dirname(__FILE__)."/font_opentype_table_directory_entry.cls.php";
/**
* Open Type font, the same as a TrueType one.
*
* @package php-font-lib
*/
class Font_OpenType extends Font_TrueType {
//
}

View File

@ -1,19 +0,0 @@
<?php
/**
* @package php-font-lib
* @link http://php-font-lib.googlecode.com/
* @author Fabien Ménager <fabien.menager@gmail.com>
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @version $Id: font_opentype_table_directory_entry.cls.php 34 2011-10-23 13:53:25Z fabien.menager $
*/
require_once dirname(__FILE__)."/font_truetype_table_directory_entry.cls.php";
/**
* Open Type Table directory entry, the same as a TrueType one.
*
* @package php-font-lib
*/
class Font_OpenType_Table_Directory_Entry extends Font_TrueType_Table_Directory_Entry {
}

View File

@ -1,93 +0,0 @@
<?php
/**
* @package php-font-lib
* @link http://php-font-lib.googlecode.com/
* @author Fabien Ménager <fabien.menager@gmail.com>
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @version $Id: font_table_glyf.cls.php 40 2012-01-22 21:48:41Z fabien.menager $
*/
/**
* `glyf` font table.
*
* @package php-font-lib
*/
class Font_Table_glyf extends Font_Table {
const ARG_1_AND_2_ARE_WORDS = 1;
const ARGS_ARE_XY_VALUES = 2;
const ROUND_XY_TO_GRID = 4;
const WE_HAVE_A_SCALE = 8;
const MORE_COMPONENTS = 32;
const WE_HAVE_AN_X_AND_Y_SCALE = 64;
const WE_HAVE_A_TWO_BY_TWO = 128;
const WE_HAVE_INSTRUCTIONS = 256;
const USE_MY_METRICS = 512;
const OVERLAP_COMPOUND = 1024;
protected function getGlyphData($offset, $loca, $gid){
$font = $this->getFont();
/*$entryStart = $this->entry->offset;
$start = $entryStart + $loca[$gid];
$font->seek($start);
$data = $font->unpack(array(
"numberOfContours" => self::int16,
"xMin" => self::FWord,
"yMin" => self::FWord,
"xMax" => self::FWord,
"yMax" => self::FWord,
));
$data["outline"] = $font->read($loca[$gid+1] - $font->pos() - $entryStart);*/
$font->seek($offset + $loca[$gid]);
return $font->read($loca[$gid+1] - $loca[$gid]);
}
protected function _parse(){
$font = $this->getFont();
$offset = $font->pos();
$loca = $font->getData("loca");
$real_loca = array_slice($loca, 0, -1); // Not the last dummy loca entry
$data = array();
foreach($real_loca as $gid => $location) {
$data[$gid] = $this->getGlyphData($offset, $loca, $gid);
}
$this->data = $data;
}
protected function _encode() {
$font = $this->getFont();
$subset = $font->getSubset();
$compoundGlyphOffsets = $font->compound_glyph_offsets;
$data = $this->data;
$loca = array();
$length = 0;
foreach($subset as $gid) {
$loca[] = $length;
$raw = $data[$gid];
$len = strlen($raw);
if (isset($compoundGlyphOffsets[$gid])) {
$offsets = $compoundGlyphOffsets[$gid];
foreach($offsets as $offset => $newGid) {
list($raw[$offset], $raw[$offset+1]) = pack("n", $newGid);
}
}
$length += $font->write($raw, strlen($raw));
}
$loca[] = $length; // dummy loca
$font->getTableObject("loca")->data = $loca;
return $length;
}
}

View File

@ -1,54 +0,0 @@
<?php
/**
* @package php-font-lib
* @link http://php-font-lib.googlecode.com/
* @author Fabien Ménager <fabien.menager@gmail.com>
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @version $Id: font_table_hmtx.cls.php 40 2012-01-22 21:48:41Z fabien.menager $
*/
/**
* `hmtx` font table.
*
* @package php-font-lib
*/
class Font_Table_hmtx extends Font_Table {
protected function _parse(){
$font = $this->getFont();
$offset = $font->pos();
$numOfLongHorMetrics = $font->getData("hhea", "numOfLongHorMetrics");
$numGlyphs = $font->getData("maxp", "numGlyphs");
$font->seek($offset);
$data = array();
for($gid = 0; $gid < $numOfLongHorMetrics; $gid++) {
$advanceWidth = $font->readUInt16();
$leftSideBearing = $font->readUInt16();
$data[$gid] = array($advanceWidth, $leftSideBearing);
}
if($numOfLongHorMetrics < $numGlyphs){
$lastWidth = end($data);
$data = array_pad($data, $numGlyphs, $lastWidth);
}
$this->data = $data;
}
protected function _encode() {
$font = $this->getFont();
$subset = $font->getSubset();
$data = $this->data;
$length = 0;
foreach($subset as $gid) {
$length += $font->writeUInt16($data[$gid][0]);
$length += $font->writeUInt16($data[$gid][1]);
}
return $length;
}
}

View File

@ -1,75 +0,0 @@
<?php
/**
* @package php-font-lib
* @link http://php-font-lib.googlecode.com/
* @author Fabien Ménager <fabien.menager@gmail.com>
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @version $Id: font_table_kern.cls.php 34 2011-10-23 13:53:25Z fabien.menager $
*/
/**
* `kern` font table.
*
* @package php-font-lib
*/
class Font_Table_kern extends Font_Table {
protected function _parse(){
$font = $this->getFont();
$tableOffset = $font->pos();
$data = $font->unpack(array(
"version" => self::uint16,
"nTables" => self::uint16,
// only the first subtable will be parsed
"subtableVersion" => self::uint16,
"length" => self::uint16,
"coverage" => self::uint16,
));
$data["format"] = ($data["coverage"] >> 8);
$subtable = array();
switch($data["format"]) {
case 0:
$subtable = $font->unpack(array(
"nPairs" => self::uint16,
"searchRange" => self::uint16,
"entrySelector" => self::uint16,
"rangeShift" => self::uint16,
));
$pairs = array();
$tree = array();
for ($i = 0; $i < $subtable["nPairs"]; $i++) {
$left = $font->readUInt16();
$right = $font->readUInt16();
$value = $font->readInt16();
$pairs[] = array(
"left" => $left,
"right" => $right,
"value" => $value,
);
$tree[$left][$right] = $value;
}
//$subtable["pairs"] = $pairs;
$subtable["tree"] = $tree;
break;
case 1:
case 2:
case 3:
break;
}
$data["subtable"] = $subtable;
$this->data = $data;
}
}

View File

@ -1,74 +0,0 @@
<?php
/**
* @package php-font-lib
* @link http://php-font-lib.googlecode.com/
* @author Fabien Ménager <fabien.menager@gmail.com>
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @version $Id: font_table_loca.cls.php 43 2012-02-05 22:26:53Z fabien.menager $
*/
/**
* `loca` font table.
*
* @package php-font-lib
*/
class Font_Table_loca extends Font_Table {
protected function _parse(){
$font = $this->getFont();
$offset = $font->pos();
$indexToLocFormat = $font->getData("head", "indexToLocFormat");
$numGlyphs = $font->getData("maxp", "numGlyphs");
$font->seek($offset);
$data = array();
// 2 bytes
if ($indexToLocFormat == 0) {
$d = $font->read(($numGlyphs + 1) * 2);
$loc = unpack("n*", $d);
for ($i = 0; $i <= $numGlyphs; $i++) {
$data[] = $loc[$i+1] * 2;
}
}
// 4 bytes
else if ($indexToLocFormat == 1) {
$d = $font->read(($numGlyphs + 1) * 4);
$loc = unpack("N*", $d);
for ($i = 0; $i <= $numGlyphs; $i++) {
$data[] = $loc[$i+1];
}
}
$this->data = $data;
}
function _encode(){
$font = $this->getFont();
$data = $this->data;
$indexToLocFormat = $font->getData("head", "indexToLocFormat");
$numGlyphs = $font->getData("maxp", "numGlyphs");
$length = 0;
// 2 bytes
if ($indexToLocFormat == 0) {
for ($i = 0; $i <= $numGlyphs; $i++) {
$length += $font->writeUInt16($data[$i] / 2);
}
}
// 4 bytes
else if ($indexToLocFormat == 1) {
for ($i = 0; $i <= $numGlyphs; $i++) {
$length += $font->writeUInt32($data[$i]);
}
}
return $length;
}
}

View File

@ -1,84 +0,0 @@
<?php
/**
* @package php-font-lib
* @link http://php-font-lib.googlecode.com/
* @author Fabien Ménager <fabien.menager@gmail.com>
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @version $Id: font_table_name.cls.php 36 2011-11-03 23:02:06Z fabien.menager $
*/
require_once dirname(__FILE__)."/font_table_name_record.cls.php";
/**
* `name` font table.
*
* @package php-font-lib
*/
class Font_Table_name extends Font_Table {
private static $header_format = array(
"format" => self::uint16,
"count" => self::uint16,
"stringOffset" => self::uint16,
);
protected function _parse(){
$font = $this->getFont();
$data = array();
$tableOffset = $font->pos();
$data = $font->unpack(self::$header_format);
$records = array();
for($i = 0; $i < $data["count"]; $i++) {
$record = new Font_Table_name_Record();
$record_data = $font->unpack(Font_Table_name_Record::$format);
$record->map($record_data);
$records[] = $record;
}
$names = array();
foreach($records as $record) {
$font->seek($tableOffset + $data["stringOffset"] + $record->offset);
$s = $font->read($record->length);
$record->string = Font::UTF16ToUTF8($s);
$names[$record->nameID] = $record;
}
$data["records"] = $names;
$this->data = $data;
}
protected function _encode(){
$font = $this->getFont();
$records = $this->data["records"];
$count_records = count($records);
$this->data["count"] = $count_records;
$this->data["stringOffset"] = 6 + $count_records * 12; // 6 => uint16 * 3, 12 => sizeof self::$record_format
$tableOffset = $font->pos();
$length = $font->pack(self::$header_format, $this->data);
$recordsOffset = $font->pos();
$offset = 0;
foreach($records as $record) {
$record->length = mb_strlen($record->getUTF16(), "8bit");
$record->offset = $offset;
$offset += $record->length;
$length += $font->pack(Font_Table_name_Record::$format, (array)$record);
}
foreach($records as $record) {
$str = $record->getUTF16();
$length += $font->write($str, mb_strlen($str, "8bit"));
}
return $length;
}
}

View File

@ -1,487 +0,0 @@
<?php
/**
* @package php-font-lib
* @link http://php-font-lib.googlecode.com/
* @author Fabien Ménager <fabien.menager@gmail.com>
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @version $Id: font_truetype.cls.php 41 2012-02-04 18:01:38Z fabien.menager $
*/
$dir = dirname(__FILE__);
require_once "$dir/font_binary_stream.cls.php";
require_once "$dir/font_truetype_table_directory_entry.cls.php";
require_once "$dir/font_truetype_header.cls.php";
require_once "$dir/font_table.cls.php";
require_once "$dir/adobe_font_metrics.cls.php";
/**
* TrueType font file.
*
* @package php-font-lib
*/
class Font_TrueType extends Font_Binary_Stream {
/**
* @var Font_TrueType_Header
*/
public $header = array();
private $tableOffset = 0; // Used for TTC
private static $raw = false;
protected $directory = array();
protected $data = array();
protected $glyph_subset = array();
protected $glyph_all = array();
public $compound_glyph_offsets = array();
static $nameIdCodes = array(
0 => "Copyright",
1 => "FontName",
2 => "FontSubfamily",
3 => "UniqueID",
4 => "FullName",
5 => "Version",
6 => "PostScriptName",
7 => "Trademark",
8 => "Manufacturer",
9 => "Designer",
10 => "Description",
11 => "FontVendorURL",
12 => "FontDesignerURL",
13 => "LicenseDescription",
14 => "LicenseURL",
// 15
16 => "PreferredFamily",
17 => "PreferredSubfamily",
18 => "CompatibleFullName",
19 => "SampleText",
);
static $platforms = array(
0 => "Unicode",
1 => "Macintosh",
// 2 => Reserved
3 => "Microsoft",
);
static $plaformSpecific = array(
// Unicode
0 => array(
0 => "Default semantics",
1 => "Version 1.1 semantics",
2 => "ISO 10646 1993 semantics (deprecated)",
3 => "Unicode 2.0 or later semantics",
),
// Macintosh
1 => array(
0 => "Roman",
1 => "Japanese",
2 => "Traditional Chinese",
3 => "Korean",
4 => "Arabic",
5 => "Hebrew",
6 => "Greek",
7 => "Russian",
8 => "RSymbol",
9 => "Devanagari",
10 => "Gurmukhi",
11 => "Gujarati",
12 => "Oriya",
13 => "Bengali",
14 => "Tamil",
15 => "Telugu",
16 => "Kannada",
17 => "Malayalam",
18 => "Sinhalese",
19 => "Burmese",
20 => "Khmer",
21 => "Thai",
22 => "Laotian",
23 => "Georgian",
24 => "Armenian",
25 => "Simplified Chinese",
26 => "Tibetan",
27 => "Mongolian",
28 => "Geez",
29 => "Slavic",
30 => "Vietnamese",
31 => "Sindhi",
),
// Microsoft
3 => array(
0 => "Symbol",
1 => "Unicode BMP (UCS-2)",
2 => "ShiftJIS",
3 => "PRC",
4 => "Big5",
5 => "Wansung",
6 => "Johab",
// 7 => Reserved
// 8 => Reserved
// 9 => Reserved
10 => "Unicode UCS-4",
),
);
static $macCharNames = array(
".notdef", ".null", "CR",
"space", "exclam", "quotedbl", "numbersign",
"dollar", "percent", "ampersand", "quotesingle",
"parenleft", "parenright", "asterisk", "plus",
"comma", "hyphen", "period", "slash",
"zero", "one", "two", "three",
"four", "five", "six", "seven",
"eight", "nine", "colon", "semicolon",
"less", "equal", "greater", "question",
"at", "A", "B", "C", "D", "E", "F", "G",
"H", "I", "J", "K", "L", "M", "N", "O",
"P", "Q", "R", "S", "T", "U", "V", "W",
"X", "Y", "Z", "bracketleft",
"backslash", "bracketright", "asciicircum", "underscore",
"grave", "a", "b", "c", "d", "e", "f", "g",
"h", "i", "j", "k", "l", "m", "n", "o",
"p", "q", "r", "s", "t", "u", "v", "w",
"x", "y", "z", "braceleft",
"bar", "braceright", "asciitilde", "Adieresis",
"Aring", "Ccedilla", "Eacute", "Ntilde",
"Odieresis", "Udieresis", "aacute", "agrave",
"acircumflex", "adieresis", "atilde", "aring",
"ccedilla", "eacute", "egrave", "ecircumflex",
"edieresis", "iacute", "igrave", "icircumflex",
"idieresis", "ntilde", "oacute", "ograve",
"ocircumflex", "odieresis", "otilde", "uacute",
"ugrave", "ucircumflex", "udieresis", "dagger",
"degree", "cent", "sterling", "section",
"bullet", "paragraph", "germandbls", "registered",
"copyright", "trademark", "acute", "dieresis",
"notequal", "AE", "Oslash", "infinity",
"plusminus", "lessequal", "greaterequal", "yen",
"mu", "partialdiff", "summation", "product",
"pi", "integral", "ordfeminine", "ordmasculine",
"Omega", "ae", "oslash", "questiondown",
"exclamdown", "logicalnot", "radical", "florin",
"approxequal", "increment", "guillemotleft", "guillemotright",
"ellipsis", "nbspace", "Agrave", "Atilde",
"Otilde", "OE", "oe", "endash",
"emdash", "quotedblleft", "quotedblright", "quoteleft",
"quoteright", "divide", "lozenge", "ydieresis",
"Ydieresis", "fraction", "currency", "guilsinglleft",
"guilsinglright", "fi", "fl", "daggerdbl",
"periodcentered", "quotesinglbase", "quotedblbase", "perthousand",
"Acircumflex", "Ecircumflex", "Aacute", "Edieresis",
"Egrave", "Iacute", "Icircumflex", "Idieresis",
"Igrave", "Oacute", "Ocircumflex", "applelogo",
"Ograve", "Uacute", "Ucircumflex", "Ugrave",
"dotlessi", "circumflex", "tilde", "macron",
"breve", "dotaccent", "ring", "cedilla",
"hungarumlaut", "ogonek", "caron", "Lslash",
"lslash", "Scaron", "scaron", "Zcaron",
"zcaron", "brokenbar", "Eth", "eth",
"Yacute", "yacute", "Thorn", "thorn",
"minus", "multiply", "onesuperior", "twosuperior",
"threesuperior", "onehalf", "onequarter", "threequarters",
"franc", "Gbreve", "gbreve", "Idot",
"Scedilla", "scedilla", "Cacute", "cacute",
"Ccaron", "ccaron", "dmacron"
);
function getTable(){
$this->parseTableEntries();
return $this->directory;
}
function setTableOffset($offset) {
$this->tableOffset = $offset;
}
function parse() {
$this->parseTableEntries();
$this->data = array();
foreach($this->directory as $tag => $table) {
if (empty($this->data[$tag])) {
$this->readTable($tag);
}
}
}
function utf8toUnicode($str) {
$len = strlen($str);
$out = array();
for ($i = 0; $i < $len; $i++) {
$uni = -1;
$h = ord($str[$i]);
if ( $h <= 0x7F ) {
$uni = $h;
}
elseif ( $h >= 0xC2 ) {
if ( ($h <= 0xDF) && ($i < $len -1) )
$uni = ($h & 0x1F) << 6 | (ord($str[++$i]) & 0x3F);
elseif ( ($h <= 0xEF) && ($i < $len -2) )
$uni = ($h & 0x0F) << 12 | (ord($str[++$i]) & 0x3F) << 6 | (ord($str[++$i]) & 0x3F);
elseif ( ($h <= 0xF4) && ($i < $len -3) )
$uni = ($h & 0x0F) << 18 | (ord($str[++$i]) & 0x3F) << 12 | (ord($str[++$i]) & 0x3F) << 6 | (ord($str[++$i]) & 0x3F);
}
if ($uni >= 0) {
$out[] = $uni;
}
}
return $out;
}
function lookupGlyph($gid, &$gids, &$newGlyphOffsets, $glyfOffset, $indexToLoc, $gidToCid) {
$this->seek($glyfOffset + $indexToLoc[$gid]);
$numberOfContours = $this->readInt16();
if ($numberOfContours < 0) {
$this->skip(8);
$compoundOffset = 10; // 2 + 8
do {
$flags = $this->readUInt16();
$compoundOffset += 2;
$glyphIndex = $this->readUInt16();
$newGlyphOffsets[$compoundOffset] = $glyphIndex;
$compoundOffset += 2;
if (!in_array($glyphIndex, $gids) && isset($indexToLoc[$glyphIndex])) {
$code = $gidToCid[$glyphIndex];
$gids[$code] = $glyphIndex;
}
$pos = $this->pos();
$this->lookupGlyph($glyphIndex, $gids, $newGids, $glyfOffset, $indexToLoc, $gidToCid);
$this->seek($pos);
$offset = 0;
// skip some bytes by case
if ($flags & Font_Table_glyf::ARG_1_AND_2_ARE_WORDS) {
$offset += 4;
}
else {
$offset += 2;
}
if ($flags & Font_Table_glyf::WE_HAVE_A_SCALE) {
$offset += 2;
}
elseif ($flags & Font_Table_glyf::WE_HAVE_AN_X_AND_Y_SCALE) {
$offset += 4;
}
elseif ($flags & Font_Table_glyf::WE_HAVE_A_TWO_BY_TWO) {
$offset += 8;
}
$this->skip($offset);
$compoundOffset += $offset;
} while ($flags & Font_Table_glyf::MORE_COMPONENTS);
}
}
function setSubset($subset) {
if ( !is_array($subset) ) {
$subset = $this->utf8toUnicode($subset);
}
$subtable = null;
foreach($this->getData("cmap", "subtables") as $_subtable) {
if ($_subtable["platformID"] == 0 || $_subtable["platformID"] == 3 && $_subtable["platformSpecificID"] == 1) {
$subtable = $_subtable;
break;
}
}
if (!$subtable) return;
$gids = array();
foreach($subset as $code) {
if (!isset($subtable["glyphIndexArray"][$code])) {
continue;
}
$gids[$code] = $subtable["glyphIndexArray"][$code];
}
// add compound glyphs
$indexToLoc = $this->getData("loca");
$glyfOffset = $this->directory["glyf"]->offset;
$cidToGid = $subtable["glyphIndexArray"];
$gidToCid = array_flip($cidToGid);
$newGlyphOffsets = array();
foreach($gids as $code => $gid) {
if ($gid === null) {
unset($gids[$code]);
continue;
}
$_newGlyphOffsets = array();
$this->lookupGlyph($gid, $gids, $_newGlyphOffsets, $glyfOffset, $indexToLoc, $gidToCid);
if (count($_newGlyphOffsets)) {
$newGlyphOffsets[$gid] = $_newGlyphOffsets;
}
}
ksort($gids);
foreach($newGlyphOffsets as $_gid => $compoundOffsets) {
foreach($compoundOffsets as $offset => $gid) {
$newGlyphOffsets[$_gid][$offset] = array_search($gid, array_values($gids));
}
}
$this->compound_glyph_offsets = $newGlyphOffsets;
$this->glyph_subset = $gids;
$this->glyph_all = $subtable["glyphIndexArray"];
}
function getSubset() {
if (empty($this->glyph_subset)) {
return $this->glyph_all;
}
return $this->glyph_subset;
}
function encode($tags = array()){
if (!self::$raw) {
$tags = array_merge(array("head", "hhea", "cmap", "hmtx", "maxp", "glyf", "loca", "name", "post"), $tags);
}
else {
$tags = array_keys($this->directory);
}
$num_tables = count($tags);
$n = 16;// @todo
Font::d("Tables : ".implode(", ", $tags));
$entries = array();
foreach($tags as $tag) {
if (!isset($this->directory[$tag])) {
Font::d(" >> '$tag' table doesn't exist");
continue;
}
$entries[$tag] = $this->directory[$tag];
}
$this->header->data["numTables"] = $num_tables;
$this->header->encode();
$directory_offset = $this->pos();
$offset = $directory_offset + $num_tables * $n;
$this->seek($offset);
$i = 0;
foreach($entries as $tag => $entry) {
$entry->encode($directory_offset + $i * $n);
$i++;
}
}
function parseHeader(){
if (!empty($this->header)) {
return;
}
$this->seek($this->tableOffset);
$this->header = new Font_TrueType_Header($this);
$this->header->parse();
}
function parseTableEntries(){
$this->parseHeader();
if (!empty($this->directory)) {
return;
}
$class = get_class($this)."_Table_Directory_Entry";
for($i = 0; $i < $this->header->data["numTables"]; $i++) {
$entry = new $class($this);
$this->directory[$entry->tag] = $entry;
}
}
function normalizeFUnit($value, $base = 1000){
return round($value * ($base / $this->getData("head", "unitsPerEm")));
}
protected function readTable($tag) {
$this->parseTableEntries();
if (!self::$raw) {
$name_canon = preg_replace("/[^a-z0-9]/", "", strtolower($tag));
$class_file = dirname(__FILE__)."/font_table_$name_canon.cls.php";
if (!isset($this->directory[$tag]) || !file_exists($class_file)) {
return;
}
require_once $class_file;
$class = "Font_Table_$name_canon";
}
else {
$class = "Font_Table";
}
$table = new $class($this->directory[$tag]);
$table->parse();
$this->data[$tag] = $table;
}
public function getTableObject($name) {
return $this->data[$name];
}
public function getData($name, $key = null) {
$this->parseTableEntries();
if (empty($this->data[$name])) {
$this->readTable($name);
}
if (!isset($this->data[$name])) {
return null;
}
if (!$key) {
return $this->data[$name]->data;
}
else {
return $this->data[$name]->data[$key];
}
}
function saveAdobeFontMetrics($file, $encoding = null) {
$afm = new Adobe_Font_Metrics($this);
$afm->write($file, $encoding);
}
function reduce(){
$names_to_keep = array(0, 1, 2, 3, 4, 5, 6);
foreach($this->data["name"]->data["records"] as $id => $rec) {
if (in_array($id, $names_to_keep)) continue;
unset($this->data["name"]->data["records"][$id]);
}
}
}

View File

@ -1,26 +0,0 @@
<?php
/**
* @package php-font-lib
* @link http://php-font-lib.googlecode.com/
* @author Fabien Ménager <fabien.menager@gmail.com>
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @version $Id: font_truetype_table_directory_entry.cls.php 34 2011-10-23 13:53:25Z fabien.menager $
*/
require_once dirname(__FILE__)."/font_table_directory_entry.cls.php";
/**
* TrueType table directory entry.
*
* @package php-font-lib
*/
class Font_TrueType_Table_Directory_Entry extends Font_Table_Directory_Entry {
function __construct(Font_TrueType $font) {
parent::__construct($font);
$this->checksum = $this->readUInt32();
$this->offset = $this->readUInt32();
$this->length = $this->readUInt32();
$this->entryLength += 12;
}
}

View File

@ -1,25 +0,0 @@
<?php
/**
* @package php-font-lib
* @link http://php-font-lib.googlecode.com/
* @author Fabien Ménager <fabien.menager@gmail.com>
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @version $Id: font_woff_table_directory_entry.cls.php 39 2012-01-15 12:25:22Z fabien.menager $
*/
require_once dirname(__FILE__)."/font_table_directory_entry.cls.php";
/**
* WOFF font file table directory entry.
*
* @package php-font-lib
*/
class Font_WOFF_Table_Directory_Entry extends Font_Table_Directory_Entry {
function __construct(Font_WOFF $font) {
parent::__construct($font);
$this->offset = $this->readUInt32();
$this->length = $this->readUInt32();
$this->origLength = $this->readUInt32();
$this->checksum = $this->readUInt32();
}
}

View File

@ -1,231 +0,0 @@
// Adobe Standard Encoding table for ttf2pt1
// Thomas Henlich <Thomas.Henlich@mailbox.tu-dresden.de>
=20 U+0020 SPACE
=21 U+0021 EXCLAMATION MARK
=22 U+0022 QUOTATION MARK
=23 U+0023 NUMBER SIGN
=24 U+0024 DOLLAR SIGN
=25 U+0025 PERCENT SIGN
=26 U+0026 AMPERSAND
=27 U+2019 RIGHT SINGLE QUOTATION MARK
=28 U+0028 LEFT PARENTHESIS
=29 U+0029 RIGHT PARENTHESIS
=2A U+002A ASTERISK
=2B U+002B PLUS SIGN
=2C U+002C COMMA
=2D U+002D HYPHEN-MINUS
=2E U+002E FULL STOP
=2F U+002F SOLIDUS
=30 U+0030 DIGIT ZERO
=31 U+0031 DIGIT ONE
=32 U+0032 DIGIT TWO
=33 U+0033 DIGIT THREE
=34 U+0034 DIGIT FOUR
=35 U+0035 DIGIT FIVE
=36 U+0036 DIGIT SIX
=37 U+0037 DIGIT SEVEN
=38 U+0038 DIGIT EIGHT
=39 U+0039 DIGIT NINE
=3A U+003A COLON
=3B U+003B SEMICOLON
=3C U+003C LESS-THAN SIGN
=3D U+003D EQUALS SIGN
=3E U+003E GREATER-THAN SIGN
=3F U+003F QUESTION MARK
=40 U+0040 COMMERCIAL AT
=41 U+0041 LATIN CAPITAL LETTER A
=42 U+0042 LATIN CAPITAL LETTER B
=43 U+0043 LATIN CAPITAL LETTER C
=44 U+0044 LATIN CAPITAL LETTER D
=45 U+0045 LATIN CAPITAL LETTER E
=46 U+0046 LATIN CAPITAL LETTER F
=47 U+0047 LATIN CAPITAL LETTER G
=48 U+0048 LATIN CAPITAL LETTER H
=49 U+0049 LATIN CAPITAL LETTER I
=4A U+004A LATIN CAPITAL LETTER J
=4B U+004B LATIN CAPITAL LETTER K
=4C U+004C LATIN CAPITAL LETTER L
=4D U+004D LATIN CAPITAL LETTER M
=4E U+004E LATIN CAPITAL LETTER N
=4F U+004F LATIN CAPITAL LETTER O
=50 U+0050 LATIN CAPITAL LETTER P
=51 U+0051 LATIN CAPITAL LETTER Q
=52 U+0052 LATIN CAPITAL LETTER R
=53 U+0053 LATIN CAPITAL LETTER S
=54 U+0054 LATIN CAPITAL LETTER T
=55 U+0055 LATIN CAPITAL LETTER U
=56 U+0056 LATIN CAPITAL LETTER V
=57 U+0057 LATIN CAPITAL LETTER W
=58 U+0058 LATIN CAPITAL LETTER X
=59 U+0059 LATIN CAPITAL LETTER Y
=5A U+005A LATIN CAPITAL LETTER Z
=5B U+005B LEFT SQUARE BRACKET
=5C U+005C REVERSE SOLIDUS
=5D U+005D RIGHT SQUARE BRACKET
=5E U+005E CIRCUMFLEX ACCENT
=5F U+005F LOW LINE
=60 U+2018 LEFT SINGLE QUOTATION MARK
=61 U+0061 LATIN SMALL LETTER A
=62 U+0062 LATIN SMALL LETTER B
=63 U+0063 LATIN SMALL LETTER C
=64 U+0064 LATIN SMALL LETTER D
=65 U+0065 LATIN SMALL LETTER E
=66 U+0066 LATIN SMALL LETTER F
=67 U+0067 LATIN SMALL LETTER G
=68 U+0068 LATIN SMALL LETTER H
=69 U+0069 LATIN SMALL LETTER I
=6A U+006A LATIN SMALL LETTER J
=6B U+006B LATIN SMALL LETTER K
=6C U+006C LATIN SMALL LETTER L
=6D U+006D LATIN SMALL LETTER M
=6E U+006E LATIN SMALL LETTER N
=6F U+006F LATIN SMALL LETTER O
=70 U+0070 LATIN SMALL LETTER P
=71 U+0071 LATIN SMALL LETTER Q
=72 U+0072 LATIN SMALL LETTER R
=73 U+0073 LATIN SMALL LETTER S
=74 U+0074 LATIN SMALL LETTER T
=75 U+0075 LATIN SMALL LETTER U
=76 U+0076 LATIN SMALL LETTER V
=77 U+0077 LATIN SMALL LETTER W
=78 U+0078 LATIN SMALL LETTER X
=79 U+0079 LATIN SMALL LETTER Y
=7A U+007A LATIN SMALL LETTER Z
=7B U+007B LEFT CURLY BRACKET
=7C U+007C VERTICAL LINE
=7D U+007D RIGHT CURLY BRACKET
=7E U+007E TILDE
=A1 U+00A1 INVERTED EXCLAMATION MARK
=A2 U+00A2 CENT SIGN
=A3 U+00A3 POUND SIGN
=A4 U+2044 FRACTION SLASH
=A5 U+00A5 YEN SIGN
=A6 U+0192 LATIN SMALL LETTER F WITH HOOK
=A7 U+00A7 SECTION SIGN
=A8 U+00A4 CURRENCY SIGN
=A9 U+0027 APOSTROPHE
=AA U+201C LEFT DOUBLE QUOTATION MARK
=AB U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
=AC U+2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK
=AD U+203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
=AE U+FB01 LATIN SMALL LIGATURE FI
=AF U+FB02 LATIN SMALL LIGATURE FL
=B1 U+2013 EN DASH
=B2 U+2020 DAGGER
=B3 U+2021 DOUBLE DAGGER
=B4 U+00B7 MIDDLE DOT
=B6 U+00B6 PILCROW SIGN
=B7 U+2022 BULLET
=B8 U+201A SINGLE LOW-9 QUOTATION MARK
=B9 U+201E DOUBLE LOW-9 QUOTATION MARK
=BA U+201D RIGHT DOUBLE QUOTATION MARK
=BB U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
=BC U+2026 HORIZONTAL ELLIPSIS
=BD U+2030 PER MILLE SIGN
=BF U+00BF INVERTED QUESTION MARK
=C1 U+0060 GRAVE ACCENT
=C2 U+00B4 ACUTE ACCENT
=C3 U+02C6 MODIFIER LETTER CIRCUMFLEX ACCENT
=C4 U+02DC SMALL TILDE
=C5 U+00AF MACRON
=C6 U+02D8 BREVE
=C7 U+02D9 DOT ABOVE
=C8 U+00A8 DIAERESIS
=CA U+02DA RING ABOVE
=CB U+00B8 CEDILLA
=CD U+02DD DOUBLE ACUTE ACCENT
=CE U+02DB OGONEK
=CF U+02C7 CARON
=D0 U+2014 EM DASH
=E1 U+00C6 LATIN CAPITAL LETTER AE
=E3 U+00AA FEMININE ORDINAL INDICATOR
=E8 U+0141 LATIN CAPITAL LETTER L WITH STROKE
=E9 U+00D8 LATIN CAPITAL LETTER O WITH STROKE
=EA U+0152 LATIN CAPITAL LIGATURE OE
=EB U+00BA MASCULINE ORDINAL INDICATOR
=F1 U+00E6 LATIN SMALL LETTER AE
=F5 U+0131 LATIN SMALL LETTER DOTLESS I
=F8 U+0142 LATIN SMALL LETTER L WITH STROKE
=F9 U+00F8 LATIN SMALL LETTER O WITH STROKE
=FA U+0153 LATIN SMALL LIGATURE OE
=FB U+00DF LATIN SMALL LETTER SHARP S
// unencoded characters:
=100 U+00E7 LATIN SMALL LETTER C WITH CEDILLA
=101 U+00FF LATIN SMALL LETTER Y WITH DIAERESIS
=102 U+00E3 LATIN SMALL LETTER A WITH TILDE
=103 U+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX
=104 U+00B3 SUPERSCRIPT THREE
=105 U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX
=106 U+00FE LATIN SMALL LETTER THORN
=107 U+00E8 LATIN SMALL LETTER E WITH GRAVE
=108 U+00B2 SUPERSCRIPT TWO
=109 U+00E9 LATIN SMALL LETTER E WITH ACUTE
=10A U+00F5 LATIN SMALL LETTER O WITH TILDE
=10B U+00C1 LATIN CAPITAL LETTER A WITH ACUTE
=10C U+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX
=10D U+00FD LATIN SMALL LETTER Y WITH ACUTE
=10E U+00FC LATIN SMALL LETTER U WITH DIAERESIS
=10F U+00BE VULGAR FRACTION THREE QUARTERS
=110 U+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX
=111 U+00D0 LATIN CAPITAL LETTER ETH
=112 U+00EB LATIN SMALL LETTER E WITH DIAERESIS
=113 U+00F9 LATIN SMALL LETTER U WITH GRAVE
=114 U+2122 TRADE MARK SIGN
=115 U+00F2 LATIN SMALL LETTER O WITH GRAVE
=116 U+0161 LATIN SMALL LETTER S WITH CARON
=117 U+00CF LATIN CAPITAL LETTER I WITH DIAERESIS
=118 U+00FA LATIN SMALL LETTER U WITH ACUTE
=119 U+00E0 LATIN SMALL LETTER A WITH GRAVE
=11A U+00F1 LATIN SMALL LETTER N WITH TILDE
=11B U+00E5 LATIN SMALL LETTER A WITH RING ABOVE
=11C U+017E LATIN SMALL LETTER Z WITH CARON
=11D U+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX
=11E U+00D1 LATIN CAPITAL LETTER N WITH TILDE
=11F U+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX
=120 U+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX
=121 U+00CD LATIN CAPITAL LETTER I WITH ACUTE
=122 U+00C7 LATIN CAPITAL LETTER C WITH CEDILLA
=123 U+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS
=124 U+0160 LATIN CAPITAL LETTER S WITH CARON
=125 U+00CC LATIN CAPITAL LETTER I WITH GRAVE
=126 U+00E4 LATIN SMALL LETTER A WITH DIAERESIS
=127 U+00D2 LATIN CAPITAL LETTER O WITH GRAVE
=128 U+00C8 LATIN CAPITAL LETTER E WITH GRAVE
=129 U+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS
=12A U+00AE REGISTERED SIGN
=12B U+00D5 LATIN CAPITAL LETTER O WITH TILDE
=12C U+00BC VULGAR FRACTION ONE QUARTER
=12D U+00D9 LATIN CAPITAL LETTER U WITH GRAVE
=12E U+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX
=12F U+00DE LATIN CAPITAL LETTER THORN
=130 U+00F7 DIVISION SIGN
=131 U+00C3 LATIN CAPITAL LETTER A WITH TILDE
=132 U+00DA LATIN CAPITAL LETTER U WITH ACUTE
=133 U+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX
=134 U+00AC NOT SIGN
=135 U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE
=136 U+00EF LATIN SMALL LETTER I WITH DIAERESIS
=137 U+00ED LATIN SMALL LETTER I WITH ACUTE
=138 U+00E1 LATIN SMALL LETTER A WITH ACUTE
=139 U+00B1 PLUS-MINUS SIGN
=13A U+00D7 MULTIPLICATION SIGN
=13B U+00DC LATIN CAPITAL LETTER U WITH DIAERESIS
=13C U+2212 MINUS SIGN
=13D U+00B9 SUPERSCRIPT ONE
=13E U+00C9 LATIN CAPITAL LETTER E WITH ACUTE
=13F U+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
=140 U+00A9 COPYRIGHT SIGN
=141 U+00C0 LATIN CAPITAL LETTER A WITH GRAVE
=142 U+00F6 LATIN SMALL LETTER O WITH DIAERESIS
=143 U+00F3 LATIN SMALL LETTER O WITH ACUTE
=144 U+00B0 DEGREE SIGN
=145 U+00EC LATIN SMALL LETTER I WITH GRAVE
=146 U+00B5 MICRO SIGN
=147 U+00D3 LATIN CAPITAL LETTER O WITH ACUTE
=148 U+00F0 LATIN SMALL LETTER ETH
=149 U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS
=14A U+00DD LATIN CAPITAL LETTER Y WITH ACUTE
=14B U+00A6 BROKEN BAR
=14C U+00BD VULGAR FRACTION ONE HALF

View File

@ -1,251 +0,0 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!82 U+201A quotesinglbase
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!89 U+2030 perthousand
!8A U+0160 Scaron
!8B U+2039 guilsinglleft
!8C U+015A Sacute
!8D U+0164 Tcaron
!8E U+017D Zcaron
!8F U+0179 Zacute
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!99 U+2122 trademark
!9A U+0161 scaron
!9B U+203A guilsinglright
!9C U+015B sacute
!9D U+0165 tcaron
!9E U+017E zcaron
!9F U+017A zacute
!A0 U+00A0 space
!A1 U+02C7 caron
!A2 U+02D8 breve
!A3 U+0141 Lslash
!A4 U+00A4 currency
!A5 U+0104 Aogonek
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AA U+015E Scedilla
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+017B Zdotaccent
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+02DB ogonek
!B3 U+0142 lslash
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+00B8 cedilla
!B9 U+0105 aogonek
!BA U+015F scedilla
!BB U+00BB guillemotright
!BC U+013D Lcaron
!BD U+02DD hungarumlaut
!BE U+013E lcaron
!BF U+017C zdotaccent
!C0 U+0154 Racute
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+0102 Abreve
!C4 U+00C4 Adieresis
!C5 U+0139 Lacute
!C6 U+0106 Cacute
!C7 U+00C7 Ccedilla
!C8 U+010C Ccaron
!C9 U+00C9 Eacute
!CA U+0118 Eogonek
!CB U+00CB Edieresis
!CC U+011A Ecaron
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+010E Dcaron
!D0 U+0110 Dcroat
!D1 U+0143 Nacute
!D2 U+0147 Ncaron
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+0150 Ohungarumlaut
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+0158 Rcaron
!D9 U+016E Uring
!DA U+00DA Uacute
!DB U+0170 Uhungarumlaut
!DC U+00DC Udieresis
!DD U+00DD Yacute
!DE U+0162 Tcommaaccent
!DF U+00DF germandbls
!E0 U+0155 racute
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+0103 abreve
!E4 U+00E4 adieresis
!E5 U+013A lacute
!E6 U+0107 cacute
!E7 U+00E7 ccedilla
!E8 U+010D ccaron
!E9 U+00E9 eacute
!EA U+0119 eogonek
!EB U+00EB edieresis
!EC U+011B ecaron
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+010F dcaron
!F0 U+0111 dcroat
!F1 U+0144 nacute
!F2 U+0148 ncaron
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+0151 ohungarumlaut
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+0159 rcaron
!F9 U+016F uring
!FA U+00FA uacute
!FB U+0171 uhungarumlaut
!FC U+00FC udieresis
!FD U+00FD yacute
!FE U+0163 tcommaaccent
!FF U+02D9 dotaccent

View File

@ -1,255 +0,0 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0402 afii10051
!81 U+0403 afii10052
!82 U+201A quotesinglbase
!83 U+0453 afii10100
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!88 U+20AC Euro
!89 U+2030 perthousand
!8A U+0409 afii10058
!8B U+2039 guilsinglleft
!8C U+040A afii10059
!8D U+040C afii10061
!8E U+040B afii10060
!8F U+040F afii10145
!90 U+0452 afii10099
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!99 U+2122 trademark
!9A U+0459 afii10106
!9B U+203A guilsinglright
!9C U+045A afii10107
!9D U+045C afii10109
!9E U+045B afii10108
!9F U+045F afii10193
!A0 U+00A0 space
!A1 U+040E afii10062
!A2 U+045E afii10110
!A3 U+0408 afii10057
!A4 U+00A4 currency
!A5 U+0490 afii10050
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+0401 afii10023
!A9 U+00A9 copyright
!AA U+0404 afii10053
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+0407 afii10056
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+0406 afii10055
!B3 U+0456 afii10103
!B4 U+0491 afii10098
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+0451 afii10071
!B9 U+2116 afii61352
!BA U+0454 afii10101
!BB U+00BB guillemotright
!BC U+0458 afii10105
!BD U+0405 afii10054
!BE U+0455 afii10102
!BF U+0457 afii10104
!C0 U+0410 afii10017
!C1 U+0411 afii10018
!C2 U+0412 afii10019
!C3 U+0413 afii10020
!C4 U+0414 afii10021
!C5 U+0415 afii10022
!C6 U+0416 afii10024
!C7 U+0417 afii10025
!C8 U+0418 afii10026
!C9 U+0419 afii10027
!CA U+041A afii10028
!CB U+041B afii10029
!CC U+041C afii10030
!CD U+041D afii10031
!CE U+041E afii10032
!CF U+041F afii10033
!D0 U+0420 afii10034
!D1 U+0421 afii10035
!D2 U+0422 afii10036
!D3 U+0423 afii10037
!D4 U+0424 afii10038
!D5 U+0425 afii10039
!D6 U+0426 afii10040
!D7 U+0427 afii10041
!D8 U+0428 afii10042
!D9 U+0429 afii10043
!DA U+042A afii10044
!DB U+042B afii10045
!DC U+042C afii10046
!DD U+042D afii10047
!DE U+042E afii10048
!DF U+042F afii10049
!E0 U+0430 afii10065
!E1 U+0431 afii10066
!E2 U+0432 afii10067
!E3 U+0433 afii10068
!E4 U+0434 afii10069
!E5 U+0435 afii10070
!E6 U+0436 afii10072
!E7 U+0437 afii10073
!E8 U+0438 afii10074
!E9 U+0439 afii10075
!EA U+043A afii10076
!EB U+043B afii10077
!EC U+043C afii10078
!ED U+043D afii10079
!EE U+043E afii10080
!EF U+043F afii10081
!F0 U+0440 afii10082
!F1 U+0441 afii10083
!F2 U+0442 afii10084
!F3 U+0443 afii10085
!F4 U+0444 afii10086
!F5 U+0445 afii10087
!F6 U+0446 afii10088
!F7 U+0447 afii10089
!F8 U+0448 afii10090
!F9 U+0449 afii10091
!FA U+044A afii10092
!FB U+044B afii10093
!FC U+044C afii10094
!FD U+044D afii10095
!FE U+044E afii10096
!FF U+044F afii10097

View File

@ -1,251 +0,0 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!82 U+201A quotesinglbase
!83 U+0192 florin
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!88 U+02C6 circumflex
!89 U+2030 perthousand
!8A U+0160 Scaron
!8B U+2039 guilsinglleft
!8C U+0152 OE
!8E U+017D Zcaron
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!98 U+02DC tilde
!99 U+2122 trademark
!9A U+0161 scaron
!9B U+203A guilsinglright
!9C U+0153 oe
!9E U+017E zcaron
!9F U+0178 Ydieresis
!A0 U+00A0 space
!A1 U+00A1 exclamdown
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+00A4 currency
!A5 U+00A5 yen
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AA U+00AA ordfeminine
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+00B8 cedilla
!B9 U+00B9 onesuperior
!BA U+00BA ordmasculine
!BB U+00BB guillemotright
!BC U+00BC onequarter
!BD U+00BD onehalf
!BE U+00BE threequarters
!BF U+00BF questiondown
!C0 U+00C0 Agrave
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+00C3 Atilde
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+00C6 AE
!C7 U+00C7 Ccedilla
!C8 U+00C8 Egrave
!C9 U+00C9 Eacute
!CA U+00CA Ecircumflex
!CB U+00CB Edieresis
!CC U+00CC Igrave
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+00CF Idieresis
!D0 U+00D0 Eth
!D1 U+00D1 Ntilde
!D2 U+00D2 Ograve
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+00D5 Otilde
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+00D8 Oslash
!D9 U+00D9 Ugrave
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+00DD Yacute
!DE U+00DE Thorn
!DF U+00DF germandbls
!E0 U+00E0 agrave
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+00E3 atilde
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+00E6 ae
!E7 U+00E7 ccedilla
!E8 U+00E8 egrave
!E9 U+00E9 eacute
!EA U+00EA ecircumflex
!EB U+00EB edieresis
!EC U+00EC igrave
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+00EF idieresis
!F0 U+00F0 eth
!F1 U+00F1 ntilde
!F2 U+00F2 ograve
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+00F5 otilde
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+00F8 oslash
!F9 U+00F9 ugrave
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+00FD yacute
!FE U+00FE thorn
!FF U+00FF ydieresis

View File

@ -1,239 +0,0 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!82 U+201A quotesinglbase
!83 U+0192 florin
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!89 U+2030 perthousand
!8B U+2039 guilsinglleft
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!99 U+2122 trademark
!9B U+203A guilsinglright
!A0 U+00A0 space
!A1 U+0385 dieresistonos
!A2 U+0386 Alphatonos
!A3 U+00A3 sterling
!A4 U+00A4 currency
!A5 U+00A5 yen
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+2015 afii00208
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+0384 tonos
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+0388 Epsilontonos
!B9 U+0389 Etatonos
!BA U+038A Iotatonos
!BB U+00BB guillemotright
!BC U+038C Omicrontonos
!BD U+00BD onehalf
!BE U+038E Upsilontonos
!BF U+038F Omegatonos
!C0 U+0390 iotadieresistonos
!C1 U+0391 Alpha
!C2 U+0392 Beta
!C3 U+0393 Gamma
!C4 U+0394 Delta
!C5 U+0395 Epsilon
!C6 U+0396 Zeta
!C7 U+0397 Eta
!C8 U+0398 Theta
!C9 U+0399 Iota
!CA U+039A Kappa
!CB U+039B Lambda
!CC U+039C Mu
!CD U+039D Nu
!CE U+039E Xi
!CF U+039F Omicron
!D0 U+03A0 Pi
!D1 U+03A1 Rho
!D3 U+03A3 Sigma
!D4 U+03A4 Tau
!D5 U+03A5 Upsilon
!D6 U+03A6 Phi
!D7 U+03A7 Chi
!D8 U+03A8 Psi
!D9 U+03A9 Omega
!DA U+03AA Iotadieresis
!DB U+03AB Upsilondieresis
!DC U+03AC alphatonos
!DD U+03AD epsilontonos
!DE U+03AE etatonos
!DF U+03AF iotatonos
!E0 U+03B0 upsilondieresistonos
!E1 U+03B1 alpha
!E2 U+03B2 beta
!E3 U+03B3 gamma
!E4 U+03B4 delta
!E5 U+03B5 epsilon
!E6 U+03B6 zeta
!E7 U+03B7 eta
!E8 U+03B8 theta
!E9 U+03B9 iota
!EA U+03BA kappa
!EB U+03BB lambda
!EC U+03BC mu
!ED U+03BD nu
!EE U+03BE xi
!EF U+03BF omicron
!F0 U+03C0 pi
!F1 U+03C1 rho
!F2 U+03C2 sigma1
!F3 U+03C3 sigma
!F4 U+03C4 tau
!F5 U+03C5 upsilon
!F6 U+03C6 phi
!F7 U+03C7 chi
!F8 U+03C8 psi
!F9 U+03C9 omega
!FA U+03CA iotadieresis
!FB U+03CB upsilondieresis
!FC U+03CC omicrontonos
!FD U+03CD upsilontonos
!FE U+03CE omegatonos

View File

@ -1,249 +0,0 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!82 U+201A quotesinglbase
!83 U+0192 florin
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!88 U+02C6 circumflex
!89 U+2030 perthousand
!8A U+0160 Scaron
!8B U+2039 guilsinglleft
!8C U+0152 OE
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!98 U+02DC tilde
!99 U+2122 trademark
!9A U+0161 scaron
!9B U+203A guilsinglright
!9C U+0153 oe
!9F U+0178 Ydieresis
!A0 U+00A0 space
!A1 U+00A1 exclamdown
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+00A4 currency
!A5 U+00A5 yen
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AA U+00AA ordfeminine
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+00B8 cedilla
!B9 U+00B9 onesuperior
!BA U+00BA ordmasculine
!BB U+00BB guillemotright
!BC U+00BC onequarter
!BD U+00BD onehalf
!BE U+00BE threequarters
!BF U+00BF questiondown
!C0 U+00C0 Agrave
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+00C3 Atilde
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+00C6 AE
!C7 U+00C7 Ccedilla
!C8 U+00C8 Egrave
!C9 U+00C9 Eacute
!CA U+00CA Ecircumflex
!CB U+00CB Edieresis
!CC U+00CC Igrave
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+00CF Idieresis
!D0 U+011E Gbreve
!D1 U+00D1 Ntilde
!D2 U+00D2 Ograve
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+00D5 Otilde
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+00D8 Oslash
!D9 U+00D9 Ugrave
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+0130 Idotaccent
!DE U+015E Scedilla
!DF U+00DF germandbls
!E0 U+00E0 agrave
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+00E3 atilde
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+00E6 ae
!E7 U+00E7 ccedilla
!E8 U+00E8 egrave
!E9 U+00E9 eacute
!EA U+00EA ecircumflex
!EB U+00EB edieresis
!EC U+00EC igrave
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+00EF idieresis
!F0 U+011F gbreve
!F1 U+00F1 ntilde
!F2 U+00F2 ograve
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+00F5 otilde
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+00F8 oslash
!F9 U+00F9 ugrave
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+0131 dotlessi
!FE U+015F scedilla
!FF U+00FF ydieresis

View File

@ -1,233 +0,0 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!82 U+201A quotesinglbase
!83 U+0192 florin
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!88 U+02C6 circumflex
!89 U+2030 perthousand
!8B U+2039 guilsinglleft
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!98 U+02DC tilde
!99 U+2122 trademark
!9B U+203A guilsinglright
!A0 U+00A0 space
!A1 U+00A1 exclamdown
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+20AA afii57636
!A5 U+00A5 yen
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AA U+00D7 multiply
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD sfthyphen
!AE U+00AE registered
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 middot
!B8 U+00B8 cedilla
!B9 U+00B9 onesuperior
!BA U+00F7 divide
!BB U+00BB guillemotright
!BC U+00BC onequarter
!BD U+00BD onehalf
!BE U+00BE threequarters
!BF U+00BF questiondown
!C0 U+05B0 afii57799
!C1 U+05B1 afii57801
!C2 U+05B2 afii57800
!C3 U+05B3 afii57802
!C4 U+05B4 afii57793
!C5 U+05B5 afii57794
!C6 U+05B6 afii57795
!C7 U+05B7 afii57798
!C8 U+05B8 afii57797
!C9 U+05B9 afii57806
!CB U+05BB afii57796
!CC U+05BC afii57807
!CD U+05BD afii57839
!CE U+05BE afii57645
!CF U+05BF afii57841
!D0 U+05C0 afii57842
!D1 U+05C1 afii57804
!D2 U+05C2 afii57803
!D3 U+05C3 afii57658
!D4 U+05F0 afii57716
!D5 U+05F1 afii57717
!D6 U+05F2 afii57718
!D7 U+05F3 gereshhebrew
!D8 U+05F4 gershayimhebrew
!E0 U+05D0 afii57664
!E1 U+05D1 afii57665
!E2 U+05D2 afii57666
!E3 U+05D3 afii57667
!E4 U+05D4 afii57668
!E5 U+05D5 afii57669
!E6 U+05D6 afii57670
!E7 U+05D7 afii57671
!E8 U+05D8 afii57672
!E9 U+05D9 afii57673
!EA U+05DA afii57674
!EB U+05DB afii57675
!EC U+05DC afii57676
!ED U+05DD afii57677
!EE U+05DE afii57678
!EF U+05DF afii57679
!F0 U+05E0 afii57680
!F1 U+05E1 afii57681
!F2 U+05E2 afii57682
!F3 U+05E3 afii57683
!F4 U+05E4 afii57684
!F5 U+05E5 afii57685
!F6 U+05E6 afii57686
!F7 U+05E7 afii57687
!F8 U+05E8 afii57688
!F9 U+05E9 afii57689
!FA U+05EA afii57690
!FD U+200E afii299
!FE U+200F afii300

View File

@ -1,244 +0,0 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!82 U+201A quotesinglbase
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!89 U+2030 perthousand
!8B U+2039 guilsinglleft
!8D U+00A8 dieresis
!8E U+02C7 caron
!8F U+00B8 cedilla
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!99 U+2122 trademark
!9B U+203A guilsinglright
!9D U+00AF macron
!9E U+02DB ogonek
!A0 U+00A0 space
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+00A4 currency
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00D8 Oslash
!A9 U+00A9 copyright
!AA U+0156 Rcommaaccent
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+00C6 AE
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+00F8 oslash
!B9 U+00B9 onesuperior
!BA U+0157 rcommaaccent
!BB U+00BB guillemotright
!BC U+00BC onequarter
!BD U+00BD onehalf
!BE U+00BE threequarters
!BF U+00E6 ae
!C0 U+0104 Aogonek
!C1 U+012E Iogonek
!C2 U+0100 Amacron
!C3 U+0106 Cacute
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+0118 Eogonek
!C7 U+0112 Emacron
!C8 U+010C Ccaron
!C9 U+00C9 Eacute
!CA U+0179 Zacute
!CB U+0116 Edotaccent
!CC U+0122 Gcommaaccent
!CD U+0136 Kcommaaccent
!CE U+012A Imacron
!CF U+013B Lcommaaccent
!D0 U+0160 Scaron
!D1 U+0143 Nacute
!D2 U+0145 Ncommaaccent
!D3 U+00D3 Oacute
!D4 U+014C Omacron
!D5 U+00D5 Otilde
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+0172 Uogonek
!D9 U+0141 Lslash
!DA U+015A Sacute
!DB U+016A Umacron
!DC U+00DC Udieresis
!DD U+017B Zdotaccent
!DE U+017D Zcaron
!DF U+00DF germandbls
!E0 U+0105 aogonek
!E1 U+012F iogonek
!E2 U+0101 amacron
!E3 U+0107 cacute
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+0119 eogonek
!E7 U+0113 emacron
!E8 U+010D ccaron
!E9 U+00E9 eacute
!EA U+017A zacute
!EB U+0117 edotaccent
!EC U+0123 gcommaaccent
!ED U+0137 kcommaaccent
!EE U+012B imacron
!EF U+013C lcommaaccent
!F0 U+0161 scaron
!F1 U+0144 nacute
!F2 U+0146 ncommaaccent
!F3 U+00F3 oacute
!F4 U+014D omacron
!F5 U+00F5 otilde
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+0173 uogonek
!F9 U+0142 lslash
!FA U+015B sacute
!FB U+016B umacron
!FC U+00FC udieresis
!FD U+017C zdotaccent
!FE U+017E zcaron
!FF U+02D9 dotaccent

View File

@ -1,247 +0,0 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!82 U+201A quotesinglbase
!83 U+0192 florin
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!88 U+02C6 circumflex
!89 U+2030 perthousand
!8B U+2039 guilsinglleft
!8C U+0152 OE
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!98 U+02DC tilde
!99 U+2122 trademark
!9B U+203A guilsinglright
!9C U+0153 oe
!9F U+0178 Ydieresis
!A0 U+00A0 space
!A1 U+00A1 exclamdown
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+00A4 currency
!A5 U+00A5 yen
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AA U+00AA ordfeminine
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+00B8 cedilla
!B9 U+00B9 onesuperior
!BA U+00BA ordmasculine
!BB U+00BB guillemotright
!BC U+00BC onequarter
!BD U+00BD onehalf
!BE U+00BE threequarters
!BF U+00BF questiondown
!C0 U+00C0 Agrave
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+0102 Abreve
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+00C6 AE
!C7 U+00C7 Ccedilla
!C8 U+00C8 Egrave
!C9 U+00C9 Eacute
!CA U+00CA Ecircumflex
!CB U+00CB Edieresis
!CC U+0300 gravecomb
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+00CF Idieresis
!D0 U+0110 Dcroat
!D1 U+00D1 Ntilde
!D2 U+0309 hookabovecomb
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+01A0 Ohorn
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+00D8 Oslash
!D9 U+00D9 Ugrave
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+01AF Uhorn
!DE U+0303 tildecomb
!DF U+00DF germandbls
!E0 U+00E0 agrave
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+0103 abreve
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+00E6 ae
!E7 U+00E7 ccedilla
!E8 U+00E8 egrave
!E9 U+00E9 eacute
!EA U+00EA ecircumflex
!EB U+00EB edieresis
!EC U+0301 acutecomb
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+00EF idieresis
!F0 U+0111 dcroat
!F1 U+00F1 ntilde
!F2 U+0323 dotbelowcomb
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+01A1 ohorn
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+00F8 oslash
!F9 U+00F9 ugrave
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+01B0 uhorn
!FE U+20AB dong
!FF U+00FF ydieresis

View File

@ -1,225 +0,0 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!85 U+2026 ellipsis
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!A0 U+00A0 space
!A1 U+0E01 kokaithai
!A2 U+0E02 khokhaithai
!A3 U+0E03 khokhuatthai
!A4 U+0E04 khokhwaithai
!A5 U+0E05 khokhonthai
!A6 U+0E06 khorakhangthai
!A7 U+0E07 ngonguthai
!A8 U+0E08 chochanthai
!A9 U+0E09 chochingthai
!AA U+0E0A chochangthai
!AB U+0E0B sosothai
!AC U+0E0C chochoethai
!AD U+0E0D yoyingthai
!AE U+0E0E dochadathai
!AF U+0E0F topatakthai
!B0 U+0E10 thothanthai
!B1 U+0E11 thonangmonthothai
!B2 U+0E12 thophuthaothai
!B3 U+0E13 nonenthai
!B4 U+0E14 dodekthai
!B5 U+0E15 totaothai
!B6 U+0E16 thothungthai
!B7 U+0E17 thothahanthai
!B8 U+0E18 thothongthai
!B9 U+0E19 nonuthai
!BA U+0E1A bobaimaithai
!BB U+0E1B poplathai
!BC U+0E1C phophungthai
!BD U+0E1D fofathai
!BE U+0E1E phophanthai
!BF U+0E1F fofanthai
!C0 U+0E20 phosamphaothai
!C1 U+0E21 momathai
!C2 U+0E22 yoyakthai
!C3 U+0E23 roruathai
!C4 U+0E24 ruthai
!C5 U+0E25 lolingthai
!C6 U+0E26 luthai
!C7 U+0E27 wowaenthai
!C8 U+0E28 sosalathai
!C9 U+0E29 sorusithai
!CA U+0E2A sosuathai
!CB U+0E2B hohipthai
!CC U+0E2C lochulathai
!CD U+0E2D oangthai
!CE U+0E2E honokhukthai
!CF U+0E2F paiyannoithai
!D0 U+0E30 saraathai
!D1 U+0E31 maihanakatthai
!D2 U+0E32 saraaathai
!D3 U+0E33 saraamthai
!D4 U+0E34 saraithai
!D5 U+0E35 saraiithai
!D6 U+0E36 sarauethai
!D7 U+0E37 saraueethai
!D8 U+0E38 sarauthai
!D9 U+0E39 sarauuthai
!DA U+0E3A phinthuthai
!DF U+0E3F bahtthai
!E0 U+0E40 saraethai
!E1 U+0E41 saraaethai
!E2 U+0E42 saraothai
!E3 U+0E43 saraaimaimuanthai
!E4 U+0E44 saraaimaimalaithai
!E5 U+0E45 lakkhangyaothai
!E6 U+0E46 maiyamokthai
!E7 U+0E47 maitaikhuthai
!E8 U+0E48 maiekthai
!E9 U+0E49 maithothai
!EA U+0E4A maitrithai
!EB U+0E4B maichattawathai
!EC U+0E4C thanthakhatthai
!ED U+0E4D nikhahitthai
!EE U+0E4E yamakkanthai
!EF U+0E4F fongmanthai
!F0 U+0E50 zerothai
!F1 U+0E51 onethai
!F2 U+0E52 twothai
!F3 U+0E53 threethai
!F4 U+0E54 fourthai
!F5 U+0E55 fivethai
!F6 U+0E56 sixthai
!F7 U+0E57 seventhai
!F8 U+0E58 eightthai
!F9 U+0E59 ninethai
!FA U+0E5A angkhankhuthai
!FB U+0E5B khomutthai

View File

@ -1,256 +0,0 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+00A1 exclamdown
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+00A4 currency
!A5 U+00A5 yen
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AA U+00AA ordfeminine
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+00B8 cedilla
!B9 U+00B9 onesuperior
!BA U+00BA ordmasculine
!BB U+00BB guillemotright
!BC U+00BC onequarter
!BD U+00BD onehalf
!BE U+00BE threequarters
!BF U+00BF questiondown
!C0 U+00C0 Agrave
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+00C3 Atilde
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+00C6 AE
!C7 U+00C7 Ccedilla
!C8 U+00C8 Egrave
!C9 U+00C9 Eacute
!CA U+00CA Ecircumflex
!CB U+00CB Edieresis
!CC U+00CC Igrave
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+00CF Idieresis
!D0 U+00D0 Eth
!D1 U+00D1 Ntilde
!D2 U+00D2 Ograve
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+00D5 Otilde
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+00D8 Oslash
!D9 U+00D9 Ugrave
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+00DD Yacute
!DE U+00DE Thorn
!DF U+00DF germandbls
!E0 U+00E0 agrave
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+00E3 atilde
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+00E6 ae
!E7 U+00E7 ccedilla
!E8 U+00E8 egrave
!E9 U+00E9 eacute
!EA U+00EA ecircumflex
!EB U+00EB edieresis
!EC U+00EC igrave
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+00EF idieresis
!F0 U+00F0 eth
!F1 U+00F1 ntilde
!F2 U+00F2 ograve
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+00F5 otilde
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+00F8 oslash
!F9 U+00F9 ugrave
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+00FD yacute
!FE U+00FE thorn
!FF U+00FF ydieresis

View File

@ -1,248 +0,0 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+0E01 kokaithai
!A2 U+0E02 khokhaithai
!A3 U+0E03 khokhuatthai
!A4 U+0E04 khokhwaithai
!A5 U+0E05 khokhonthai
!A6 U+0E06 khorakhangthai
!A7 U+0E07 ngonguthai
!A8 U+0E08 chochanthai
!A9 U+0E09 chochingthai
!AA U+0E0A chochangthai
!AB U+0E0B sosothai
!AC U+0E0C chochoethai
!AD U+0E0D yoyingthai
!AE U+0E0E dochadathai
!AF U+0E0F topatakthai
!B0 U+0E10 thothanthai
!B1 U+0E11 thonangmonthothai
!B2 U+0E12 thophuthaothai
!B3 U+0E13 nonenthai
!B4 U+0E14 dodekthai
!B5 U+0E15 totaothai
!B6 U+0E16 thothungthai
!B7 U+0E17 thothahanthai
!B8 U+0E18 thothongthai
!B9 U+0E19 nonuthai
!BA U+0E1A bobaimaithai
!BB U+0E1B poplathai
!BC U+0E1C phophungthai
!BD U+0E1D fofathai
!BE U+0E1E phophanthai
!BF U+0E1F fofanthai
!C0 U+0E20 phosamphaothai
!C1 U+0E21 momathai
!C2 U+0E22 yoyakthai
!C3 U+0E23 roruathai
!C4 U+0E24 ruthai
!C5 U+0E25 lolingthai
!C6 U+0E26 luthai
!C7 U+0E27 wowaenthai
!C8 U+0E28 sosalathai
!C9 U+0E29 sorusithai
!CA U+0E2A sosuathai
!CB U+0E2B hohipthai
!CC U+0E2C lochulathai
!CD U+0E2D oangthai
!CE U+0E2E honokhukthai
!CF U+0E2F paiyannoithai
!D0 U+0E30 saraathai
!D1 U+0E31 maihanakatthai
!D2 U+0E32 saraaathai
!D3 U+0E33 saraamthai
!D4 U+0E34 saraithai
!D5 U+0E35 saraiithai
!D6 U+0E36 sarauethai
!D7 U+0E37 saraueethai
!D8 U+0E38 sarauthai
!D9 U+0E39 sarauuthai
!DA U+0E3A phinthuthai
!DF U+0E3F bahtthai
!E0 U+0E40 saraethai
!E1 U+0E41 saraaethai
!E2 U+0E42 saraothai
!E3 U+0E43 saraaimaimuanthai
!E4 U+0E44 saraaimaimalaithai
!E5 U+0E45 lakkhangyaothai
!E6 U+0E46 maiyamokthai
!E7 U+0E47 maitaikhuthai
!E8 U+0E48 maiekthai
!E9 U+0E49 maithothai
!EA U+0E4A maitrithai
!EB U+0E4B maichattawathai
!EC U+0E4C thanthakhatthai
!ED U+0E4D nikhahitthai
!EE U+0E4E yamakkanthai
!EF U+0E4F fongmanthai
!F0 U+0E50 zerothai
!F1 U+0E51 onethai
!F2 U+0E52 twothai
!F3 U+0E53 threethai
!F4 U+0E54 fourthai
!F5 U+0E55 fivethai
!F6 U+0E56 sixthai
!F7 U+0E57 seventhai
!F8 U+0E58 eightthai
!F9 U+0E59 ninethai
!FA U+0E5A angkhankhuthai
!FB U+0E5B khomutthai

View File

@ -1,256 +0,0 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+00A1 exclamdown
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+20AC Euro
!A5 U+00A5 yen
!A6 U+0160 Scaron
!A7 U+00A7 section
!A8 U+0161 scaron
!A9 U+00A9 copyright
!AA U+00AA ordfeminine
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+017D Zcaron
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+017E zcaron
!B9 U+00B9 onesuperior
!BA U+00BA ordmasculine
!BB U+00BB guillemotright
!BC U+0152 OE
!BD U+0153 oe
!BE U+0178 Ydieresis
!BF U+00BF questiondown
!C0 U+00C0 Agrave
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+00C3 Atilde
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+00C6 AE
!C7 U+00C7 Ccedilla
!C8 U+00C8 Egrave
!C9 U+00C9 Eacute
!CA U+00CA Ecircumflex
!CB U+00CB Edieresis
!CC U+00CC Igrave
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+00CF Idieresis
!D0 U+00D0 Eth
!D1 U+00D1 Ntilde
!D2 U+00D2 Ograve
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+00D5 Otilde
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+00D8 Oslash
!D9 U+00D9 Ugrave
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+00DD Yacute
!DE U+00DE Thorn
!DF U+00DF germandbls
!E0 U+00E0 agrave
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+00E3 atilde
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+00E6 ae
!E7 U+00E7 ccedilla
!E8 U+00E8 egrave
!E9 U+00E9 eacute
!EA U+00EA ecircumflex
!EB U+00EB edieresis
!EC U+00EC igrave
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+00EF idieresis
!F0 U+00F0 eth
!F1 U+00F1 ntilde
!F2 U+00F2 ograve
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+00F5 otilde
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+00F8 oslash
!F9 U+00F9 ugrave
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+00FD yacute
!FE U+00FE thorn
!FF U+00FF ydieresis

View File

@ -1,256 +0,0 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+0104 Aogonek
!A2 U+0105 aogonek
!A3 U+0141 Lslash
!A4 U+20AC Euro
!A5 U+201E quotedblbase
!A6 U+0160 Scaron
!A7 U+00A7 section
!A8 U+0161 scaron
!A9 U+00A9 copyright
!AA U+0218 Scommaaccent
!AB U+00AB guillemotleft
!AC U+0179 Zacute
!AD U+00AD hyphen
!AE U+017A zacute
!AF U+017B Zdotaccent
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+010C Ccaron
!B3 U+0142 lslash
!B4 U+017D Zcaron
!B5 U+201D quotedblright
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+017E zcaron
!B9 U+010D ccaron
!BA U+0219 scommaaccent
!BB U+00BB guillemotright
!BC U+0152 OE
!BD U+0153 oe
!BE U+0178 Ydieresis
!BF U+017C zdotaccent
!C0 U+00C0 Agrave
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+0102 Abreve
!C4 U+00C4 Adieresis
!C5 U+0106 Cacute
!C6 U+00C6 AE
!C7 U+00C7 Ccedilla
!C8 U+00C8 Egrave
!C9 U+00C9 Eacute
!CA U+00CA Ecircumflex
!CB U+00CB Edieresis
!CC U+00CC Igrave
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+00CF Idieresis
!D0 U+0110 Dcroat
!D1 U+0143 Nacute
!D2 U+00D2 Ograve
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+0150 Ohungarumlaut
!D6 U+00D6 Odieresis
!D7 U+015A Sacute
!D8 U+0170 Uhungarumlaut
!D9 U+00D9 Ugrave
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+0118 Eogonek
!DE U+021A Tcommaaccent
!DF U+00DF germandbls
!E0 U+00E0 agrave
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+0103 abreve
!E4 U+00E4 adieresis
!E5 U+0107 cacute
!E6 U+00E6 ae
!E7 U+00E7 ccedilla
!E8 U+00E8 egrave
!E9 U+00E9 eacute
!EA U+00EA ecircumflex
!EB U+00EB edieresis
!EC U+00EC igrave
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+00EF idieresis
!F0 U+0111 dcroat
!F1 U+0144 nacute
!F2 U+00F2 ograve
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+0151 ohungarumlaut
!F6 U+00F6 odieresis
!F7 U+015B sacute
!F8 U+0171 uhungarumlaut
!F9 U+00F9 ugrave
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+0119 eogonek
!FE U+021B tcommaaccent
!FF U+00FF ydieresis

View File

@ -1,256 +0,0 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+0104 Aogonek
!A2 U+02D8 breve
!A3 U+0141 Lslash
!A4 U+00A4 currency
!A5 U+013D Lcaron
!A6 U+015A Sacute
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+0160 Scaron
!AA U+015E Scedilla
!AB U+0164 Tcaron
!AC U+0179 Zacute
!AD U+00AD hyphen
!AE U+017D Zcaron
!AF U+017B Zdotaccent
!B0 U+00B0 degree
!B1 U+0105 aogonek
!B2 U+02DB ogonek
!B3 U+0142 lslash
!B4 U+00B4 acute
!B5 U+013E lcaron
!B6 U+015B sacute
!B7 U+02C7 caron
!B8 U+00B8 cedilla
!B9 U+0161 scaron
!BA U+015F scedilla
!BB U+0165 tcaron
!BC U+017A zacute
!BD U+02DD hungarumlaut
!BE U+017E zcaron
!BF U+017C zdotaccent
!C0 U+0154 Racute
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+0102 Abreve
!C4 U+00C4 Adieresis
!C5 U+0139 Lacute
!C6 U+0106 Cacute
!C7 U+00C7 Ccedilla
!C8 U+010C Ccaron
!C9 U+00C9 Eacute
!CA U+0118 Eogonek
!CB U+00CB Edieresis
!CC U+011A Ecaron
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+010E Dcaron
!D0 U+0110 Dcroat
!D1 U+0143 Nacute
!D2 U+0147 Ncaron
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+0150 Ohungarumlaut
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+0158 Rcaron
!D9 U+016E Uring
!DA U+00DA Uacute
!DB U+0170 Uhungarumlaut
!DC U+00DC Udieresis
!DD U+00DD Yacute
!DE U+0162 Tcommaaccent
!DF U+00DF germandbls
!E0 U+0155 racute
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+0103 abreve
!E4 U+00E4 adieresis
!E5 U+013A lacute
!E6 U+0107 cacute
!E7 U+00E7 ccedilla
!E8 U+010D ccaron
!E9 U+00E9 eacute
!EA U+0119 eogonek
!EB U+00EB edieresis
!EC U+011B ecaron
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+010F dcaron
!F0 U+0111 dcroat
!F1 U+0144 nacute
!F2 U+0148 ncaron
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+0151 ohungarumlaut
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+0159 rcaron
!F9 U+016F uring
!FA U+00FA uacute
!FB U+0171 uhungarumlaut
!FC U+00FC udieresis
!FD U+00FD yacute
!FE U+0163 tcommaaccent
!FF U+02D9 dotaccent

View File

@ -1,256 +0,0 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+0104 Aogonek
!A2 U+0138 kgreenlandic
!A3 U+0156 Rcommaaccent
!A4 U+00A4 currency
!A5 U+0128 Itilde
!A6 U+013B Lcommaaccent
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+0160 Scaron
!AA U+0112 Emacron
!AB U+0122 Gcommaaccent
!AC U+0166 Tbar
!AD U+00AD hyphen
!AE U+017D Zcaron
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+0105 aogonek
!B2 U+02DB ogonek
!B3 U+0157 rcommaaccent
!B4 U+00B4 acute
!B5 U+0129 itilde
!B6 U+013C lcommaaccent
!B7 U+02C7 caron
!B8 U+00B8 cedilla
!B9 U+0161 scaron
!BA U+0113 emacron
!BB U+0123 gcommaaccent
!BC U+0167 tbar
!BD U+014A Eng
!BE U+017E zcaron
!BF U+014B eng
!C0 U+0100 Amacron
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+00C3 Atilde
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+00C6 AE
!C7 U+012E Iogonek
!C8 U+010C Ccaron
!C9 U+00C9 Eacute
!CA U+0118 Eogonek
!CB U+00CB Edieresis
!CC U+0116 Edotaccent
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+012A Imacron
!D0 U+0110 Dcroat
!D1 U+0145 Ncommaaccent
!D2 U+014C Omacron
!D3 U+0136 Kcommaaccent
!D4 U+00D4 Ocircumflex
!D5 U+00D5 Otilde
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+00D8 Oslash
!D9 U+0172 Uogonek
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+0168 Utilde
!DE U+016A Umacron
!DF U+00DF germandbls
!E0 U+0101 amacron
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+00E3 atilde
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+00E6 ae
!E7 U+012F iogonek
!E8 U+010D ccaron
!E9 U+00E9 eacute
!EA U+0119 eogonek
!EB U+00EB edieresis
!EC U+0117 edotaccent
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+012B imacron
!F0 U+0111 dcroat
!F1 U+0146 ncommaaccent
!F2 U+014D omacron
!F3 U+0137 kcommaaccent
!F4 U+00F4 ocircumflex
!F5 U+00F5 otilde
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+00F8 oslash
!F9 U+0173 uogonek
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+0169 utilde
!FE U+016B umacron
!FF U+02D9 dotaccent

View File

@ -1,256 +0,0 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+0401 afii10023
!A2 U+0402 afii10051
!A3 U+0403 afii10052
!A4 U+0404 afii10053
!A5 U+0405 afii10054
!A6 U+0406 afii10055
!A7 U+0407 afii10056
!A8 U+0408 afii10057
!A9 U+0409 afii10058
!AA U+040A afii10059
!AB U+040B afii10060
!AC U+040C afii10061
!AD U+00AD hyphen
!AE U+040E afii10062
!AF U+040F afii10145
!B0 U+0410 afii10017
!B1 U+0411 afii10018
!B2 U+0412 afii10019
!B3 U+0413 afii10020
!B4 U+0414 afii10021
!B5 U+0415 afii10022
!B6 U+0416 afii10024
!B7 U+0417 afii10025
!B8 U+0418 afii10026
!B9 U+0419 afii10027
!BA U+041A afii10028
!BB U+041B afii10029
!BC U+041C afii10030
!BD U+041D afii10031
!BE U+041E afii10032
!BF U+041F afii10033
!C0 U+0420 afii10034
!C1 U+0421 afii10035
!C2 U+0422 afii10036
!C3 U+0423 afii10037
!C4 U+0424 afii10038
!C5 U+0425 afii10039
!C6 U+0426 afii10040
!C7 U+0427 afii10041
!C8 U+0428 afii10042
!C9 U+0429 afii10043
!CA U+042A afii10044
!CB U+042B afii10045
!CC U+042C afii10046
!CD U+042D afii10047
!CE U+042E afii10048
!CF U+042F afii10049
!D0 U+0430 afii10065
!D1 U+0431 afii10066
!D2 U+0432 afii10067
!D3 U+0433 afii10068
!D4 U+0434 afii10069
!D5 U+0435 afii10070
!D6 U+0436 afii10072
!D7 U+0437 afii10073
!D8 U+0438 afii10074
!D9 U+0439 afii10075
!DA U+043A afii10076
!DB U+043B afii10077
!DC U+043C afii10078
!DD U+043D afii10079
!DE U+043E afii10080
!DF U+043F afii10081
!E0 U+0440 afii10082
!E1 U+0441 afii10083
!E2 U+0442 afii10084
!E3 U+0443 afii10085
!E4 U+0444 afii10086
!E5 U+0445 afii10087
!E6 U+0446 afii10088
!E7 U+0447 afii10089
!E8 U+0448 afii10090
!E9 U+0449 afii10091
!EA U+044A afii10092
!EB U+044B afii10093
!EC U+044C afii10094
!ED U+044D afii10095
!EE U+044E afii10096
!EF U+044F afii10097
!F0 U+2116 afii61352
!F1 U+0451 afii10071
!F2 U+0452 afii10099
!F3 U+0453 afii10100
!F4 U+0454 afii10101
!F5 U+0455 afii10102
!F6 U+0456 afii10103
!F7 U+0457 afii10104
!F8 U+0458 afii10105
!F9 U+0459 afii10106
!FA U+045A afii10107
!FB U+045B afii10108
!FC U+045C afii10109
!FD U+00A7 section
!FE U+045E afii10110
!FF U+045F afii10193

View File

@ -1,250 +0,0 @@
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+2018 quoteleft
!A2 U+2019 quoteright
!A3 U+00A3 sterling
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AF U+2015 afii00208
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+0384 tonos
!B5 U+0385 dieresistonos
!B6 U+0386 Alphatonos
!B7 U+00B7 periodcentered
!B8 U+0388 Epsilontonos
!B9 U+0389 Etatonos
!BA U+038A Iotatonos
!BB U+00BB guillemotright
!BC U+038C Omicrontonos
!BD U+00BD onehalf
!BE U+038E Upsilontonos
!BF U+038F Omegatonos
!C0 U+0390 iotadieresistonos
!C1 U+0391 Alpha
!C2 U+0392 Beta
!C3 U+0393 Gamma
!C4 U+0394 Delta
!C5 U+0395 Epsilon
!C6 U+0396 Zeta
!C7 U+0397 Eta
!C8 U+0398 Theta
!C9 U+0399 Iota
!CA U+039A Kappa
!CB U+039B Lambda
!CC U+039C Mu
!CD U+039D Nu
!CE U+039E Xi
!CF U+039F Omicron
!D0 U+03A0 Pi
!D1 U+03A1 Rho
!D3 U+03A3 Sigma
!D4 U+03A4 Tau
!D5 U+03A5 Upsilon
!D6 U+03A6 Phi
!D7 U+03A7 Chi
!D8 U+03A8 Psi
!D9 U+03A9 Omega
!DA U+03AA Iotadieresis
!DB U+03AB Upsilondieresis
!DC U+03AC alphatonos
!DD U+03AD epsilontonos
!DE U+03AE etatonos
!DF U+03AF iotatonos
!E0 U+03B0 upsilondieresistonos
!E1 U+03B1 alpha
!E2 U+03B2 beta
!E3 U+03B3 gamma
!E4 U+03B4 delta
!E5 U+03B5 epsilon
!E6 U+03B6 zeta
!E7 U+03B7 eta
!E8 U+03B8 theta
!E9 U+03B9 iota
!EA U+03BA kappa
!EB U+03BB lambda
!EC U+03BC mu
!ED U+03BD nu
!EE U+03BE xi
!EF U+03BF omicron
!F0 U+03C0 pi
!F1 U+03C1 rho
!F2 U+03C2 sigma1
!F3 U+03C3 sigma
!F4 U+03C4 tau
!F5 U+03C5 upsilon
!F6 U+03C6 phi
!F7 U+03C7 chi
!F8 U+03C8 psi
!F9 U+03C9 omega
!FA U+03CA iotadieresis
!FB U+03CB upsilondieresis
!FC U+03CC omicrontonos
!FD U+03CD upsilontonos
!FE U+03CE omegatonos

Some files were not shown because too many files have changed in this diff Show More