mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-08 07:39:27 +00:00
FAS:
- Erstellung von Lehraufträgen - xslfo2pdf
This commit is contained in:
@@ -0,0 +1,267 @@
|
||||
<?php
|
||||
/* Copyright (C) 2006 Technikum-Wien
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation; either version 2 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
|
||||
*
|
||||
* Authors: Christian Paminger <christian.paminger@technikum-wien.at>,
|
||||
* Andreas Oesterreicher <andreas.oesterreicher@technikum-wien.at> and
|
||||
* Rudolf Hangl <rudolf.hangl@technikum-wien.at>.
|
||||
*/
|
||||
require_once('../../vilesci/config.inc.php');
|
||||
require_once('../../include/functions.inc.php');
|
||||
require_once('../../include/benutzerberechtigung.class.php');
|
||||
require_once('../../include/xslfo2pdf/xslfo2pdf.php');
|
||||
require_once('../../include/studiengang.class.php');
|
||||
require_once('../../include/lehreinheit.class.php');
|
||||
require_once('../../include/fachbereich.class.php');
|
||||
|
||||
function CutString($strVal, $limit)
|
||||
{
|
||||
if(strlen($strVal) > $limit+3)
|
||||
{
|
||||
return substr($strVal, 0, $limit) . "...";
|
||||
}
|
||||
else
|
||||
{
|
||||
return $strVal;
|
||||
}
|
||||
}
|
||||
|
||||
ini_set('display_errors','0');
|
||||
//error_reporting(E_ALL);
|
||||
|
||||
// Datenbank Verbindung
|
||||
if (!$conn = @pg_pconnect(CONN_STRING))
|
||||
$error_msg='Es konnte keine Verbindung zum Server aufgebaut werden!';
|
||||
|
||||
$user = get_uid();
|
||||
loadVariables($conn, $user);
|
||||
//Parameter holen
|
||||
if(isset($_GET['uid']))
|
||||
$uid = $_GET['uid'];
|
||||
else
|
||||
die('Fehlerhafte Parameteruebergabe');
|
||||
if(isset($_GET['stg_kz']))
|
||||
$studiengang_kz = $_GET['stg_kz'];
|
||||
else
|
||||
die('Fehlerhafte Parameteruebergabe');
|
||||
|
||||
if(isset($_GET['output']))
|
||||
$output = $_GET['output'];
|
||||
else
|
||||
$output = 'pdf';
|
||||
|
||||
//Berechtigung pruefen
|
||||
$rechte = new benutzerberechtigung($conn);
|
||||
$rechte->getBerechtigungen($user);
|
||||
|
||||
if(!$rechte->isBerechtigt('admin',$studiengang_kz))
|
||||
die("Keine Berechtigung");
|
||||
|
||||
// GENERATE XML
|
||||
|
||||
$xml = '<?xml version="1.0" encoding="ISO-8859-15" ?>
|
||||
<lehrauftrag>
|
||||
<studiengang>FH-';
|
||||
//Studiengang
|
||||
$studiengang = new studiengang($conn, $studiengang_kz);
|
||||
|
||||
if($studiengang->typ=='d')
|
||||
$xml.= 'Diplom-';
|
||||
elseif($studiengang->typ=='m')
|
||||
$xml.= 'Master-';
|
||||
elseif($studiengang->typ=='b')
|
||||
$xml.= 'Bachelor-';
|
||||
|
||||
$xml.= 'Studiengang '.$studiengang->bezeichnung.'</studiengang>';
|
||||
|
||||
//Studiensemester
|
||||
if(substr($semester_aktuell,0,2)=='WS')
|
||||
$studiensemester = 'Wintersemester '.substr($semester_aktuell,2);
|
||||
else
|
||||
$studiensemester = 'Sommersemester '.substr($semester_aktuell,2);
|
||||
$xml.="
|
||||
<studiensemester>$studiensemester</studiensemester>";
|
||||
|
||||
//Lektor
|
||||
$qry = "SELECT * FROM campus.vw_mitarbeiter LEFT JOIN public.tbl_adresse USING(person_id) WHERE uid='".addslashes($uid)."' ORDER BY zustelladresse LIMIT 1";
|
||||
|
||||
if($result = pg_query($conn, $qry))
|
||||
{
|
||||
if($row = pg_fetch_object($result))
|
||||
{
|
||||
$xml.='
|
||||
<mitarbeiter>
|
||||
<titelpre>'.$row->titelpre.'</titelpre>
|
||||
<vorname>'.$row->vorname.'</vorname>
|
||||
<familienname>'.$row->nachname.'</familienname>
|
||||
<titelpost>'.$row->titelpost.'</titelpost>
|
||||
<anschrift>'.$row->strasse.'</anschrift>
|
||||
<plz>'.$row->plz.'</plz>
|
||||
<ort>'.$row->ort.'</ort>
|
||||
<svnr>'.$row->svnr.'</svnr>
|
||||
<personalnummer>'.$row->personalnummer.'</personalnummer>
|
||||
</mitarbeiter>';
|
||||
}
|
||||
}
|
||||
|
||||
//Lehreinheiten
|
||||
$fb_arr = array();
|
||||
$fachbereich_obj = new fachbereich($conn);
|
||||
$fachbereich_obj->getAll();
|
||||
foreach ($fachbereich_obj->result as $fb)
|
||||
$fb_arr[$fb->fachbereich_kurzbz] = $fb->bezeichnung;
|
||||
|
||||
$lehreinheit = new lehreinheit($conn);
|
||||
$qry = "SELECT * FROM campus.vw_lehreinheit WHERE lv_studiengang_kz='".addslashes($studiengang_kz)."' AND mitarbeiter_uid='".addslashes($uid)."' AND studiensemester_kurzbz='$semester_aktuell'";
|
||||
|
||||
if($result = pg_query($conn, $qry))
|
||||
{
|
||||
$last_le='';
|
||||
$gesamtkosten = 0;
|
||||
$gesamtstunden = 0;
|
||||
$gruppen = array();
|
||||
$grp='';
|
||||
while($row = pg_fetch_object($result))
|
||||
{
|
||||
if($last_le!=$row->lehreinheit_id && $last_le!='')
|
||||
{
|
||||
array_unique($gruppen);
|
||||
foreach ($gruppen as $gruppe)
|
||||
$grp.=$gruppe.' ';
|
||||
$xml.='
|
||||
<lehreinheit>
|
||||
<lehreinheit_id>'.$lehreinheit_id.'</lehreinheit_id>
|
||||
<lehrveranstaltung>'.$lehrveranstaltung.'</lehrveranstaltung>
|
||||
<fachbereich>'.$fb_arr[$fachbereich].'</fachbereich>
|
||||
<gruppe>'.trim($grp).'</gruppe>
|
||||
<stunden>'.$stunden.'</stunden>
|
||||
<satz>'.$satz.'</satz>
|
||||
<faktor>'.$faktor.'</faktor>
|
||||
<brutto>'.number_format($brutto,2,',','.').'</brutto>
|
||||
</lehreinheit>';
|
||||
|
||||
$gesamtkosten = $gesamtkosten + $brutto;
|
||||
$gesamtstunden = $gesamtstunden + $stunden;
|
||||
|
||||
$lehreinheit_id='';
|
||||
$lehrveranstaltung = '';
|
||||
$fachbereich = '';
|
||||
$gruppen= array();
|
||||
$stunden = '';
|
||||
$satz = '';
|
||||
$faktor = '';
|
||||
$brutto = '';
|
||||
$grp='';
|
||||
}
|
||||
|
||||
$lehreinheit_id=$row->lehreinheit_id;
|
||||
$lehrveranstaltung = CutString($row->lv_bezeichnung,30).' '.$row->lehrform_kurzbz.' '.$row->semester.'. Semester';
|
||||
$fachbereich = $row->fachbereich_kurzbz;
|
||||
|
||||
if($row->gruppe_kurzbz!='')
|
||||
$gruppen[] = $row->gruppe_kurzbz;
|
||||
else
|
||||
$gruppen[] = $row->semester.$row->verband.$row->gruppe.' ';
|
||||
|
||||
$stunden = $row->semesterstunden;
|
||||
$satz = $row->stundensatz;
|
||||
$faktor = $row->faktor;
|
||||
$brutto = $row->semesterstunden*$row->stundensatz*$row->faktor;
|
||||
$last_le=$row->lehreinheit_id;
|
||||
}
|
||||
array_unique($gruppen);
|
||||
foreach ($gruppen as $gruppe)
|
||||
$grp.=$gruppe.' ';
|
||||
$xml.='
|
||||
<lehreinheit>
|
||||
<lehreinheit_id>'.$lehreinheit_id.'</lehreinheit_id>
|
||||
<lehrveranstaltung>'.$lehrveranstaltung.'</lehrveranstaltung>
|
||||
<fachbereich>'.$fb_arr[$fachbereich].'</fachbereich>
|
||||
<gruppe>'.trim($grp).'</gruppe>
|
||||
<stunden>'.$stunden.'</stunden>
|
||||
<satz>'.$satz.'</satz>
|
||||
<faktor>'.$faktor.'</faktor>
|
||||
<brutto>'.number_format($brutto,2,',','.').'</brutto>
|
||||
</lehreinheit>';
|
||||
|
||||
$gesamtkosten = $gesamtkosten + $brutto;
|
||||
$gesamtstunden = $gesamtstunden + $stunden;
|
||||
}
|
||||
|
||||
// Gesamtstunden und Gesamtkosten
|
||||
$xml.="
|
||||
<gesamtstunden>$gesamtstunden</gesamtstunden>
|
||||
<gesamtbetrag>".number_format($gesamtkosten,2,',','.')."</gesamtbetrag>";
|
||||
|
||||
//Studiengangsleiter
|
||||
$qry = "SELECT titelpre, vorname, nachname, titelpost FROM public.tbl_benutzerfunktion, public.tbl_person, public.tbl_benutzer WHERE
|
||||
funktion_kurzbz='stgl' AND studiengang_kz='".addslashes($studiengang_kz)."'
|
||||
AND tbl_benutzerfunktion.uid=tbl_benutzer.uid AND tbl_benutzer.person_id=tbl_person.person_id";
|
||||
if($result = pg_query($conn, $qry))
|
||||
{
|
||||
if($row = pg_fetch_object($result))
|
||||
{
|
||||
$stgl = trim($row->titelpost.' '.$row->vorname.' '.$row->nachname.' '.$row->titelpost);
|
||||
$xml.="
|
||||
<studiengangsleiter>$stgl</studiengangsleiter>";
|
||||
}
|
||||
}
|
||||
|
||||
$xml.= '
|
||||
<datum>'.date('d.m.Y').'</datum>
|
||||
</lehrauftrag>
|
||||
';
|
||||
|
||||
// END GENERATE XML
|
||||
//echo $xml;
|
||||
|
||||
// Load the XML source
|
||||
$xml_doc = new DOMDocument;
|
||||
if(!$xml_doc->loadXML($xml))
|
||||
die('unable to load xml');
|
||||
|
||||
//XSL aus der DB holen
|
||||
$qry = "SELECT text FROM public.tbl_vorlagestudiengang WHERE (studiengang_kz=0 OR studiengang_kz='".addslashes($studiengang_kz)."') AND vorlage_kurzbz='Lehrauftrag' ORDER BY studiengang_kz DESC, version DESC LIMIT 1";
|
||||
|
||||
if(!$result = pg_query($conn, $qry))
|
||||
die('Fehler beim laden der Vorlage'.pg_errormessage($conn));
|
||||
if(!$row = pg_fetch_object($result))
|
||||
die('Vorlage wurde nicht gefunden'.$qry);
|
||||
|
||||
// Load the XSL source
|
||||
$xsl = new DOMDocument;
|
||||
//if(!$xsl->load('../../../../xsl/collection.xsl'))
|
||||
if(!$xsl->loadXML($row->text))
|
||||
die('unable to load xsl');
|
||||
|
||||
// Configure the transformer
|
||||
$proc = new XSLTProcessor;
|
||||
$proc->importStyleSheet($xsl); // attach the xsl rules
|
||||
|
||||
$buffer = $proc->transformToXml($xml_doc);
|
||||
//in $buffer steht nun das xsl-fo file mit den daten
|
||||
$buffer = '<?xml version="1.0" encoding="ISO-8859-15" ?>'.substr($buffer, strpos($buffer,"\n"),strlen($buffer));
|
||||
$buffer = html_entity_decode($buffer);
|
||||
//echo "buffer: $buffer";
|
||||
|
||||
//Pdf erstellen
|
||||
$fo2pdf = new XslFo2Pdf();
|
||||
if (!$fo2pdf->generatePdf($buffer, 'filename', "D"))
|
||||
{
|
||||
echo "Failed parsing file:".'filename'."<br>";
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -178,7 +178,7 @@ function LvCreateLehrauftrag()
|
||||
{
|
||||
stg = document.getElementById('LehrveranstaltungEditor').getAttribute('stg_kz');
|
||||
uid = document.getElementById('LehrveranstaltungEditor').getAttribute('uid');
|
||||
alert('stg:'+stg+' uid:'+uid);
|
||||
window.location.href = '<?php echo APP_ROOT; ?>content/lvplanung/lehrauftrag.php?stg_kz='+stg+'&uid='+uid+'&'+gettimestamp();
|
||||
}
|
||||
|
||||
// ****************** FUNKTIONEN ************************** //
|
||||
|
||||
@@ -0,0 +1,188 @@
|
||||
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
|
||||
<fo:layout-master-set>
|
||||
<fo:simple-page-master
|
||||
margin-right="0.5cm" margin-left="0.5cm" margin-bottom="0.5cm" margin-top="0.75cm"
|
||||
page-width="21cm" page-height="29.7cm" master-name="first">
|
||||
<fo:region-body></fo:region-body>
|
||||
</fo:simple-page-master>
|
||||
<fo:simple-page-master
|
||||
margin-right="2.5cm" margin-left="2.5cm" margin-bottom="2cm" margin-top="1cm"
|
||||
page-width="21cm" page-height="29.7cm" master-name="rest">
|
||||
<fo:region-body></fo:region-body>
|
||||
</fo:simple-page-master>
|
||||
|
||||
<fo:page-sequence-master master-name="psmA">
|
||||
<fo:repeatable-page-master-alternatives>
|
||||
<fo:conditional-page-master-reference master-reference="first"
|
||||
page-position="first" />
|
||||
<fo:conditional-page-master-reference master-reference="rest"
|
||||
page-position="rest" />
|
||||
<!-- recommended fallback procedure -->
|
||||
<fo:conditional-page-master-reference master-reference="rest" />
|
||||
</fo:repeatable-page-master-alternatives>
|
||||
</fo:page-sequence-master>
|
||||
</fo:layout-master-set>
|
||||
<fo:page-sequence master-reference="psmA">
|
||||
<fo:flow flow-name="xsl-region-body">
|
||||
<fo:block-container height="4cm" width="12cm" top="0cm" left="0cm" position="absolute">
|
||||
<fo:block text-align="start" line-height="18pt" font-family="sans-serif" font-weight="bold" font-size="14pt">
|
||||
PX7.net
|
||||
</fo:block>
|
||||
<fo:block text-align="start" line-height="18pt" font-family="sans-serif" font-weight="bold" font-size="14pt">
|
||||
44 Liberty St
|
||||
</fo:block>
|
||||
<fo:block text-align="start" line-height="18pt" font-family="sans-serif" font-weight="bold" font-size="14pt">
|
||||
Newburyport, MA 01950
|
||||
</fo:block>
|
||||
<fo:block text-align="start" line-height="18pt" font-family="sans-serif" font-weight="bold" font-size="14pt">
|
||||
978-462-1152
|
||||
</fo:block>
|
||||
</fo:block-container>
|
||||
<fo:block-container height="1cm" width="6cm" top="0cm" left="14cm" position="absolute">
|
||||
<fo:block text-align="start" space-after.optimum="3pt" line-height="22pt" font-family="sans-serif" font-size="23pt">
|
||||
Sales Receipt
|
||||
</fo:block>
|
||||
</fo:block-container>
|
||||
|
||||
<fo:block-container border-color="black" border-style="solid" border-width=".5mm" height="0.5cm" width="2.49cm" top="1.2cm" left="13.8cm" padding=".6mm" position="absolute">
|
||||
<fo:block text-align="start" space-after.optimum="3pt" line-height="14pt" font-family="sans-serif" font-size="12pt">
|
||||
DATE
|
||||
</fo:block>
|
||||
</fo:block-container>
|
||||
<fo:block-container border-color="black" border-style="solid" border-width=".5mm" height="0.5cm" width="2.49cm" top="1.87cm" left="13.8cm" padding=".6mm" position="absolute">
|
||||
<fo:block text-align="start" space-after.optimum="3pt" line-height="14pt" font-family="sans-serif" font-size="10pt">
|
||||
01/01/2000
|
||||
</fo:block>
|
||||
</fo:block-container>
|
||||
<fo:block-container border-color="black" border-style="solid" border-width=".5mm" height="0.5cm" width="2.49cm" top="1.2cm" left="16.46cm" padding=".6mm" position="absolute">
|
||||
<fo:block text-align="start" space-after.optimum="3pt" line-height="14pt" font-family="sans-serif" font-size="12pt">
|
||||
SALE #
|
||||
</fo:block>
|
||||
</fo:block-container>
|
||||
<fo:block-container border-color="black" border-style="solid" border-width=".5mm" height="0.5cm" width="2.49cm" top="1.87cm" left="16.46cm" padding=".6mm" position="absolute">
|
||||
<fo:block text-align="start" space-after.optimum="3pt" line-height="14pt" font-family="sans-serif" font-size="10pt">
|
||||
1
|
||||
</fo:block>
|
||||
</fo:block-container>
|
||||
|
||||
<fo:block-container border-color="black" border-style="solid" border-width=".5mm" height="0.5cm" width="8.95cm" top="3cm" left="0cm" padding=".6mm" position="absolute">
|
||||
<fo:block text-align="start" line-height="14pt" font-family="sans-serif" font-size="12pt">
|
||||
SOLD TO
|
||||
</fo:block>
|
||||
</fo:block-container>
|
||||
<fo:block-container border-color="black" border-style="solid" border-width=".5mm" height="3cm" width="8.95cm" top="3.67cm" left="0cm" padding=".6mm" position="absolute">
|
||||
<fo:block text-align="start" space-after.optimum="3pt" line-height="14pt" font-family="sans-serif" font-size="12pt">
|
||||
</fo:block>
|
||||
</fo:block-container>
|
||||
<fo:block-container border-color="black" border-style="solid" border-width=".5mm" height="0.5cm" width="8.95cm" top="3cm" left="10cm" padding=".6mm" position="absolute">
|
||||
<fo:block text-align="start" space-after.optimum="3pt" line-height="14pt" font-family="sans-serif" font-size="12pt">
|
||||
SHIP TO
|
||||
</fo:block>
|
||||
</fo:block-container>
|
||||
<fo:block-container border-color="black" border-style="solid" border-width=".5mm" height="3cm" width="8.95cm" top="3.67cm" left="10cm" padding=".6mm" position="absolute">
|
||||
<fo:block text-align="start" space-after.optimum="3pt" line-height="14pt" font-family="sans-serif" font-size="12pt">
|
||||
</fo:block>
|
||||
</fo:block-container>
|
||||
|
||||
|
||||
<fo:block-container border-color="black" border-style="solid" border-width=".5mm" height="0.5cm" width="3.96cm" top="7.25cm" left="10.74cm" padding="1mm" position="absolute">
|
||||
<fo:block text-align="start" space-after.optimum="3pt" line-height="14pt" font-family="sans-serif" font-size="12pt">
|
||||
PMT METHOD
|
||||
</fo:block>
|
||||
</fo:block-container>
|
||||
<fo:block-container border-color="black" border-style="solid" border-width=".5mm" height="0.5cm" width="3.96cm" top="8cm" left="10.74cm" padding="1mm" position="absolute">
|
||||
<fo:block text-align="start" space-after.optimum="3pt" line-height="14pt" font-family="sans-serif" font-size="10pt">
|
||||
Check
|
||||
</fo:block>
|
||||
</fo:block-container>
|
||||
<fo:block-container border-color="black" border-style="solid" border-width=".5mm" height="0.5cm" width="3.96cm" top="7.25cm" left="14.95cm" padding="1mm" position="absolute">
|
||||
<fo:block text-align="start" space-after.optimum="3pt" line-height="14pt" font-family="sans-serif" font-size="12pt">
|
||||
CHECK #
|
||||
</fo:block>
|
||||
</fo:block-container>
|
||||
<fo:block-container border-color="black" border-style="solid" border-width=".5mm" height="0.5cm" width="3.96cm" top="8cm" left="14.95cm" padding="1mm" position="absolute">
|
||||
<fo:block text-align="start" space-after.optimum="3pt" line-height="14pt" font-family="sans-serif" font-size="10pt">
|
||||
1234
|
||||
</fo:block>
|
||||
</fo:block-container>
|
||||
|
||||
|
||||
<fo:block-container height="17cm" width="19cm" top="9.4cm" left="0cm" position="absolute">
|
||||
<fo:table table-layout="fixed" border-collapse="separate" border-color="yellow" border-style="solid" border-width=".6mm" height="17cm">
|
||||
<fo:table-column column-width="2.5cm"/>
|
||||
<fo:table-column column-width="11.5cm"/>
|
||||
<fo:table-column column-width="2.5cm"/>
|
||||
<fo:table-column column-width="2.5cm"/>
|
||||
<fo:table-body font-family="sans-serif" font-weight="normal" font-size="10pt">
|
||||
<fo:table-row line-height="12pt">
|
||||
<fo:table-cell border-width="1pt" border-color="green" border-style="solid" padding="1mm">
|
||||
<fo:block text-align="end">QUANTITY</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell border-width="1pt" border-color="red" border-style="solid" padding="1mm">
|
||||
<fo:block text-align="start">DESCRIPTION</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell border-color="blue" border-style="solid" padding="1mm">
|
||||
<fo:block text-align="center">RATE</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell border-color="orange" border-style="solid" padding="1mm">
|
||||
<fo:block text-align="center">AMOUNT</fo:block>
|
||||
</fo:table-cell>
|
||||
|
||||
</fo:table-row>
|
||||
<fo:table-row line-height="12pt">
|
||||
<fo:table-cell padding="2pt">
|
||||
<fo:block text-align="end">1</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell padding="2pt">
|
||||
<fo:block text-align="start">Wide Widget</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell padding="2pt">
|
||||
<fo:block text-align="end">$22.23</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell padding="2pt">
|
||||
<fo:block text-align="end">22.31</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row line-height="12pt">
|
||||
<fo:table-cell padding="2pt">
|
||||
<fo:block text-align="end">1</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell padding="2pt">
|
||||
<fo:block text-align="start">Widget</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell padding="2pt">
|
||||
<fo:block text-align="end">$22.23</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell padding="2pt">
|
||||
<fo:block text-align="end">22.31</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row line-height="12pt">
|
||||
<fo:table-cell padding="2pt">
|
||||
<fo:block text-align="end">3</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell padding="2pt">
|
||||
<fo:block text-align="start">Nuts</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell padding="2pt">
|
||||
<fo:block text-align="end">$12.00</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell padding="2pt">
|
||||
<fo:block text-align="end">36.00</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
</fo:table-body>
|
||||
</fo:table>
|
||||
</fo:block-container>
|
||||
<fo:block-container border-color="black" border-style="solid" border-width="0.5mm" height="1cm" width="13.31cm" top="26.5cm" left="0cm" padding="1mm" position="absolute">
|
||||
<fo:block text-align="start" line-height="15pt" font-family="sans-serif" font-size="12pt">Please remit to the above address</fo:block>
|
||||
</fo:block-container>
|
||||
<fo:block-container border-color="black" border-style="solid" border-width="0.5mm" height="1cm" width="2.5cm" top="26.5cm" left="13.56cm" padding="1mm" position="absolute">
|
||||
<fo:block text-align="start" space-after.optimum="3pt" line-height="25pt" font-family="sans-serif" font-size="22pt">Total</fo:block>
|
||||
</fo:block-container>
|
||||
<fo:block-container border-color="black" border-style="solid" border-width="0.5mm" height="1cm" width="2.5cm" top="26.5cm" left="16.31cm" padding="1mm" position="absolute">
|
||||
<fo:block text-align="start" space-after.optimum="3pt" line-height="15pt" font-family="sans-serif" font-size="10pt">$3.00</fo:block>
|
||||
</fo:block-container>
|
||||
</fo:flow>
|
||||
</fo:page-sequence>
|
||||
</fo:root>
|
||||
@@ -0,0 +1,145 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
|
||||
|
||||
<!-- defines page layout -->
|
||||
<fo:layout-master-set>
|
||||
<fo:simple-page-master master-name="first"
|
||||
page-height="29.7cm" page-width="21cm"
|
||||
margin-top="1cm"
|
||||
margin-bottom="2cm"
|
||||
margin-left="2.5cm"
|
||||
margin-right="2.5cm">
|
||||
<fo:region-body margin-top="3cm" margin-bottom="1.5cm"/>
|
||||
<fo:region-before extent="3cm"/>
|
||||
<fo:region-after extent="1.5cm"/>
|
||||
</fo:simple-page-master>
|
||||
</fo:layout-master-set>
|
||||
<!-- end: defines page layout -->
|
||||
|
||||
<!-- actual layout -->
|
||||
<fo:page-sequence master-reference="first">
|
||||
|
||||
<!-- text body -->
|
||||
<fo:flow flow-name="xsl-region-body">
|
||||
|
||||
<!-- Normal text -->
|
||||
<fo:block text-align="center">0. Normal text without link
|
||||
</fo:block>
|
||||
|
||||
|
||||
<!-- Normal text -->
|
||||
<fo:block text-align="center"
|
||||
font-family="serif">1. <fo:basic-link external-destination="normal.pdf">normal.pdf</fo:basic-link>
|
||||
</fo:block>
|
||||
|
||||
<!-- Normal text -->
|
||||
<fo:block text-align="center">---</fo:block>
|
||||
|
||||
<!-- Normal text -->
|
||||
<fo:block text-align="center">
|
||||
2. A one line example (text-align='start'): <fo:basic-link external-destination="normal.pdf">normal.pdf</fo:basic-link>
|
||||
</fo:block>
|
||||
|
||||
<!-- Normal text -->
|
||||
<fo:block text-align="center">---</fo:block>
|
||||
|
||||
<!-- Normal text -->
|
||||
<fo:block text-align="start" hyphenate="true" language="en">
|
||||
3. A multiline text (text-align='start'). The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to
|
||||
enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML
|
||||
has been designed for ease of implementation and for interoperability with both SGML and HTML. For further information
|
||||
go to <fo:basic-link external-destination="normal.pdf">normal.pdf</fo:basic-link>
|
||||
</fo:block>
|
||||
|
||||
<!-- Normal text -->
|
||||
<fo:block text-align="center">---</fo:block>
|
||||
|
||||
<!-- Normal text -->
|
||||
<fo:block text-align="center">
|
||||
4. A multiline text (text-align='centered'). The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to
|
||||
enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML
|
||||
has been designed for ease of implementation and for interoperability with both SGML and HTML. For further information
|
||||
go to <fo:basic-link external-destination="normal.pdf">normal.pdf</fo:basic-link>
|
||||
</fo:block>
|
||||
|
||||
<!-- Normal text -->
|
||||
<fo:block text-align="center">---</fo:block>
|
||||
|
||||
<!-- Normal text -->
|
||||
<fo:block text-align="end">
|
||||
5. A multiline text (text-align='end'). The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to
|
||||
enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML
|
||||
has been designed for ease of implementation and for interoperability with both SGML and HTML. For further information
|
||||
go to <fo:basic-link external-destination="normal.pdf">normal.pdf</fo:basic-link>
|
||||
</fo:block>
|
||||
|
||||
<!-- Normal text -->
|
||||
<fo:block text-align="center">---</fo:block>
|
||||
|
||||
<!-- Normal text -->
|
||||
<fo:block text-align="justify" hyphenate="true" language="en">
|
||||
6. A multiline text (text-align='justify'). The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to
|
||||
enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML
|
||||
has been designed for ease of implementation and for interoperability with both SGML and HTML. For further information
|
||||
go to <fo:basic-link external-destination="normal.pdf">normal.pdf</fo:basic-link>
|
||||
</fo:block>
|
||||
|
||||
<!-- Normal text -->
|
||||
<fo:block text-align="center">---</fo:block>
|
||||
|
||||
<!-- Normal text -->
|
||||
<fo:block text-align="start"
|
||||
space-before.optimum="6pt"
|
||||
line-height="24pt"
|
||||
font-family="serif"
|
||||
padding-top="3pt"
|
||||
>
|
||||
7. A multiline text (text-align='start', space-before.optimum=6pt, font-family=serif padding-top="3pt"). The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to
|
||||
enable <fo:basic-link external-destination="normal.pdf">generic</fo:basic-link> SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML
|
||||
has been designed for ease of implementation and for interoperability with both SGML and HTML. For further information
|
||||
go to <fo:basic-link external-destination="normal.pdf">normal.pdf</fo:basic-link>
|
||||
</fo:block>
|
||||
|
||||
<!-- Normal text -->
|
||||
<fo:block text-align="start"
|
||||
space-before.optimum="6pt"
|
||||
line-height="24pt"
|
||||
font-family="serif"
|
||||
padding-top="3pt"
|
||||
>
|
||||
8. A multiline text (text-align='start', space-before.optimum=6pt, font-family=serif, padding-top="3pt"). The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to
|
||||
enable <fo:basic-link external-destination="normal.pdf">generic</fo:basic-link> SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML
|
||||
has been designed for ease of implementation and for interoperability with both SGML and HTML. For further information
|
||||
go to <fo:basic-link external-destination="normal.pdf">normal.pdf</fo:basic-link>
|
||||
</fo:block>
|
||||
|
||||
|
||||
<!-- Normal text -->
|
||||
<!-- <fo:block text-align="start"
|
||||
space-before.optimum="6pt"
|
||||
line-height="24pt"
|
||||
font-family="serif"
|
||||
padding-top="3pt"
|
||||
>
|
||||
8. A multiline text (text-align='start', space-before.optimum=6pt, font-family=serif, padding-top="3pt"). The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to
|
||||
enable <fo:basic-link external-destination="normal.pdf">generic</fo:basic-link> SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML
|
||||
has been designed for ease of implementation and for interoperability with both SGML and HTML. For further information
|
||||
go to <fo:basic-link external-destination="normal.pdf">normal.pdf</fo:basic-link>
|
||||
</fo:block>
|
||||
-->
|
||||
<!-- Normal text -->
|
||||
<fo:block text-align="start"
|
||||
space-before.optimum="6pt"
|
||||
line-height="24pt"
|
||||
font-family="serif"
|
||||
padding-top="3pt"
|
||||
>
|
||||
9. Linking to a specific page of an external:
|
||||
<fo:basic-link external-destination="extensive.pdf#page=1">extensive.pdf, Page 2</fo:basic-link>.
|
||||
</fo:block>
|
||||
|
||||
|
||||
</fo:flow>
|
||||
</fo:page-sequence>
|
||||
</fo:root>
|
||||
@@ -0,0 +1,149 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
|
||||
<!-- example for a simple fo file. At the beginning the page layout is set.
|
||||
Below fo:root there is always
|
||||
- a single fo:layout-master-set which defines one or more page layouts
|
||||
- an optional fo:declarations,
|
||||
- and a sequence of one or more fo:page-sequences containing the text and formatting instructions -->
|
||||
|
||||
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
|
||||
|
||||
<fo:layout-master-set>
|
||||
<!-- fo:layout-master-set defines in its children the page layout:
|
||||
the pagination and layout specifications
|
||||
- page-masters: have the role of describing the intended subdivisions
|
||||
of a page and the geometry of these subdivisions
|
||||
- page-sequence-masters: have the role of describing the sequence
|
||||
of page-masters that will be used to generate
|
||||
pages during the formatting of an fo:page-sequence
|
||||
|
||||
-->
|
||||
|
||||
<!-- layout for the first page -->
|
||||
<fo:simple-page-master master-name="first"
|
||||
page-height="21cm"
|
||||
page-width="29.7cm"
|
||||
margin-top="1cm"
|
||||
margin-bottom="2cm"
|
||||
margin-left="2.5cm"
|
||||
margin-right="2.5cm">
|
||||
<fo:region-body margin-top="3cm" margin-bottom="1.5cm"/>
|
||||
<fo:region-before extent="3cm"/>
|
||||
<fo:region-after extent="1.5cm"/>
|
||||
</fo:simple-page-master>
|
||||
|
||||
<!-- layout for the other pages -->
|
||||
<fo:simple-page-master master-name="rest"
|
||||
page-height="29.7cm"
|
||||
page-width="21cm"
|
||||
margin-top="1cm"
|
||||
margin-bottom="2cm"
|
||||
margin-left="2.5cm"
|
||||
margin-right="2.5cm">
|
||||
<fo:region-body margin-top="2.5cm" margin-bottom="1.5cm"/>
|
||||
<fo:region-before extent="2.5cm"/>
|
||||
<fo:region-after extent="1.5cm"/>
|
||||
</fo:simple-page-master>
|
||||
|
||||
<fo:page-sequence-master master-name="basicPSM" >
|
||||
<fo:repeatable-page-master-alternatives>
|
||||
<fo:conditional-page-master-reference master-reference="first"
|
||||
page-position="first" />
|
||||
<fo:conditional-page-master-reference master-reference="rest"
|
||||
page-position="rest" />
|
||||
<!-- recommended fallback procedure -->
|
||||
<fo:conditional-page-master-reference master-reference="rest" />
|
||||
</fo:repeatable-page-master-alternatives>
|
||||
</fo:page-sequence-master>
|
||||
|
||||
</fo:layout-master-set>
|
||||
<!-- end: defines page layout -->
|
||||
|
||||
<!-- actual layout -->
|
||||
<fo:page-sequence master-reference="basicPSM">
|
||||
|
||||
<!-- header -->
|
||||
<fo:static-content flow-name="xsl-region-before">
|
||||
<fo:block text-align="end"
|
||||
font-size="10pt"
|
||||
font-family="serif"
|
||||
line-height="14pt" >
|
||||
XML Recommendation - p. <fo:page-number/>
|
||||
</fo:block>
|
||||
</fo:static-content>
|
||||
|
||||
<fo:flow flow-name="xsl-region-body">
|
||||
|
||||
<!-- defines text title level 1-->
|
||||
<fo:block font-size="18pt"
|
||||
font-family="sans-serif"
|
||||
line-height="24pt"
|
||||
space-after.optimum="15pt"
|
||||
background-color="blue"
|
||||
color="white"
|
||||
text-align="center"
|
||||
padding-top="3pt"
|
||||
font-variant="small-caps">
|
||||
Extensible Markup Language (XML) 1.0
|
||||
</fo:block>
|
||||
|
||||
<!-- defines text title level 2-->
|
||||
<fo:block font-size="16pt"
|
||||
font-family="sans-serif"
|
||||
line-height="20pt"
|
||||
space-before.optimum="10pt"
|
||||
space-after.optimum="10pt"
|
||||
text-align="start"
|
||||
padding-top="3pt">
|
||||
Abstract
|
||||
</fo:block>
|
||||
|
||||
<!-- Normal text -->
|
||||
<fo:block font-size="12pt"
|
||||
font-family="sans-serif"
|
||||
line-height="15pt"
|
||||
space-after.optimum="3pt"
|
||||
text-align="start">
|
||||
The <fo:inline font-variant="small-caps">Extensible Markup Language (XML)</fo:inline> is a subset of SGML that is completely described in this document. Its goal is to
|
||||
enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML
|
||||
has been designed for ease of implementation and for interoperability with both SGML and HTML.
|
||||
</fo:block>
|
||||
|
||||
<!-- defines text title level 2-->
|
||||
<fo:block font-size="16pt"
|
||||
font-family="sans-serif"
|
||||
line-height="20pt"
|
||||
space-before.optimum="10pt"
|
||||
space-after.optimum="10pt"
|
||||
text-align="start"
|
||||
padding-top="3pt">
|
||||
Status of this document
|
||||
</fo:block>
|
||||
|
||||
<!-- Normal text -->
|
||||
<fo:block font-size="12pt"
|
||||
font-family="sans-serif"
|
||||
line-height="15pt"
|
||||
space-after.optimum="3pt"
|
||||
text-align="start">
|
||||
This document has been reviewed by W3C Members and other interested parties and has been endorsed by the Director as a
|
||||
W3C Recommendation. It is a stable document and may be used as reference material or cited as a normative reference from
|
||||
another document. W3C's role in making the Recommendation is to draw attention to the specification and to promote its
|
||||
widespread deployment. This enhances the functionality and interoperability of the Web.
|
||||
</fo:block>
|
||||
|
||||
<!-- Normal text -->
|
||||
<fo:block font-size="12pt"
|
||||
font-family="sans-serif"
|
||||
line-height="15pt"
|
||||
space-after.optimum="3pt"
|
||||
text-align="start">
|
||||
This document specifies a syntax created by subsetting an existing, widely used international text processing standard
|
||||
(Standard Generalized Markup Language, ISO 8879:1986(E) as amended and corrected) for use on the World Wide Web. It
|
||||
is a product of the W3C XML Activity, details of which can be found at http://www.w3.org/XML. A list of current W3C
|
||||
Recommendations and other technical documents can be found at http://www.w3.org/TR.
|
||||
</fo:block>
|
||||
</fo:flow>
|
||||
</fo:page-sequence>
|
||||
</fo:root>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,99 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!-- example for a simple fo file. At the beginning the page layout is set.
|
||||
Below fo:root there is always
|
||||
- a single fo:layout-master-set which defines one or more page layouts
|
||||
- an optional fo:declarations
|
||||
- and a sequence of one or more fo:page-sequences containing the text and formatting instructions
|
||||
-->
|
||||
|
||||
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
|
||||
|
||||
<fo:layout-master-set>
|
||||
<!-- fo:layout-master-set defines in its children the page layout:
|
||||
the pagination and layout specifications
|
||||
- page-masters: have the role of describing the intended subdivisions
|
||||
of a page and the geometry of these subdivisions
|
||||
In this case there is only a simple-page-master which defines the
|
||||
layout for all pages of the text
|
||||
-->
|
||||
<!-- layout information -->
|
||||
<fo:simple-page-master master-name="simple"
|
||||
page-height="29.7cm"
|
||||
page-width="21cm"
|
||||
margin-top="1cm"
|
||||
margin-bottom="2cm"
|
||||
margin-left="2.5cm"
|
||||
margin-right="2.5cm">
|
||||
<fo:region-body margin-top="3cm" margin-bottom="1.5cm"/>
|
||||
<fo:region-before extent="3cm"/>
|
||||
<fo:region-after extent="1.5cm"/>
|
||||
</fo:simple-page-master>
|
||||
</fo:layout-master-set>
|
||||
<!-- end: defines page layout -->
|
||||
|
||||
|
||||
<!-- start page-sequence
|
||||
here comes the text (contained in flow objects)
|
||||
the page-sequence can contain different fo:flows
|
||||
the attribute value of master-name refers to the page layout
|
||||
which is to be used to layout the text contained in this
|
||||
page-sequence-->
|
||||
<fo:page-sequence master-reference="simple">
|
||||
|
||||
<!-- start fo:flow
|
||||
each flow is targeted
|
||||
at one (and only one) of the following:
|
||||
xsl-region-body (usually: normal text)
|
||||
xsl-region-before (usually: header)
|
||||
xsl-region-after (usually: footer)
|
||||
xsl-region-start (usually: left margin)
|
||||
xsl-region-end (usually: right margin)
|
||||
['usually' applies here to languages with left-right and top-down
|
||||
writing direction like English]
|
||||
in this case there is only one target: xsl-region-body
|
||||
-->
|
||||
<fo:flow flow-name="xsl-region-body">
|
||||
|
||||
<!-- each paragraph is encapsulated in a block element
|
||||
the attributes of the block define
|
||||
font-family and size, line-heigth etc. -->
|
||||
|
||||
<!-- this defines a title -->
|
||||
<fo:block font-size="18pt"
|
||||
font-family="sans-serif"
|
||||
line-height="24pt"
|
||||
space-after.optimum="15pt"
|
||||
background-color="blue"
|
||||
color="white"
|
||||
text-align="center"
|
||||
padding-top="3pt">
|
||||
Extensible Markup Language (XML) 1.0
|
||||
</fo:block>
|
||||
|
||||
|
||||
<!-- this defines normal text -->
|
||||
<fo:block font-size="12pt"
|
||||
font-family="sans-serif"
|
||||
line-height="15pt"
|
||||
space-after.optimum="3pt"
|
||||
text-align="justify">
|
||||
The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to
|
||||
enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML
|
||||
has been designed for ease of implementation and for interoperability with both SGML and HTML.
|
||||
</fo:block>
|
||||
|
||||
<!-- this defines normal text -->
|
||||
<fo:block font-size="12pt"
|
||||
font-family="sans-serif"
|
||||
line-height="15pt"
|
||||
space-after.optimum="3pt"
|
||||
text-align="justify">
|
||||
The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to
|
||||
enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML
|
||||
has been designed for ease of implementation and for interoperability with both SGML and HTML.
|
||||
</fo:block>
|
||||
|
||||
</fo:flow> <!-- closes the flow element-->
|
||||
</fo:page-sequence> <!-- closes the page-sequence -->
|
||||
</fo:root>
|
||||
@@ -0,0 +1,504 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
|
||||
|
||||
|
||||
<!-- defines the layout master -->
|
||||
<fo:layout-master-set>
|
||||
<fo:simple-page-master master-name="first"
|
||||
page-height="29.7cm"
|
||||
page-width="21cm"
|
||||
margin-top="1cm"
|
||||
margin-bottom="2cm"
|
||||
margin-left="2.5cm"
|
||||
margin-right="2.5cm">
|
||||
<fo:region-body margin-top="3cm" margin-bottom="1.5cm"/>
|
||||
<fo:region-before extent="3cm"/>
|
||||
<fo:region-after extent="1.5cm"/>
|
||||
</fo:simple-page-master>
|
||||
</fo:layout-master-set>
|
||||
|
||||
<!-- starts actual layout -->
|
||||
<fo:page-sequence master-reference="first">
|
||||
|
||||
<fo:flow flow-name="xsl-region-body">
|
||||
|
||||
<!-- this defines a title level 1-->
|
||||
<fo:block font-size="18pt"
|
||||
font-family="sans-serif"
|
||||
line-height="24pt"
|
||||
space-after.optimum="15pt"
|
||||
background-color="blue"
|
||||
color="white"
|
||||
text-align="center"
|
||||
padding-top="3pt">
|
||||
How to use table elements
|
||||
</fo:block>
|
||||
|
||||
<!-- this defines a title level 2-->
|
||||
<fo:block font-size="16pt"
|
||||
font-family="sans-serif"
|
||||
space-after.optimum="15pt"
|
||||
text-align="center">
|
||||
A simple table, 3 columns, 4 rows
|
||||
</fo:block>
|
||||
|
||||
<!-- normal text -->
|
||||
<fo:block text-align="start">this is normal text. this is normal text. this is normal text.
|
||||
this is normal text. this is normal text. this is normal text.
|
||||
</fo:block>
|
||||
|
||||
<!-- table start -->
|
||||
<fo:table table-layout="fixed">
|
||||
<fo:table-column column-width="50mm"/>
|
||||
<fo:table-column column-width="50mm"/>
|
||||
<fo:table-column column-width="50mm"/>
|
||||
<fo:table-body>
|
||||
<fo:table-row>
|
||||
<fo:table-cell ><fo:block>good</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>bad</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>ugly</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row>
|
||||
<fo:table-cell ><fo:block>nice</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>dice</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>vice</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row>
|
||||
<fo:table-cell ><fo:block>literature</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>music</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>art</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row>
|
||||
<fo:table-cell ><fo:block>java</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>perl</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>python</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
</fo:table-body>
|
||||
</fo:table>
|
||||
<!-- table end -->
|
||||
|
||||
<!-- normal text -->
|
||||
<fo:block text-align="start">this is normal text. this is normal text. this is normal text.
|
||||
this is normal text. this is normal text. this is normal text.
|
||||
</fo:block>
|
||||
|
||||
<!-- **************************** NEW PAGE ************************************* -->
|
||||
|
||||
<!-- this defines a title level 2-->
|
||||
<fo:block font-size="16pt"
|
||||
font-family="sans-serif"
|
||||
space-after.optimum="15pt"
|
||||
text-align="center"
|
||||
break-before="page">
|
||||
A table with borders
|
||||
</fo:block>
|
||||
|
||||
|
||||
<!-- normal text -->
|
||||
<fo:block text-align="start">this is normal text. this is normal text. this is normal text.
|
||||
this is normal text. this is normal text. this is normal text.
|
||||
</fo:block>
|
||||
|
||||
|
||||
<!-- table start -->
|
||||
<fo:table table-layout="fixed" border-width="0.5mm" border-style="solid" background-color="yellow">
|
||||
<fo:table-column column-width="50mm"/>
|
||||
<fo:table-column column-width="50mm"/>
|
||||
<fo:table-column column-width="50mm"/>
|
||||
<fo:table-body>
|
||||
<fo:table-row>
|
||||
<fo:table-cell ><fo:block>good</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>bad</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>ugly</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row>
|
||||
<fo:table-cell ><fo:block>nice</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>dice</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>vice</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row>
|
||||
<fo:table-cell ><fo:block>literature</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>music</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>art</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row>
|
||||
<fo:table-cell ><fo:block>java</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>perl</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>python</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
</fo:table-body>
|
||||
</fo:table>
|
||||
<!-- table end -->
|
||||
|
||||
<!-- normal text -->
|
||||
<fo:block text-align="start">this is normal text. this is normal text. this is normal text.
|
||||
this is normal text. this is normal text. this is normal text.
|
||||
</fo:block>
|
||||
|
||||
|
||||
<!-- **************************** NEW PAGE ************************************* -->
|
||||
|
||||
<!-- this defines a title level 2-->
|
||||
<fo:block font-size="16pt"
|
||||
font-family="sans-serif"
|
||||
space-after.optimum="15pt"
|
||||
text-align="center"
|
||||
break-before="page">
|
||||
A table with thick borders
|
||||
</fo:block>
|
||||
|
||||
|
||||
<!-- normal text -->
|
||||
<fo:block text-align="start">this is normal text. this is normal text. this is normal text.
|
||||
this is normal text. this is normal text. this is normal text.
|
||||
</fo:block>
|
||||
|
||||
|
||||
<!-- table start -->
|
||||
<fo:table table-layout="fixed" border-width="3mm" border-style="solid" background-color="yellow">
|
||||
<fo:table-column column-width="50mm"/>
|
||||
<fo:table-column column-width="50mm"/>
|
||||
<fo:table-column column-width="50mm"/>
|
||||
<fo:table-body>
|
||||
<fo:table-row>
|
||||
<fo:table-cell ><fo:block>good</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>bad</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>ugly</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row>
|
||||
<fo:table-cell ><fo:block>nice</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>dice</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>vice</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row>
|
||||
<fo:table-cell ><fo:block>literature</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>music</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>art</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row>
|
||||
<fo:table-cell ><fo:block>java</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>perl</fo:block></fo:table-cell>
|
||||
<fo:table-cell ><fo:block>python</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
</fo:table-body>
|
||||
</fo:table>
|
||||
<!-- table end -->
|
||||
|
||||
<!-- normal text -->
|
||||
<fo:block text-align="start" start-indent="-3mm">this is normal text. this is normal text. this is normal text.
|
||||
this is normal text. this is normal text. this is normal text.
|
||||
</fo:block>
|
||||
|
||||
|
||||
<!-- **************************** NEW PAGE ************************************* -->
|
||||
|
||||
<!-- this defines a title level 2-->
|
||||
<fo:block font-size="16pt"
|
||||
font-family="sans-serif"
|
||||
space-after.optimum="15pt"
|
||||
text-align="center"
|
||||
break-before="page">
|
||||
A table with borders around the cells
|
||||
</fo:block>
|
||||
|
||||
|
||||
<!-- normal text -->
|
||||
<fo:block text-align="start">this is normal text. this is normal text. this is normal text.
|
||||
this is normal text. this is normal text. this is normal text.
|
||||
</fo:block>
|
||||
|
||||
|
||||
<!-- table start -->
|
||||
<fo:table table-layout="fixed" border-collapse="separate">
|
||||
<fo:table-column column-width="50mm"/>
|
||||
<fo:table-column column-width="50mm"/>
|
||||
<fo:table-column column-width="50mm"/>
|
||||
<fo:table-body>
|
||||
<fo:table-row>
|
||||
<fo:table-cell border-width="0.5mm" border-style="solid" background-color="yellow"><fo:block>good</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="0.5mm" border-style="solid" background-color="yellow"><fo:block>bad</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="0.5mm" border-style="solid" background-color="yellow"><fo:block>ugly</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row>
|
||||
<fo:table-cell border-width="0.5mm" border-style="solid" background-color="yellow"><fo:block>nice</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="0.5mm" border-style="solid" background-color="yellow"><fo:block>dice</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="0.5mm" border-style="solid" background-color="yellow"><fo:block>vice</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row>
|
||||
<fo:table-cell border-width="0.5mm" border-style="solid" background-color="yellow"><fo:block>literature</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="0.5mm" border-style="solid" background-color="yellow"><fo:block>music</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="0.5mm" border-style="solid" background-color="yellow"><fo:block>art</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row>
|
||||
<fo:table-cell border-width="0.5mm" border-style="solid" background-color="yellow"><fo:block>java</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="0.5mm" border-style="solid" background-color="yellow"><fo:block>perl</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="0.5mm" border-style="solid" background-color="yellow"><fo:block>python</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
</fo:table-body>
|
||||
</fo:table>
|
||||
<!-- table end -->
|
||||
|
||||
<!-- normal text -->
|
||||
<fo:block text-align="start">this is normal text. this is normal text. this is normal text.
|
||||
this is normal text. this is normal text. this is normal text.
|
||||
</fo:block>
|
||||
|
||||
<!-- **************************** NEW PAGE ************************************* -->
|
||||
|
||||
<!-- this defines a title level 2-->
|
||||
<fo:block font-size="16pt"
|
||||
font-family="sans-serif"
|
||||
space-after.optimum="15pt"
|
||||
text-align="center"
|
||||
break-before="page">
|
||||
2 tables with thick borders around the cells
|
||||
</fo:block>
|
||||
|
||||
|
||||
<!-- normal text -->
|
||||
<fo:block text-align="start">this is normal text. this is normal text. this is normal text.
|
||||
this is normal text. this is normal text. this is normal text.
|
||||
</fo:block>
|
||||
|
||||
|
||||
<!-- table start -->
|
||||
<fo:table table-layout="fixed" border-collapse="separate">
|
||||
<fo:table-column column-width="50mm"/>
|
||||
<fo:table-column column-width="50mm"/>
|
||||
<fo:table-column column-width="50mm"/>
|
||||
<fo:table-body>
|
||||
<fo:table-row>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>good</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>bad</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>ugly</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>nice</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>dice</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>vice</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>literature</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>music</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>art</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>java</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>perl</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>python</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
</fo:table-body>
|
||||
</fo:table>
|
||||
<!-- table end -->
|
||||
|
||||
<!-- normal text -->
|
||||
<fo:block text-align="start">this is normal text. this is normal text. this is normal text.
|
||||
this is normal text. this is normal text. this is normal text.
|
||||
</fo:block>
|
||||
|
||||
<!-- table start -->
|
||||
<fo:table table-layout="fixed" border-collapse="separate">
|
||||
<fo:table-column column-width="50mm"/>
|
||||
<fo:table-column column-width="50mm"/>
|
||||
<fo:table-column column-width="50mm"/>
|
||||
<fo:table-body>
|
||||
<fo:table-row>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>good</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>bad</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>ugly</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>nice</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>dice</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>vice</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>literature</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>music</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>art</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>java</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>perl</fo:block></fo:table-cell>
|
||||
<fo:table-cell border-width="2mm" border-style="solid" background-color="yellow"><fo:block>python</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
</fo:table-body>
|
||||
</fo:table>
|
||||
<!-- table end -->
|
||||
|
||||
<!-- normal text -->
|
||||
<fo:block text-align="start">this is normal text. this is normal text. this is normal text.
|
||||
this is normal text. this is normal text. this is normal text.
|
||||
</fo:block>
|
||||
|
||||
<!-- **************************** NEW PAGE ************************************* -->
|
||||
|
||||
<!-- this defines a title level 2-->
|
||||
<fo:block font-size="16pt"
|
||||
font-family="sans-serif"
|
||||
space-after.optimum="15pt"
|
||||
text-align="center"
|
||||
break-before="page">
|
||||
5 tables with borders
|
||||
</fo:block>
|
||||
|
||||
|
||||
<!-- normal text -->
|
||||
<fo:block text-align="start">this is normal text. this is normal text. this is normal text.
|
||||
this is normal text. this is normal text. this is normal text.
|
||||
</fo:block>
|
||||
|
||||
|
||||
<fo:table table-layout="fixed" border-width="1.5mm" border-style="solid" background-color="rgb(100,210,250)">
|
||||
<fo:table-column column-width="150mm"/>
|
||||
<fo:table-body>
|
||||
<fo:table-row>
|
||||
<fo:table-cell><fo:block>bad</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
</fo:table-body>
|
||||
</fo:table>
|
||||
|
||||
|
||||
<fo:table table-layout="fixed" border-width="1.5mm" border-style="solid" background-color="rgb(100,210,250)" >
|
||||
<fo:table-column column-width="150mm"/>
|
||||
<fo:table-body>
|
||||
<fo:table-row>
|
||||
<fo:table-cell><fo:block>bad</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
</fo:table-body>
|
||||
</fo:table>
|
||||
|
||||
|
||||
<fo:table table-layout="fixed" border-width="1.5mm" border-style="solid" background-color="rgb(100,210,250)" >
|
||||
<fo:table-column column-width="150mm"/>
|
||||
<fo:table-body>
|
||||
<fo:table-row>
|
||||
<fo:table-cell><fo:block>bad</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
</fo:table-body>
|
||||
</fo:table>
|
||||
|
||||
<fo:table table-layout="fixed" border-width="1.5mm" border-style="solid" background-color="rgb(100,210,250)">
|
||||
<fo:table-column column-width="150mm"/>
|
||||
<fo:table-body>
|
||||
<fo:table-row>
|
||||
<fo:table-cell><fo:block>bad</fo:block></fo:table-cell>
|
||||
</fo:table-row>
|
||||
</fo:table-body>
|
||||
</fo:table>
|
||||
|
||||
<!-- normal text -->
|
||||
<fo:block text-align="start">this is normal text. this is normal text. this is normal text.
|
||||
this is normal text. this is normal text. this is normal text.
|
||||
</fo:block>
|
||||
|
||||
|
||||
<!-- **************************** NEW PAGE ************************************* -->
|
||||
<fo:block font-size="16pt"
|
||||
font-family="sans-serif"
|
||||
line-height="20pt"
|
||||
space-after.optimum="3pt"
|
||||
break-before="page"
|
||||
text-align="justify">
|
||||
A Contents table
|
||||
</fo:block>
|
||||
|
||||
<!-- Here starts the table -->
|
||||
<fo:table table-layout="fixed">
|
||||
<fo:table-column column-width="1cm"/>
|
||||
<fo:table-column column-width="15cm"/>
|
||||
<fo:table-body font-size="10pt" font-family="sans-serif">
|
||||
<fo:table-row line-height="12pt">
|
||||
<fo:table-cell>
|
||||
<fo:block text-align="end">A) </fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell>
|
||||
<fo:block text-align="start">What is FOP?</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row line-height="12pt">
|
||||
<fo:table-cell>
|
||||
<fo:block text-align="end">B) </fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell>
|
||||
<fo:block text-align="start">Downloading FOP</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row line-height="12pt">
|
||||
<fo:table-cell>
|
||||
<fo:block text-align="end">C) </fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell>
|
||||
<fo:block text-align="start">Running FOP</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row line-height="12pt">
|
||||
<fo:table-cell>
|
||||
<fo:block text-align="end">D) </fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell>
|
||||
<fo:block text-align="start">Embedding FOP </fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row line-height="12pt">
|
||||
<fo:table-cell>
|
||||
<fo:block text-align="end">E) </fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell>
|
||||
<fo:block text-align="start">What's Implemented?</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row line-height="12pt">
|
||||
<fo:table-cell>
|
||||
<fo:block text-align="end">F) </fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell>
|
||||
<fo:block text-align="start">Limitations</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row line-height="12pt">
|
||||
<fo:table-cell>
|
||||
<fo:block text-align="end">G) </fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell>
|
||||
<fo:block text-align="start">Bugs</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row line-height="12pt">
|
||||
<fo:table-cell>
|
||||
<fo:block text-align="end">H) </fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell>
|
||||
<fo:block text-align="start">Compiling FOP</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row line-height="12pt">
|
||||
<fo:table-cell>
|
||||
<fo:block text-align="end">I) </fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell>
|
||||
<fo:block text-align="start">Getting involved</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row line-height="12pt">
|
||||
<fo:table-cell>
|
||||
<fo:block text-align="end">J) </fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell>
|
||||
<fo:block text-align="start">FOP Relevant Specifications</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row line-height="12pt">
|
||||
<fo:table-cell>
|
||||
<fo:block text-align="end">K) </fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell>
|
||||
<fo:block text-align="start">Licence</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
</fo:table-body>
|
||||
</fo:table>
|
||||
</fo:flow>
|
||||
</fo:page-sequence>
|
||||
</fo:root>
|
||||
@@ -0,0 +1,33 @@
|
||||
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" >
|
||||
<fo:layout-master-set>
|
||||
<fo:simple-page-master master-name="simple">
|
||||
<fo:region-body/>
|
||||
</fo:simple-page-master>
|
||||
</fo:layout-master-set>
|
||||
<fo:page-sequence master-reference="simple">
|
||||
<fo:flow flow-name="xsl-region-body">
|
||||
<fo:block>
|
||||
<fo:instream-foreign-object>
|
||||
<svg:svg width="50" height="50" xmlns:svg="http://www.w3.org/2000/svg" >
|
||||
<svg:circle cx="50" cy="30" r="30" style="fill:blue;"/>
|
||||
<svg:circle cx="100" cy="30" r="20" fill="none" stroke="red" stroke-width="2"/>
|
||||
</svg:svg>
|
||||
<svg:svg width="50" height="50" xmlns:svg="http://www.w3.org/2000/svg" >
|
||||
<svg:rect x="10" y="10" width="80" height="40" fill="blue"/>
|
||||
<svg:rect x="100" y="10" width="80" height="40" fill="none" stroke="green" rx="10"/>
|
||||
</svg:svg>
|
||||
<svg:svg width="50" height="50" xmlns:svg="http://www.w3.org/2000/svg" >
|
||||
<svg:ellipse cx="50" cy="50" rx="20" ry="10" fill="none" stroke="red" stroke-width="2"/>
|
||||
<svg:ellipse cx="100" cy="50" rx="20" ry="10" fill="black" stroke="yellow" stroke-width="2"/>
|
||||
</svg:svg>
|
||||
<svg:svg width="50" height="50" xmlns:svg="http://www.w3.org/2000/svg" >
|
||||
<svg:line x1="0" y1="0" x2="50" y2="50" stroke="red" stroke-width="2"/>
|
||||
</svg:svg>
|
||||
<svg:svg width="50" height="50" xmlns:svg="http://www.w3.org/2000/svg" >
|
||||
<svg:polygon points="10,10 50,50 100,10" fill="green" stroke="red" stroke-width="2"/>
|
||||
</svg:svg>
|
||||
</fo:instream-foreign-object>
|
||||
</fo:block>
|
||||
</fo:flow>
|
||||
</fo:page-sequence>
|
||||
</fo:root>
|
||||
@@ -0,0 +1,21 @@
|
||||
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" >
|
||||
<fo:layout-master-set>
|
||||
<fo:simple-page-master master-name="simple">
|
||||
<fo:region-body/>
|
||||
</fo:simple-page-master>
|
||||
</fo:layout-master-set>
|
||||
<fo:page-sequence master-reference="simple">
|
||||
<fo:flow flow-name="xsl-region-body">
|
||||
<fo:block>
|
||||
<fo:instream-foreign-object>
|
||||
<svg:svg width="100pt" height="100pt" xmlns:svg="http://www.w3.org/2000/svg" >
|
||||
<svg:circle cx="50pt" cy="50pt" r="30pt" style="fill:blue;"/>
|
||||
</svg:svg>
|
||||
<svg:svg width="100pt" height="100pt" xmlns:svg="http://www.w3.org/2000/svg" >
|
||||
<svg:circle cx="50pt" cy="50pt" r="30pt" style="fill:green;"/>
|
||||
</svg:svg>
|
||||
</fo:instream-foreign-object>
|
||||
</fo:block>
|
||||
</fo:flow>
|
||||
</fo:page-sequence>
|
||||
</fo:root>
|
||||
@@ -0,0 +1,58 @@
|
||||
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" >
|
||||
<fo:layout-master-set>
|
||||
<fo:simple-page-master master-name="simple">
|
||||
<fo:region-body/>
|
||||
</fo:simple-page-master>
|
||||
</fo:layout-master-set>
|
||||
<fo:page-sequence master-reference="simple">
|
||||
<fo:flow flow-name="xsl-region-body">
|
||||
<fo:block>
|
||||
<fo:instream-foreign-object>
|
||||
<svg:svg width="50" height="100" xmlns:svg="http://www.w3.org/2000/svg" >
|
||||
<svg:path d="M 0 0 L 100 0 L 50 100 z" fill="red" stroke="blue" stroke-width="3" />
|
||||
|
||||
</svg:svg>
|
||||
<svg:svg width="50" height="210" xmlns:svg="http://www.w3.org/2000/svg" >
|
||||
<svg:polyline class="Connect" points="100,0 100,100" />
|
||||
<svg:polyline class="Connect" points="250,0 250,200" />
|
||||
<svg:polyline class="Connect" points="400,100 400,200" />
|
||||
|
||||
<svg:path class="SamplePath" d="M100,100 C100,0 250,0 250,100
|
||||
S400,200 400,100" />
|
||||
|
||||
<svg:circle class="EndPoint" cx="100" cy="100" r="10" />
|
||||
<svg:circle class="EndPoint" cx="250" cy="100" r="10" />
|
||||
<svg:circle class="EndPoint" cx="400" cy="100" r="10" />
|
||||
<svg:circle class="CtlPoint" cx="100" cy="0" r="10" />
|
||||
<svg:circle class="CtlPoint" cx="250" cy="0" r="10" />
|
||||
<svg:circle class="CtlPoint" cx="400" cy="200" r="10" />
|
||||
<svg:circle class="AutoCtlPoint" cx="250" cy="200" r="9" />
|
||||
</svg:svg>
|
||||
<svg:svg width="50" height="300" xmlns:svg="http://www.w3.org/2000/svg" >
|
||||
<svg:path d="M200,150 Q250,0 300,150 T350,0"
|
||||
fill="none" stroke="red" stroke-width="5" />
|
||||
<svg:path d="M200,150 L250,0 L300,150
|
||||
L350,300 L400,150"
|
||||
fill="none" stroke="#888888" stroke-width="2" />
|
||||
<svg:g fill="#888888" >
|
||||
<svg:circle cx="250" cy="0" r="5"/>
|
||||
<svg:circle cx="400" cy="150" r="5"/>
|
||||
</svg:g>
|
||||
</svg:svg>
|
||||
<svg:svg width="50" height="50" xmlns:svg="http://www.w3.org/2000/svg" >
|
||||
<svg:path d="M100,100 h-50 a50,50 0 1,0 50,-50 z"
|
||||
fill="red" stroke="blue" stroke-width="5" />
|
||||
<svg:path d="M90,90 v-50 a50,50 0 0,0 -50,50 z"
|
||||
fill="yellow" stroke="blue" stroke-width="5" />
|
||||
<svg:path d="M100,250 l 50,-25
|
||||
a25,25 -30 0,1 50,-25 l 50,-25
|
||||
a25,50 -30 0,1 50,-25 l 50,-25
|
||||
a25,75 -30 0,1 50,-25 l 50,-25
|
||||
a25,100 -30 0,1 50,-25 l 50,-25"
|
||||
fill="none" stroke="red" stroke-width="5" />
|
||||
</svg:svg>
|
||||
</fo:instream-foreign-object>
|
||||
</fo:block>
|
||||
</fo:flow>
|
||||
</fo:page-sequence>
|
||||
</fo:root>
|
||||
@@ -0,0 +1,52 @@
|
||||
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" >
|
||||
<fo:layout-master-set>
|
||||
<fo:simple-page-master master-name="simple">
|
||||
<fo:region-body/>
|
||||
</fo:simple-page-master>
|
||||
</fo:layout-master-set>
|
||||
<fo:page-sequence master-reference="simple">
|
||||
<fo:flow flow-name="xsl-region-body">
|
||||
<fo:block>
|
||||
<fo:instream-foreign-object>
|
||||
<svg:svg width="200" height="300" xmlns:svg="http://www.w3.org/2000/svg" >
|
||||
<svg:g fill="none" stroke="black" stroke-width="3" >
|
||||
<!-- Draw the axes of the original coordinate system -->
|
||||
<svg:line x1="0" y1="1.5" x2="400" y2="1.5" />
|
||||
<svg:line x1="1.5" y1="0" x2="1.5" y2="150" />
|
||||
</svg:g>
|
||||
<!-- First, a translate -->
|
||||
<svg:g transform="translate(50,50)">
|
||||
<svg:g fill="none" stroke="red" stroke-width="1" >
|
||||
<svg:line x1="0" y1="0" x2="5" y2="0" />
|
||||
<svg:line x1="0" y1="0" x2="0" y2="5" />
|
||||
</svg:g>
|
||||
<svg:text x="0" y="0" font-size="16" font-family="Verdana" >
|
||||
....Translate(1)
|
||||
</svg:text>
|
||||
<!-- Second, a rotate -->
|
||||
<svg:g transform="rotate(-45)">
|
||||
<svg:g fill="none" stroke="green" stroke-width="1" >
|
||||
<svg:line x1="0" y1="0" x2="5" y2="0" />
|
||||
<svg:line x1="0" y1="0" x2="0" y2="5" />
|
||||
</svg:g>
|
||||
<svg:text x="0" y="0" font-size="16" font-family="Verdana" >
|
||||
....Rotate(2)
|
||||
</svg:text>
|
||||
<!-- Third, another translate -->
|
||||
<svg:g transform="translate(20,20)">
|
||||
<svg:g fill="none" stroke="blue" stroke-width="1" >
|
||||
<svg:line x1="0" y1="0" x2="5" y2="0" />
|
||||
<svg:line x1="0" y1="0" x2="0" y2="5" />
|
||||
</svg:g>
|
||||
<svg:text x="0" y="0" font-size="16" font-family="Verdana" >
|
||||
....Translate(3)
|
||||
</svg:text>
|
||||
</svg:g>
|
||||
</svg:g>
|
||||
</svg:g>
|
||||
</svg:svg>
|
||||
</fo:instream-foreign-object>
|
||||
</fo:block>
|
||||
</fo:flow>
|
||||
</fo:page-sequence>
|
||||
</fo:root>
|
||||
@@ -0,0 +1,70 @@
|
||||
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
|
||||
<fo:page-sequence>
|
||||
<fo:flow flow-name="xsl-region-body">
|
||||
<fo:block>
|
||||
dasdsad dfsfsdfsf fdsfdsfs fsd fsd f sdfsd fsdfsdf sdfsdf dsafsdfs dfsdf sdfsd fsdfsdf sdfs dfsdfsd fsdfs dfsed
|
||||
</fo:block>
|
||||
<fo:block>
|
||||
xxxxxxxx
|
||||
</fo:block>
|
||||
<fo:table-and-caption>
|
||||
<fo:table>
|
||||
<fo:table-column column-width="25mm"/>
|
||||
<fo:table-column column-width="25mm"/>
|
||||
|
||||
<fo:table-header>
|
||||
<fo:table-row>
|
||||
<fo:table-cell>
|
||||
<fo:block
|
||||
border-top-style="dotted"
|
||||
border-left-style="solid"
|
||||
border-right-style="solid"
|
||||
border-top-color="red"
|
||||
border-left-color="rgb(255,255,0)"
|
||||
font-weight="bold">Car
|
||||
</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell>
|
||||
<fo:block font-weight="bold"
|
||||
border-top-style="dashed"
|
||||
border-top-color="#00ffff"
|
||||
border-right-color="cyan">Price</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
</fo:table-header>
|
||||
|
||||
<fo:table-body>
|
||||
|
||||
<fo:table-row>
|
||||
<fo:table-cell>
|
||||
<fo:block>Volvo</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell>
|
||||
<fo:block
|
||||
background-color="#cccccc">$50000</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
|
||||
<fo:table-row>
|
||||
<fo:table-cell>
|
||||
<fo:block>SAAB</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell>
|
||||
<fo:block>$48000</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
</fo:table-body>
|
||||
|
||||
</fo:table>
|
||||
</fo:table-and-caption>
|
||||
</fo:flow>
|
||||
</fo:page-sequence>
|
||||
<fo:page-sequence>
|
||||
<fo:flow flow-name="xsl-region-body">
|
||||
<fo:block>
|
||||
444
|
||||
</fo:block>
|
||||
</fo:flow>
|
||||
</fo:page-sequence>
|
||||
</fo:root>
|
||||
@@ -0,0 +1,194 @@
|
||||
<?PHP /*
|
||||
xslfo2pdf
|
||||
Copyright (C) 2005 Tegonal GmbH
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Contact:
|
||||
mike.toggweiler@tegonal.com
|
||||
http://xslf2pdf.tegonal.com
|
||||
*/ ?>
|
||||
<?PHP
|
||||
class FO_Block extends FO_LayoutObject{
|
||||
private static $CHILDNODES = array(
|
||||
//FO_BidiOverride,
|
||||
//FO_Character,
|
||||
FO_ExternalGraphic, /*oesi - uncomment for ExternalGraphic Support*/
|
||||
FO_InstreamForeignObject,
|
||||
FO_Inline,
|
||||
//FO_InlineContainer,
|
||||
//FO_Leader,
|
||||
//FO_PageNumber,
|
||||
//FO_PageNumberCitation,
|
||||
FO_BasicLink,
|
||||
//FO_MultiToggle,
|
||||
FO_Block,
|
||||
FO_BlockContainer,
|
||||
FO_TableAndCaption,
|
||||
FO_Table,
|
||||
FO_ListBlock
|
||||
);
|
||||
|
||||
protected function getChildNodes() {
|
||||
return self::$CHILDNODES;
|
||||
}
|
||||
|
||||
protected function initAttributes($node) {
|
||||
$this->initAttribute($node, "text-align");
|
||||
$this->initAttribute($node, "content-width");
|
||||
}
|
||||
|
||||
protected function processContent($text) {
|
||||
$talign = $this->getContext("text-align");
|
||||
//oesi - add attribute content-width
|
||||
$colwidth = $this->getContext("content-width");
|
||||
switch ($talign) {
|
||||
case "center":
|
||||
$align = "C";
|
||||
break;
|
||||
case "right":
|
||||
$align = "R";
|
||||
break;
|
||||
case "left":
|
||||
$align = "L";
|
||||
default:
|
||||
}
|
||||
|
||||
$text = $this->escape($text);
|
||||
|
||||
$x = $this->getContext("x");
|
||||
$x2 = $this->getContext("startx");
|
||||
if (!$x2) {
|
||||
$x2 = $x;
|
||||
}
|
||||
$y = $this->getContext("y");
|
||||
// echo "Draw at:$x:$x2:$y<br>";
|
||||
$pdf = $this->getPdf();
|
||||
$lineHeight = $this->getContext("line-height");
|
||||
|
||||
list($width, $height, $nb, $sx, $sy, $lx, $ly) =
|
||||
$pdf->Text2($x2, $y, $text, $align, $lineHeight, $x, $colwidth);
|
||||
//echo "Wrote block:$x:$y:$height:$lineHeight:".$pdf->FontSize.":".$pdf->FontSizePt."<br>";
|
||||
$this->setLocalContext("content_height", $height);
|
||||
$this->setLocalContext("content_width", $width);
|
||||
$this->setLocalContext("lx", $lx);
|
||||
$this->setLocalContext("ly", $ly);
|
||||
$this->setLocalContext("sx", $sx);
|
||||
$this->setLocalContext("sy", $sy);
|
||||
}
|
||||
|
||||
protected function postParseContent($content) {
|
||||
$this->setContext("startx", $this->getContext("lx"));
|
||||
$this->setContext("y", $this->getContext("ly"));
|
||||
$pdf = $this->getPdf();
|
||||
$this->setLocalContext("width", $pdf->GetPageWidth());
|
||||
$h1 = $this->getContext("height");
|
||||
$h2 = $this->getContext("content_height");
|
||||
if ($h2 > $h1) {
|
||||
$this->setLocalContext("height", $h2);
|
||||
}
|
||||
}
|
||||
|
||||
protected function postParse(FO_Object $obj) {
|
||||
if (!$obj instanceof FO_Inline) {
|
||||
return parent::postParse($obj);
|
||||
}
|
||||
$this->setContext("startx", $obj->getContext("lx"));
|
||||
$this->setContext("y", $obj->getContext("ly"));
|
||||
$this->setContext("x", $obj->getContext("x"));
|
||||
$h1 = $this->getContext("height");
|
||||
$h2 = $obj->getContext("height");
|
||||
if ($h2 > $h1) {
|
||||
$this->setLocalContext("height", $h2);
|
||||
}
|
||||
}
|
||||
|
||||
private function escape($text) {
|
||||
return str_replace('\t', '', preg_replace('/\s+/', ' ', $text));
|
||||
}
|
||||
}
|
||||
|
||||
class FO_Inline extends FO_Block {
|
||||
|
||||
protected function processContent($text) {
|
||||
// echo "show inline content:$text<br>";
|
||||
return parent::processContent($text);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class FO_BasicLink extends FO_Block {
|
||||
protected function initAttributes($node) {
|
||||
$this->initLocalAttribute($node, "internal-destination");
|
||||
$this->initLocalAttribute($node, "external-destination");
|
||||
}
|
||||
|
||||
protected function processContent($text) {
|
||||
parent::processContent($text);
|
||||
$width = $this->getContext("content_width");
|
||||
$height = $this->getContext("content_height");
|
||||
$lx = $this->getContext("lx");
|
||||
$ly = $this->getContext("ly");
|
||||
$sx = $this->getContext("sx");
|
||||
$sy = $this->getContext("sy");
|
||||
//echo "Link at:$x:$y:$width:$height<br>";
|
||||
$pdf = $this->getPdf();
|
||||
$internal = $this->getContext("internal-destination");
|
||||
$external = $this->getContext("external-destination");
|
||||
if ($internal) {
|
||||
$lnk = $pdf->AddLink();
|
||||
$ref = $this->getReference($internal);
|
||||
if ($ref) {
|
||||
//TODO: add all references from id's as well as the page-number
|
||||
$pdf->SetLink($lnk, $ref->getContext("y"), $ref->getContext("page-number"));
|
||||
$pdf->Link($x, $y, $width, $height, $lnk);
|
||||
}
|
||||
}
|
||||
else if ($external) {
|
||||
$pdf->Link($x, $y, $width, $height, $external);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//oesi - add ExternalGraphics
|
||||
class FO_ExternalGraphic extends FO_Block
|
||||
{
|
||||
protected function initAttributes($node)
|
||||
{
|
||||
$this->initLocalAttribute($node, "src");
|
||||
$this->initLocalAttribute($node, "width");
|
||||
$this->initLocalAttribute($node, "height");
|
||||
$this->initLocalAttribute($node, "posx");
|
||||
$this->initLocalAttribute($node, "posy");
|
||||
}
|
||||
|
||||
protected function processContent($text)
|
||||
{
|
||||
parent::processContent($text);
|
||||
|
||||
$pdf = $this->getPdf();
|
||||
|
||||
$src = $this->getContext("src");
|
||||
$width = $this->getContext("width");
|
||||
$height = $this->getContext("height");
|
||||
$x = $this->getContext("posx");
|
||||
$y = $this->getContext("posy");
|
||||
|
||||
$pdf->Image($src, $x, $y, $width, $height, "jpg","");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,364 @@
|
||||
<?PHP /*
|
||||
xslfo2pdf
|
||||
Copyright (C) 2005 Tegonal GmbH
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Contact:
|
||||
mike.toggweiler@tegonal.com
|
||||
http://xslf2pdf.tegonal.com
|
||||
*/ ?>
|
||||
<?PHP
|
||||
class FO_Container {
|
||||
private $_refs = array();
|
||||
|
||||
public function addReference($category, $name, $ref) {
|
||||
$_refs[$category][$name] = $ref;
|
||||
}
|
||||
|
||||
public function resolveReference($category, $name) {
|
||||
return $_refs[$category][$name];
|
||||
}
|
||||
}
|
||||
|
||||
class FO_Context {
|
||||
public $_context;
|
||||
|
||||
function __contruct() {
|
||||
$this->_context = array();
|
||||
}
|
||||
|
||||
public function get($key) {
|
||||
return $this->_context[$key];
|
||||
}
|
||||
|
||||
public function set($key, $val) {
|
||||
$this->_context[$key] = $val;
|
||||
}
|
||||
}
|
||||
|
||||
abstract class FO_Object {
|
||||
private $_children;
|
||||
private $_container;
|
||||
private $_context;
|
||||
private $_localContext;
|
||||
private $_pdf;
|
||||
private $_parent;
|
||||
|
||||
const NODE_TYPE_ELEMENT = 1;
|
||||
const NODE_TYPE_TEXT = 3;
|
||||
|
||||
function __construct(FO_Container $container, FPDF $pdf,
|
||||
FO_Context $context) {
|
||||
//echo "New:$this:$context<br>";
|
||||
$this->_container = $container;
|
||||
$this->_pdf = $pdf;
|
||||
$this->_context = $context;
|
||||
$this->_localContext = new FO_Context();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check unit of value and scale to internal value, if needed
|
||||
* Internal values are stored in mm
|
||||
**/
|
||||
protected function calcInternalValue($value, $to = "mm", $from="mm") {
|
||||
sscanf($value, "%f%s", $value, $unit);
|
||||
if (!$unit) {
|
||||
$unit = $from;
|
||||
}
|
||||
//calculate to default value in mm
|
||||
switch ($to) {
|
||||
case "mm":
|
||||
switch ($unit) {
|
||||
case "mm":
|
||||
return $value;
|
||||
case "cm":
|
||||
return $value*10;
|
||||
case "in":
|
||||
return $value/25.4;
|
||||
case "pt":
|
||||
return $value*25.4/72;
|
||||
default:
|
||||
$this->NotYetSupported("Unit:$unit");
|
||||
}
|
||||
break;
|
||||
case "cm":
|
||||
switch ($unit) {
|
||||
case "mm":
|
||||
return $value/10;
|
||||
case "cm":
|
||||
return $value;
|
||||
case "in":
|
||||
return $value/2.54;
|
||||
case "pt":
|
||||
return $value*2.54/72;
|
||||
default:
|
||||
$this->NotYetSupported("Unit:$unit");
|
||||
}
|
||||
break;
|
||||
case "in":
|
||||
switch ($unit) {
|
||||
case "mm":
|
||||
return $value*25.4;
|
||||
case "cm":
|
||||
return $value*2.54;
|
||||
case "in":
|
||||
return $value;
|
||||
case "pt":
|
||||
return $value*72;
|
||||
default:
|
||||
$this->NotYetSupported("Unit:$unit");
|
||||
}
|
||||
break;
|
||||
case "pt":
|
||||
switch ($unit) {
|
||||
case "mm":
|
||||
return $value*72/25.4;
|
||||
case "cm":
|
||||
return $value*72/2.54;
|
||||
case "in":
|
||||
return $value/72;
|
||||
case "pt":
|
||||
return $value;
|
||||
default:
|
||||
$this->NotYetSupported("Unit:$unit");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
$this->NotYetSupported("Default Unit:$default");
|
||||
}
|
||||
}
|
||||
|
||||
public function addReference($category, $name) {
|
||||
if ($category && $name) {
|
||||
$this->_container->addReference($category, $name, $this);
|
||||
}
|
||||
}
|
||||
|
||||
public function resolveReference($category, $name) {
|
||||
return $this->_container->resolveReference($category, $name);
|
||||
}
|
||||
|
||||
protected function setParent($parent) {
|
||||
$this->_parent = $parent;
|
||||
}
|
||||
|
||||
protected function handleEvent($event) {
|
||||
if ($event == "sync-position") {
|
||||
$pdf = $this->getPdf();
|
||||
$this->setContext("y", $pdf->GetY());
|
||||
$this->setContext("x", $pdf->GetX());
|
||||
}
|
||||
if ($this->_parent) {
|
||||
$this->_parent->handleEvent($event);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get from current context informations
|
||||
*/
|
||||
protected function getContext($key) {
|
||||
$val = $this->_localContext->get($key);
|
||||
if (!$val) {
|
||||
$val = $this->_context->get($key);
|
||||
}
|
||||
return $val;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set a context information for child nodes and current node as well
|
||||
*/
|
||||
protected function setContext($key, $value) {
|
||||
$this->_context->set($key, $value);
|
||||
}
|
||||
|
||||
protected function setLocalContext($key, $value) {
|
||||
$this->_localContext->set($key, $value);
|
||||
}
|
||||
|
||||
protected function getAttribute(DOMNode $node, $key) {
|
||||
return $node->attributes->getNamedItem($key)->nodeValue;
|
||||
}
|
||||
|
||||
protected function getSizeAttribute(DOMNode $node, $key, $to="mm", $from="mm") {
|
||||
$val = $node->attributes->getNamedItem($key)->nodeValue;
|
||||
return $this->calcInternalValue($val, $to, $from);
|
||||
}
|
||||
|
||||
protected function initSizeAttribute(DOMNode $node, $key, $to="mm", $from="mm") {
|
||||
$val = $this->getSizeAttribute($node, $key, $to, $from);
|
||||
if ($val) {
|
||||
$this->setContext($key, $val);
|
||||
}
|
||||
}
|
||||
|
||||
protected function initAttribute(DOMNode $node, $key) {
|
||||
$val = $this->getAttribute($node, $key);
|
||||
if ($val) {
|
||||
$this->setContext($key, $val);
|
||||
}
|
||||
}
|
||||
|
||||
protected function initLocalSizeAttribute(DOMNode $node, $key, $to="mm", $from="mm"){
|
||||
$val = $this->getSizeAttribute($node, $key, $to, $from);
|
||||
if ($val) {
|
||||
$this->_localContext->set($key, $val);
|
||||
}
|
||||
}
|
||||
|
||||
protected function initLocalAttribute(DOMNode $node, $key) {
|
||||
$val = $this->getAttribute($node, $key);
|
||||
if ($val) {
|
||||
$this->_localContext->set($key, $val);
|
||||
}
|
||||
}
|
||||
|
||||
protected function processChildNodes(DOMNode $node, $filter) {
|
||||
foreach($node->childNodes as $child) {
|
||||
$this->processChildNode($child, $filter);
|
||||
}
|
||||
}
|
||||
|
||||
protected function processChildNode(DOMNode $node, $filter) {
|
||||
$subcontext = clone $this->_context;
|
||||
$next =
|
||||
FO_Factory::createFOObject($node, $this->_container,
|
||||
$this->_pdf, $subcontext, $filter);
|
||||
if ($next != null) {
|
||||
$next->setParent($this);
|
||||
$this->initFOObject($next);
|
||||
$this->_children[$node->nodeName] = $next;
|
||||
$this->preParse($next);
|
||||
$next->parse($node);
|
||||
$this->postParse($next);
|
||||
}
|
||||
}
|
||||
|
||||
protected function initFOObject(FO_Object $obj) {
|
||||
}
|
||||
|
||||
protected function preParse(FO_Object $obj) {
|
||||
}
|
||||
|
||||
protected function postParse(FO_Object $obj) {
|
||||
}
|
||||
|
||||
protected function processContents(DOMNode $node) {
|
||||
foreach($node->childNodes as $child) {
|
||||
if ($child->nodeType == self::NODE_TYPE_TEXT) {
|
||||
$this->processContent($child->textContent);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected function processContent($content) {
|
||||
//do nothing per default
|
||||
}
|
||||
|
||||
protected function getPdf() {
|
||||
return $this->_pdf;
|
||||
}
|
||||
|
||||
protected function NotYetSupported($msg=0) {
|
||||
echo "Not Yet Supported[".get_class($this)."]:$msg<br>";
|
||||
}
|
||||
|
||||
protected function children() {
|
||||
return $this->_children;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse the color from either xml attribute value or FPDF
|
||||
* internal representation
|
||||
**/
|
||||
protected function parseColor($color) {
|
||||
if (sscanf($color, "#%2x%2x%2x", $r, $g, $b) == 3) {
|
||||
//parse RGB color
|
||||
$r = sprintf("%d", $r);
|
||||
$g = sprintf("%d", $g);
|
||||
$b = sprintf("%d", $b);
|
||||
}
|
||||
else if(sscanf($color, "rgb(%d,%d,%d)", $r, $g, $b) == 3) {
|
||||
}
|
||||
else if (sscanf($color, "%f %f %f RG", $r, $g, $b) == 3) {
|
||||
}
|
||||
else if (sscanf($color, "%f G", $g) == 1) {
|
||||
}
|
||||
else {
|
||||
//get color from word
|
||||
switch ($color) {
|
||||
case "white":
|
||||
$r=255; $g=255; $b=255;
|
||||
break;
|
||||
case "red":
|
||||
$r=255; $g=0; $b=0;
|
||||
break;
|
||||
case "green":
|
||||
$r=0; $g=255; $b=0;
|
||||
break;
|
||||
case "blue":
|
||||
$r=0; $g=0; $b=255;
|
||||
break;
|
||||
case "yellow":
|
||||
$r=255; $g=255; $b=0;
|
||||
break;
|
||||
case "magenta":
|
||||
$r=0; $g=255; $b=255;
|
||||
break;
|
||||
case "cyan":
|
||||
$r=255; $g=0; $b=255;
|
||||
break;
|
||||
case "black":
|
||||
default:
|
||||
$r=0; $g=0; $b=0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return array($r, $g, $b);
|
||||
}
|
||||
|
||||
public abstract function parse(DOMNode $node);
|
||||
}
|
||||
|
||||
/**
|
||||
* <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
|
||||
* <!-- The full XSL-FO document goes here -->
|
||||
* </fo:root>
|
||||
*/
|
||||
class FO_Root extends FO_Object{
|
||||
|
||||
function __construct(FPDF $pdf) {
|
||||
$container = new FO_Context();
|
||||
parent::__construct(new FO_Container(), $pdf, $container);
|
||||
$this->setContext("acceptPageBreak", true);
|
||||
}
|
||||
|
||||
private static $CHILDNODES = array (
|
||||
FO_LayoutMasterSet,
|
||||
FO_PageSequence
|
||||
);
|
||||
|
||||
public function parse(DOMNode $node) {
|
||||
//no attrbutes which concerns us
|
||||
$_children[$node->nodeName] =
|
||||
$this->processChildNodes($node, self::$CHILDNODES);
|
||||
}
|
||||
|
||||
public function setContext($key, $value) {
|
||||
parent::setContext($key, $value);
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,44 @@
|
||||
<?PHP /*
|
||||
xslfo2pdf
|
||||
Copyright (C) 2005 Tegonal GmbH
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Contact:
|
||||
mike.toggweiler@tegonal.com
|
||||
http://xslf2pdf.tegonal.com
|
||||
*/ ?>
|
||||
<?PHP
|
||||
require_once("fo_svg.php");
|
||||
class FO_InstreamForeignObject extends FO_Object {
|
||||
|
||||
private static $CHILDNODES = array(
|
||||
FO_SVG
|
||||
);
|
||||
|
||||
public function parse(DOMNode $node) {
|
||||
$this->processChildNodes($node, self::$CHILDNODES);
|
||||
}
|
||||
|
||||
protected function postParse(FO_Object $obj) {
|
||||
$this->setLocalContext("width", $obj->getContext("width"));
|
||||
$this->setLocalContext("height", $this->getContext("height")+
|
||||
$obj->getContext("height"));
|
||||
$this->setContext("y", $this->getContext("y") +
|
||||
$obj->getContext("height"));
|
||||
//echo "Post:".$this->getContext("y")."<br>";
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,597 @@
|
||||
<?PHP /*
|
||||
xslfo2pdf
|
||||
Copyright (C) 2005 Tegonal GmbH
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Contact:
|
||||
mike.toggweiler@tegonal.com
|
||||
http://xslf2pdf.tegonal.com
|
||||
*/ ?>
|
||||
<?PHP
|
||||
|
||||
abstract class FO_LayoutObject extends FO_FlowContainer {
|
||||
private $_oldFont;
|
||||
private $_oldFontStyle;
|
||||
private $_oldColor;
|
||||
private $_buffer;
|
||||
|
||||
private function initDefaultAttributes($node) {
|
||||
//read attributes
|
||||
$this->initLocalAttribute($node, "border-top-style");
|
||||
$this->initLocalAttribute($node, "border-right-style");
|
||||
$this->initLocalAttribute($node, "border-bottom-style");
|
||||
$this->initLocalAttribute($node, "border-left-style");
|
||||
$this->initLocalAttribute($node, "border-style");
|
||||
$this->initLocalAttribute($node, "border-top-color");
|
||||
$this->initLocalAttribute($node, "border-right-color");
|
||||
$this->initLocalAttribute($node, "border-bottom-color");
|
||||
$this->initLocalAttribute($node, "border-left-color");
|
||||
$this->initLocalAttribute($node, "border-color");
|
||||
$this->initLocalSizeAttribute($node, "border-top-width");
|
||||
$this->initLocalSizeAttribute($node, "border-right-width");
|
||||
$this->initLocalSizeAttribute($node, "border-bottom-width");
|
||||
$this->initLocalSizeAttribute($node, "border-left-width");
|
||||
$this->initLocalSizeAttribute($node, "border-width");
|
||||
$this->initAttribute($node, "font-style");
|
||||
$this->initAttribute($node, "font-weight");
|
||||
$this->initSizeAttribute($node, "font-size", "pt");
|
||||
$this->initAttribute($node, "font-family");
|
||||
$this->initAttribute($node, "color");
|
||||
$this->initLocalSizeAttribute($node, "width");
|
||||
$this->initLocalSizeAttribute($node, "height");
|
||||
$this->initLocalAttribute($node, "background-color");
|
||||
$this->initLocalAttribute($node, "background-image");
|
||||
$this->initLocalSizeAttribute($node, "space-before.optimum");
|
||||
$this->initLocalSizeAttribute($node, "space-after.optimum");
|
||||
$this->initLocalAttribute($node, "break-before");
|
||||
$this->initLocalAttribute($node, "break-after");
|
||||
$this->initSizeAttribute($node, "line-height");
|
||||
$this->initLocalSizeAttribute($node, "padding-top");
|
||||
//$this->initLocalSizeAttribute($node, "padding-bottom");
|
||||
$this->initLocalSizeAttribute($node, "padding-left");
|
||||
//$this->initLocalSizeAttribute($node, "padding-right");
|
||||
}
|
||||
|
||||
public function convert($str)
|
||||
{
|
||||
//echo str_replace('EURO',chr(128),utf8_decode($str));
|
||||
return str_replace('EURO',chr(128),utf8_decode($str));
|
||||
}
|
||||
|
||||
public function parse(DOMNode $node) {
|
||||
//set default attributes
|
||||
$this->initDefaultAttributes($node);
|
||||
$this->initAttributes($node);
|
||||
$this->initialize();
|
||||
$acceptPageBreak = $this->getContext("acceptPageBreak");
|
||||
|
||||
$pos = $this->getPosition();
|
||||
list($x, $y, $width, $height) = $pos[0];
|
||||
list($xOrig, $yOrig, $width, $height) = $pos[1];
|
||||
|
||||
//automatic page break if component exceeds page limits
|
||||
$pdf = $this->getPdf();
|
||||
if ($yOrig > $pdf->PageBreakTrigger &&
|
||||
$pdf->AcceptPageBreak() &&
|
||||
$acceptPageBreak) {
|
||||
$pdf->AddPage();
|
||||
$this->handleEvent("sync-position");
|
||||
$this->parse($node);
|
||||
return;
|
||||
}
|
||||
|
||||
//update to inner position
|
||||
$this->setContext("x", $x);
|
||||
$this->setContext("y", $y);
|
||||
|
||||
//draw us
|
||||
$this->setColor();
|
||||
$this->setFont();
|
||||
|
||||
$this->startCapture();
|
||||
foreach($node->childNodes as $child) {
|
||||
if ($child->nodeType == self::NODE_TYPE_TEXT) {
|
||||
$this->preParseContent($child->textContent);
|
||||
//oesi - add function utf8_decode for special chars (umlaut)
|
||||
$this->processContent($this->convert($child->nodeValue));
|
||||
$this->postParseContent($child->textContent);
|
||||
}
|
||||
else {
|
||||
$this->processChildNode($child, $this->getChildNodes());
|
||||
}
|
||||
}
|
||||
|
||||
//oesi - hack for ExternalGraphic Tag to show without content
|
||||
if($this instanceof FO_ExternalGraphic)
|
||||
$this->processContent($child->textContent);
|
||||
//endhack
|
||||
|
||||
$contentBuffer = $this->endCapture();
|
||||
|
||||
//update to outer position
|
||||
$this->setContext("x", $xOrig);
|
||||
$this->setContext("y", $yOrig);
|
||||
|
||||
//recalc positions
|
||||
$pos2 = $this->getPosition();
|
||||
//merge with X and y values of the original psoition
|
||||
$pos2[0][0] = $pos[0][0];
|
||||
$pos2[0][1] = $pos[0][1];
|
||||
$pos2[1][0] = $pos[1][0];
|
||||
$pos2[1][1] = $pos[1][1];
|
||||
|
||||
//automatic page break if component exceeds page limits
|
||||
$pdf = $this->getPdf();
|
||||
if ($pos2[1][3] < $pdf->PageBreakTrigger &&
|
||||
$pos2[1][3]+$this->getContext("y") > $pdf->PageBreakTrigger &&
|
||||
$pdf->AcceptPageBreak() && $acceptPageBreak) {
|
||||
$pdf->AddPage();
|
||||
$this->handleEvent("sync-position");
|
||||
$this->parse($node);
|
||||
return;
|
||||
}
|
||||
|
||||
$this->drawBordersAndBackground($pos2);
|
||||
|
||||
//update to outer positions
|
||||
$this->setLocalContext("width", $pos2[1][2]);
|
||||
$this->setLocalContext("height", $pos2[1][3]);
|
||||
|
||||
//append child buffer
|
||||
$this->appendBuffer($contentBuffer);
|
||||
|
||||
$this->closeDown();
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize additional attributes
|
||||
**/
|
||||
protected function initAttributes(DOMNode $node) {
|
||||
//do nothing
|
||||
}
|
||||
|
||||
protected function preParseContent($content) {
|
||||
}
|
||||
|
||||
protected function postParseContent($textcontent) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw borders and backgrounds according to the positions
|
||||
* May be overwritten to specify behaviour
|
||||
*/
|
||||
protected function drawBordersAndBackground($pos) {
|
||||
list($x, $y, $width, $height) = $pos[1];
|
||||
$this->drawBackground($x, $y, $width, $height);
|
||||
$this->drawBorders($x, $y, $width, $height);
|
||||
}
|
||||
|
||||
protected function getChildNodes() {
|
||||
//no child nodes per default
|
||||
return array();
|
||||
}
|
||||
|
||||
protected function initialize() {
|
||||
$break_before = $this->getContext("break-before");
|
||||
$this->handleBreak($break_before);
|
||||
}
|
||||
|
||||
protected function closeDown() {
|
||||
$pdf = $this->getPdf();
|
||||
if ($this->_oldFont) {
|
||||
$pdf->SetFont($this->_oldFont, $this->_oldFontStyle,
|
||||
$this->_oldFontSize);
|
||||
}
|
||||
else if ($this->_oldFontSize) {
|
||||
$pdf->SetFontSize($this->oldFontSize);
|
||||
}
|
||||
|
||||
if ($this->_oldColor) {
|
||||
$this->setTextColor($this->_oldColor, $pdf);
|
||||
}
|
||||
|
||||
$space_after = $this->getContext("space-after.optimum");
|
||||
// echo "Space-after:".$space_after.":".get_class($this).":".$this->getContext("height")."<br>";
|
||||
if ($space_after) {
|
||||
$this->setLocalContext("height", $this->getContext("height") +
|
||||
$space_after);
|
||||
}
|
||||
$break_after = $this->getContext("break-after");
|
||||
$this->handleBreak($break_after);
|
||||
}
|
||||
|
||||
protected function startCapture() {
|
||||
if ($this->_buffer) {
|
||||
echo "Already captureing<br>";
|
||||
return;
|
||||
}
|
||||
$this->_buffer = $this->getPdf()->startCapture();
|
||||
}
|
||||
|
||||
protected function endCapture() {
|
||||
if (!$this->_buffer) {
|
||||
return;
|
||||
}
|
||||
$partBuffer = $this->getPdf()->endCapture($this->_buffer);
|
||||
$this->_buffer = NULL;
|
||||
return $partBuffer;
|
||||
}
|
||||
|
||||
protected function appendBuffer($buffer) {
|
||||
if (!$buffer) {
|
||||
//echo "Nothing to append<br>";
|
||||
return;
|
||||
}
|
||||
$this->getPdf()->appendBuffer($buffer);
|
||||
}
|
||||
|
||||
protected function getPosition() {
|
||||
$space_before = $this->getContext("space-before.optimum");
|
||||
$height = $this->getContext("line-height");
|
||||
$pdf = $this->getPdf();
|
||||
|
||||
$bw_top = $this->getContext("border-top-width");
|
||||
$bw_left = $this->getContext("border-left-width");
|
||||
$bw_right = $this->getContext("border-right-width");
|
||||
$bw_bottom = $this->getContext("border-bottom-width");
|
||||
$padding_left = $this->getContext("padding-left");
|
||||
$padding_top = $this->getContext("padding-top");
|
||||
|
||||
$bw = $this->getContext("border-width");
|
||||
$xx = $this->getContext("x");
|
||||
$yy = $this->getContext("y");
|
||||
|
||||
$height2 = $this->getContext("height");
|
||||
if (!$height || $height < $height2) {
|
||||
$height = $height2;
|
||||
}
|
||||
$width = $this->getContext("width");
|
||||
if (!$bw_top) {$bw_top = $bw;}
|
||||
if (!$bw_bottom) {$bw_bottom = $bw;}
|
||||
if (!$bw_right) {$bw_right = $bw;}
|
||||
if (!$bw_left) {$bw_left = $bw;}
|
||||
|
||||
sscanf($bw_top, "%f%s", $wt, $unit);
|
||||
sscanf($bw_left, "%f%s", $wl, $unit);
|
||||
sscanf($bw_right, "%f%s", $wr, $unit);
|
||||
sscanf($bw_bottom, "%f%s", $wb, $unit);
|
||||
$xx += $wl;
|
||||
$yy += $wt;
|
||||
$height += $wt+$wb;
|
||||
$width += $wl+$wr;
|
||||
|
||||
if ($space_before) {
|
||||
//echo "Spacebefore:$space_before<br>";
|
||||
$yy += $space_before;
|
||||
$height += $space_before;
|
||||
}
|
||||
if ($padding_left) {
|
||||
$xx += $padding_left;
|
||||
}
|
||||
if ($padding_top) {
|
||||
$yy += $padding_top;
|
||||
}
|
||||
|
||||
return
|
||||
array(
|
||||
//inner coordinates
|
||||
array($xx, $yy, $width-$wl-$wr, $height-$wt-$wb),
|
||||
//outer coordinates
|
||||
array($xx-$wl, $yy-$wr, $width, $height));
|
||||
}
|
||||
|
||||
protected function setColor() {
|
||||
$pdf = $this->getPdf();
|
||||
$this->_oldColor = $pdf->GetTextColor();
|
||||
$color = $this->getContext("color");
|
||||
if ($color) {
|
||||
$this->setTextColor($color, $pdf);
|
||||
}
|
||||
}
|
||||
|
||||
protected function setFont() {
|
||||
$pdf = $this->getPdf();
|
||||
$this->_oldFont = $pdf->GetFontFamily();
|
||||
$this->_oldFontStyle = $pdf->GetFontStyle();
|
||||
$this->_oldFontSize = $pdf->GetFontSizePt();
|
||||
$weight = $this->getContext("font-weight");
|
||||
$style = $this->getContext("font-style");
|
||||
$family = $this->getContext("font-family");
|
||||
$size = $this->getContext("font-size");
|
||||
if ($family) {
|
||||
$f = $family;
|
||||
}
|
||||
else {
|
||||
$f = $this->_oldFont;
|
||||
}
|
||||
if ($weight || $style) {
|
||||
if ($weight) {
|
||||
$st = "B";
|
||||
}
|
||||
if ($style) {
|
||||
//TODO: check which styles are supported
|
||||
}
|
||||
}
|
||||
else {
|
||||
$st = $this->_oldFontStyle;
|
||||
}
|
||||
if ($size) {
|
||||
$sz = $size;
|
||||
}
|
||||
else {
|
||||
$sz = $this->_oldFontSize;
|
||||
}
|
||||
if ($pdf->FontExists($f, $st)) {
|
||||
$pdf->SetFont($f, $st, $sz);
|
||||
}
|
||||
else if ($pdf->FontExists($this->_oldFont, $st)) {
|
||||
$pdf->SetFont($this->_oldFont, $st, $sz);
|
||||
}
|
||||
else {
|
||||
//adjust only size
|
||||
$pdf->SetFontSize($sz);
|
||||
}
|
||||
}
|
||||
|
||||
protected function drawBorders($x, $y, $width, $height) {
|
||||
$bs_top = $this->getContext("border-top-style");
|
||||
$bs_left = $this->getContext("border-left-style");
|
||||
$bs_right = $this->getContext("border-right-style");
|
||||
$bs_bottom = $this->getContext("border-bottom-style");
|
||||
$bs = $this->getContext("border-style");
|
||||
$bc_top = $this->getContext("border-top-color");
|
||||
$bc_left = $this->getContext("border-left-color");
|
||||
$bc_right = $this->getContext("border-right-color");
|
||||
$bc_bottom = $this->getContext("border-bottom-color");
|
||||
$bc = $this->getContext("border-color");
|
||||
$bw_top = $this->getContext("border-top-width");
|
||||
$bw_left = $this->getContext("border-left-width");
|
||||
$bw_right = $this->getContext("border-right-width");
|
||||
$bw_bottom = $this->getContext("border-bottom-width");
|
||||
$bw = $this->getContext("border-width");
|
||||
|
||||
$pdf = $this->getPdf();
|
||||
if (!$bs_top) {$bs_top = $bs;}
|
||||
if (!$bs_bottom) {$bs_bottom = $bs;}
|
||||
if (!$bs_right) {$bs_right = $bs;}
|
||||
if (!$bs_left) {$bs_left = $bs;}
|
||||
if (!$bc_top) {$bc_top = $bc;}
|
||||
if (!$bc_bottom) {$bc_bottom = $bc;}
|
||||
if (!$bc_right) {$bc_right = $bc;}
|
||||
if (!$bc_left) {$bc_left = $bc;}
|
||||
if (!$bw_top) {$bw_top = $bw;}
|
||||
if (!$bw_bottom) {$bw_bottom = $bw;}
|
||||
if (!$bw_right) {$bw_right = $bw;}
|
||||
if (!$bw_left) {$bw_left = $bw;}
|
||||
|
||||
sscanf($bw_top, "%f%s", $wt, $unit);
|
||||
sscanf($bw_left, "%f%s", $wl, $unit);
|
||||
sscanf($bw_right, "%f%s", $wr, $unit);
|
||||
sscanf($bw_bottom, "%f%s", $wb, $unit);
|
||||
$wt /= 2;
|
||||
$wl /= 2;
|
||||
$wr /= 2;
|
||||
$wb /= 2;
|
||||
|
||||
$width -= $wl+$wr;
|
||||
$height -= $wt+$wb;
|
||||
$x += $wl;
|
||||
$y += $wt;
|
||||
$this->drawLine($x, $y, $x+$width, $y, $bs_top, $bc_top,
|
||||
$bw_top, $pdf);
|
||||
$this->drawLine($x, $y, $x, $y+$height, $bs_left,
|
||||
$bc_left, $bw_left,$pdf);
|
||||
$this->drawLine($x, $y+$height, $x+$width, $y+$height,
|
||||
$bs_bottom, $bc_bottom, $bw_bottom, $pdf);
|
||||
$this->drawLine($x+$width, $y, $x+$width, $y+$height,
|
||||
$bs_right, $bc_right,$bw_right, $pdf);
|
||||
}
|
||||
|
||||
protected function drawBackground($x, $y, $width, $height) {
|
||||
$pdf = $this->GetPdf();
|
||||
$bg_c = $this->getContext("background-color");
|
||||
$bg_img = $this->getContext("background-image");
|
||||
if ($bg_c) {
|
||||
$oldColor = $pdf->GetFillColor();
|
||||
list($r, $g, $b) = $this->parseColor($bg_c);
|
||||
$pdf->SetFillColor($r, $g, $b);
|
||||
$pdf->Rect($x, $y, $width, $height, "F");
|
||||
list($r, $g, $b) = $this->parseColor($oldColor);
|
||||
$pdf->SetFillColor($r, $g, $b);
|
||||
}
|
||||
else if ($bg_img) {
|
||||
$this->NotYetSupported("background-image");
|
||||
}
|
||||
}
|
||||
|
||||
private function drawLine($x, $y, $x2, $y2, $style, $color, $width, &$pdf) {
|
||||
$oldColor = $pdf->GetDrawColor();
|
||||
$oldLineWidth = $pdf->GetLineWidth();
|
||||
if ($width) {
|
||||
$pdf->SetLineWidth($width);
|
||||
}
|
||||
$this->setDrawColor($color, $pdf);
|
||||
switch ($style) {
|
||||
case "dotted":
|
||||
$pdf->SetDash(0.5, 0.5); //1mm on, 1mm off
|
||||
$pdf->Line($x, $y, $x2, $y2);
|
||||
$pdf->SetDash(); //restore no dash
|
||||
return;
|
||||
case "dashed":
|
||||
$pdf->SetDash(2,2); //2mm on, 2mm off
|
||||
$pdf->Line($x, $y, $x2, $y2);
|
||||
$pdf->SetDash(); //restore no dash
|
||||
return;
|
||||
case "solid":
|
||||
$pdf->Line($x, $y, $x2, $y2);
|
||||
return;
|
||||
case "double":
|
||||
case "groove":
|
||||
case "ridge":
|
||||
case "inset":
|
||||
case "outset":
|
||||
//TODO:implement
|
||||
echo "border style '$style' not yet supported<br>";
|
||||
case "none":
|
||||
case "hidden":
|
||||
default:
|
||||
//do nothing
|
||||
return;
|
||||
}
|
||||
$this->setDrawColor($oldColor, $pdf);
|
||||
$this->setLineWidth($oldLineWidth);
|
||||
}
|
||||
|
||||
private function setDrawColor($color, &$pdf) {
|
||||
if ($color == '') {
|
||||
return;
|
||||
}
|
||||
list($r, $g, $b) = $this->parseColor($color);
|
||||
$pdf->SetDrawColor($r, $g, $b);
|
||||
}
|
||||
|
||||
private function setTextColor($color, &$pdf) {
|
||||
if ($color == '') {
|
||||
return;
|
||||
}
|
||||
list($r, $g, $b) = $this->parseColor($color);
|
||||
$pdf->SetTextColor($r, $g, $b);
|
||||
}
|
||||
|
||||
protected function handleBreak($break) {
|
||||
if (!$break) {
|
||||
return;
|
||||
}
|
||||
$pdf = $this->getPdf();
|
||||
switch($break) {
|
||||
case "page":
|
||||
$pdf->AddPage();
|
||||
$this->handleEvent("sync-position");
|
||||
return;
|
||||
default:
|
||||
$this->NotYetSupported("Break:$break");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class FO_LayoutMasterSet extends FO_Object {
|
||||
private $name;
|
||||
|
||||
public function parse(DOMNode $node) {
|
||||
$this->name = $node->attributes->getNamedItem("master-name");
|
||||
$this->addReference($this, $this->name);
|
||||
}
|
||||
}
|
||||
|
||||
class FO_PageSequence extends FO_Object {
|
||||
private static $CHILDNODES = array(
|
||||
FO_Flow
|
||||
);
|
||||
|
||||
public function parse(DOMNode $node) {
|
||||
$masterRef = $node->attributes->getNamedItem("master-reference");
|
||||
if ($masterRef) {
|
||||
$master = $this->resolveReference(FO_LayoutMasterSet, $masterRef);
|
||||
//TODO: do something with this master
|
||||
}
|
||||
$pdf = $this->getPdf();
|
||||
$pdf->AddPage();
|
||||
$this->handleEvent("sync-position");
|
||||
$this->processChildNodes($node, self::$CHILDNODES);
|
||||
}
|
||||
}
|
||||
|
||||
abstract class FO_FlowContainer extends FO_Object {
|
||||
|
||||
protected function postParse(FO_Object $obj) {
|
||||
$acceptPageBreak = $this->getContext("acceptPageBreak");
|
||||
$this->setLocalContext("width", $obj->getContext("width"));
|
||||
$height = $this->getContext("height")+$obj->getContext("height");
|
||||
$this->setLocalContext("height", $height);
|
||||
$y = $this->getContext("y")+$obj->getContext("height");
|
||||
$pdf = $this->getPdf();
|
||||
if ($height < $pdf->PageBreakTrigger &&
|
||||
$y > $pdf->PageBreakTrigger &&
|
||||
$pdf->AcceptPageBreak() &&
|
||||
$acceptPageBreak) {
|
||||
|
||||
$pdf->AddPage();
|
||||
$this->handleEvent("sync-position");
|
||||
//echo "Page break on .".get_class($obj)."<br>";
|
||||
}
|
||||
else {
|
||||
$this->setContext("y", $y);
|
||||
//echo "Move :".get_class($obj).":".$y.":".$obj->getContext("height")."<br>;";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class FO_Flow extends FO_FlowContainer {
|
||||
private static $CHILDNODES = array(
|
||||
FO_Block,
|
||||
FO_Table,
|
||||
FO_BlockContainer,
|
||||
FO_TableAndCaption,
|
||||
FO_ListBlock
|
||||
);
|
||||
|
||||
public function parse(DOMNode $node) {
|
||||
//TODO: use attributes
|
||||
$this->processChildNodes($node, self::$CHILDNODES);
|
||||
}
|
||||
}
|
||||
|
||||
class FO_BlockContainer extends FO_LayoutObject {
|
||||
private static $CHILDNODES = array(
|
||||
FO_Block,
|
||||
FO_BlockContainer,
|
||||
FO_TableAndCaption,
|
||||
FO_Table,
|
||||
FO_ListBlock);
|
||||
|
||||
protected function initAttributes(DOMNode $node) {
|
||||
$this->initLocalSizeAttribute($node, "position");
|
||||
$this->initLocalSizeAttribute($node, "top");
|
||||
$this->initLocalSizeAttribute($node, "left");
|
||||
$this->initLocalSizeAttribute($node, "height");
|
||||
$this->initLocalSizeAttribute($node, "width");
|
||||
}
|
||||
|
||||
protected function getChildNodes() {
|
||||
return self::$CHILDNODES;
|
||||
}
|
||||
|
||||
public function parse(DOMNode $node) {
|
||||
$this->initAttributes($node);
|
||||
$position = $this->getContext("position");
|
||||
if ($position == "absolute"){
|
||||
//init absolute positions
|
||||
$top = $this->getContext("top");
|
||||
$left = $this->getContext("left");
|
||||
$this->setContext("x", $left);
|
||||
$this->setContext("y", $top);
|
||||
$this->setContext("acceptPageBreak", false);
|
||||
}
|
||||
parent::parse($node);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class FO_ListBlock extends FO_LayoutObject {
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,153 @@
|
||||
<?PHP /*
|
||||
xslfo2pdf
|
||||
Copyright (C) 2005 Tegonal GmbH
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Contact:
|
||||
mike.toggweiler@tegonal.com
|
||||
http://xslf2pdf.tegonal.com
|
||||
*/ ?>
|
||||
<?PHP
|
||||
abstract class SVG_Object extends FO_Object {
|
||||
protected function initLocalStyleAttribute(DOMNode $node) {
|
||||
$st = $this->getAttribute($node, "style");
|
||||
|
||||
$styles = explode(";", $st);
|
||||
foreach ($styles as $style) {
|
||||
$params = explode(":", $style);
|
||||
$this->setLocalContext($params[0], $params[1]);
|
||||
}
|
||||
}
|
||||
|
||||
protected function initStyleAttribute(DOMNode $node) {
|
||||
$st = $this->getAttribute($node, "style");
|
||||
|
||||
$styles = explode(";", $st);
|
||||
foreach ($styles as $style) {
|
||||
$params = explode(":", $style);
|
||||
$this->setContext($params[0], $params[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
abstract class SVG_StyleObject extends SVG_Object {
|
||||
|
||||
protected function initLocalSizeAttribute(DOMNode $node, $key, $to="mm", $from="pt"){
|
||||
parent::initLocalSizeAttribute($node, $key, $to, $from);
|
||||
}
|
||||
|
||||
protected function initSizeAttribute(DOMNode $node, $key, $to="mm", $from="pt"){
|
||||
parent::initSizeAttribute($node, $key, $to, $from);
|
||||
}
|
||||
|
||||
protected function getLocalSizeAttribute(DOMNode $node, $key, $to="mm", $from="pt"){
|
||||
return parent::getLocalSizeAttribute($node, $key, $to, $from);
|
||||
}
|
||||
|
||||
protected function getSizeAttribute(DOMNode $node, $key, $to="mm", $from="pt"){
|
||||
return parent::getSizeAttribute($node, $key, $to, $from);
|
||||
}
|
||||
|
||||
protected function calcInternalValue($value, $to = "mm", $from="pt") {
|
||||
return parent::calcInternalValue($value, $to, $from);
|
||||
}
|
||||
|
||||
public function parse(DOMNode $node) {
|
||||
$pdf = $this->getPdf();
|
||||
$buf = $pdf->startCapture();
|
||||
$this->initStyleAttribute($node);
|
||||
$this->initSizeAttribute($node, "x");
|
||||
$this->initSizeAttribute($node, "y");
|
||||
$this->initLocalSizeAttribute($node, "width");
|
||||
$this->initLocalSizeAttribute($node, "height");
|
||||
$this->initAttribute($node, "fill");
|
||||
$this->initAttribute($node, "stroke");
|
||||
$this->initSizeAttribute($node, "stroke-width");
|
||||
|
||||
$fill = $this->getContext("fill");
|
||||
$stroke = $this->getContext("stroke");
|
||||
$strokeWidth = $this->getContext("stroke-width");
|
||||
$sargs = "";
|
||||
$oldFillColor = $pdf->GetFillColor();
|
||||
$oldDrawColor = $pdf->GetDrawColor();
|
||||
$oldLineWidth = $pdf->GetLineWidth();
|
||||
if ($fill == "none") {
|
||||
$fill = NULL;
|
||||
}
|
||||
if ($stroke == "none") {
|
||||
$stroke = NULL;
|
||||
}
|
||||
if ($fill) {
|
||||
list($r, $g, $b) = $this->parseColor($fill);
|
||||
$pdf->setFillColor($r, $g, $b);
|
||||
$sargs .= "F";
|
||||
}
|
||||
if ($stroke) {
|
||||
list($r, $g, $b) = $this->parseColor($stroke);
|
||||
$pdf->setDrawColor($r, $g, $b);
|
||||
$sargs .= "D";
|
||||
}
|
||||
if ($strokeWidth) {
|
||||
$pdf->SetLineWidth($strokeWidth);
|
||||
}
|
||||
|
||||
$this->process($node, $sargs);
|
||||
|
||||
if ($fill) {
|
||||
list($r, $g, $b) = $this->parseColor($oldFillColor);
|
||||
$pdf->setFillColor($r, $g, $b);
|
||||
}
|
||||
if ($stroke) {
|
||||
list($r, $g, $b) = $this->parseColor($oldStrokeColor);
|
||||
$pdf->setDrawColor($r, $g, $b);
|
||||
}
|
||||
if ($strokeWidth) {
|
||||
$pdf->SetLineWidth($oldLineWidth);
|
||||
}
|
||||
$buf = $pdf->endCapture($buf);
|
||||
//echo get_class($this).":$buf<br>";
|
||||
$pdf->appendBuffer($buf);
|
||||
}
|
||||
protected abstract function process(DOMNode $node, $sargs="");
|
||||
}
|
||||
|
||||
class FO_SVG extends SVG_Object {
|
||||
|
||||
public static $CHILDNODES = array(
|
||||
SVG_Circle,
|
||||
SVG_Rect,
|
||||
SVG_Ellipse,
|
||||
SVG_Line,
|
||||
SVG_Polygon,
|
||||
SVG_G,
|
||||
SVG_Text,
|
||||
SVG_Path
|
||||
);
|
||||
|
||||
public function parse(DOMNode $node) {
|
||||
$this->initLocalSizeAttribute($node, "width", "mm", "pt");
|
||||
$this->initLocalSizeAttribute($node, "height", "mm", "pt");
|
||||
$this->setContext("xOrig", $this->getContext("x"));
|
||||
$this->setContext("yOrig", $this->getContext("y"));
|
||||
$this->setContext("x", 0);
|
||||
$this->setContext("y", 0);
|
||||
$pdf = $this->getPdf();
|
||||
$this->processChildNodes($node, self::$CHILDNODES);
|
||||
$this->setContext("y", $this->getContext("yOrig")+$this->getContext("height"));
|
||||
$this->setContext("x", $this->getContext("xOrig"));
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,275 @@
|
||||
<?PHP /*
|
||||
xslfo2pdf
|
||||
Copyright (C) 2005 Tegonal GmbH
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Contact:
|
||||
mike.toggweiler@tegonal.com
|
||||
http://xslf2pdf.tegonal.com
|
||||
*/ ?>
|
||||
<?PHP
|
||||
/*
|
||||
<fo:table-and-caption>
|
||||
|
||||
<fo:table>
|
||||
|
||||
<fo:table-column column-width="25mm"/>
|
||||
<fo:table-column column-width="25mm"/>
|
||||
|
||||
<fo:table-header>
|
||||
<fo:table-cell>
|
||||
<fo:block font-weight="bold">Car</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell>
|
||||
<fo:block font-weight="bold">Price</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-header>
|
||||
|
||||
<fo:table-body>
|
||||
<fo:table-row>
|
||||
<fo:table-cell>
|
||||
<fo:block>Volvo</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell>
|
||||
<fo:block>$50000</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
<fo:table-row>
|
||||
<fo:table-cell>
|
||||
<fo:block>SAAB</fo:block>
|
||||
</fo:table-cell>
|
||||
<fo:table-cell>
|
||||
<fo:block>$48000</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
</fo:table-body>
|
||||
|
||||
</fo:table>
|
||||
|
||||
</fo:table-and-caption>
|
||||
*/
|
||||
?>
|
||||
<?PHP
|
||||
|
||||
class FO_TableAndCaption extends FO_Object {
|
||||
|
||||
private static $CHILDNODES = array(
|
||||
FO_Table,
|
||||
FO_TableCaption
|
||||
);
|
||||
|
||||
public function parse(DOMNode $node) {
|
||||
$this->processChildNodes($node, self::$CHILDNODES);
|
||||
}
|
||||
}
|
||||
|
||||
class FO_Table extends FO_LayoutObject {
|
||||
private $colCount = 0;
|
||||
|
||||
private static $CHILDNODES = array(
|
||||
FO_TableColumn,
|
||||
FO_TableHeader,
|
||||
FO_TableFooter,
|
||||
FO_TableBody
|
||||
);
|
||||
|
||||
protected function getChildNodes() {
|
||||
return self::$CHILDNODES;
|
||||
}
|
||||
|
||||
protected function initFOObject(FO_Object $col) {
|
||||
if (!$col instanceof FO_TableColumn) {
|
||||
return;
|
||||
}
|
||||
$col->setContext("column", $this->colCount++);
|
||||
}
|
||||
|
||||
protected function postParse(FO_Object $obj) {
|
||||
if ($obj instanceof FO_TableHeader) {
|
||||
$this->setLocalContext("width", $obj->getContext("width"));
|
||||
$this->setLocalContext("height", $this->getContext("height")+
|
||||
$obj->getContext("height"));
|
||||
$this->setContext("y", $this->getContext("y") +
|
||||
$obj->getContext("height"));
|
||||
}
|
||||
else if($obj instanceof FO_TableBody) {
|
||||
$this->setLocalContext("width", $obj->getContext("width"));
|
||||
$this->setLocalContext("height", $this->getContext("height")+
|
||||
$obj->getContext("height"));
|
||||
$this->setContext("y", $this->getContext("y") +
|
||||
$obj->getContext("height"));
|
||||
}
|
||||
else if($obj instanceof FO_TableColumn) {
|
||||
$col = $obj->getContext("column");
|
||||
$this->setContext("column-$col-width", $obj->getContext("width"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class FO_TableCaption extends FO_Object {
|
||||
|
||||
private static $CHILDNODES = array(
|
||||
FO_Block,
|
||||
FO_BlockContainer,
|
||||
FO_ListBlock
|
||||
);
|
||||
|
||||
public function parse(DOMNode $node) {
|
||||
$this->processChildNodes($node, self::$CHILDNODES);
|
||||
}
|
||||
}
|
||||
|
||||
class FO_TableColumn extends FO_Object {
|
||||
|
||||
private static $CHILDNODES = array();
|
||||
|
||||
public function parse(DOMNode $node) {
|
||||
$width = $this->getSizeAttribute($node, "column-width");
|
||||
//calc internal width
|
||||
$this->setContext("width", $width);
|
||||
$this->processChildNodes($node, self::$CHILDNODES);
|
||||
}
|
||||
}
|
||||
|
||||
class FO_TableRow extends FO_LayoutObject {
|
||||
|
||||
private $colIndex = 0;
|
||||
|
||||
private static $CHILDNODES = array(
|
||||
FO_TableCell
|
||||
);
|
||||
|
||||
protected function getChildNodes() {
|
||||
return self::$CHILDNODES;
|
||||
}
|
||||
|
||||
protected function initFOObject(FO_Object $col) {
|
||||
if (!$col instanceof FO_TableCell) {
|
||||
return;
|
||||
}
|
||||
$col->setContext("column", $this->colIndex++);
|
||||
}
|
||||
|
||||
protected function postParse(FO_Object $obj) {
|
||||
if ($obj instanceof FO_TableCell) {
|
||||
$this->setContext("x", $this->getContext("x")+
|
||||
$obj->getContext("width"));
|
||||
$this->setLocalContext("width", $this->getContext("width")+
|
||||
$obj->getContext("width"));
|
||||
if ($this->getContext("height") < $obj->getContext("height")) {
|
||||
$this->setLocalContext("height", $obj->getContext("height"));
|
||||
}
|
||||
}
|
||||
else if ($obj instanceof FO_TableRow) {
|
||||
$this->setLocalContext("width", $obj->getContext("width"));
|
||||
$this->setLocalContext("height", $this->getContext("height")+
|
||||
$obj->getContext("height"));
|
||||
$this->setContext("y", $this->getContext("y") +
|
||||
$obj->getContext("height"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class FO_TableHeader extends FO_TableRow {
|
||||
|
||||
private static $CHILDNODES = array(
|
||||
FO_TableCell,
|
||||
FO_TableRow
|
||||
);
|
||||
|
||||
protected function getChildNodes() {
|
||||
return self::$CHILDNODES;
|
||||
}
|
||||
}
|
||||
|
||||
class FO_TableFooter extends FO_LayoutObject {
|
||||
|
||||
private static $CHILDNODES = array(
|
||||
FO_TableCell,
|
||||
FO_TableRow
|
||||
);
|
||||
|
||||
protected function getChildNodes() {
|
||||
return self::$CHILDNODES;
|
||||
}
|
||||
}
|
||||
|
||||
class FO_TableBody extends FO_LayoutObject {
|
||||
|
||||
private static $CHILDNODES = array(
|
||||
FO_TableCell,
|
||||
FO_TableRow
|
||||
);
|
||||
|
||||
protected function getChildNodes() {
|
||||
return self::$CHILDNODES;
|
||||
}
|
||||
|
||||
protected function postParse(FO_Object $obj) {
|
||||
if ($obj instanceof FO_TableRow) {
|
||||
$this->setLocalContext("width", $obj->getContext("width"));
|
||||
$this->setLocalContext("height", $this->getContext("height")+
|
||||
$obj->getContext("height"));
|
||||
$this->setContext("y", $this->getContext("y") +
|
||||
$obj->getContext("height"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class FO_TableCell extends FO_LayoutObject {
|
||||
|
||||
private static $CHILDNODES = array(
|
||||
FO_Block,
|
||||
FO_BlockContainer,
|
||||
FO_ListBlock,
|
||||
FO_Table,
|
||||
FO_TableAndCaption
|
||||
);
|
||||
|
||||
|
||||
protected function getChildNodes() {
|
||||
return self::$CHILDNODES;
|
||||
}
|
||||
|
||||
public function parse(DOMNode $node) {
|
||||
$col = $this->getContext("column");
|
||||
$width = $this->getContext("column-$col-width");
|
||||
$this->setLocalContext("width", $width);
|
||||
|
||||
parent::parse($node);
|
||||
}
|
||||
|
||||
/**
|
||||
* Overlap borders that the total width isn't larger than the
|
||||
* specified
|
||||
*/
|
||||
protected function drawBordersAndBackground($pos) {
|
||||
list($x1, $y1, $width1, $height1) = $pos[0];
|
||||
list($x2, $y2, $width2, $height2) = $pos[1];
|
||||
$xd = ($x1-$x2)/2;
|
||||
$yd = ($y1-$y2)/2;
|
||||
$wd = ($width2-$width1)/2;
|
||||
$hd = ($height2-$height1)/2;
|
||||
$this->drawBackground($x2, $y2, $width2+$wd, $height2+$hd);
|
||||
$this->drawBorders($x2, $y2, $width2+$wd, $height2+$hd);
|
||||
}
|
||||
|
||||
protected function postParse(FO_Object $obj) {
|
||||
$this->setLocalContext("height", $this->getContext("height")+
|
||||
$obj->getContext("height")+0.5); // oesi - add +0.5 for tablespace
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,7 @@
|
||||
<?php
|
||||
for($i=0;$i<=255;$i++)
|
||||
$fpdf_charwidths['courier'][chr($i)]=600;
|
||||
$fpdf_charwidths['courierB']=$fpdf_charwidths['courier'];
|
||||
$fpdf_charwidths['courierI']=$fpdf_charwidths['courier'];
|
||||
$fpdf_charwidths['courierBI']=$fpdf_charwidths['courier'];
|
||||
?>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['helvetica']=array(
|
||||
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
|
||||
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
|
||||
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
|
||||
'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
|
||||
'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
|
||||
'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
|
||||
chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
|
||||
chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
|
||||
?>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['helveticaB']=array(
|
||||
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
|
||||
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
|
||||
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
|
||||
'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
|
||||
'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
|
||||
'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
|
||||
chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
|
||||
chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
|
||||
?>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['helveticaBI']=array(
|
||||
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
|
||||
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>333,'"'=>474,'#'=>556,'$'=>556,'%'=>889,'&'=>722,'\''=>238,'('=>333,')'=>333,'*'=>389,'+'=>584,
|
||||
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>333,';'=>333,'<'=>584,'='=>584,'>'=>584,'?'=>611,'@'=>975,'A'=>722,
|
||||
'B'=>722,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>556,'K'=>722,'L'=>611,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
|
||||
'X'=>667,'Y'=>667,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>584,'_'=>556,'`'=>333,'a'=>556,'b'=>611,'c'=>556,'d'=>611,'e'=>556,'f'=>333,'g'=>611,'h'=>611,'i'=>278,'j'=>278,'k'=>556,'l'=>278,'m'=>889,
|
||||
'n'=>611,'o'=>611,'p'=>611,'q'=>611,'r'=>389,'s'=>556,'t'=>333,'u'=>611,'v'=>556,'w'=>778,'x'=>556,'y'=>556,'z'=>500,'{'=>389,'|'=>280,'}'=>389,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>278,chr(131)=>556,
|
||||
chr(132)=>500,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>278,chr(146)=>278,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>556,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>280,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>611,chr(182)=>556,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>556,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>611,chr(241)=>611,
|
||||
chr(242)=>611,chr(243)=>611,chr(244)=>611,chr(245)=>611,chr(246)=>611,chr(247)=>584,chr(248)=>611,chr(249)=>611,chr(250)=>611,chr(251)=>611,chr(252)=>611,chr(253)=>556,chr(254)=>611,chr(255)=>556);
|
||||
?>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['helveticaI']=array(
|
||||
chr(0)=>278,chr(1)=>278,chr(2)=>278,chr(3)=>278,chr(4)=>278,chr(5)=>278,chr(6)=>278,chr(7)=>278,chr(8)=>278,chr(9)=>278,chr(10)=>278,chr(11)=>278,chr(12)=>278,chr(13)=>278,chr(14)=>278,chr(15)=>278,chr(16)=>278,chr(17)=>278,chr(18)=>278,chr(19)=>278,chr(20)=>278,chr(21)=>278,
|
||||
chr(22)=>278,chr(23)=>278,chr(24)=>278,chr(25)=>278,chr(26)=>278,chr(27)=>278,chr(28)=>278,chr(29)=>278,chr(30)=>278,chr(31)=>278,' '=>278,'!'=>278,'"'=>355,'#'=>556,'$'=>556,'%'=>889,'&'=>667,'\''=>191,'('=>333,')'=>333,'*'=>389,'+'=>584,
|
||||
','=>278,'-'=>333,'.'=>278,'/'=>278,'0'=>556,'1'=>556,'2'=>556,'3'=>556,'4'=>556,'5'=>556,'6'=>556,'7'=>556,'8'=>556,'9'=>556,':'=>278,';'=>278,'<'=>584,'='=>584,'>'=>584,'?'=>556,'@'=>1015,'A'=>667,
|
||||
'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>722,'I'=>278,'J'=>500,'K'=>667,'L'=>556,'M'=>833,'N'=>722,'O'=>778,'P'=>667,'Q'=>778,'R'=>722,'S'=>667,'T'=>611,'U'=>722,'V'=>667,'W'=>944,
|
||||
'X'=>667,'Y'=>667,'Z'=>611,'['=>278,'\\'=>278,']'=>278,'^'=>469,'_'=>556,'`'=>333,'a'=>556,'b'=>556,'c'=>500,'d'=>556,'e'=>556,'f'=>278,'g'=>556,'h'=>556,'i'=>222,'j'=>222,'k'=>500,'l'=>222,'m'=>833,
|
||||
'n'=>556,'o'=>556,'p'=>556,'q'=>556,'r'=>333,'s'=>500,'t'=>278,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>500,'{'=>334,'|'=>260,'}'=>334,'~'=>584,chr(127)=>350,chr(128)=>556,chr(129)=>350,chr(130)=>222,chr(131)=>556,
|
||||
chr(132)=>333,chr(133)=>1000,chr(134)=>556,chr(135)=>556,chr(136)=>333,chr(137)=>1000,chr(138)=>667,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>222,chr(146)=>222,chr(147)=>333,chr(148)=>333,chr(149)=>350,chr(150)=>556,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>500,chr(155)=>333,chr(156)=>944,chr(157)=>350,chr(158)=>500,chr(159)=>667,chr(160)=>278,chr(161)=>333,chr(162)=>556,chr(163)=>556,chr(164)=>556,chr(165)=>556,chr(166)=>260,chr(167)=>556,chr(168)=>333,chr(169)=>737,chr(170)=>370,chr(171)=>556,chr(172)=>584,chr(173)=>333,chr(174)=>737,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>584,chr(178)=>333,chr(179)=>333,chr(180)=>333,chr(181)=>556,chr(182)=>537,chr(183)=>278,chr(184)=>333,chr(185)=>333,chr(186)=>365,chr(187)=>556,chr(188)=>834,chr(189)=>834,chr(190)=>834,chr(191)=>611,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>278,chr(205)=>278,chr(206)=>278,chr(207)=>278,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>584,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>667,chr(222)=>667,chr(223)=>611,chr(224)=>556,chr(225)=>556,chr(226)=>556,chr(227)=>556,chr(228)=>556,chr(229)=>556,chr(230)=>889,chr(231)=>500,chr(232)=>556,chr(233)=>556,chr(234)=>556,chr(235)=>556,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>556,chr(241)=>556,
|
||||
chr(242)=>556,chr(243)=>556,chr(244)=>556,chr(245)=>556,chr(246)=>556,chr(247)=>584,chr(248)=>611,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
|
||||
?>
|
||||
@@ -0,0 +1,251 @@
|
||||
!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
|
||||
@@ -0,0 +1,255 @@
|
||||
!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
|
||||
@@ -0,0 +1,251 @@
|
||||
!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
|
||||
@@ -0,0 +1,239 @@
|
||||
!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
|
||||
@@ -0,0 +1,249 @@
|
||||
!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
|
||||
@@ -0,0 +1,233 @@
|
||||
!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
|
||||
@@ -0,0 +1,244 @@
|
||||
!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
|
||||
@@ -0,0 +1,247 @@
|
||||
!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
|
||||
@@ -0,0 +1,225 @@
|
||||
!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
|
||||
@@ -0,0 +1,256 @@
|
||||
!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
|
||||
@@ -0,0 +1,248 @@
|
||||
!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
|
||||
@@ -0,0 +1,256 @@
|
||||
!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
|
||||
@@ -0,0 +1,256 @@
|
||||
!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
|
||||
@@ -0,0 +1,256 @@
|
||||
!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
|
||||
@@ -0,0 +1,256 @@
|
||||
!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
|
||||
@@ -0,0 +1,256 @@
|
||||
!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
|
||||
@@ -0,0 +1,250 @@
|
||||
!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
|
||||
@@ -0,0 +1,256 @@
|
||||
!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+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
|
||||
@@ -0,0 +1,256 @@
|
||||
!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+2500 SF100000
|
||||
!81 U+2502 SF110000
|
||||
!82 U+250C SF010000
|
||||
!83 U+2510 SF030000
|
||||
!84 U+2514 SF020000
|
||||
!85 U+2518 SF040000
|
||||
!86 U+251C SF080000
|
||||
!87 U+2524 SF090000
|
||||
!88 U+252C SF060000
|
||||
!89 U+2534 SF070000
|
||||
!8A U+253C SF050000
|
||||
!8B U+2580 upblock
|
||||
!8C U+2584 dnblock
|
||||
!8D U+2588 block
|
||||
!8E U+258C lfblock
|
||||
!8F U+2590 rtblock
|
||||
!90 U+2591 ltshade
|
||||
!91 U+2592 shade
|
||||
!92 U+2593 dkshade
|
||||
!93 U+2320 integraltp
|
||||
!94 U+25A0 filledbox
|
||||
!95 U+2219 periodcentered
|
||||
!96 U+221A radical
|
||||
!97 U+2248 approxequal
|
||||
!98 U+2264 lessequal
|
||||
!99 U+2265 greaterequal
|
||||
!9A U+00A0 space
|
||||
!9B U+2321 integralbt
|
||||
!9C U+00B0 degree
|
||||
!9D U+00B2 twosuperior
|
||||
!9E U+00B7 periodcentered
|
||||
!9F U+00F7 divide
|
||||
!A0 U+2550 SF430000
|
||||
!A1 U+2551 SF240000
|
||||
!A2 U+2552 SF510000
|
||||
!A3 U+0451 afii10071
|
||||
!A4 U+2553 SF520000
|
||||
!A5 U+2554 SF390000
|
||||
!A6 U+2555 SF220000
|
||||
!A7 U+2556 SF210000
|
||||
!A8 U+2557 SF250000
|
||||
!A9 U+2558 SF500000
|
||||
!AA U+2559 SF490000
|
||||
!AB U+255A SF380000
|
||||
!AC U+255B SF280000
|
||||
!AD U+255C SF270000
|
||||
!AE U+255D SF260000
|
||||
!AF U+255E SF360000
|
||||
!B0 U+255F SF370000
|
||||
!B1 U+2560 SF420000
|
||||
!B2 U+2561 SF190000
|
||||
!B3 U+0401 afii10023
|
||||
!B4 U+2562 SF200000
|
||||
!B5 U+2563 SF230000
|
||||
!B6 U+2564 SF470000
|
||||
!B7 U+2565 SF480000
|
||||
!B8 U+2566 SF410000
|
||||
!B9 U+2567 SF450000
|
||||
!BA U+2568 SF460000
|
||||
!BB U+2569 SF400000
|
||||
!BC U+256A SF540000
|
||||
!BD U+256B SF530000
|
||||
!BE U+256C SF440000
|
||||
!BF U+00A9 copyright
|
||||
!C0 U+044E afii10096
|
||||
!C1 U+0430 afii10065
|
||||
!C2 U+0431 afii10066
|
||||
!C3 U+0446 afii10088
|
||||
!C4 U+0434 afii10069
|
||||
!C5 U+0435 afii10070
|
||||
!C6 U+0444 afii10086
|
||||
!C7 U+0433 afii10068
|
||||
!C8 U+0445 afii10087
|
||||
!C9 U+0438 afii10074
|
||||
!CA U+0439 afii10075
|
||||
!CB U+043A afii10076
|
||||
!CC U+043B afii10077
|
||||
!CD U+043C afii10078
|
||||
!CE U+043D afii10079
|
||||
!CF U+043E afii10080
|
||||
!D0 U+043F afii10081
|
||||
!D1 U+044F afii10097
|
||||
!D2 U+0440 afii10082
|
||||
!D3 U+0441 afii10083
|
||||
!D4 U+0442 afii10084
|
||||
!D5 U+0443 afii10085
|
||||
!D6 U+0436 afii10072
|
||||
!D7 U+0432 afii10067
|
||||
!D8 U+044C afii10094
|
||||
!D9 U+044B afii10093
|
||||
!DA U+0437 afii10073
|
||||
!DB U+0448 afii10090
|
||||
!DC U+044D afii10095
|
||||
!DD U+0449 afii10091
|
||||
!DE U+0447 afii10089
|
||||
!DF U+044A afii10092
|
||||
!E0 U+042E afii10048
|
||||
!E1 U+0410 afii10017
|
||||
!E2 U+0411 afii10018
|
||||
!E3 U+0426 afii10040
|
||||
!E4 U+0414 afii10021
|
||||
!E5 U+0415 afii10022
|
||||
!E6 U+0424 afii10038
|
||||
!E7 U+0413 afii10020
|
||||
!E8 U+0425 afii10039
|
||||
!E9 U+0418 afii10026
|
||||
!EA U+0419 afii10027
|
||||
!EB U+041A afii10028
|
||||
!EC U+041B afii10029
|
||||
!ED U+041C afii10030
|
||||
!EE U+041D afii10031
|
||||
!EF U+041E afii10032
|
||||
!F0 U+041F afii10033
|
||||
!F1 U+042F afii10049
|
||||
!F2 U+0420 afii10034
|
||||
!F3 U+0421 afii10035
|
||||
!F4 U+0422 afii10036
|
||||
!F5 U+0423 afii10037
|
||||
!F6 U+0416 afii10024
|
||||
!F7 U+0412 afii10019
|
||||
!F8 U+042C afii10046
|
||||
!F9 U+042B afii10045
|
||||
!FA U+0417 afii10025
|
||||
!FB U+0428 afii10042
|
||||
!FC U+042D afii10047
|
||||
!FD U+0429 afii10043
|
||||
!FE U+0427 afii10041
|
||||
!FF U+042A afii10044
|
||||
@@ -0,0 +1,256 @@
|
||||
!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+2500 SF100000
|
||||
!81 U+2502 SF110000
|
||||
!82 U+250C SF010000
|
||||
!83 U+2510 SF030000
|
||||
!84 U+2514 SF020000
|
||||
!85 U+2518 SF040000
|
||||
!86 U+251C SF080000
|
||||
!87 U+2524 SF090000
|
||||
!88 U+252C SF060000
|
||||
!89 U+2534 SF070000
|
||||
!8A U+253C SF050000
|
||||
!8B U+2580 upblock
|
||||
!8C U+2584 dnblock
|
||||
!8D U+2588 block
|
||||
!8E U+258C lfblock
|
||||
!8F U+2590 rtblock
|
||||
!90 U+2591 ltshade
|
||||
!91 U+2592 shade
|
||||
!92 U+2593 dkshade
|
||||
!93 U+2320 integraltp
|
||||
!94 U+25A0 filledbox
|
||||
!95 U+2022 bullet
|
||||
!96 U+221A radical
|
||||
!97 U+2248 approxequal
|
||||
!98 U+2264 lessequal
|
||||
!99 U+2265 greaterequal
|
||||
!9A U+00A0 space
|
||||
!9B U+2321 integralbt
|
||||
!9C U+00B0 degree
|
||||
!9D U+00B2 twosuperior
|
||||
!9E U+00B7 periodcentered
|
||||
!9F U+00F7 divide
|
||||
!A0 U+2550 SF430000
|
||||
!A1 U+2551 SF240000
|
||||
!A2 U+2552 SF510000
|
||||
!A3 U+0451 afii10071
|
||||
!A4 U+0454 afii10101
|
||||
!A5 U+2554 SF390000
|
||||
!A6 U+0456 afii10103
|
||||
!A7 U+0457 afii10104
|
||||
!A8 U+2557 SF250000
|
||||
!A9 U+2558 SF500000
|
||||
!AA U+2559 SF490000
|
||||
!AB U+255A SF380000
|
||||
!AC U+255B SF280000
|
||||
!AD U+0491 afii10098
|
||||
!AE U+255D SF260000
|
||||
!AF U+255E SF360000
|
||||
!B0 U+255F SF370000
|
||||
!B1 U+2560 SF420000
|
||||
!B2 U+2561 SF190000
|
||||
!B3 U+0401 afii10023
|
||||
!B4 U+0404 afii10053
|
||||
!B5 U+2563 SF230000
|
||||
!B6 U+0406 afii10055
|
||||
!B7 U+0407 afii10056
|
||||
!B8 U+2566 SF410000
|
||||
!B9 U+2567 SF450000
|
||||
!BA U+2568 SF460000
|
||||
!BB U+2569 SF400000
|
||||
!BC U+256A SF540000
|
||||
!BD U+0490 afii10050
|
||||
!BE U+256C SF440000
|
||||
!BF U+00A9 copyright
|
||||
!C0 U+044E afii10096
|
||||
!C1 U+0430 afii10065
|
||||
!C2 U+0431 afii10066
|
||||
!C3 U+0446 afii10088
|
||||
!C4 U+0434 afii10069
|
||||
!C5 U+0435 afii10070
|
||||
!C6 U+0444 afii10086
|
||||
!C7 U+0433 afii10068
|
||||
!C8 U+0445 afii10087
|
||||
!C9 U+0438 afii10074
|
||||
!CA U+0439 afii10075
|
||||
!CB U+043A afii10076
|
||||
!CC U+043B afii10077
|
||||
!CD U+043C afii10078
|
||||
!CE U+043D afii10079
|
||||
!CF U+043E afii10080
|
||||
!D0 U+043F afii10081
|
||||
!D1 U+044F afii10097
|
||||
!D2 U+0440 afii10082
|
||||
!D3 U+0441 afii10083
|
||||
!D4 U+0442 afii10084
|
||||
!D5 U+0443 afii10085
|
||||
!D6 U+0436 afii10072
|
||||
!D7 U+0432 afii10067
|
||||
!D8 U+044C afii10094
|
||||
!D9 U+044B afii10093
|
||||
!DA U+0437 afii10073
|
||||
!DB U+0448 afii10090
|
||||
!DC U+044D afii10095
|
||||
!DD U+0449 afii10091
|
||||
!DE U+0447 afii10089
|
||||
!DF U+044A afii10092
|
||||
!E0 U+042E afii10048
|
||||
!E1 U+0410 afii10017
|
||||
!E2 U+0411 afii10018
|
||||
!E3 U+0426 afii10040
|
||||
!E4 U+0414 afii10021
|
||||
!E5 U+0415 afii10022
|
||||
!E6 U+0424 afii10038
|
||||
!E7 U+0413 afii10020
|
||||
!E8 U+0425 afii10039
|
||||
!E9 U+0418 afii10026
|
||||
!EA U+0419 afii10027
|
||||
!EB U+041A afii10028
|
||||
!EC U+041B afii10029
|
||||
!ED U+041C afii10030
|
||||
!EE U+041D afii10031
|
||||
!EF U+041E afii10032
|
||||
!F0 U+041F afii10033
|
||||
!F1 U+042F afii10049
|
||||
!F2 U+0420 afii10034
|
||||
!F3 U+0421 afii10035
|
||||
!F4 U+0422 afii10036
|
||||
!F5 U+0423 afii10037
|
||||
!F6 U+0416 afii10024
|
||||
!F7 U+0412 afii10019
|
||||
!F8 U+042C afii10046
|
||||
!F9 U+042B afii10045
|
||||
!FA U+0417 afii10025
|
||||
!FB U+0428 afii10042
|
||||
!FC U+042D afii10047
|
||||
!FD U+0429 afii10043
|
||||
!FE U+0427 afii10041
|
||||
!FF U+042A afii10044
|
||||
@@ -0,0 +1,416 @@
|
||||
<?php
|
||||
/*******************************************************************************
|
||||
* Utility to generate font definition files *
|
||||
* Version: 1.13 *
|
||||
* Date: 2004-12-31 *
|
||||
*******************************************************************************/
|
||||
|
||||
function ReadMap($enc)
|
||||
{
|
||||
//Read a map file
|
||||
$file=dirname(__FILE__).'/'.strtolower($enc).'.map';
|
||||
$a=file($file);
|
||||
if(empty($a))
|
||||
die('<B>Error:</B> encoding not found: '.$enc);
|
||||
$cc2gn=array();
|
||||
foreach($a as $l)
|
||||
{
|
||||
if($l{0}=='!')
|
||||
{
|
||||
$e=preg_split('/[ \\t]+/',rtrim($l));
|
||||
$cc=hexdec(substr($e[0],1));
|
||||
$gn=$e[2];
|
||||
$cc2gn[$cc]=$gn;
|
||||
}
|
||||
}
|
||||
for($i=0;$i<=255;$i++)
|
||||
{
|
||||
if(!isset($cc2gn[$i]))
|
||||
$cc2gn[$i]='.notdef';
|
||||
}
|
||||
return $cc2gn;
|
||||
}
|
||||
|
||||
function ReadAFM($file,&$map)
|
||||
{
|
||||
//Read a font metric file
|
||||
$a=file($file);
|
||||
if(empty($a))
|
||||
die('File not found');
|
||||
$widths=array();
|
||||
$fm=array();
|
||||
$fix=array('Edot'=>'Edotaccent','edot'=>'edotaccent','Idot'=>'Idotaccent','Zdot'=>'Zdotaccent','zdot'=>'zdotaccent',
|
||||
'Odblacute'=>'Ohungarumlaut','odblacute'=>'ohungarumlaut','Udblacute'=>'Uhungarumlaut','udblacute'=>'uhungarumlaut',
|
||||
'Gcedilla'=>'Gcommaaccent','gcedilla'=>'gcommaaccent','Kcedilla'=>'Kcommaaccent','kcedilla'=>'kcommaaccent',
|
||||
'Lcedilla'=>'Lcommaaccent','lcedilla'=>'lcommaaccent','Ncedilla'=>'Ncommaaccent','ncedilla'=>'ncommaaccent',
|
||||
'Rcedilla'=>'Rcommaaccent','rcedilla'=>'rcommaaccent','Scedilla'=>'Scommaaccent','scedilla'=>'scommaaccent',
|
||||
'Tcedilla'=>'Tcommaaccent','tcedilla'=>'tcommaaccent','Dslash'=>'Dcroat','dslash'=>'dcroat','Dmacron'=>'Dcroat','dmacron'=>'dcroat',
|
||||
'combininggraveaccent'=>'gravecomb','combininghookabove'=>'hookabovecomb','combiningtildeaccent'=>'tildecomb',
|
||||
'combiningacuteaccent'=>'acutecomb','combiningdotbelow'=>'dotbelowcomb','dongsign'=>'dong');
|
||||
foreach($a as $l)
|
||||
{
|
||||
$e=explode(' ',rtrim($l));
|
||||
if(count($e)<2)
|
||||
continue;
|
||||
$code=$e[0];
|
||||
$param=$e[1];
|
||||
if($code=='C')
|
||||
{
|
||||
//Character metrics
|
||||
$cc=(int)$e[1];
|
||||
$w=$e[4];
|
||||
$gn=$e[7];
|
||||
if(substr($gn,-4)=='20AC')
|
||||
$gn='Euro';
|
||||
if(isset($fix[$gn]))
|
||||
{
|
||||
//Fix incorrect glyph name
|
||||
foreach($map as $c=>$n)
|
||||
{
|
||||
if($n==$fix[$gn])
|
||||
$map[$c]=$gn;
|
||||
}
|
||||
}
|
||||
if(empty($map))
|
||||
{
|
||||
//Symbolic font: use built-in encoding
|
||||
$widths[$cc]=$w;
|
||||
}
|
||||
else
|
||||
{
|
||||
$widths[$gn]=$w;
|
||||
if($gn=='X')
|
||||
$fm['CapXHeight']=$e[13];
|
||||
}
|
||||
if($gn=='.notdef')
|
||||
$fm['MissingWidth']=$w;
|
||||
}
|
||||
elseif($code=='FontName')
|
||||
$fm['FontName']=$param;
|
||||
elseif($code=='Weight')
|
||||
$fm['Weight']=$param;
|
||||
elseif($code=='ItalicAngle')
|
||||
$fm['ItalicAngle']=(double)$param;
|
||||
elseif($code=='Ascender')
|
||||
$fm['Ascender']=(int)$param;
|
||||
elseif($code=='Descender')
|
||||
$fm['Descender']=(int)$param;
|
||||
elseif($code=='UnderlineThickness')
|
||||
$fm['UnderlineThickness']=(int)$param;
|
||||
elseif($code=='UnderlinePosition')
|
||||
$fm['UnderlinePosition']=(int)$param;
|
||||
elseif($code=='IsFixedPitch')
|
||||
$fm['IsFixedPitch']=($param=='true');
|
||||
elseif($code=='FontBBox')
|
||||
$fm['FontBBox']=array($e[1],$e[2],$e[3],$e[4]);
|
||||
elseif($code=='CapHeight')
|
||||
$fm['CapHeight']=(int)$param;
|
||||
elseif($code=='StdVW')
|
||||
$fm['StdVW']=(int)$param;
|
||||
}
|
||||
if(!isset($fm['FontName']))
|
||||
die('FontName not found');
|
||||
if(!empty($map))
|
||||
{
|
||||
if(!isset($widths['.notdef']))
|
||||
$widths['.notdef']=600;
|
||||
if(!isset($widths['Delta']) and isset($widths['increment']))
|
||||
$widths['Delta']=$widths['increment'];
|
||||
//Order widths according to map
|
||||
for($i=0;$i<=255;$i++)
|
||||
{
|
||||
if(!isset($widths[$map[$i]]))
|
||||
{
|
||||
echo '<B>Warning:</B> character '.$map[$i].' is missing<BR>';
|
||||
$widths[$i]=$widths['.notdef'];
|
||||
}
|
||||
else
|
||||
$widths[$i]=$widths[$map[$i]];
|
||||
}
|
||||
}
|
||||
$fm['Widths']=$widths;
|
||||
return $fm;
|
||||
}
|
||||
|
||||
function MakeFontDescriptor($fm,$symbolic)
|
||||
{
|
||||
//Ascent
|
||||
$asc=(isset($fm['Ascender']) ? $fm['Ascender'] : 1000);
|
||||
$fd="array('Ascent'=>".$asc;
|
||||
//Descent
|
||||
$desc=(isset($fm['Descender']) ? $fm['Descender'] : -200);
|
||||
$fd.=",'Descent'=>".$desc;
|
||||
//CapHeight
|
||||
if(isset($fm['CapHeight']))
|
||||
$ch=$fm['CapHeight'];
|
||||
elseif(isset($fm['CapXHeight']))
|
||||
$ch=$fm['CapXHeight'];
|
||||
else
|
||||
$ch=$asc;
|
||||
$fd.=",'CapHeight'=>".$ch;
|
||||
//Flags
|
||||
$flags=0;
|
||||
if(isset($fm['IsFixedPitch']) and $fm['IsFixedPitch'])
|
||||
$flags+=1<<0;
|
||||
if($symbolic)
|
||||
$flags+=1<<2;
|
||||
if(!$symbolic)
|
||||
$flags+=1<<5;
|
||||
if(isset($fm['ItalicAngle']) and $fm['ItalicAngle']!=0)
|
||||
$flags+=1<<6;
|
||||
$fd.=",'Flags'=>".$flags;
|
||||
//FontBBox
|
||||
if(isset($fm['FontBBox']))
|
||||
$fbb=$fm['FontBBox'];
|
||||
else
|
||||
$fbb=array(0,$des-100,1000,$asc+100);
|
||||
$fd.=",'FontBBox'=>'[".$fbb[0].' '.$fbb[1].' '.$fbb[2].' '.$fbb[3]."]'";
|
||||
//ItalicAngle
|
||||
$ia=(isset($fm['ItalicAngle']) ? $fm['ItalicAngle'] : 0);
|
||||
$fd.=",'ItalicAngle'=>".$ia;
|
||||
//StemV
|
||||
if(isset($fm['StdVW']))
|
||||
$stemv=$fm['StdVW'];
|
||||
elseif(isset($fm['Weight']) and eregi('(bold|black)',$fm['Weight']))
|
||||
$stemv=120;
|
||||
else
|
||||
$stemv=70;
|
||||
$fd.=",'StemV'=>".$stemv;
|
||||
//MissingWidth
|
||||
if(isset($fm['MissingWidth']))
|
||||
$fd.=",'MissingWidth'=>".$fm['MissingWidth'];
|
||||
$fd.=')';
|
||||
return $fd;
|
||||
}
|
||||
|
||||
function MakeWidthArray($fm)
|
||||
{
|
||||
//Make character width array
|
||||
$s="array(\n\t";
|
||||
$cw=$fm['Widths'];
|
||||
for($i=0;$i<=255;$i++)
|
||||
{
|
||||
if(chr($i)=="'")
|
||||
$s.="'\\''";
|
||||
elseif(chr($i)=="\\")
|
||||
$s.="'\\\\'";
|
||||
elseif($i>=32 and $i<=126)
|
||||
$s.="'".chr($i)."'";
|
||||
else
|
||||
$s.="chr($i)";
|
||||
$s.='=>'.$fm['Widths'][$i];
|
||||
if($i<255)
|
||||
$s.=',';
|
||||
if(($i+1)%22==0)
|
||||
$s.="\n\t";
|
||||
}
|
||||
$s.=')';
|
||||
return $s;
|
||||
}
|
||||
|
||||
function MakeFontEncoding($map)
|
||||
{
|
||||
//Build differences from reference encoding
|
||||
$ref=ReadMap('cp1252');
|
||||
$s='';
|
||||
$last=0;
|
||||
for($i=32;$i<=255;$i++)
|
||||
{
|
||||
if($map[$i]!=$ref[$i])
|
||||
{
|
||||
if($i!=$last+1)
|
||||
$s.=$i.' ';
|
||||
$last=$i;
|
||||
$s.='/'.$map[$i].' ';
|
||||
}
|
||||
}
|
||||
return rtrim($s);
|
||||
}
|
||||
|
||||
function SaveToFile($file,$s,$mode='t')
|
||||
{
|
||||
$f=fopen($file,'w'.$mode);
|
||||
if(!$f)
|
||||
die('Can\'t write to file '.$file);
|
||||
fwrite($f,$s,strlen($s));
|
||||
fclose($f);
|
||||
}
|
||||
|
||||
function ReadShort($f)
|
||||
{
|
||||
$a=unpack('n1n',fread($f,2));
|
||||
return $a['n'];
|
||||
}
|
||||
|
||||
function ReadLong($f)
|
||||
{
|
||||
$a=unpack('N1N',fread($f,4));
|
||||
return $a['N'];
|
||||
}
|
||||
|
||||
function CheckTTF($file)
|
||||
{
|
||||
//Check if font license allows embedding
|
||||
$f=fopen($file,'rb');
|
||||
if(!$f)
|
||||
die('<B>Error:</B> Can\'t open '.$file);
|
||||
//Extract number of tables
|
||||
fseek($f,4,SEEK_CUR);
|
||||
$nb=ReadShort($f);
|
||||
fseek($f,6,SEEK_CUR);
|
||||
//Seek OS/2 table
|
||||
$found=false;
|
||||
for($i=0;$i<$nb;$i++)
|
||||
{
|
||||
if(fread($f,4)=='OS/2')
|
||||
{
|
||||
$found=true;
|
||||
break;
|
||||
}
|
||||
fseek($f,12,SEEK_CUR);
|
||||
}
|
||||
if(!$found)
|
||||
{
|
||||
fclose($f);
|
||||
return;
|
||||
}
|
||||
fseek($f,4,SEEK_CUR);
|
||||
$offset=ReadLong($f);
|
||||
fseek($f,$offset,SEEK_SET);
|
||||
//Extract fsType flags
|
||||
fseek($f,8,SEEK_CUR);
|
||||
$fsType=ReadShort($f);
|
||||
$rl=($fsType & 0x02)!=0;
|
||||
$pp=($fsType & 0x04)!=0;
|
||||
$e=($fsType & 0x08)!=0;
|
||||
fclose($f);
|
||||
if($rl and !$pp and !$e)
|
||||
echo '<B>Warning:</B> font license does not allow embedding';
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
* $fontfile : chemin du fichier TTF (ou chaîne vide si pas d'incorporation) *
|
||||
* $afmfile : chemin du fichier AFM *
|
||||
* $enc : encodage (ou chaîne vide si la police est symbolique) *
|
||||
* $patch : patch optionnel pour l'encodage *
|
||||
* $type : type de la police si $fontfile est vide *
|
||||
*******************************************************************************/
|
||||
function MakeFont($fontfile,$afmfile,$enc='cp1252',$patch=array(),$type='TrueType')
|
||||
{
|
||||
//Generate a font definition file
|
||||
set_magic_quotes_runtime(0);
|
||||
ini_set('auto_detect_line_endings','1');
|
||||
if($enc)
|
||||
{
|
||||
$map=ReadMap($enc);
|
||||
foreach($patch as $cc=>$gn)
|
||||
$map[$cc]=$gn;
|
||||
}
|
||||
else
|
||||
$map=array();
|
||||
if(!file_exists($afmfile))
|
||||
die('<B>Error:</B> AFM file not found: '.$afmfile);
|
||||
$fm=ReadAFM($afmfile,$map);
|
||||
if($enc)
|
||||
$diff=MakeFontEncoding($map);
|
||||
else
|
||||
$diff='';
|
||||
$fd=MakeFontDescriptor($fm,empty($map));
|
||||
//Find font type
|
||||
if($fontfile)
|
||||
{
|
||||
$ext=strtolower(substr($fontfile,-3));
|
||||
if($ext=='ttf')
|
||||
$type='TrueType';
|
||||
elseif($ext=='pfb')
|
||||
$type='Type1';
|
||||
else
|
||||
die('<B>Error:</B> unrecognized font file extension: '.$ext);
|
||||
}
|
||||
else
|
||||
{
|
||||
if($type!='TrueType' and $type!='Type1')
|
||||
die('<B>Error:</B> incorrect font type: '.$type);
|
||||
}
|
||||
//Start generation
|
||||
$s='<?php'."\n";
|
||||
$s.='$type=\''.$type."';\n";
|
||||
$s.='$name=\''.$fm['FontName']."';\n";
|
||||
$s.='$desc='.$fd.";\n";
|
||||
if(!isset($fm['UnderlinePosition']))
|
||||
$fm['UnderlinePosition']=-100;
|
||||
if(!isset($fm['UnderlineThickness']))
|
||||
$fm['UnderlineThickness']=50;
|
||||
$s.='$up='.$fm['UnderlinePosition'].";\n";
|
||||
$s.='$ut='.$fm['UnderlineThickness'].";\n";
|
||||
$w=MakeWidthArray($fm);
|
||||
$s.='$cw='.$w.";\n";
|
||||
$s.='$enc=\''.$enc."';\n";
|
||||
$s.='$diff=\''.$diff."';\n";
|
||||
$basename=substr(basename($afmfile),0,-4);
|
||||
if($fontfile)
|
||||
{
|
||||
//Embedded font
|
||||
if(!file_exists($fontfile))
|
||||
die('<B>Error:</B> font file not found: '.$fontfile);
|
||||
if($type=='TrueType')
|
||||
CheckTTF($fontfile);
|
||||
$f=fopen($fontfile,'rb');
|
||||
if(!$f)
|
||||
die('<B>Error:</B> Can\'t open '.$fontfile);
|
||||
$file=fread($f,filesize($fontfile));
|
||||
fclose($f);
|
||||
if($type=='Type1')
|
||||
{
|
||||
//Find first two sections and discard third one
|
||||
$header=(ord($file{0})==128);
|
||||
if($header)
|
||||
{
|
||||
//Strip first binary header
|
||||
$file=substr($file,6);
|
||||
}
|
||||
$pos=strpos($file,'eexec');
|
||||
if(!$pos)
|
||||
die('<B>Error:</B> font file does not seem to be valid Type1');
|
||||
$size1=$pos+6;
|
||||
if($header and ord($file{$size1})==128)
|
||||
{
|
||||
//Strip second binary header
|
||||
$file=substr($file,0,$size1).substr($file,$size1+6);
|
||||
}
|
||||
$pos=strpos($file,'00000000');
|
||||
if(!$pos)
|
||||
die('<B>Error:</B> font file does not seem to be valid Type1');
|
||||
$size2=$pos-$size1;
|
||||
$file=substr($file,0,$size1+$size2);
|
||||
}
|
||||
if(function_exists('gzcompress'))
|
||||
{
|
||||
$cmp=$basename.'.z';
|
||||
SaveToFile($cmp,gzcompress($file),'b');
|
||||
$s.='$file=\''.$cmp."';\n";
|
||||
echo 'Font file compressed ('.$cmp.')<BR>';
|
||||
}
|
||||
else
|
||||
{
|
||||
$s.='$file=\''.basename($fontfile)."';\n";
|
||||
echo '<B>Notice:</B> font file could not be compressed (zlib extension not available)<BR>';
|
||||
}
|
||||
if($type=='Type1')
|
||||
{
|
||||
$s.='$size1='.$size1.";\n";
|
||||
$s.='$size2='.$size2.";\n";
|
||||
}
|
||||
else
|
||||
$s.='$originalsize='.filesize($fontfile).";\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
//Not embedded font
|
||||
$s.='$file='."'';\n";
|
||||
}
|
||||
$s.="?>\n";
|
||||
SaveToFile($basename.'.php',$s);
|
||||
echo 'Font definition file generated ('.$basename.'.php'.')<BR>';
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['symbol']=array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>713,'#'=>500,'$'=>549,'%'=>833,'&'=>778,'\''=>439,'('=>333,')'=>333,'*'=>500,'+'=>549,
|
||||
','=>250,'-'=>549,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>549,'='=>549,'>'=>549,'?'=>444,'@'=>549,'A'=>722,
|
||||
'B'=>667,'C'=>722,'D'=>612,'E'=>611,'F'=>763,'G'=>603,'H'=>722,'I'=>333,'J'=>631,'K'=>722,'L'=>686,'M'=>889,'N'=>722,'O'=>722,'P'=>768,'Q'=>741,'R'=>556,'S'=>592,'T'=>611,'U'=>690,'V'=>439,'W'=>768,
|
||||
'X'=>645,'Y'=>795,'Z'=>611,'['=>333,'\\'=>863,']'=>333,'^'=>658,'_'=>500,'`'=>500,'a'=>631,'b'=>549,'c'=>549,'d'=>494,'e'=>439,'f'=>521,'g'=>411,'h'=>603,'i'=>329,'j'=>603,'k'=>549,'l'=>549,'m'=>576,
|
||||
'n'=>521,'o'=>549,'p'=>549,'q'=>521,'r'=>549,'s'=>603,'t'=>439,'u'=>576,'v'=>713,'w'=>686,'x'=>493,'y'=>686,'z'=>494,'{'=>480,'|'=>200,'}'=>480,'~'=>549,chr(127)=>0,chr(128)=>0,chr(129)=>0,chr(130)=>0,chr(131)=>0,
|
||||
chr(132)=>0,chr(133)=>0,chr(134)=>0,chr(135)=>0,chr(136)=>0,chr(137)=>0,chr(138)=>0,chr(139)=>0,chr(140)=>0,chr(141)=>0,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
|
||||
chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>750,chr(161)=>620,chr(162)=>247,chr(163)=>549,chr(164)=>167,chr(165)=>713,chr(166)=>500,chr(167)=>753,chr(168)=>753,chr(169)=>753,chr(170)=>753,chr(171)=>1042,chr(172)=>987,chr(173)=>603,chr(174)=>987,chr(175)=>603,
|
||||
chr(176)=>400,chr(177)=>549,chr(178)=>411,chr(179)=>549,chr(180)=>549,chr(181)=>713,chr(182)=>494,chr(183)=>460,chr(184)=>549,chr(185)=>549,chr(186)=>549,chr(187)=>549,chr(188)=>1000,chr(189)=>603,chr(190)=>1000,chr(191)=>658,chr(192)=>823,chr(193)=>686,chr(194)=>795,chr(195)=>987,chr(196)=>768,chr(197)=>768,
|
||||
chr(198)=>823,chr(199)=>768,chr(200)=>768,chr(201)=>713,chr(202)=>713,chr(203)=>713,chr(204)=>713,chr(205)=>713,chr(206)=>713,chr(207)=>713,chr(208)=>768,chr(209)=>713,chr(210)=>790,chr(211)=>790,chr(212)=>890,chr(213)=>823,chr(214)=>549,chr(215)=>250,chr(216)=>713,chr(217)=>603,chr(218)=>603,chr(219)=>1042,
|
||||
chr(220)=>987,chr(221)=>603,chr(222)=>987,chr(223)=>603,chr(224)=>494,chr(225)=>329,chr(226)=>790,chr(227)=>790,chr(228)=>786,chr(229)=>713,chr(230)=>384,chr(231)=>384,chr(232)=>384,chr(233)=>384,chr(234)=>384,chr(235)=>384,chr(236)=>494,chr(237)=>494,chr(238)=>494,chr(239)=>494,chr(240)=>0,chr(241)=>329,
|
||||
chr(242)=>274,chr(243)=>686,chr(244)=>686,chr(245)=>686,chr(246)=>384,chr(247)=>384,chr(248)=>384,chr(249)=>384,chr(250)=>384,chr(251)=>384,chr(252)=>494,chr(253)=>494,chr(254)=>494,chr(255)=>0);
|
||||
?>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['times']=array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>408,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>180,'('=>333,')'=>333,'*'=>500,'+'=>564,
|
||||
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>278,';'=>278,'<'=>564,'='=>564,'>'=>564,'?'=>444,'@'=>921,'A'=>722,
|
||||
'B'=>667,'C'=>667,'D'=>722,'E'=>611,'F'=>556,'G'=>722,'H'=>722,'I'=>333,'J'=>389,'K'=>722,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>556,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>722,'W'=>944,
|
||||
'X'=>722,'Y'=>722,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>469,'_'=>500,'`'=>333,'a'=>444,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
|
||||
'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>333,'s'=>389,'t'=>278,'u'=>500,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>480,'|'=>200,'}'=>480,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
|
||||
chr(132)=>444,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>889,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>444,chr(148)=>444,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>980,
|
||||
chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>200,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>564,chr(173)=>333,chr(174)=>760,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>564,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>453,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>444,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
|
||||
chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>564,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>722,chr(222)=>556,chr(223)=>500,chr(224)=>444,chr(225)=>444,chr(226)=>444,chr(227)=>444,chr(228)=>444,chr(229)=>444,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
|
||||
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>564,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>500,chr(254)=>500,chr(255)=>500);
|
||||
?>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['timesB']=array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>555,'#'=>500,'$'=>500,'%'=>1000,'&'=>833,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
|
||||
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>930,'A'=>722,
|
||||
'B'=>667,'C'=>722,'D'=>722,'E'=>667,'F'=>611,'G'=>778,'H'=>778,'I'=>389,'J'=>500,'K'=>778,'L'=>667,'M'=>944,'N'=>722,'O'=>778,'P'=>611,'Q'=>778,'R'=>722,'S'=>556,'T'=>667,'U'=>722,'V'=>722,'W'=>1000,
|
||||
'X'=>722,'Y'=>722,'Z'=>667,'['=>333,'\\'=>278,']'=>333,'^'=>581,'_'=>500,'`'=>333,'a'=>500,'b'=>556,'c'=>444,'d'=>556,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>333,'k'=>556,'l'=>278,'m'=>833,
|
||||
'n'=>556,'o'=>500,'p'=>556,'q'=>556,'r'=>444,'s'=>389,'t'=>333,'u'=>556,'v'=>500,'w'=>722,'x'=>500,'y'=>500,'z'=>444,'{'=>394,'|'=>220,'}'=>394,'~'=>520,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
|
||||
chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>1000,chr(141)=>350,chr(142)=>667,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>444,chr(159)=>722,chr(160)=>250,chr(161)=>333,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>300,chr(171)=>500,chr(172)=>570,chr(173)=>333,chr(174)=>747,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>556,chr(182)=>540,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>330,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>722,chr(193)=>722,chr(194)=>722,chr(195)=>722,chr(196)=>722,chr(197)=>722,
|
||||
chr(198)=>1000,chr(199)=>722,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>778,chr(211)=>778,chr(212)=>778,chr(213)=>778,chr(214)=>778,chr(215)=>570,chr(216)=>778,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>722,chr(222)=>611,chr(223)=>556,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
|
||||
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>500,chr(254)=>556,chr(255)=>500);
|
||||
?>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['timesBI']=array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>389,'"'=>555,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>278,'('=>333,')'=>333,'*'=>500,'+'=>570,
|
||||
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>570,'='=>570,'>'=>570,'?'=>500,'@'=>832,'A'=>667,
|
||||
'B'=>667,'C'=>667,'D'=>722,'E'=>667,'F'=>667,'G'=>722,'H'=>778,'I'=>389,'J'=>500,'K'=>667,'L'=>611,'M'=>889,'N'=>722,'O'=>722,'P'=>611,'Q'=>722,'R'=>667,'S'=>556,'T'=>611,'U'=>722,'V'=>667,'W'=>889,
|
||||
'X'=>667,'Y'=>611,'Z'=>611,'['=>333,'\\'=>278,']'=>333,'^'=>570,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>333,'g'=>500,'h'=>556,'i'=>278,'j'=>278,'k'=>500,'l'=>278,'m'=>778,
|
||||
'n'=>556,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>556,'v'=>444,'w'=>667,'x'=>500,'y'=>444,'z'=>389,'{'=>348,'|'=>220,'}'=>348,'~'=>570,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
|
||||
chr(132)=>500,chr(133)=>1000,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>556,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>611,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>500,chr(148)=>500,chr(149)=>350,chr(150)=>500,chr(151)=>1000,chr(152)=>333,chr(153)=>1000,
|
||||
chr(154)=>389,chr(155)=>333,chr(156)=>722,chr(157)=>350,chr(158)=>389,chr(159)=>611,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>220,chr(167)=>500,chr(168)=>333,chr(169)=>747,chr(170)=>266,chr(171)=>500,chr(172)=>606,chr(173)=>333,chr(174)=>747,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>570,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>576,chr(182)=>500,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>300,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>667,chr(193)=>667,chr(194)=>667,chr(195)=>667,chr(196)=>667,chr(197)=>667,
|
||||
chr(198)=>944,chr(199)=>667,chr(200)=>667,chr(201)=>667,chr(202)=>667,chr(203)=>667,chr(204)=>389,chr(205)=>389,chr(206)=>389,chr(207)=>389,chr(208)=>722,chr(209)=>722,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>570,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>611,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>722,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>556,
|
||||
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>570,chr(248)=>500,chr(249)=>556,chr(250)=>556,chr(251)=>556,chr(252)=>556,chr(253)=>444,chr(254)=>500,chr(255)=>444);
|
||||
?>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['timesI']=array(
|
||||
chr(0)=>250,chr(1)=>250,chr(2)=>250,chr(3)=>250,chr(4)=>250,chr(5)=>250,chr(6)=>250,chr(7)=>250,chr(8)=>250,chr(9)=>250,chr(10)=>250,chr(11)=>250,chr(12)=>250,chr(13)=>250,chr(14)=>250,chr(15)=>250,chr(16)=>250,chr(17)=>250,chr(18)=>250,chr(19)=>250,chr(20)=>250,chr(21)=>250,
|
||||
chr(22)=>250,chr(23)=>250,chr(24)=>250,chr(25)=>250,chr(26)=>250,chr(27)=>250,chr(28)=>250,chr(29)=>250,chr(30)=>250,chr(31)=>250,' '=>250,'!'=>333,'"'=>420,'#'=>500,'$'=>500,'%'=>833,'&'=>778,'\''=>214,'('=>333,')'=>333,'*'=>500,'+'=>675,
|
||||
','=>250,'-'=>333,'.'=>250,'/'=>278,'0'=>500,'1'=>500,'2'=>500,'3'=>500,'4'=>500,'5'=>500,'6'=>500,'7'=>500,'8'=>500,'9'=>500,':'=>333,';'=>333,'<'=>675,'='=>675,'>'=>675,'?'=>500,'@'=>920,'A'=>611,
|
||||
'B'=>611,'C'=>667,'D'=>722,'E'=>611,'F'=>611,'G'=>722,'H'=>722,'I'=>333,'J'=>444,'K'=>667,'L'=>556,'M'=>833,'N'=>667,'O'=>722,'P'=>611,'Q'=>722,'R'=>611,'S'=>500,'T'=>556,'U'=>722,'V'=>611,'W'=>833,
|
||||
'X'=>611,'Y'=>556,'Z'=>556,'['=>389,'\\'=>278,']'=>389,'^'=>422,'_'=>500,'`'=>333,'a'=>500,'b'=>500,'c'=>444,'d'=>500,'e'=>444,'f'=>278,'g'=>500,'h'=>500,'i'=>278,'j'=>278,'k'=>444,'l'=>278,'m'=>722,
|
||||
'n'=>500,'o'=>500,'p'=>500,'q'=>500,'r'=>389,'s'=>389,'t'=>278,'u'=>500,'v'=>444,'w'=>667,'x'=>444,'y'=>444,'z'=>389,'{'=>400,'|'=>275,'}'=>400,'~'=>541,chr(127)=>350,chr(128)=>500,chr(129)=>350,chr(130)=>333,chr(131)=>500,
|
||||
chr(132)=>556,chr(133)=>889,chr(134)=>500,chr(135)=>500,chr(136)=>333,chr(137)=>1000,chr(138)=>500,chr(139)=>333,chr(140)=>944,chr(141)=>350,chr(142)=>556,chr(143)=>350,chr(144)=>350,chr(145)=>333,chr(146)=>333,chr(147)=>556,chr(148)=>556,chr(149)=>350,chr(150)=>500,chr(151)=>889,chr(152)=>333,chr(153)=>980,
|
||||
chr(154)=>389,chr(155)=>333,chr(156)=>667,chr(157)=>350,chr(158)=>389,chr(159)=>556,chr(160)=>250,chr(161)=>389,chr(162)=>500,chr(163)=>500,chr(164)=>500,chr(165)=>500,chr(166)=>275,chr(167)=>500,chr(168)=>333,chr(169)=>760,chr(170)=>276,chr(171)=>500,chr(172)=>675,chr(173)=>333,chr(174)=>760,chr(175)=>333,
|
||||
chr(176)=>400,chr(177)=>675,chr(178)=>300,chr(179)=>300,chr(180)=>333,chr(181)=>500,chr(182)=>523,chr(183)=>250,chr(184)=>333,chr(185)=>300,chr(186)=>310,chr(187)=>500,chr(188)=>750,chr(189)=>750,chr(190)=>750,chr(191)=>500,chr(192)=>611,chr(193)=>611,chr(194)=>611,chr(195)=>611,chr(196)=>611,chr(197)=>611,
|
||||
chr(198)=>889,chr(199)=>667,chr(200)=>611,chr(201)=>611,chr(202)=>611,chr(203)=>611,chr(204)=>333,chr(205)=>333,chr(206)=>333,chr(207)=>333,chr(208)=>722,chr(209)=>667,chr(210)=>722,chr(211)=>722,chr(212)=>722,chr(213)=>722,chr(214)=>722,chr(215)=>675,chr(216)=>722,chr(217)=>722,chr(218)=>722,chr(219)=>722,
|
||||
chr(220)=>722,chr(221)=>556,chr(222)=>611,chr(223)=>500,chr(224)=>500,chr(225)=>500,chr(226)=>500,chr(227)=>500,chr(228)=>500,chr(229)=>500,chr(230)=>667,chr(231)=>444,chr(232)=>444,chr(233)=>444,chr(234)=>444,chr(235)=>444,chr(236)=>278,chr(237)=>278,chr(238)=>278,chr(239)=>278,chr(240)=>500,chr(241)=>500,
|
||||
chr(242)=>500,chr(243)=>500,chr(244)=>500,chr(245)=>500,chr(246)=>500,chr(247)=>675,chr(248)=>500,chr(249)=>500,chr(250)=>500,chr(251)=>500,chr(252)=>500,chr(253)=>444,chr(254)=>500,chr(255)=>444);
|
||||
?>
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
$fpdf_charwidths['zapfdingbats']=array(
|
||||
chr(0)=>0,chr(1)=>0,chr(2)=>0,chr(3)=>0,chr(4)=>0,chr(5)=>0,chr(6)=>0,chr(7)=>0,chr(8)=>0,chr(9)=>0,chr(10)=>0,chr(11)=>0,chr(12)=>0,chr(13)=>0,chr(14)=>0,chr(15)=>0,chr(16)=>0,chr(17)=>0,chr(18)=>0,chr(19)=>0,chr(20)=>0,chr(21)=>0,
|
||||
chr(22)=>0,chr(23)=>0,chr(24)=>0,chr(25)=>0,chr(26)=>0,chr(27)=>0,chr(28)=>0,chr(29)=>0,chr(30)=>0,chr(31)=>0,' '=>278,'!'=>974,'"'=>961,'#'=>974,'$'=>980,'%'=>719,'&'=>789,'\''=>790,'('=>791,')'=>690,'*'=>960,'+'=>939,
|
||||
','=>549,'-'=>855,'.'=>911,'/'=>933,'0'=>911,'1'=>945,'2'=>974,'3'=>755,'4'=>846,'5'=>762,'6'=>761,'7'=>571,'8'=>677,'9'=>763,':'=>760,';'=>759,'<'=>754,'='=>494,'>'=>552,'?'=>537,'@'=>577,'A'=>692,
|
||||
'B'=>786,'C'=>788,'D'=>788,'E'=>790,'F'=>793,'G'=>794,'H'=>816,'I'=>823,'J'=>789,'K'=>841,'L'=>823,'M'=>833,'N'=>816,'O'=>831,'P'=>923,'Q'=>744,'R'=>723,'S'=>749,'T'=>790,'U'=>792,'V'=>695,'W'=>776,
|
||||
'X'=>768,'Y'=>792,'Z'=>759,'['=>707,'\\'=>708,']'=>682,'^'=>701,'_'=>826,'`'=>815,'a'=>789,'b'=>789,'c'=>707,'d'=>687,'e'=>696,'f'=>689,'g'=>786,'h'=>787,'i'=>713,'j'=>791,'k'=>785,'l'=>791,'m'=>873,
|
||||
'n'=>761,'o'=>762,'p'=>762,'q'=>759,'r'=>759,'s'=>892,'t'=>892,'u'=>788,'v'=>784,'w'=>438,'x'=>138,'y'=>277,'z'=>415,'{'=>392,'|'=>392,'}'=>668,'~'=>668,chr(127)=>0,chr(128)=>390,chr(129)=>390,chr(130)=>317,chr(131)=>317,
|
||||
chr(132)=>276,chr(133)=>276,chr(134)=>509,chr(135)=>509,chr(136)=>410,chr(137)=>410,chr(138)=>234,chr(139)=>234,chr(140)=>334,chr(141)=>334,chr(142)=>0,chr(143)=>0,chr(144)=>0,chr(145)=>0,chr(146)=>0,chr(147)=>0,chr(148)=>0,chr(149)=>0,chr(150)=>0,chr(151)=>0,chr(152)=>0,chr(153)=>0,
|
||||
chr(154)=>0,chr(155)=>0,chr(156)=>0,chr(157)=>0,chr(158)=>0,chr(159)=>0,chr(160)=>0,chr(161)=>732,chr(162)=>544,chr(163)=>544,chr(164)=>910,chr(165)=>667,chr(166)=>760,chr(167)=>760,chr(168)=>776,chr(169)=>595,chr(170)=>694,chr(171)=>626,chr(172)=>788,chr(173)=>788,chr(174)=>788,chr(175)=>788,
|
||||
chr(176)=>788,chr(177)=>788,chr(178)=>788,chr(179)=>788,chr(180)=>788,chr(181)=>788,chr(182)=>788,chr(183)=>788,chr(184)=>788,chr(185)=>788,chr(186)=>788,chr(187)=>788,chr(188)=>788,chr(189)=>788,chr(190)=>788,chr(191)=>788,chr(192)=>788,chr(193)=>788,chr(194)=>788,chr(195)=>788,chr(196)=>788,chr(197)=>788,
|
||||
chr(198)=>788,chr(199)=>788,chr(200)=>788,chr(201)=>788,chr(202)=>788,chr(203)=>788,chr(204)=>788,chr(205)=>788,chr(206)=>788,chr(207)=>788,chr(208)=>788,chr(209)=>788,chr(210)=>788,chr(211)=>788,chr(212)=>894,chr(213)=>838,chr(214)=>1016,chr(215)=>458,chr(216)=>748,chr(217)=>924,chr(218)=>748,chr(219)=>918,
|
||||
chr(220)=>927,chr(221)=>928,chr(222)=>928,chr(223)=>834,chr(224)=>873,chr(225)=>828,chr(226)=>924,chr(227)=>924,chr(228)=>917,chr(229)=>930,chr(230)=>931,chr(231)=>463,chr(232)=>883,chr(233)=>836,chr(234)=>836,chr(235)=>867,chr(236)=>867,chr(237)=>696,chr(238)=>696,chr(239)=>874,chr(240)=>0,chr(241)=>874,
|
||||
chr(242)=>760,chr(243)=>946,chr(244)=>771,chr(245)=>865,chr(246)=>771,chr(247)=>888,chr(248)=>967,chr(249)=>888,chr(250)=>831,chr(251)=>873,chr(252)=>927,chr(253)=>970,chr(254)=>918,chr(255)=>0);
|
||||
?>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,591 @@
|
||||
<?PHP /*
|
||||
xslfo2pdf
|
||||
Copyright (C) 2005 Tegonal GmbH
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Contact:
|
||||
mike.toggweiler@tegonal.com
|
||||
http://xslf2pdf.tegonal.com
|
||||
*/ ?>
|
||||
<?PHP
|
||||
require_once("fpdf.php");
|
||||
|
||||
|
||||
class MyPdf extends FPDF {
|
||||
/**
|
||||
* Additional getter methods
|
||||
**/
|
||||
function GetFontFamily() {
|
||||
return $this->FontFamily;
|
||||
}
|
||||
|
||||
function GetFontStyle() {
|
||||
return $this->FontStyle;
|
||||
}
|
||||
|
||||
function GetFontSize() {
|
||||
return $this->FontSize;
|
||||
}
|
||||
function GetFontSizePt() {
|
||||
return $this->FontSizePt;
|
||||
}
|
||||
function GetDrawColor() {
|
||||
return $this->DrawColor;
|
||||
}
|
||||
function GetFillColor() {
|
||||
return $this->FillColor;
|
||||
}
|
||||
function GetTextColor() {
|
||||
return $this->TextColor;
|
||||
}
|
||||
|
||||
function GetPageWidth() {
|
||||
return $this->w-$this->rMargin-$this->lMargin;
|
||||
}
|
||||
|
||||
function GetLineWidth() {
|
||||
return $this->LineWidth;
|
||||
}
|
||||
|
||||
function FontExists($family, $style='') {
|
||||
$fontkey=$family.$style;
|
||||
return isset($this->fonts[$fontkey]) ||
|
||||
isset($this->CoreFonts[$fontkey]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Methods to capture output
|
||||
*/
|
||||
function startCapture() {
|
||||
if($this->state==2) {
|
||||
$buf = $this->pages[$this->page];
|
||||
$this->pages[$this->page] = "";
|
||||
return $buf;
|
||||
}
|
||||
else {
|
||||
$buf = $this->buffer;
|
||||
$this->buffer = "";
|
||||
return $buf;
|
||||
}
|
||||
}
|
||||
|
||||
function endCapture($buffer) {
|
||||
if($this->state==2) {
|
||||
$buf = $this->pages[$this->page];
|
||||
$this->pages[$this->page] = $buffer;
|
||||
return $buf;
|
||||
}
|
||||
else {
|
||||
$buf = $this->buffer;
|
||||
$this->buffer = $buffer;
|
||||
return $buf;
|
||||
}
|
||||
}
|
||||
|
||||
function appendBuffer($buffer) {
|
||||
if($this->state==2) {
|
||||
$this->pages[$this->page] .= $buffer;
|
||||
}
|
||||
else {
|
||||
$this->buffer .= $buffer;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of characters having space whithin the
|
||||
* given width, respecting not to break words
|
||||
*/
|
||||
function GetNumberOfChars($width, $s) {
|
||||
//Get width of a string in the current font
|
||||
// $s=(string)$s;
|
||||
$cw=&$this->CurrentFont['cw'];
|
||||
$w=0;
|
||||
$wordPos = 0;
|
||||
$l=strlen($s);
|
||||
$width = $width*1000/$this->FontSize;
|
||||
for($i=0;$i<$l;$i++) {
|
||||
$w+=$cw[$s{$i}];
|
||||
if ($s{$i} == ' ') {
|
||||
$wordPos = $i;
|
||||
}
|
||||
if ($w >= $width) {
|
||||
if ($wordPos > 0) {
|
||||
return $wordPos;
|
||||
}
|
||||
else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
return (($w <= $width)?$l:-1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Write string regarding to \n as line breaks
|
||||
* Return an array containing number of line, width and height
|
||||
* of this textual block. The align paramtere accepts L, R and C
|
||||
* get values using:
|
||||
* list($width, $height, $no, $firstX, $firstY, $lastX, $lastYl) = $pdf->Text2();
|
||||
**/
|
||||
function Text2($x, $y, $text, $align="L", $lineHeight=NULL, $xNewLine=NULL, $width=NULL) {
|
||||
if (!$xNewLine) {
|
||||
$xNewLine = $x;
|
||||
}
|
||||
|
||||
$lines = explode('\n', $text);
|
||||
$height = ($lineHeight)?$lineHeight:$this->FontSize;
|
||||
//oesi - add parameter width for set the content-width of fo:block
|
||||
if($width!=NULL)
|
||||
{
|
||||
$pw = $x+$width;
|
||||
}
|
||||
else
|
||||
$pw = $this->GetPageWidth();
|
||||
$nb = 0;
|
||||
$maxWidth = 0;
|
||||
$sx = $x;
|
||||
$sy = $y;
|
||||
foreach($lines as $line)
|
||||
{
|
||||
$width = $this->GetStringWidth($line);
|
||||
do
|
||||
{
|
||||
$w=$this->w-$this->rMargin-$x;
|
||||
//$wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
|
||||
$noc = $this->GetNumberOfChars($w, $line);
|
||||
//echo "noc:$noc:$x:$w:".strlen($line).":$line<br>";
|
||||
if ($noc == -1)
|
||||
{
|
||||
if ($x == $xNewLine)
|
||||
{
|
||||
//word has not enough space on one line, draw it beyond borders
|
||||
$noc = strlen($line);
|
||||
}
|
||||
else
|
||||
{
|
||||
if ($nb == 0)
|
||||
{
|
||||
$sy += $height;
|
||||
$sx = $xNewLine;
|
||||
}
|
||||
//add newline and try again
|
||||
$y += $height;
|
||||
$nb++;
|
||||
$x = $xNewLine;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
$showLine = substr($line, 0, $noc);
|
||||
$textWidth = $this->GetStringWidth($showLine);
|
||||
// echo "wmax:$nb:$x:$w:$textWidth:$showLine<br>";
|
||||
switch ($align)
|
||||
{
|
||||
case "R":
|
||||
$tx = $pw-$textWidth;
|
||||
break;
|
||||
case "C":
|
||||
$tx = ($pw-$x-$textWidth)/2 + $x;
|
||||
break;
|
||||
case "L":
|
||||
default:
|
||||
$tx = $x;
|
||||
}
|
||||
|
||||
$this->Text($tx, $y+$height, $showLine);
|
||||
$line = trim(substr($line, $noc));
|
||||
$width = $this->GetStringWidth($line);
|
||||
|
||||
if ($textWidth > $maxWidth)
|
||||
{
|
||||
$maxWidth = $textWidth;
|
||||
}
|
||||
$y += $height;
|
||||
$nb++;
|
||||
$x = $xNewLine;
|
||||
} while ($width > 0);
|
||||
}
|
||||
//$this->y = $y;
|
||||
$tot_height = $nb * $height;
|
||||
|
||||
return array($maxWidth, $tot_height, $nb, $sx, $sy, $tx+$textWidth, $y-$height);
|
||||
}
|
||||
|
||||
/*
|
||||
This extension allows to set a dash pattern and draw dashed lines or rectangles.
|
||||
$pdf->SetDash(4,2); //4mm on, 2mm off
|
||||
$pdf->Rect(20,30,170,20);
|
||||
$pdf->SetDash(); //restore no dash
|
||||
*/
|
||||
function SetDash($black=false,$white=false)
|
||||
{
|
||||
if($black and $white)
|
||||
$s=sprintf('[%.3f %.3f] 0 d',$black*$this->k,$white*$this->k);
|
||||
else
|
||||
$s='[] 0 d';
|
||||
$this->_out($s);
|
||||
}
|
||||
|
||||
/**
|
||||
* Draw polygons
|
||||
* $pdf->Polygon(array(50,115,150,115,100,20),'FD');
|
||||
**/
|
||||
function Polygon($points, $style='D')
|
||||
{
|
||||
//Draw a polygon
|
||||
if($style=='F')
|
||||
$op='f';
|
||||
elseif($style=='FD' or $style=='DF')
|
||||
$op='b';
|
||||
else
|
||||
$op='s';
|
||||
|
||||
$h = $this->h;
|
||||
$k = $this->k;
|
||||
|
||||
$points_string = '';
|
||||
for($i=0; $i<count($points); $i+=2){
|
||||
$points_string .= sprintf('%.2f %.2f', $points[$i]*$k, ($h-$points[$i+1])*$k);
|
||||
if($i==0)
|
||||
$points_string .= ' m ';
|
||||
else
|
||||
$points_string .= ' l ';
|
||||
}
|
||||
$this->_out($points_string . $op);
|
||||
}
|
||||
|
||||
/**
|
||||
* Rounded rect
|
||||
* $pdf->RoundedRect(70, 30, 68, 46, 3.5, 'DF');
|
||||
*/
|
||||
function RoundedRect($x, $y, $w, $h,$r, $style = '')
|
||||
{
|
||||
$k = $this->k;
|
||||
$hp = $this->h;
|
||||
if($style=='F')
|
||||
$op='f';
|
||||
elseif($style=='FD' or $style=='DF')
|
||||
$op='B';
|
||||
else
|
||||
$op='S';
|
||||
$MyArc = 4/3 * (sqrt(2) - 1);
|
||||
$this->_out(sprintf('%.2f %.2f m',($x+$r)*$k,($hp-$y)*$k ));
|
||||
$xc = $x+$w-$r ;
|
||||
$yc = $y+$r;
|
||||
$this->_out(sprintf('%.2f %.2f l', $xc*$k,($hp-$y)*$k ));
|
||||
|
||||
$this->_Arc($xc + $r*$MyArc, $yc - $r, $xc + $r, $yc - $r*$MyArc,
|
||||
$xc + $r, $yc);
|
||||
$xc = $x+$w-$r ;
|
||||
$yc = $y+$h-$r;
|
||||
$this->_out(sprintf('%.2f %.2f l',($x+$w)*$k,($hp-$yc)*$k));
|
||||
$this->_Arc($xc + $r, $yc + $r*$MyArc, $xc + $r*$MyArc, $yc + $r, $xc,
|
||||
$yc + $r);
|
||||
$xc = $x+$r ;
|
||||
$yc = $y+$h-$r;
|
||||
$this->_out(sprintf('%.2f %.2f l',$xc*$k,($hp-($y+$h))*$k));
|
||||
$this->_Arc($xc - $r*$MyArc, $yc + $r, $xc - $r, $yc + $r*$MyArc,
|
||||
$xc - $r, $yc);
|
||||
$xc = $x+$r ;
|
||||
$yc = $y+$r;
|
||||
$this->_out(sprintf('%.2f %.2f l',($x)*$k,($hp-$yc)*$k ));
|
||||
$this->_Arc($xc - $r, $yc - $r*$MyArc, $xc - $r*$MyArc, $yc - $r, $xc,
|
||||
$yc - $r);
|
||||
$this->_out($op);
|
||||
}
|
||||
|
||||
/**
|
||||
* Rotate content. End rotation by call to Rotate(0)
|
||||
* $pdf->Rotate($angle,$x,$y);
|
||||
* $pdf->Text($x,$y,$txt);
|
||||
* $pdf->Rotate(0);
|
||||
*/
|
||||
function Rotate($angle,$x=-1,$y=-1) {
|
||||
if($x==-1)
|
||||
$x=$this->x;
|
||||
if($y==-1)
|
||||
$y=$this->y;
|
||||
if($this->angle!=0)
|
||||
$this->_out('Q');
|
||||
$this->angle=$angle;
|
||||
if($angle!=0)
|
||||
{
|
||||
$angle*=M_PI/180;
|
||||
$c=cos($angle);
|
||||
$s=sin($angle);
|
||||
$cx=$x*$this->k;
|
||||
$cy=($this->h-$y)*$this->k;
|
||||
$this->_out(sprintf('q %.5f %.5f %.5f %.5f %.2f %.2f cm 1 0 0 1 %.2f %.2f cm',$c,$s,-$s,$c,$cx,$cy,-$cx,-$cy));
|
||||
}
|
||||
}
|
||||
|
||||
// Draws a cubic Bézier curve from last draw point
|
||||
// Parameters:
|
||||
// - x1, y1: Control point 1
|
||||
// - x2, y2: Control point 2
|
||||
// - x3, y3: End point
|
||||
function CubicBezier($x1, $y1, $x2, $y2, $x3, $y3, $style='D') {
|
||||
if($style=='F')
|
||||
$op='f';
|
||||
elseif($style=='FD' or $style=='DF')
|
||||
$op='B';
|
||||
else
|
||||
$op='S';
|
||||
$this->_Curve($x1, $y1, $x2, $y2, $x3, $y3);
|
||||
$this->_out($op);
|
||||
}
|
||||
|
||||
// Draws an ellipse
|
||||
// Parameters:
|
||||
// - x0, y0: Center point
|
||||
// - rx, ry: Horizontal and vertical radius (if ry = 0, draws a circle)
|
||||
// - angle: Orientation angle (anti-clockwise)
|
||||
// - astart: Start angle
|
||||
// - afinish: Finish angle
|
||||
// - style: Style of ellipse (draw and/or fill: D, F, DF, FD, C (D + close))
|
||||
// - line_style: Line style for ellipse. Array like for SetLineStyle
|
||||
// - fill_color: Fill color. Array with components (red, green, blue)
|
||||
// - nSeg: Ellipse is made up of nSeg Bézier curves
|
||||
function Ellipse($x0, $y0, $rx, $ry = 0, $angle = 0, $astart = 0, $afinish = 360, $style = '', $fill_color = null, $nSeg = 8) {
|
||||
if ($rx) {
|
||||
if (!(false === strpos($style, 'F')) && $fill_color) {
|
||||
list($r, $g, $b) = $fill_color;
|
||||
$this->SetFillColor($r, $g, $b);
|
||||
}
|
||||
switch ($style) {
|
||||
case 'F':
|
||||
$op = 'f';
|
||||
$line_style = null;
|
||||
break;
|
||||
case 'FD': case 'DF':
|
||||
$op = 'B';
|
||||
break;
|
||||
case 'C':
|
||||
$op = 's'; // small 's' means closing the path as well
|
||||
break;
|
||||
default:
|
||||
$op = 'S';
|
||||
break;
|
||||
}
|
||||
|
||||
if ($rx) {
|
||||
if (!$ry)
|
||||
$ry = $rx;
|
||||
$rx *= $this->k;
|
||||
$ry *= $this->k;
|
||||
if ($nSeg < 2)
|
||||
$nSeg = 2;
|
||||
|
||||
$astart = deg2rad((float) $astart);
|
||||
$afinish = deg2rad((float) $afinish);
|
||||
$totalAngle = $afinish - $astart;
|
||||
|
||||
$dt = $totalAngle/$nSeg;
|
||||
$dtm = $dt/3;
|
||||
|
||||
$x0 *= $this->k;
|
||||
$y0 = ($this->h - $y0) * $this->k;
|
||||
if ($angle != 0) {
|
||||
$a = -deg2rad((float) $angle);
|
||||
$this->_out(sprintf('q %.2f %.2f %.2f %.2f %.2f %.2f cm', cos($a), -1 * sin($a), sin($a), cos($a), $x0*10, $y0*10));
|
||||
$x0 = 0;
|
||||
$y0 = 0;
|
||||
}
|
||||
|
||||
$t1 = $astart;
|
||||
$a0 = $x0 + ($rx * cos($t1));
|
||||
$b0 = $y0 + ($ry * sin($t1));
|
||||
$c0 = -$rx * sin($t1);
|
||||
$d0 = $ry * cos($t1);
|
||||
$this->_Point($a0 / $this->k, $this->h - ($b0 / $this->k));
|
||||
for ($i = 1; $i <= $nSeg; $i++) {
|
||||
// Draw this bit of the total curve
|
||||
$t1 = ($i * $dt) + $astart;
|
||||
$a1 = $x0 + ($rx * cos($t1));
|
||||
$b1 = $y0 + ($ry * sin($t1));
|
||||
$c1 = -$rx * sin($t1);
|
||||
$d1 = $ry * cos($t1);
|
||||
$this->_Curve(($a0 + ($c0 * $dtm)) / $this->k,
|
||||
$this->h - (($b0 + ($d0 * $dtm)) / $this->k),
|
||||
($a1 - ($c1 * $dtm)) / $this->k,
|
||||
$this->h - (($b1 - ($d1 * $dtm)) / $this->k),
|
||||
$a1 / $this->k,
|
||||
$this->h - ($b1 / $this->k));
|
||||
$a0 = $a1;
|
||||
$b0 = $b1;
|
||||
$c0 = $c1;
|
||||
$d0 = $d1;
|
||||
}
|
||||
if ($angle !=0) {
|
||||
$this->_out('Q');
|
||||
}
|
||||
}
|
||||
$this->_out($op);
|
||||
}
|
||||
}
|
||||
|
||||
function ClosePath($style="D") {
|
||||
if($style=='F')
|
||||
$op='f';
|
||||
elseif($style=='FD' or $style=='DF')
|
||||
$op='B';
|
||||
else
|
||||
$op='S';
|
||||
|
||||
$this->_out(sprintf('h %s', $op));
|
||||
}
|
||||
|
||||
function _Style($style="D") {
|
||||
if($style=='F')
|
||||
$op='f';
|
||||
elseif($style=='FD' or $style=='DF')
|
||||
$op='B';
|
||||
else
|
||||
$op='S';
|
||||
|
||||
$this->_out(sprintf('%s', $op));
|
||||
}
|
||||
|
||||
// Draws a circle
|
||||
// Parameters:
|
||||
// - x0, y0: Center point
|
||||
// - r: Radius
|
||||
// - astart: Start angle
|
||||
// - afinish: Finish angle
|
||||
// - style: Style of circle (draw and/or fill) (D, F, DF, FD, C (D + close))
|
||||
// - line_style: Line style for circle. Array like for SetLineStyle
|
||||
// - fill_color: Fill color. Array with components (red, green, blue)
|
||||
// - nSeg: Ellipse is made up of nSeg Bézier curves
|
||||
function Circle($x0, $y0, $r, $astart = 0, $afinish = 360, $style = '', $fill_color = null, $nSeg = 8) {
|
||||
$this->Ellipse($x0, $y0, $r, 0, 0, $astart, $afinish, $style, $line_style, $fill_color, $nSeg);
|
||||
}
|
||||
|
||||
|
||||
// Sets a draw point
|
||||
// Parameters:
|
||||
// - x, y: Point
|
||||
function _Point($x, $y) {
|
||||
$this->_out(sprintf('%.2f %.2f m', $x * $this->k, ($this->h - $y) * $this->k));
|
||||
}
|
||||
|
||||
// Draws a Bézier curve from last draw point
|
||||
// Parameters:
|
||||
// - x1, y1: Control point 1
|
||||
// - x2, y2: Control point 2
|
||||
// - x3, y3: End point
|
||||
function _Curve($x1, $y1, $x2, $y2, $x3, $y3) {
|
||||
$this->_out(sprintf('%.2f %.2f %.2f %.2f %.2f %.2f c', $x1 * $this->k, ($this->h - $y1) * $this->k, $x2 * $this->k, ($this->h - $y2) * $this->k, $x3 * $this->k, ($this->h - $y3) * $this->k));
|
||||
}
|
||||
|
||||
|
||||
// Draws a cubic Bézier curve from last draw point
|
||||
// Parameters:
|
||||
// - x2, y2: Control point 2
|
||||
// - x3, y3: End point
|
||||
|
||||
function _CurveRef1($x2, $y2, $x3, $y3) {
|
||||
$this->_out(sprintf('%.2f %.2f %.2f %.2f v', $x2 * $this->k, ($this->h - $y2) * $this->k, $x3 * $this->k, ($this->h - $y3) * $this->k));
|
||||
}
|
||||
|
||||
// Draws a cubic Bézier curve from last draw point
|
||||
// Parameters:
|
||||
// - x1, y1: Control point 1
|
||||
// - x3, y3: End point
|
||||
|
||||
function _CurveRef2($x1, $y1, $x3, $y3) {
|
||||
$this->_out(sprintf('%.2f %.2f %.2f %.2f y', $x1 * $this->k, ($this->h - $y1) * $this->k, $x3 * $this->k, ($this->h - $y3) * $this->k));
|
||||
}
|
||||
|
||||
// Draws a line from last draw point
|
||||
// Parameters:
|
||||
// - x, y: End point
|
||||
function _Line($x, $y) {
|
||||
$this->_out(sprintf('%.2f %.2f l', $x * $this->k, ($this->h - $y) * $this->k));
|
||||
}
|
||||
|
||||
|
||||
// Draws an ellipse
|
||||
// Parameters:
|
||||
// - x0, y0: Center point
|
||||
// - rx, ry: Horizontal and vertical radius (if ry = 0, draws a circle)
|
||||
// - angle: Orientation angle (anti-clockwise)
|
||||
// - astart: Start angle
|
||||
// - afinish: Finish angle
|
||||
// - style: Style of ellipse (draw and/or fill: D, F, DF, FD, C (D + close))
|
||||
// - line_style: Line style for ellipse. Array like for SetLineStyle
|
||||
// - fill_color: Fill color. Array with components (red, green, blue)
|
||||
// - nSeg: Ellipse is made up of nSeg Bézier curves
|
||||
function _Ellipse($x0, $y0, $rx, $ry = 0, $angle = 0, $astart = 0, $afinish = 360, $nSeg = 8) {
|
||||
if ($rx) {
|
||||
if (!$ry)
|
||||
$ry = $rx;
|
||||
$rx *= $this->k;
|
||||
$ry *= $this->k;
|
||||
if ($nSeg < 2)
|
||||
$nSeg = 2;
|
||||
|
||||
$astart = deg2rad((float) $astart);
|
||||
$afinish = deg2rad((float) $afinish);
|
||||
$totalAngle = $afinish - $astart;
|
||||
|
||||
$dt = $totalAngle/$nSeg;
|
||||
$dtm = $dt/3;
|
||||
|
||||
$x0 *= $this->k;
|
||||
$y0 = ($this->h - $y0) * $this->k;
|
||||
if ($angle != 0) {
|
||||
//$a = -deg2rad((float) $angle);
|
||||
//$this->_out(sprintf('q %.2f %.2f %.2f %.2f %.2f %.2f cm', cos($a), -1 * sin($a), sin($a), cos($a), $x0*10, $y0*10));
|
||||
//echo "X:$x0:$y0:$a:".cos($a).":".sin($a)."<br>";
|
||||
//echo "X2:$x0:$y0<br>";
|
||||
//$x0 -= cos($a);
|
||||
//$y0 -= $ry * sin($a);
|
||||
}
|
||||
|
||||
$t1 = $astart;
|
||||
$a0 = $x0 + ($rx * cos($t1));
|
||||
$b0 = $y0 + ($ry * sin($t1));
|
||||
$c0 = -$rx * sin($t1);
|
||||
$d0 = $ry * cos($t1);
|
||||
//$this->_Point($a0 / $this->k, $this->h - ($b0 / $this->k));
|
||||
for ($i = 1; $i <= $nSeg; $i++) {
|
||||
// Draw this bit of the total curve
|
||||
$t1 = ($i * $dt) + $astart;
|
||||
$a1 = $x0 + ($rx * cos($t1));
|
||||
$b1 = $y0 + ($ry * sin($t1));
|
||||
$c1 = -$rx * sin($t1);
|
||||
$d1 = $ry * cos($t1);
|
||||
$this->_Curve(($a0 + ($c0 * $dtm)) / $this->k,
|
||||
$this->h - (($b0 + ($d0 * $dtm)) / $this->k),
|
||||
($a1 - ($c1 * $dtm)) / $this->k,
|
||||
$this->h - (($b1 - ($d1 * $dtm)) / $this->k),
|
||||
$a1 / $this->k,
|
||||
$this->h - ($b1 / $this->k));
|
||||
$a0 = $a1;
|
||||
$b0 = $b1;
|
||||
$c0 = $c1;
|
||||
$d0 = $d1;
|
||||
}
|
||||
if ($angle !=0) {
|
||||
//$this->_out('Q');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,93 @@
|
||||
<?PHP /*
|
||||
xslfo2pdf
|
||||
Copyright (C) 2005 Tegonal GmbH
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Contact:
|
||||
mike.toggweiler@tegonal.com
|
||||
http://xslf2pdf.tegonal.com
|
||||
*/ ?>
|
||||
<?PHP
|
||||
if ($_GET["file"] ) {
|
||||
require_once("xslfo2pdf.php");
|
||||
$buffer = file_get_contents($_GET["file"]);
|
||||
$fo2pdf = new XslFo2Pdf();
|
||||
if (!$fo2pdf->generatePdf($buffer, $_GET["file"], "D")) {
|
||||
echo "Failed parsing file:".$_GET["file"]."<br>";
|
||||
}
|
||||
}
|
||||
else if ($_FILES["file"]) {
|
||||
$buffer = file_get_contents($_FILES['file']['tmp_name']);
|
||||
require_once("xslfo2pdf.php");
|
||||
$fo2pdf = new XslFo2Pdf();
|
||||
if (!$fo2pdf->generatePdf($buffer, $_FILES['file']['name'], "D")) {
|
||||
echo "Failed parsing file:".$_FILES['file']['name']."<br>";
|
||||
//store file in specific directory that failed document may be checked by the developer team
|
||||
file_put_contents("failed/".basename($_FILES['file']['name']));
|
||||
echo "Stored file for inspection";
|
||||
}
|
||||
}
|
||||
else {
|
||||
?>
|
||||
<div >
|
||||
<a target="_new" href="http://www.tegonal.com/en"><img src="http://www.tegonal.com/images/tegonal_logo.png" border="0"></img></a>
|
||||
<p>
|
||||
Browse a local file to process:
|
||||
<form name="extfile" action="index.php" method="post" enctype="multipart/form-data">
|
||||
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
|
||||
<input name="file" type="file" size="50" maxlength="100000" accept="text/*.xml">
|
||||
<input type="submit" value="Process" />
|
||||
</form>
|
||||
</p>
|
||||
<p>
|
||||
Or choose one of the predefined examples<br />
|
||||
<?PHP
|
||||
|
||||
$files = addDir("examples");
|
||||
foreach ($files as $file) {
|
||||
echo('<a href="index.php?file='.$file.'">'.$file.'</a>(<a href="'.$file.'">.xml</a>)<br>');
|
||||
}
|
||||
}
|
||||
|
||||
function addDir($dirname) {
|
||||
$dir = dir($dirname);
|
||||
$files = array();
|
||||
while ($file = $dir->read()) {
|
||||
if($file != "." && $file != "..") {
|
||||
if (!is_dir($dirname."/".$file)) {
|
||||
$path_parts = pathinfo($file);
|
||||
|
||||
if ($path_parts['extension'] == "xml" ||
|
||||
$path_parts['extension'] == "fo") {
|
||||
$files[$file] = $dirname . "/" . $file;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$files += addDir($dirname."/".$file);
|
||||
}
|
||||
}
|
||||
}
|
||||
$dir->close();
|
||||
asort($files);
|
||||
return $files;
|
||||
}
|
||||
?>
|
||||
</p>
|
||||
<p>XPMT is kindly hosted on <br/><a class="normallink" href="http://sourceforge.net" target="_new">
|
||||
<img src="http://sourceforge.net/sflogo.php?group_id=132608&type=1" width="88" height="31" border="0" alt="SourceForge.net Logo" /></a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,39 @@
|
||||
<?PHP /*
|
||||
xslfo2pdf
|
||||
Copyright (C) 2005 Tegonal GmbH
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Contact:
|
||||
mike.toggweiler@tegonal.com
|
||||
http://xslf2pdf.tegonal.com
|
||||
*/ ?>
|
||||
<?PHP
|
||||
class SVG_Circle extends SVG_StyleObject {
|
||||
|
||||
public function process(DOMNode $node, $sargs="") {
|
||||
$this->initLocalSizeAttribute($node, "cx");
|
||||
$this->initLocalSizeAttribute($node, "cy");
|
||||
$this->initLocalSizeAttribute($node, "r");
|
||||
$y = $this->getContext("yOrig") + $this->getContext("cy");
|
||||
$x = $this->getContext("xOrig") + $this->getContext("cx");
|
||||
$rd = $this->getContext("r");
|
||||
|
||||
//echo "Circle:$x:$y:$rd:$sargs<br>";
|
||||
$pdf = $this->getPdf();
|
||||
$pdf->Circle($x, $y, $rd, 0, 360, $sargs);
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?PHP /*
|
||||
xslfo2pdf
|
||||
Copyright (C) 2005 Tegonal GmbH
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Contact:
|
||||
mike.toggweiler@tegonal.com
|
||||
http://xslf2pdf.tegonal.com
|
||||
*/ ?>
|
||||
<?PHP
|
||||
class SVG_Ellipse extends SVG_StyleObject {
|
||||
|
||||
public function process(DOMNode $node, $sargs="") {
|
||||
$this->initLocalSizeAttribute($node, "cx");
|
||||
$this->initLocalSizeAttribute($node, "cy");
|
||||
$this->initLocalSizeAttribute($node, "rx");
|
||||
$this->initLocalSizeAttribute($node, "ry");
|
||||
$y = $this->getContext("yOrig") + $this->getContext("cy");
|
||||
$x = $this->getContext("xOrig") + $this->getContext("cx");
|
||||
$rx = $this->getContext("rx");
|
||||
$ry = $this->getContext("ry");
|
||||
|
||||
//echo "Circle:$x:$y:$rd:$sargs<br>";
|
||||
$pdf = $this->getPdf();
|
||||
$pdf->Ellipse($x, $y, $rx, $ry, $sargs);
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,80 @@
|
||||
<?PHP /*
|
||||
xslfo2pdf
|
||||
Copyright (C) 2005 Tegonal GmbH
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Contact:
|
||||
mike.toggweiler@tegonal.com
|
||||
http://xslf2pdf.tegonal.com
|
||||
*/ ?>
|
||||
<?PHP
|
||||
class SVG_G extends SVG_StyleObject {
|
||||
|
||||
public function process(DOMNode $node, $sargs="") {
|
||||
$this->initLocalSizeAttribute($node, "transform");
|
||||
$transform = $this->getContext("transform");
|
||||
|
||||
$index = strpos($transform, "(");
|
||||
$func = substr($transform, 0, $index);
|
||||
$paramStr = substr($transform, $index+1, strlen($transform)-$index-2);
|
||||
$params = explode(",", $paramStr);
|
||||
$pdf = $this->getPdf();
|
||||
$xOrig = $this->getContext("xOrig");
|
||||
$yOrig = $this->getContext("yOrig");
|
||||
|
||||
if ($func) {
|
||||
switch ($func) {
|
||||
case "translate":
|
||||
$xdiff = $this->calcInternalValue($params[0]);
|
||||
$ydiff = $this->calcInternalValue($params[1]);
|
||||
$this->setContext("xOrig", $xOrig+$xdiff);
|
||||
$this->setContext("yOrig", $yOrig+$ydiff );
|
||||
//echo "translate:".$xdiff.":".$ydiff."<br>";
|
||||
break;
|
||||
case "rotate":
|
||||
$angle = $params[0] * -1;
|
||||
if (sizeof($params) > 1) {
|
||||
$pdf->Rotate($angle, $params[1], $params[2]);
|
||||
}
|
||||
else {
|
||||
$x = $this->getContext("x")+$xOrig;
|
||||
$y = $this->getContext("y")+$yOrig;
|
||||
$pdf->Rotate($angle, $x, $y);
|
||||
}
|
||||
break;
|
||||
// case "skewX":
|
||||
// case "skewY":
|
||||
default:
|
||||
echo "Function not supported:$func<br>";
|
||||
}
|
||||
}
|
||||
$this->processChildNodes($node, FO_SVG::$CHILDNODES);
|
||||
|
||||
//restore group options
|
||||
switch ($func) {
|
||||
case "translate":
|
||||
$this->setContext("xOrig", $xOrig);
|
||||
$this->setContext("yOrig", $yOrig);
|
||||
break;
|
||||
case "rotate":
|
||||
$pdf->Rotate(0);
|
||||
break;
|
||||
// case "skewX":
|
||||
// case "skewY":
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,39 @@
|
||||
<?PHP /*
|
||||
xslfo2pdf
|
||||
Copyright (C) 2005 Tegonal GmbH
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Contact:
|
||||
mike.toggweiler@tegonal.com
|
||||
http://xslf2pdf.tegonal.com
|
||||
*/ ?>
|
||||
<?PHP
|
||||
class SVG_Line extends SVG_StyleObject {
|
||||
|
||||
public function process(DOMNode $node, $sargs="") {
|
||||
$this->initLocalSizeAttribute($node, "x1");
|
||||
$this->initLocalSizeAttribute($node, "y1");
|
||||
$this->initLocalSizeAttribute($node, "x2");
|
||||
$this->initLocalSizeAttribute($node, "y2");
|
||||
$y1 = $this->getContext("yOrig") + $this->getContext("y1");
|
||||
$x1 = $this->getContext("xOrig") + $this->getContext("x1");
|
||||
$y2 = $this->getContext("yOrig") + $this->getContext("y2");
|
||||
$x2 = $this->getContext("xOrig") + $this->getContext("x2");
|
||||
$pdf = $this->getPdf();
|
||||
$pdf->Line($x1, $y1, $x2, $y2);
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,362 @@
|
||||
<?PHP /*
|
||||
xslfo2pdf
|
||||
Copyright (C) 2005 Tegonal GmbH
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Contact:
|
||||
mike.toggweiler@tegonal.com
|
||||
http://xslf2pdf.tegonal.com
|
||||
*/ ?>
|
||||
<?PHP
|
||||
class SVG_Path extends SVG_StyleObject {
|
||||
|
||||
public function process(DOMNode $node, $sargs="") {
|
||||
$this->initLocalAttribute($node, "d");
|
||||
$xOrig = $this->getContext("xOrig");
|
||||
$yOrig = $this->getContext("yOrig");
|
||||
|
||||
$d = $this->getContext("d");
|
||||
//replace spacial characters
|
||||
$d = preg_replace("/[\n,]/i", " ", $d);
|
||||
//add spaces except on points
|
||||
$d = preg_replace("/([AMLZHVCSQTA])([\d-]+)/i", "\${1} \${2}", $d);
|
||||
$d = preg_replace("/(\d+)([AMLZHVCSQTA])/i", "\${1} \${2}", $d);
|
||||
$d = preg_replace("/\s\s/i", " ", $d);
|
||||
$params = explode(" " , $d);
|
||||
$x = $xOrig+$this->getContext("x");
|
||||
$y = $yOrig+$this->getContext("y");
|
||||
$ix = $x;
|
||||
$iy = $y;
|
||||
$pdf = $this->getPdf();
|
||||
$pdf->_Point($x, $y);
|
||||
$buf = $pdf->startCapture();
|
||||
for($i=0; $i<sizeof($params); ) {
|
||||
$lastI = $i;
|
||||
if ($params[$i] == "") {
|
||||
$i++;
|
||||
continue;
|
||||
}
|
||||
switch ($params[$i]) {
|
||||
case "M":
|
||||
//move absolute
|
||||
$x = $this->getSize($params[$i+1])+$xOrig;
|
||||
$y = $this->getSize($params[$i+2])+$yOrig;
|
||||
$pdf->_Point($x, $y);
|
||||
$ix = $x;
|
||||
$iy = $y;
|
||||
$i += 3;
|
||||
break;
|
||||
case "m":
|
||||
//move relative
|
||||
$x += $this->getSize($params[$i+1]);
|
||||
$y += $this->getSize($params[$i+2]);
|
||||
$pdf->_Point($x, $y);
|
||||
$ix = $x;
|
||||
$iy = $y;
|
||||
$i += 3;
|
||||
break;
|
||||
case "z":
|
||||
case "Z":
|
||||
//closepath
|
||||
$pdf->ClosePath($sargs);
|
||||
$x = $ix;
|
||||
$y = $iy;
|
||||
++$i;
|
||||
break;
|
||||
case "L":
|
||||
//absolute lineto
|
||||
$x2 = $this->getSize($params[$i+1])+$xOrig;
|
||||
$y2 = $this->getSize($params[$i+2])+$yOrig;
|
||||
//echo "Line:$x:$y:$x2:$y2:$sargs<br>";
|
||||
$pdf->_Line($x2, $y2);
|
||||
$x = $x2;
|
||||
$y = $y2;
|
||||
$i += 3;
|
||||
break;
|
||||
case "l":
|
||||
//relative lineto
|
||||
$x2 = $this->getSize($params[$i+1])+$x;
|
||||
$y2 = $this->getSize($params[$i+2])+$y;
|
||||
$pdf->_Line($x2, $y2);
|
||||
$x = $x2;
|
||||
$y = $y2;
|
||||
$i += 3;
|
||||
break;
|
||||
case "H":
|
||||
//absolute horizontal lineto
|
||||
$x2 = $this->getSize($params[$i+1])+$xOrig;
|
||||
$pdf->_Line($x2, $y);
|
||||
$x = $x2;
|
||||
$i += 2;
|
||||
break;
|
||||
case "h":
|
||||
//relative horizontal lineto
|
||||
$x2 = $this->getSize($params[$i+1]);
|
||||
$pdf->_Line($x+$x2, $y);
|
||||
$x += $x2;
|
||||
$i += 2;
|
||||
break;
|
||||
case "V":
|
||||
//absolute vertical lineto
|
||||
$y2 = $this->getSize($params[$i+1])+$yOrig;
|
||||
$pdf->_Line($x, $y2);
|
||||
$y = $y2;
|
||||
$i += 2;
|
||||
break;
|
||||
case "v":
|
||||
//relative vertical lineto
|
||||
$y2 = $this->getSize($params[$i+1]);
|
||||
$pdf->_Line($x, $y+$y2);
|
||||
$y += $y2;
|
||||
$i += 2;
|
||||
break;
|
||||
case "C":
|
||||
//absolute cubic bezier
|
||||
$x1 = $this->getSize($params[$i+1])+$xOrig;
|
||||
$y1 = $this->getSize($params[$i+2])+$yOrig;
|
||||
$x2 = $this->getSize($params[$i+3])+$xOrig;
|
||||
$y2 = $this->getSize($params[$i+4])+$yOrig;
|
||||
$x = $this->getSize($params[$i+5])+$xOrig;
|
||||
$y = $this->getSize($params[$i+6])+$yOrig;
|
||||
$pdf->_Curve($x1, $y1, $x2, $y2, $x, $y);
|
||||
$i += 7;
|
||||
break;
|
||||
case "c":
|
||||
//relative cubic bezier
|
||||
$x1 = $this->getSize($params[$i+1])+$x;
|
||||
$y1 = $this->getSize($params[$i+2])+$y;
|
||||
$x2 = $this->getSize($params[$i+3])+$x;
|
||||
$y2 = $this->getSize($params[$i+4])+$y;
|
||||
$x += $this->getSize($params[$i+5]);
|
||||
$y += $this->getSize($params[$i+6]);
|
||||
$pdf->_Curve($x1, $y1, $x2, $y2, $x, $y);
|
||||
$i += 7;
|
||||
break;
|
||||
case "S":
|
||||
//TODO: fix
|
||||
//absolute cubic bezier with first control reflection
|
||||
$x2 = $this->getSize($params[$i+1])+$xOrig;
|
||||
$y2 = $this->getSize($params[$i+2])+$yOrig;
|
||||
$x = $this->getSize($params[$i+3])+$xOrig;
|
||||
$y = $this->getSize($params[$i+4])+$yOrig;
|
||||
$pdf->_CurveRef1($x2, $y2, $x, $y);
|
||||
$i += 5;
|
||||
break;
|
||||
case "s":
|
||||
//TODO: fix
|
||||
//relative cubic bezier with first control point reflection
|
||||
$x2 = $this->getSize($params[$i+1])+$x;
|
||||
$y2 = $this->getSize($params[$i+2])+$y;
|
||||
$x += $this->getSize($params[$i+3]);
|
||||
$y += $this->getSize($params[$i+4]);
|
||||
$pdf->_CurveRef1($x2, $y2, $x, $y);
|
||||
$i += 5;
|
||||
break;
|
||||
case "Q":
|
||||
//absolute quadratic bezier
|
||||
$x1 = $this->getSize($params[$i+1])+$xOrig;
|
||||
$y1 = $this->getSize($params[$i+2])+$yOrig;
|
||||
$ex = $this->getSize($params[$i+3])+$xOrig;
|
||||
$ey = $this->getSize($params[$i+4])+$yOrig;
|
||||
list($x1, $y1, $x2, $y2, $x, $y) =
|
||||
$this->quadratic2CubicBezier($x, $y, $x1, $y1, $ex, $ey);
|
||||
//echo "q2c:$x,$y,$x1,$y2,$ex,$ey => $x1,$y1,$x2,$y2,$x,$y<br>";
|
||||
$pdf->_Curve($x1, $y1, $x2, $y2, $x, $y);
|
||||
$i += 5;
|
||||
break;
|
||||
case "q":
|
||||
//relative quadratic bezier
|
||||
$x1 = $this->getSize($params[$i+1])+$x;
|
||||
$y1 = $this->getSize($params[$i+2])+$y;
|
||||
$ex = $x+$this->getSize($params[$i+3]);
|
||||
$ey = $y+$this->getSize($params[$i+4]);
|
||||
list($x1, $y2, $x2, $y2, $x, $y) =
|
||||
$this->quadratic2CubixBezier($x, $y, $x1, $y2, $ex, $ey);
|
||||
$pdf->_Curve($x1, $y1, $x2, $y2, $x, $y);
|
||||
$i += 5;
|
||||
break;
|
||||
case "T":
|
||||
//absolute cubic bezier with first control reflection
|
||||
//TODO: implement
|
||||
$i += 3;
|
||||
break;
|
||||
case "t":
|
||||
//relative cubic bezier with first control point reflection
|
||||
//TODO: implement
|
||||
$i += 3;
|
||||
break;
|
||||
case "A":
|
||||
$rx = $this->getSize($params[$i+1]);
|
||||
$ry = $this->getSize($params[$i+2]);
|
||||
$anglex = -$params[$i+3];
|
||||
$fa = $params[$i+4];
|
||||
$fs = $params[$i+5];
|
||||
$ex = $this->getSize($params[$i+6])+$xOrig;
|
||||
$ey = $this->getSize($params[$i+7])+$yOrig;
|
||||
//only draw arcs if a difference between begin and endpoint
|
||||
if ($ex-$x != 0 || $ey-$y != 0) {
|
||||
//echo "Arc:x=$x:y=$y:ex=$ex:ey=$ey:fa=$fa:fs=$fs:angle=$anglex:rx=$rx:ry=$ry<br>";
|
||||
list($cx, $cy, $rx, $ry, $alpha_x, $start_angle, $delta_angle) =
|
||||
$this->endpoint2Centric($x, $y, $ex, $ey, $fa, $fs, $anglex, $rx, $ry);
|
||||
$pdf->_Ellipse($cx, $cy, $rx, $ry, $alpha_x, $start_angle,
|
||||
$delta_angle+$start_angle);
|
||||
}
|
||||
$x = $ex;
|
||||
$y = $ey;
|
||||
$i += 8;
|
||||
break;
|
||||
case "a":
|
||||
$rx = $this->getSize($params[$i+1]);
|
||||
$ry = $this->getSize($params[$i+2]);
|
||||
$anglex = -$params[$i+3];
|
||||
$fa = $params[$i+4];
|
||||
$fs = $params[$i+5];
|
||||
$ex = $x+$this->getSize($params[$i+6]);
|
||||
$ey = $y+$this->getSize($params[$i+7]);
|
||||
//only draw arcs if a difference between begin and endpoint
|
||||
if ($ex-$x != 0 || $ey-$y != 0) {
|
||||
//echo "Arc:x=$x:y=$y:ex=$ex:ey=$ey:fa=$fa:fa=$fs:angle=$anglex:rx=$rx:ry=$ry<br>";
|
||||
list($cx, $cy, $rx, $ry, $alpha_x, $start_angle, $delta_angle) =
|
||||
$this->endpoint2Centric($x, $y, $ex, $ey, $fa, $fs, 0, $rx, $ry);
|
||||
//echo "Arc2:$cx:$cy:$rx:$ry:$alpha_x:$start_angle:$delta_angle<br>";
|
||||
//$pdf->Rotate($anglex);
|
||||
//TODO: fix rotation to x axis
|
||||
$pdf->_Ellipse($cx, $cy, $rx, $ry, $alpha_x, $start_angle,
|
||||
$delta_angle+$start_angle);
|
||||
//$pdf->Rotate(0);
|
||||
}
|
||||
$x = $ex;
|
||||
$y = $ey;
|
||||
$i += 8;
|
||||
break;
|
||||
default:
|
||||
if ($lastParam) {
|
||||
//echo "useLast:$lastParam:".$params[$i-1].":".$params[$i]."<br>";
|
||||
//add previous command again
|
||||
$i--;
|
||||
$params[$i] = $lastParam;
|
||||
}
|
||||
else {
|
||||
$this->NotYetSupported("Pathdata:".$params[$i]);
|
||||
}
|
||||
}
|
||||
$lastParam = $params[$lastI];
|
||||
}
|
||||
$pdf->_Style($sargs);
|
||||
$buf = $pdf->endCapture($buf);
|
||||
//echo $buf."<br>";
|
||||
$pdf->appendBuffer($buf);
|
||||
}
|
||||
|
||||
/**
|
||||
* This function converts from a quadratic to a cubis bezier
|
||||
* It returns an array of
|
||||
* array($x1, $y1, $x2, $y2, $endx, $endy)
|
||||
**/
|
||||
private function quadratic2CubicBezier($startx, $starty, $x1, $y1, $endx, $endy) {
|
||||
$cx1 = ($x1 - $startx) * 2/3 + $startx;
|
||||
$cy1 = ($y1 - $starty) * 2/3 + $starty;
|
||||
$cx2 = $endx - ($endx - $x1)*2/3;
|
||||
$cy2 = $endy - ($endy - $y1)*2/3;
|
||||
return array($cx1, $cy1, $cx2, $cy2, $endx, $endy);
|
||||
}
|
||||
|
||||
/**
|
||||
* For an explenation see
|
||||
* <a href="http://www.w3.org/TR/SVG/implnote.html#ArcImplementationNotes"></a>
|
||||
* An array consisting of the following elements will be returned
|
||||
* array(cx, cy, rx, ry, alpha_x, start_angle, delta_angle)
|
||||
**/
|
||||
private function endpoint2Centric($x1, $y1, $x2, $y2, $fa, $fs, $angle, $rx, $ry) {
|
||||
$angler = deg2rad($angle);
|
||||
//initialization
|
||||
$cosa = cos($angler);
|
||||
$sina = sin($angler);
|
||||
|
||||
//step 1
|
||||
$xd = ($x1-$x2)/2;
|
||||
$yd = ($y1-$y2)/2;
|
||||
$x_ = $cosa*$xd + $sina*$yd;
|
||||
$y_ = $cosa*$yd - $sina*$xd;
|
||||
//echo "1:$x_:$y_<br>";
|
||||
|
||||
//step2
|
||||
$rxq = $rx*$rx;
|
||||
$ryq = $ry*$ry;
|
||||
$y_q = $y_*$y_;
|
||||
$x_q = $x_*$x_;
|
||||
$val = ($rxq*$ryq-$rxq*$y_q-$ryq*$x_q)/
|
||||
($rxq*$y_q+$ryq*$x_q);
|
||||
if ($val >= 0) {
|
||||
$c = sqrt($val);
|
||||
}
|
||||
else {
|
||||
//TODO: check how to proceed if negative number
|
||||
$c = sqrt(-$val);
|
||||
}
|
||||
if ($fa == $fs) {
|
||||
$c *= -1;
|
||||
}
|
||||
$cx_ = $c * (($rx*$y_)/$ry);
|
||||
$cy_ = $c * -(($ry*$x_)/$rx);
|
||||
//echo "2:$cx_:$cy_<br>";
|
||||
|
||||
//step3
|
||||
$cx = $cosa*$cx_ - $sina*$cy_ + ($x1+$x2)/2;
|
||||
$cy = $sina*$cx_ + $cosa*$cy_ + ($y1+$y2)/2;
|
||||
//echo "3:$cx:$cy<br>";
|
||||
|
||||
//step 4
|
||||
$fx = ($x_-$cx_)/$rx;
|
||||
$fy = ($y_-$cy_)/$ry;
|
||||
$angle1 = $this->vectorAngle(1, 0, $fx, $fy);
|
||||
$angle2 = $this->vectorAngle($fx, $fy, (-$x_-$cx_)/$rx, (-$y_-$cy_)/$ry);
|
||||
$angle2 %= 360;
|
||||
if ($fs == 0 && $angle2 > 0) {
|
||||
$angle2 -= 360;
|
||||
}
|
||||
else if ($fs == 1 && $angle2 < 0) {
|
||||
$angle2 += 360;
|
||||
}
|
||||
//echo "4:$angle:$angle2<br>";
|
||||
return array($cx, $cy, $rx, $ry, $angle, -$angle1, -$angle2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate angle between two vectors
|
||||
*/
|
||||
private function vectorAngle($ux, $uy, $vx, $vy) {
|
||||
if ($ux + $uy == 0 || $vx + $vy == 0) {
|
||||
return 0;
|
||||
}
|
||||
$uxq = $ux*$ux;
|
||||
$uyq = $uy*$uy;
|
||||
$vxq = $vx*$vx;
|
||||
$vyq = $vy*$vy;
|
||||
$val = ($ux*$vx+$uy*$vy)/
|
||||
(sqrt($uxq+$uyq)*sqrt($vxq+$vyq));
|
||||
$angle = rad2deg(acos($val));
|
||||
if ($ux*$vy-$uy*$vx < 0) {
|
||||
$angle *= -1;
|
||||
}
|
||||
return $angle;
|
||||
}
|
||||
|
||||
private function getSize($param) {
|
||||
return $this->calcInternalValue($param);
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,43 @@
|
||||
<?PHP /*
|
||||
xslfo2pdf
|
||||
Copyright (C) 2005 Tegonal GmbH
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Contact:
|
||||
mike.toggweiler@tegonal.com
|
||||
http://xslf2pdf.tegonal.com
|
||||
*/ ?>
|
||||
<?PHP
|
||||
class SVG_Polygon extends SVG_StyleObject {
|
||||
|
||||
public function process(DOMNode $node, $sargs="") {
|
||||
$this->initLocalAttribute($node, "points");
|
||||
|
||||
$yOrig = $this->getContext("yOrig");
|
||||
$xOrig = $this->getContext("xOrig");
|
||||
|
||||
$points = explode(" ", $this->getContext("points"));
|
||||
$pdf = $this->getPdf();
|
||||
$pointsArray = array();
|
||||
foreach($points as $point) {
|
||||
$coords = explode(",", $point);
|
||||
$pointsArray[] = $this->calcInternalValue($coords[0], "mm", "pt")+$xOrig;
|
||||
$pointsArray[] = $this->calcInternalValue($coords[1], "mm", "pt")+$yOrig;
|
||||
}
|
||||
$pdf->Polygon($pointsArray, $sargs);
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,40 @@
|
||||
<?PHP /*
|
||||
xslfo2pdf
|
||||
Copyright (C) 2005 Tegonal GmbH
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Contact:
|
||||
mike.toggweiler@tegonal.com
|
||||
http://xslf2pdf.tegonal.com
|
||||
*/ ?>
|
||||
<?PHP
|
||||
class SVG_Rect extends SVG_StyleObject {
|
||||
|
||||
public function process(DOMNode $node, $sargs="") {
|
||||
$this->initLocalSizeAttribute($node, "rx");
|
||||
$y = $this->getContext("yOrig") + $this->getContext("y");
|
||||
$x = $this->getContext("xOrig") + $this->getContext("x");
|
||||
$width = $this->getContext("width");
|
||||
$height = $this->getContext("height");
|
||||
$rx = $this->getContext("rx");
|
||||
if (!$rx) {
|
||||
$rx = 0;
|
||||
}
|
||||
$pdf = $this->getPdf();
|
||||
$pdf->RoundedRect($x, $y, $width, $height, $rx, $sargs);
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,60 @@
|
||||
<?PHP /*
|
||||
xslfo2pdf
|
||||
Copyright (C) 2005 Tegonal GmbH
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Contact:
|
||||
mike.toggweiler@tegonal.com
|
||||
http://xslf2pdf.tegonal.com
|
||||
*/ ?>
|
||||
<?PHP
|
||||
class SVG_Text extends SVG_StyleObject {
|
||||
|
||||
public function process(DOMNode $node, $sargs="") {
|
||||
$this->initLocalSizeAttribute($node, "font-size", "pt");
|
||||
$this->initLocalAttribute($node, "font-family");
|
||||
$this->initLocalAttribute($node, "font-style");
|
||||
$y = $this->getContext("yOrig") + $this->getContext("y");
|
||||
$x = $this->getContext("xOrig") + $this->getContext("x");
|
||||
$width = $this->getContext("width");
|
||||
$height = $this->getContext("height");
|
||||
$fontFamily = $this->getContext("font-family");
|
||||
$fontStyle = $this->getContext("font-style");
|
||||
$fontSize = $this->getContext("font-size");
|
||||
|
||||
$pdf = $this->getPdf();
|
||||
$oldFontFamily = $pdf->GetFontFamily();
|
||||
$oldFontStyle = $pdf->GetFontStyle();
|
||||
$oldFontSize = $pdf->GetFontSize();
|
||||
$txt = $node->nodeValue;
|
||||
|
||||
if ($pdf->FontExists($fontFamily, $fontStyle)) {
|
||||
$pdf->SetFont($fontFamily, $fontStyle, $fontSize);
|
||||
}
|
||||
else if($pdf->FontExists($oldFontFamily, $fontStyle)) {
|
||||
$pdf->SetFont($oldFontFamily, $fontStyle, $fontSize);
|
||||
}
|
||||
else {
|
||||
$pdf->SetFont($oldFontFamily, $oldFontStyle, $fontSize);
|
||||
}
|
||||
|
||||
$pdf->Text($x, $y, $txt);
|
||||
|
||||
//reset font
|
||||
$pdf->SetFont($oldFontFamily, $oldFontStyle, $oldFontSize);
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,132 @@
|
||||
<?PHP /*
|
||||
xslfo2pdf
|
||||
Copyright (C) 2005 Tegonal GmbH
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Contact:
|
||||
mike.toggweiler@tegonal.com
|
||||
http://xslf2pdf.tegonal.com
|
||||
*/ ?>
|
||||
<?PHP
|
||||
|
||||
require_once("fpdf/myfpdf.php");
|
||||
require_once("fo_core.php");
|
||||
require_once("fo_layout.php");
|
||||
require_once("fo_block.php");
|
||||
require_once("fo_table.php");
|
||||
require_once("fo_instream.php");
|
||||
require_once("svg_circle.php");
|
||||
require_once("svg_rect.php");
|
||||
require_once("svg_ellipse.php");
|
||||
require_once("svg_line.php");
|
||||
require_once("svg_polygon.php");
|
||||
require_once("svg_g.php");
|
||||
require_once("svg_text.php");
|
||||
require_once("svg_path.php");
|
||||
|
||||
class XslFo2PDF {
|
||||
public function generatePdf($xml, $name="out.pdf", $dest='') {
|
||||
$doc = DOMDocument::loadXML($xml);
|
||||
if ($doc === false) {
|
||||
echo "failed loading dom<br>";
|
||||
return false;
|
||||
}
|
||||
//get the only child
|
||||
foreach($doc->childNodes as $child) {
|
||||
if ($child != NULL &&
|
||||
$child->nodeName == "fo:root") {
|
||||
$rootNode = $child;
|
||||
}
|
||||
}
|
||||
if ($rootNode == null) {
|
||||
echo "Didn't find root node<br>";
|
||||
return false;
|
||||
}
|
||||
|
||||
$pdf = new MyPDF();
|
||||
$root = new FO_Root($pdf);
|
||||
$this->initDefaults($pdf, $root);
|
||||
if ($root->parse($rootNode) === false) {
|
||||
echo "Parsing failed<br>";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (strpos($name, ".pdf")===false) {
|
||||
$name = $name.".pdf";
|
||||
}
|
||||
$pdf->Output($name, $dest);
|
||||
}
|
||||
|
||||
private function initDefaults(FPDF $pdf, FO_Root $root) {
|
||||
$pdf->SetFont('Arial','',14);
|
||||
$pdf->SetAutoPageBreak(true);
|
||||
$root->setContext("page-width", "21");
|
||||
}
|
||||
}
|
||||
|
||||
class FO_Factory {
|
||||
private static $factory = array("fo:layout-master-set" => 'FO_LayoutMasterSet',
|
||||
"fo:block" => 'FO_Block',
|
||||
"fo:page-sequence" => 'FO_PageSequence',
|
||||
"fo:flow" => 'FO_Flow',
|
||||
"fo:block-container" => 'FO_BlockContainer',
|
||||
"fo:list-block" => 'FO_ListBlock',
|
||||
"fo:table-and-caption" => 'FO_TableAndCaption',
|
||||
"fo:table" => 'FO_Table',
|
||||
"fo:table-caption" => 'FO_TableCaption',
|
||||
"fo:table-header" => 'FO_TableHeader',
|
||||
"fo:table-footer" => 'FO_TableFooter',
|
||||
"fo:table-body" => 'FO_TableBody',
|
||||
"fo:table-row" => 'FO_TableRow',
|
||||
"fo:table-column" => 'FO_TableColumn',
|
||||
"fo:table-cell" => 'FO_TableCell',
|
||||
"fo:inline" => 'FO_Inline',
|
||||
"fo:instream-foreign-object" =>
|
||||
'FO_InstreamForeignObject',
|
||||
"fo:basic-link" => 'FO_BasicLink',
|
||||
"fo:external-graphic" => 'FO_ExternalGraphic',
|
||||
"svg:svg" => 'FO_SVG',
|
||||
"svg:circle" => 'SVG_Circle',
|
||||
"svg:rect" => 'SVG_Rect',
|
||||
"svg:ellipse" => 'SVG_Ellipse',
|
||||
"svg:line" => 'SVG_Line',
|
||||
"svg:polygon" => 'SVG_Polygon',
|
||||
"svg:polyline" => 'SVG_Polygon',
|
||||
"svg:g" => 'SVG_G',
|
||||
"svg:text" => 'SVG_Text',
|
||||
"svg:path" => 'SVG_Path'
|
||||
);
|
||||
|
||||
private static $names = NULL;
|
||||
|
||||
public static function createFOObject(DOMNode $node, FO_Container $container,
|
||||
FPDF $pdf, FO_Context &$context,
|
||||
$filter) {
|
||||
$obj = self::$factory[$node->nodeName];
|
||||
if (!$obj) {
|
||||
return NULL;
|
||||
}
|
||||
if (!$filter || !in_array($obj, $filter)) {
|
||||
echo "ignore due to filter:$obj<br>";
|
||||
return NULL;
|
||||
}
|
||||
//echo "Create:$obj<br>";
|
||||
return new $obj($container, $pdf, $context);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,61 @@
|
||||
<?PHP /*
|
||||
xslfo2pdf
|
||||
Copyright (C) 2005 Tegonal GmbH
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
Contact:
|
||||
mike.toggweiler@tegonal.com
|
||||
http://xslf2pdf.tegonal.com
|
||||
*/ ?>
|
||||
<?PHP
|
||||
if ($_GET["file"]) {
|
||||
require_once("xslfo2pdf.php");
|
||||
$buffer = file_get_contents($_GET["file"]);
|
||||
$fo2pdf = new XslFo2Pdf();
|
||||
if (!$fo2pdf->generatePdf($buffer, $_GET["file"], "D")) {
|
||||
echo "Failed parsing file:".$_GET["file"]."<br>";
|
||||
}
|
||||
}
|
||||
else {
|
||||
$files = addDir("examples");
|
||||
foreach ($files as $file) {
|
||||
echo('<a href="xslfo2pdf_example.php?file='.$file.'">'.$file.'</a><br>');
|
||||
}
|
||||
}
|
||||
|
||||
function addDir($dirname) {
|
||||
$dir = dir($dirname);
|
||||
$files = array();
|
||||
while ($file = $dir->read()) {
|
||||
if($file != "." && $file != "..") {
|
||||
if (!is_dir($dirname."/".$file)) {
|
||||
$path_parts = pathinfo($file);
|
||||
|
||||
if ($path_parts['extension'] == "xml" ||
|
||||
$path_parts['extension'] == "fo") {
|
||||
$files[] = $dirname . "/" . $file;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$files += addDir($dirname."/".$file);
|
||||
}
|
||||
}
|
||||
}
|
||||
$dir->close();
|
||||
asort($files);
|
||||
return $files;
|
||||
}
|
||||
?>
|
||||
Reference in New Issue
Block a user